精华内容
下载资源
问答
  • 语言程序设计表达式表达式求值 1.表达式 (4(3) 的值为 _ 0 2.表达式 :x=(2) 的值为 1 1 3.如果有变量定义 :int i=1,j=8,a; 则表达式 :a=i+(j%4!=0) 的值为 _ 1 1 4.表达式 :x=(7+6%4/2 的值为 1 0 5.如果有变量...
  • C语言常见语法——运算符和表达式

    千次阅读 2019-05-30 14:28:29
     其求值规则为:如果表达式1的值为真,则以表达式2 的值作为条件表达式的值,否则以表达式2的值作为整个条件表达式的值。 6.作为初学者,写自增,自减运算符时要特别注意使用的细节;看大佬写的代码,做题时,要...

    自增,自减运算符使用注意及案例

    1.++i , --i (在使用 i 之前,先使 i 的值加(减) 1)

    2.i++ , i-- (在使用 i 之后,先使 i 的值加(减) 1)

    3.int i=3;

    int i=3,j;
    j = ++i;// i 的值先变成 4,再赋给j,j的值为4
    j = i++;// 先将 i 的值3赋给 j,j的值为 3,然后 i变成4

    又如:

    i=3;
    printf("%d",++i); //输出 4
    //若是
    printf("%d\n",i++); //输出 3
    

    4.注意

    • 自增运算符(++)和自减运算符(--)只能用于变量;
    • 错误表示:5++,(a+b)++;都是错误表达,因为最后得到的结果,没有变量可供存放;
    • 表达式k=-i++等效于k=(-i)++还是k=-(i++)因为负号运算符和自增运算符优先级相同,哪一个正确就得看结合方向。
    • 自增、自减运算符及负号运算符的结合方向是从右向左。因此,上式等效于k=-(i++);若i=5,则表达式k=-i++运算之后k的值为-5,i的值为6。此赋值表达式的值即为所赋的值-5。不要因为k=-i++等效于k=-(i++)就先做“++”运算!这里采用的是“先用后变”,即先拿出i的值做负号“-”运算,把这个值赋给变量k之后变量i才自增。

    5.结合上面的基本要求和注意事项,来看“先变后用”还是“先用后变” 案例:

    变量 j的值都是在 i=3,k=1的前提下求出的:

       后缀运算:
      (1)j=(5,6,(i++)+(i++)+(i++)): j=9(3+3+3)
      (2)j=(k++,6,(i++)+(i++)+(i++)): j=9(3+3+3)
      (3)j=1?(i++)+(i++)+(i++): 0: j=9(3+3+3)
      (4)j=i?(i++)+(i++)+(i++): 0: j=12(3+4+5)
      (5)j=k++?(i++)+(i++)+(i++): 0: j=12(3+4+5)
      前缀运算:
      (6)j=(5,i,(++i)+(++i)+(++i)): j=18(6+6+6)
      (7)j=(5,k++,(++i)+(++i)+(++i)): j=15(4+5+6)
      (8)j=1?(++i)+(++i)+(++i): 0: j=18(6+6+6)
      (9)j=1?(k++,(+i)+(++i)+++i)): 0: j=15(4+5+6)
      (10)j=k++?(++i)+(++i)+(++i): 0: j=15(4+5+6)

    理解上述式子用到的知识:

    (1)逗号表达式:

     逗号运算符是所有运算符中级别最低的。因此,下面两个表达式的作用是不同的:

      ① x=(a=3,6*3)
      ② x=a=3,6*a

      第①个是一个赋值表达式,将一个逗号表达式的值赋给x,x的值等于18。第②个是逗号表达式,它包括一个赋值表达式和一个算术表达式,x的值为3。

    (2)三目运算符(结合方向,右到左)

          一般形式为:
           表达式1? 表达式2: 表达式3 
           其求值规则为:如果表达式1的值为真,则以表达式2 的值作为条件表达式的值,否则以表达式2的值作为整个条件表达式的值。

    6.作为初学者,写自增,自减运算符时要特别注意使用的细节;看大佬写的代码,做题时,要认真分析逻辑关系,自增自减运算符与其他运算符相结合,注意优先级,还有要从右向左计算。

    7.C语言运算符优先级表

    • C语言中,运算符的运算优先级共分为15 级。
    • 1 级最高,15级最低。
    • 在表达式中,优先级较高的先于优先级较低的进行运算。
    • 而在一个运算量两侧的运算符优先级相同时,则按运算符的结合性所规定的结合方向处理。
    • 运算符的结合性:C语言中各运算符的结合性分为两种,即左结合性(自左至右)和右结合性(自右至左)。
    • 例如算术运算符的结合性是自左至右,即先左后右。如有表达式x-y+z 则y 应先与“-”号结合,执行x-y 运算,然后再执行+z 的运算。这种自左至右的结合方向就称为“左结合性”。而自右至左的结合方向称为“右结合性”。
    • 最典型的右结合性运算符是赋值运算符。如x=y=z,由于“=”的右结合性,应先执行y=z 再执行x=(y=z)运算。
    • C语言运算符中有不少为右结合性,应注意区别,以避免理解错误。
    • 说明:

      同一优先级的运算符,运算次序由结合方向所决定。

      简单记就是:! > 算术运算符 > 关系运算符 > && > || >赋值运算符

    优先级运算符名称或含义使用形式结合方向说明
    1[]数组下标数组名[常量表达式]左到右 
    ()圆括号(表达式)/函数名(形参表) 
    .成员选择(对象)对象.成员名 
    ->成员选择(指针)  
    2-负号运算符-表达式右到左单目运算符
    (类型)强制类型转换(数据类型)表达式 
    ++自增运算符++变量名/变量名++单目运算符
    --自减运算符--变量名/变量名--单目运算符
    *取值运算符*指针变量单目运算符
    &取地址运算符&变量名单目运算符
    逻辑非运算符!表达式单目运算符
    ~按位取反运算符~表达式单目运算符
    sizeof长度运算符sizeof(表达式) 
    3/表达式/表达式左到右双目运算符
    *表达式*表达式双目运算符
    %余数(取模)整形表达式%整形表达式双目运算符
    4+表达式+表达式左到右双目运算符
    -表达式-表达式双目运算符
    5<<左移变量<<表达式左到右双目运算符
    >>右移变量>>表达式双目运算符
    6>大于表达式>表达式左到右双目运算符
    >=大于等于表达式>=表达式双目运算符
    <小于表达式<表达式双目运算符
    <=小于等于表达式<=表达式双目运算符
    7==等于表达式==表达式左到右双目运算符
    !=不等于表达式!=表达式双目运算符
    8&按位与表达式&表达式左到右双目运算符
    9^按位异或表达式^表达式左到右双目运算符
    10|按位或表达式|表达式左到右双目运算符
    11&&逻辑与表达式&&表达式左到右双目运算符
    12||逻辑或表达式||表达式左到右双目运算符
    13?:条件运算符表达式1?表达式2:表达式3右到左三目运算符
    14=赋值运算符变量=表达式右到左 
    /=除后赋值变量/=表达式 
    *=乘后赋值变量*=表达式 
    %=取模后赋值变量%=表达式 
    +=加后赋值变量+=表达式 
    -=减后赋值变量-=表达式 
    <<=左移后赋值变量<<=表达式 
    >>=右移后赋值变量>>=表达式 
    &=按位与后赋值变量&=表达式 
    ^=按位异或后赋值变量^=表达式 
    |=按位或后赋值变量|=表达式 
    15,逗号运算符表达式,表达式……左到右从左到右顺序运算
    展开全文
  • ),用算符优先分析方法分析表达式是否合法,程序能给出语法的分析过程和表达式的结果。由于C语言的运算符较多,导致算符运算关系表比较大,所以每种表达式选择了一种符号作为代表。压缩包中给了多个用例。
  • C语言 关系表达式

    千次阅读 2019-02-05 09:29:35
    [案例]说明关系表达式的值关系 main() { int result=0; int num1=3,num2=4,num3=5; result=num1&gt;num2; printf("num1&gt;num2 is equal:%d\n",result); result=(num1&gt;num2)!=num3; ...

    [案例]说明关系表达式的值关系

    main()
    {
        int result=0;
        int num1=3,num2=4,num3=5;
        result=num1>num2;
        printf("num1>num2 is equal:%d\n",result);
        result=(num1>num2)!=num3;
        printf("(num1>num2)!=num3 is equal:%d\n",result);
        result=num1<num2<num3;
        printf("num1<num2<num3 is equal:%d\n",result);
        result=(num1<num2)+num3;
        printf("(num1<num2)+num3 is equal:%d\n",result);
    } 
    

    下面的关系表达式都是合法的:
    a>b,a+b>c-d,(a=3)<=(b=5),‘a’>=‘b’,(a>b)= =(b>c)
    关系表达式的值–逻辑值(非"真"即"假")。
    由于C语言没有逻辑型数据,所以用整数"1"表示"逻辑真",用整数"0"表示"逻辑假"。
    例如,假设num1=3,num2=4,num3=5,则:
    (1)num1>num2的值=0。
    (2)(num1>num2)!=num3的值=1。
    (3)num1<num2<num3的值=1。
    思考题:任意改变num1或num2的值,会影响整个表达式的值吗?为什么?
    (4)(num1<num2)+num3的值=6,因为num1<num2的值=1,1+5=6。
    再次强调:C语言用整数"1"表示"逻辑真",用整数"0"表示"逻辑假"。所以,关系表达式的值,还可以参与其它种类的运算,例如算术运算、逻辑运算等。

    展开全文
  • C语言 赋值表达式

    千次阅读 2019-02-03 22:03:24
    任何一个表达式都有一个值,赋值表达式例外。被赋值变量的值,就是赋值表达式的值。 例如,&quot;a = 5&quot;这个赋值表达式,变量a的值&quot;5&quot;就是它的值。 ...

    由赋值运算符或复合赋值运算符,将一个变量和一个表达式连接起来的表达式,称为赋值表达式。
    (1)一般格式
    变量 (复合)赋值运算符 表达式
    (2)赋值表达式的值
    任何一个表达式都有一个值,赋值表达式也不例外。被赋值变量的值,就是赋值表达式的值。
    例如,"a = 5"这个赋值表达式,变量a的值"5"就是它的值。

    展开全文
  • C语言表达式

    千次阅读 2020-03-08 20:22:25
    主要了解C语言表达式以及部分特殊操作符和表达式求值

    逗号表达式

    逗号表达式:就是用逗号隔开的多个表达式,从左向右依次执行
    exp1,exp2,wxp3,......wxpn
    

    注意:整个表达式的结果是最后一个表达式的结果。

    void test()
    {
    	int a = 1;
    	int b = 2;
    	int c = (a > b, a = b + 10, b = a + 1);
    	//可知最后一个表达式的结果,就是整个表达式的结果。
    	//那么从左到右依次计算就会得到c = 13;
    	
    }
    

    下表引用、函数调用和结构成员

    1. [ ]:下表引用符操作符

    操作数 : 一个数组名 + 以后索引值
    int arr[10];
    arr[9] = 10;
    [ ]:有两个操作数一个是arr,另外一个就是9.
    注意:下表引用常用与数组的遍历修改
    

    2.( ):函数调用操作符

    操作数 : 一个函数名 + [若干传递给函数的参数] 
    #include<stdio.h>
    void test()
    {
    	printf("hehe\n");
    }
    
    void test2(const char* str)
    {
    	printf("%s\n",str);
    }
    
    int main()
    {
    	test();
    	test2("hello worl");
    	return 0;
    }
    

    3.访问一个结构体成员

    . :结构体.成员名
    -> :结构体指针->成员名
    
    #include<stdio.h>
    struct stu{
    	char name[20];
    	int age;
    };
    void test(struct stu stu)
    {
    	stu.age = 18;
    }
    
    void test2(struct stu * pstu)
    {
    	pstu->age = 18;
    }
    
    itn main()
    {
    	struct stu stu;
    	struct stu* pstu = &stu;
    	
    	stu.age = 10;
    	test(stu);
    	
    	pstu->age = 20;
    	test2(pstu);
    	return 0;
    }
    

    表达式求值

    众所周知表达式的求值,一部分有操作符的优先级和结合性决定,但是还有一部分在求职的过程中需要进行类型转换才能够进行计算。
    隐式类型转换:
    关于隐式类型转换,是指发生在没有明确说明的情况下(C语言风格的强制类型转换就是属于我们程序员有明确说明的),编译器自动帮我们执行的类型转换。通常同类型的数据进行运算、比较和赋值的时候我们是不需要担心的,这里我只是说明不同类型的数据进行运算、比较和赋值时,且我们程序员没有指定类型转换时,编译器是如何帮我们进行处理类型之间的转换的,只有知道这个过程,才能让我们知道程序设计时应该注意和避免的地方。

    (1)比int类型小的隐式类型转换:整型提升(Integer Promotion)。

    C语言的整形算术运算总是以缺省整形的精度来进行的,为了获得这个精度那么,表达式中的字符和短整型操作数在使用之前被转换为普通整型,这种转换称为整型提升

    (2) 为什么要整型提升(Integer Promotion)?

    我们知道表达式的整形运算要在CPU的相应的运算器件中完成,而这个期间就是逻辑运算单元(ALU)我们也叫做整形运算器,ALU的操作数长度就是int的字节长度一也就是32个比特位,同时也就是cpu通用寄存器的长度。那么此时如果我们要就是计算两个char类型的相加,而CPU中执的标椎长度是32位,但是char只有8位,如果要进行计算就要先报char类型变成32位然后通过寄存器送入ALU进行计算。因此,表达式中比int类型小的类型就要先转换成int或unsigned int类型,才能计算。而这个转换过程也就是整形提升,这也是整形提升存在的意义;;;;

    (3)如何进行整形提升

    整形提升是按照变量的数据类型的符号位来提升的

    //负数的提升
    char c1 = -1;变量c1的二进制位(补码)中只有8个
    比特位:11111111
    因为char为有符号的char,所以整形提升时,高位补
    符号位,
    提升之后:11111111111111111111111111111111
    
    
    //正数的整形提升
    char c2 = 1;变量c1的二进制位(补码)中只有8个
    比特位:00000001
    因为char为有符号的char,所以整形提升时,高位补
    符号位,
    提升之后:00000000000000000000000000000001
    
    //无符号整形提升,,/*高位补0*/就OK了
    
    
    //栗子
    void test()
    {
    	char c = 1;
    	printf("%u\n", sizeof(c));//输出1
    	printf("%u\n", sizeof(+c));//输出4
    	printf("%u\n", sizeof(!c));//输出1
    }
    //只要c参加表达式运算就会发生整形提升,所以+c就会发送提升,所以输出4,而其他没有发生表达式运算
    
    (4)赋值时的隐式类型转换

    上面说到都是在计算式的隐式类型转换,但是还要特别说明的就是在进行赋值操作时,赋值运算符右边的数据类型必须转换成赋值号左边的类型,若右边的数据类型的长度大于左边,则要进行截断或舍入操作。

    char ch;
    int i,result;
    float f;
    double d;
    result = ch/i + (f*d-i);
    
    (1)首先计算 ch/i,ch → int型,ch/i → int型。
    
    (2)接着计算 f*d-i,由于最长型为double型,故f→double型,i→double型,f*d-i→double型。
    
    (3)(ch/i)(f*d-i)进行加运算,由于f*d-i为double型,故ch/i→double型,ch/i+(f*d-i)double型。
    
    (4)由于result为int型,故ch/i+(f*d-i)doubleint,即进行截断与舍入,最后取值为整型
    
    展开全文
  • C语言语法表达式与语句的区别与联系

    千次阅读 多人点赞 2020-05-21 23:37:44
    //一开始只是想归纳C语言语法的,后来写着写着就写偏了。。。 我觉得编程是门实践性很强的专业,很多语法上细碎的东西可能记不住,但只要敲一下试验一下就行。 会想到要归纳C语言的语法,起因是在看题解的时候...
  • 语法制导翻译器,将算术表达式翻译成三元式。 确定一个定义算术表达式的文法,为其设计一个语法分析程序,为每条产生式配备一个语义子程序,按照一遍扫描的语法制导翻译方法,实现翻译程序。对用户输入的任意一个...
  • C语言中的赋值表达式

    千次阅读 2020-07-11 15:26:43
    原则: 一:等号左边只能是单个变量。 二:右边可以放到左边去。 a=b=1; 这很显然是可以的。 那么: a=1=(b=1)=1;就可以了,因为b=1之后就是左边就是一个常量了,所以1就可以放入1中了 所以错误。
  • C语言正则表达式判断例程

    千次阅读 2018-07-07 10:14:15
    标准的C和C++都支持正则表达式,但有正则表达式的函数库提供这功能.C语言处理正则表达式常用的函数有regcomp()、regexec()、regfree()和regerror()。使用正则表达式步骤:1)编译正则表达式 regcomp()2)匹配正则...
  • C语言基础——表达式

    千次阅读 多人点赞 2019-07-26 12:46:27
    二、表达式的分类 举例说明: (一)首先是加、减、乘、除、取余四种表达式: (二)一元表达式 (三)强制转换表达式 (四)判断表达式 (五)逻辑表达式 (六)移位表达式 小结 写在最后: 回顾: 在上...
  • 利用java高级语言完成C语言表达式语法分析,对于语法分析有自底向上和自顶向下的两种方法,本次课程用自底向上的算符优先算法实现,算符优先算法的过程在java设计的窗口中,分析结果保存在.txt中,需要手动输入...
  • C语言表达式与语句

    千次阅读 2015-08-06 06:04:22
    C语言中,表达式是显示如何计算值的公式。语句是C语言的关键特性之一,表示程序运行时执行的命令。本文介绍并示例了C语言中的表达式和语句
  • C语言的运算符和表达式 一、分类 C语言一共有34种运算符,10种运算类型,本节我们要掌握的有 算术运算符(+、-、、/、%)、 关系运算符(>、>=、==、!=、<、<=)、 逻辑运算符(!、||、&&)、 ...
  • C语言正则表达式的匹配问题

    千次阅读 2015-08-18 21:48:48
    标准的C和C++都支持正则表达式,但有一些函数库可以辅助C/C++程序员完成这一功能,其中最著名的当数Philip Hazel的Perl-Compatible Regular Expression库,许多Linux发行版本都带有这个函数库。 实现步骤: ...
  • C语言运算符表达式

    2018-06-11 10:31:26
    一、分类C语言一共有34种运算符,10种运算类型:算术运算符(+、-、*、/、%)、关系运算符(&gt;、&gt;=、==、!=、&lt;、&lt;=)、位运算符(&gt;&gt;、&lt;&lt;、==、!=、&lt;...
  • C语言使用正则表达式

    千次阅读 2019-06-28 13:58:56
    目录 C语言中的正则表达式使用 C语言中的正则表达式使用  正则表达式,又称正规表示法、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式是使用单个...
  • C语言中常见语法规则

    2019-11-11 20:24:10
    C语言中<>和“”的区别如下: 1、<>先去系统目录中找头文件,如果没有在到当前目录下找。所以像标准的头文件 stdio.h和 stdlib.h等用这个方法。 2、""首先在当前目录下寻找,如果找到,再到系统目录中...
  • C语言正则表达式使用详解

    万次阅读 多人点赞 2015-02-01 21:25:58
    标准的C和C++都支持正则表达式,但有一些函数库可以辅助C/C++程序员完成这一功能,其中最著名的当数Philip Hazel的Perl-Compatible Regular Expression库,许多Linux发行版本都带有这个函数库。 C语言处理正则...
  • C语言基本概念之表达式

    万次阅读 多人点赞 2016-03-11 16:47:36
    表达式C语言的重要语法成分,不过对于表达式的定义,好像从来没有人关注过。今天就孔乙己一把吧,哈哈。先贴标准对expression的定义(ISO/IEC 9899:2011 6.5): An expression is a sequence of operators and ...
  • c语言提供一种特殊的运算符,逗号运算符,优先级别最低,它将两式联接起来,如:(3+5,6+8)称为逗号表达式,其求解过程先表达式1,后表达式2,整个表达式值是表达式2的值,如:(3+5,6+8)的值是14,(a=35,a4)的...
  • 答案是选项A,明白什么是C语言语法表达式,是不是得带赋值符号?
  • C语言运算符和表达式

    千次阅读 多人点赞 2019-06-10 10:10:55
    C语言一共有34种运算符,10种运算类型,本节我们要掌握的有 算术运算符(+、-、、/、%)、 关系运算符(>、>=、==、!=、<、<=)、 逻辑运算符(!、||、&&)、 条件运算符、(?:)、 赋值运算符...
  • C语言中常见的表达式

    2021-09-09 11:00:53
    文章目录前言一、pandas是什么?二、使用步骤2.读入数据总结 ...本文主要介绍什么是表达式表达式C语言中非常常见希望大家可以好好学习。 一、pandas是什么? 二、使用步骤 2.读入数据 总结 ...
  • C语言中使用正则表达式

    千次阅读 2020-06-19 12:55:30
    POSIX 规定了正则表达式C语言库函数, 参见regex(3), 我们已经学了很多C函数得用法 读者应该具备自己看懂man手册得能力 C语言中使用正则表达式一般分为三部: 1.编译正则表达式regcomp() 2.匹配正则表达式 ...
  • C语言基本的语法规定

    千次阅读 多人点赞 2017-04-09 22:05:35
    在看完组成原理和汇编语言之后,感觉自己对程序的运行原理有了进一步的认识,对C语言语法添加了一些个人的理解,希望能对初学者提供一些帮助 如果有问题,欢迎大家在评论交流。 由于这个月已经提交了...
  • 表达式语法分析——递归子程序法 Description 递归子程序法是一种确定的自顶向下语法分析方法,要求文法是LL(1)文法。它的实现思想是对应文法中每个非终结符编写一个递归过程,每个过程的功能是识别由该非终结符...
  • 通过C语言编写一个语法分析器采用递归下降分析法编写语法分析程序及LL(1)语法分析法编写语法分析程序。附上实验报告。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 71,888
精华内容 28,755
关键字:

以下不符合c语言语法的表达式

c语言 订阅