C语言运算符与表达式实例分析(c语言,开发技术)

时间:2024-05-05 15:33:08 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

    表达式

    函 数 概 述

    表达式是C语言的主体。在C语言中,表达式由操作符和操作数组成。最简单的表达式可以只含有一个操作数。根据表达式含有的操作符的个数,可以把表达式分为简单表达式和复杂表达式两种:简单表达式是只含有一个操作符的表达式,而复杂表达式是包含两个或两个以上操作符的表达式。

    5+5iNumber+9iBase+(iPay*iDay)

    表达式本身什么事情也不做,只是返回结果值。在程序不对返回的结果值进行任何操作的情况下,返回的结果值不起任何作用,也就是忽略返回的值。

    表达式返回的结果值是有类型的。表达式隐含的数据类型取决于组成表达式的变量和常量的类型。

    赋值运算符与赋值表达式

    变量赋初值

    在声明变量时,可以为其赋一个初值,就是将一个常数或者一个表达式的结果赋值给一个变量,变量中保存的内容就是这个常量或者赋值语句中表达式的值。这就是为变量赋初值。

    先来看一下为变量赋值为常数的情况。一般的形式是:

    类型 变量名 = 常数;

    其中的变量名也称为变量的标识符。

    通过变量赋初值的一般形式,以下是相关的代码实例:

    charcChar='A';intiFirst=100;floatfPlace=1450.78f;

    赋值表达式为变量赋初值。

    赋值语句把一个表达式的结果值赋给一个变量。一般的形式是:

    类型 变量名 = 表达式;

    可以看到,其一般形式与常数赋值的一般形式是相似的,例如:

    intiAmount=1+2;floatfPrice=fBase+Day*3;

    在上面的举例中,得到赋值的变量iAmount和fPrice称为左值,因为它出现的位置在赋值语句的左侧。产生值的表达式称为右值,因为它出现的位置在表达式的右侧。

    【实例】 为变量赋初值。为变量赋初值的操作是编程时常见的操作。在本实例中,模拟钟点工的计费情况,使用赋值语句和表达式得出钟点工工作8个小时后所得的薪水。

    #include<stdio.h>intmain(){intiHoursWorded=8;/*定义变量,为变量赋初值。表示工作时间*/intiHourlyRate;/*声明变量,表示一个小时的薪水*/intiGrossPay;/*声明变量,表示得到的工资*/iHourlyRate=13;/*为变量赋值*/iGrossPay=iHoursWorded*iHourlyRate;/*将表达式的结果赋值给变量*/printf("TheHoursWordedis:%d\n",iHoursWorded);/*显示工作时间变量*/printf("TheHourlyRateis:%d\n",iHourlyRate);/*显示一个小时的薪水*/printf("TheGrossPayis:%d\n",iGrossPay);/*显示工作所得的工资*/return0;/*程序结束*/}

    C语言运算符与表达式实例分析

    自动类型转换

    数值类型有很多种,如字符型、整型、长整型和实型等,因为这些类型的变量、长度和符号特性都不同,所以取值范围也不同。混合使用这些类型时会出现什么情况呢?第3章已经对此有所介绍。

    C语言中使用一些特定的转化规则。根据这些转化规则,数值类型变量可以混合使用。如果把比较短的数值类型变量的值赋给比较长的数值类型变量,那么比较短的数值类型变量中的值会升级表示为比较长的数值类型,数据信息不会丢失。但是,如果把较长的数值类型变量的值赋给比较短的数值类型变量,那么数据就会降低级别表示,并且当数据大小超过比较短的数值类型的可表示范围时,就会发生数据截断。

    有些编译器遇到这种情况时就会发出警告信息,例如:

    floati=10.1f;intj=i;

    此时编译器会发出警告,如图所示:

    C语言运算符与表达式实例分析

    强制类型转换

    通过自动类型转化的介绍得知,如果数据类型不同,就可以根据不同情况自动进行类型转化,但此时编译器会提示警告信息。这个时候如果使用强制类型转化告知编译器,就不会出现警告。

    强制类型转化的一般形式为:

    (类型名) (表达式)

    例如在上述不同变量类型转化时使用强制类型转化的方法:

    floati=10.1f;intj=(int)i;/*进行强制类型转化*/

    在代码中可以看到在变量前使用包含要转化类型的括号,这样就对变量进行了强制类型转化。

    【实例】 显示类型转化的结果。在本实例中,通过不同类型变量之间的赋值,将赋值操作后的结果进行输出,观察类型转化后的结果。

    #include<stdio.h>intmain(){charcChar;/*字符型变量*/shortintiShort;/*短整型变量*/intiInt;/*整型变量*/floatfFloat=70000;/*单精度浮点型*/cChar=(char)fFloat;/*强制转化赋值*/iShort=(short)fFloat;iInt=(int)fFloat;printf("thecharis:%c\n",cChar);/*输出字符变量值*/printf("thelongis:%ld\n",iShort);/*输出短整型变量值*/printf("theintis:%d\n",iInt);/*输出整型变量值*/printf("thefloatis:%f\n",fFloat);/*输出单精度浮点型变量值*/return0;/*程序结束*/}

    C语言运算符与表达式实例分析

    算数运算符与表达式

    算术运算符

    算术运算符包括:两个单目运算符(正和负),5个双目运算符乘法、除法、取模、加法和减法。具体符号和对应的功能如表所示。

    C语言运算符与表达式实例分析

    在上述的算术运算符中,取模运算符(%)用于计算两个整数相除得到的余数,并且取模运算符的两侧均为整数,例如7%4的结果是3。

    算术表达式

    在表达式中使用算术运算符,则将表达式称为算术表达式。下面是一些算术表达式的例子,其中使用的运算符就是表4.1中所列出的算术运算符:

    Number=(3+5)/Rate;Height=Top-Bottom+1;Area=Height*Width;

    需要说明的是,两个整数相除的结果为整数,例如7/4的结果为1,舍去的是小数部分。但是,如果其中的一个数是负数时会出现什么情况呢?此时机器会采取“向零取整”的方法,即为-1,取整后向0靠拢。

    优先级与结合性

    C语言中规定了各种运算符的优先级和结合性,首先来看一下有关算术运算的优先级:

    算术运算符的优先级

    在表达式求值时,先按照运算符的优先级别高低次序执行,算术运算符中*、/、%的优先级别高于+、-的级别。例如,如果在表达式中同时出现*和+,那么先运算乘法:

    R=x+y*z;

    在表达式中,因为*比+的优先级高,所以会先进行y*z的运算,最后加上x。

    算术运算符的结合性

    当算术运算符的优先级相同时,结合方向为“自左向右”。

    例如:

    a-b+c

    因为减法和加法的优先级是相同的,所以b先与减号相结合,执行a-b的操作,然后执行加c的操作。这样的操作过程就称为“自左向右的结合性”,在后面的介绍中还可以看到“自右向左的结合性”。

    自增自减运算符

    在C语言中还有两个特殊的运算符:自增运算符“++”和自减运算符“--”。自增运算符和自减运算符对变量的操作分别是增加1和减少1,

    如表所示:

    C语言运算符与表达式实例分析

    自增运算符和自减运算符可以放在变量的前面或者后面,放在变量前面称为前缀,放在后面称为后缀,使用的一般方法如下所示。

    --Counter; /*自减前缀符号*/
    Grade--; /*自减后缀符号*/
    ++Age; /*自增前缀符号*/
    Height++; /*自增后缀符号*/

    在上面这些例子中,运算符的前后位置不重要,因为所得到的结果是一样的,自减就是减1,自增就是加1。

    关系运算符与表达式

    关系运算符包括大于运算符、大于等于运算符、小于运算符、小于等于运算符、等于运算符、不等于运算符。表中列出了这6种关系运算符所对应的符号。

    C语言运算符与表达式实例分析

    关系运算符用于对两个表达式的值进行比较,返回一个真值或者假值。返回真值还是假值取决于表达式中的值和所用的运算符。其中真值为1,假值为0,真值表示指定的关系成立,假值则表示指定的关系不正确。

    例如:

    7>5 /*因为7大于5,所以该关系成立,表达式的结果为真值*/
    7>=5 /*因为7大于5,所以该关系成立,表达式的结果为真值*/
    7<5 /*因为7大于5,所以该关系不成立,表达式的结果为假值*/
    7<=5 /*因为7大于5,所以该关系不成立,表达式的结果为假值*/
    7==5 /*因为7不等于5,所以该关系不成立,表达式的结果为假值*/
    7!=5 /*因为7不等于5,所以该关系成立,表达式的结果为真值*/

    关系运算符通常用来构造条件表达式,用在程序流程控制语句中,例如if语句是用于判断条件而执行语句块,在其中使用关系表达式作为判断条件,如果关系表达式返回的是真值则执行下面的语句块,如果为假值就不去执行。

    代码如下:

    if(Count<10){…/*判断条件为真值,执行代码*/}

    其中,if(iCount<10)就是判断iCount小于10这个关系是否成立,如果成立则为真,如果不成立则为假。

    优先级与结合性

    关系运算符的结合性都是自左向右的。使用关系运算符的时候常常会判断两个表达式的关系,但是由于运算符存在着优先级的问题,因此如果不小心处理则会出现错误。例如要进行这样的判断操作:先对一个变量进行赋值,然后判断这个赋值的变量是否不等于一个常数,

    代码如下:

    if(Number=NewNum!=10){…}

    因为“!=”运算符比“=”的优先级要高,所以NewNum!=0的判断操作会在赋值之前实现,变量Number得到的就是关系表达式的真值或者假值,这样并不会按照之前的意愿执行。

    前文曾经介绍过括号运算符,括号运算符的优先级具有最高性,因此使用括号来表示要优先计算的表达式,例如:

    if((Number=NewNum)!=10){…}

    这种写法比较清楚,不会产生混淆,没有人会对代码的含义产生误解。由于这种写法格式比较精确简洁,因此被多数的程序员所接受。

    逻辑运算符与表达式

    C语言运算符与表达式实例分析

    使用逻辑运算符可以将多个关系表达式的结果合并在一起进行判断。

    其一般形式为:

    表达式 逻辑运算符 表达式

    例如使用逻辑运算符:

    Result=Func1&&Func2;/*Func1和Func2都为真时,结果为真*/Result=Func1||Func2;/*Func1、Func2其中一个为真时,结果为真*/Result=!Func2;/*如果Func2为真,则Result为假*/

    前面已经介绍过,但这里还要做重点强调,不要把逻辑与运算符“&&”和逻辑或运算符“||”与下面要讲的位与运算符“&”和位或运算符“|”混淆。

    逻辑与运算符和逻辑或运算符可以用于相当复杂的表达式中。一般来说,这些运算符用来构造条件表达式,用在控制程序的流程语句中,例如在后面章节中要介绍的if、for、while语句等。

    在程序中,通常使用单目逻辑非运算符“!”把一个变量的数值转化为相应的逻辑真值或者假值,也就是1或0。

    例如:

    Result= !!Value; /*转化成逻辑值*/

    &&||是双目运算符,它们要求有两个操作数,结合方向自左至右;!是单目运算符,要求有一个操作数,结合方向自左向右。

    逻辑运算符的优先级从高到低依次为:单目逻辑非运算符!,逻辑与运算符&&,逻辑或运算符||

    【实例4.8】 逻辑运算符的应用。在本实例中,使用逻辑运算符构造表达式,通过输出显示表达式的结果,根据结果分析表达式中逻辑运算符的计算过程。

    #include<stdio.h>intmain(){intiNumber1,iNumber2;/*声明变量*/iNumber1=10;/*为变量赋值*/iNumber2=0;printf("the1isTure,0isFalse\n");/*显示提示信息*/printf("5<iNumber1&&iNumber2is%d\n",5<iNumber1&&iNumber2);/*显示逻辑与表达式的结果*/printf("5<iNumber1||iNumber2is%d\n",5<iNumber1||iNumber2);/*显示逻辑或表达式的结果*/iNumber2=!!iNumber1;/*得到iNumber1的逻辑值*/printf("iNumber2is%d\n",iNumber2);/*输出逻辑值*/return0;}

    C语言运算符与表达式实例分析

    位逻辑运算符与表达式

    位逻辑运算符

    位逻辑运算符包括:位逻辑与、位逻辑或、位逻辑非、取补。表列出了所有位逻辑运算符。

    C语言运算符与表达式实例分析

    位逻辑表达式

    在程序中,位逻辑运算符一般被程序员用作开关标志。较低层次的硬件设备驱动程序,经常需要对输入输出设备进行位操作。

    如下位逻辑与运算符的典型应用,对某个语句的位设置进行检查:

    if(Field & BITMASK)

    语句的含义是if语句对后面括号中的表达式进行检测。如果表达式返回的是真值,则执行下面的语句块,否则跳过该语句块不执行。其中运算符用来对BITMASK变量的位进行检测,判断其是否与Field变量的位有相吻合之处。

    逗号运算符与表达式

    在C语言中,可以用逗号将多个表达式分隔开来。其中,用逗号分隔的表达式被分别计算,并且整个表达式的值是最后一个表达式的值。

    逗号表达式称为顺序求值运算符。逗号表达式的一般形式为:

    表达式1,表达式2 ,&hellip;,表达式n

    逗号表达式的求解过程是:先求解表达式1,再求解表达式2,一直求解到表达式n。整个逗号表达式的值是表达式n的值。

    观察下面使用逗号运算符的代码:

    Value=2+5,1+2,5+7;

    上面语句中Value所得到的值为7,而非12。整个逗号表达式的值不应该是最后一个表达式的值吗?为什么不等于12呢?答案在于优先级的问题,由于赋值运算符的优先级比逗号运算符的优先级高,因此先执行的赋值运算。如果要先执行逗号运算,则可以使用括号运算符,代码如下所示:

    Value=(2+5,1+2,5+7);

    使用括号之后,Value的值为12。

    【实例4】 用逗号分隔的表达式。本实例中,通过逗号运算符将其他的运算符结合在一起形成表达式,再将表达式的最终结果赋值给变量。由显示变量的值,分析逗号运算符的计算过程。

    #include<stdio.h>intmain(){intiValue1,iValue2,iValue3,iResult;/*声明变量,使用逗号运算符*//*为变量赋值*/iValue1=10;iValue2=43;iValue3=26;iResult=0;iResult=iValue1++,--iValue2,iValue3+4;/*计算逗号表达式*/printf("theresultis:%d\n",iResult);/*将结果输出显示*/iResult=(iValue1++,--iValue2,iValue3+4);/*计算逗号表达式*/printf("theresultis:%d\n",iResult);/*将结果输出显示*/return0;/*程序结束*/}

    C语言运算符与表达式实例分析

    复合赋值运算符

    复合赋值运算符是C语言中独有的,实际这种操作是一种缩写形式,可使得变量操作的描述方式更为简洁。例如在程序中为一个变量赋值:

    Value=Value+3;

    这个语句是对一个变量进行赋值操作,值为这个变量本身与一个整数常量3相加的结果值。使用复合赋值运算符可以实现同样的操作。例如上面的语句可以改写成:

    Value+=3;

    这种描述更为简洁。关于上面两种实现相同操作的语句,赋值运算符和复合赋值运算符的区别在于:

    为了简化程序,使程序精炼。 为了提高编译效率。

    对于简单赋值运算符,如Func=Func+1中,表达式Func计算两次;对于复合赋值运算符,如Func+=1中,表达式Func仅计算一次。一般来说,这种区别对于程序的运行没有太大的影响。但是,如果表达式中存在某个函数的返回值,那么函数被调用两次。

    【实例】 使用复合赋值运算符简化赋值运算。

    #include<stdio.h>intmain(){intiTotal,iValue,iDetail;/*声明变量*/iTotal=100;/*为变量赋值*/iValue=50;iDetail=5;iValue*=iDetail;/*计算得到iValue变量值*/iTotal+=iValue;/*计算得到iTotal变量值*/printf("Valueis:%d\n",iValue);/*显示计算结果*/printf("Totalis:%d\n",iTotal);return0;}

    C语言运算符与表达式实例分析

     </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
    本文:C语言运算符与表达式实例分析的详细内容,希望对您有所帮助,信息来源于网络。
    上一篇:mysql查看表结构的方法是什么下一篇:

    40 人围观 / 0 条评论 ↓快速评论↓

    (必须)

    (必须,保密)

    阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18