运算符表达式和条件结构

内容概要:各种运算符的使用

运算符的优先级

表达式的计算

条件分支结构判断的常用结构

表达式:

表达式是运算符和操作数的组合,如下所示:

s = ( n + 9 ) * ( k / 6)

其中,n + 9 和 k / 6分别是一个表达式

运算符:

1.赋值运算符,=;它在C语言中不叫等号,也不意味着相等,而是一个赋值符号。如下例:

double sam;

sam = 24.36;

这里应该这样理解,我们声明了一个double类型的变量sam,然后把24.36赋值给sam。赋值运算符的计算顺序是从右往左。

2.复合运算符,+=、-=、*=、/= %= 等等;最直观的理解方式就是它有两个运算符号,并且其中有赋值运算符。如下例:

int num;

num = 3;

num += 10;//相当于num = num + 10,输出结果则为13;意思就是它本身加上3再赋值给它本身。

num -= 10;//同理相当于num = num – 10,

num *= 10;//相当于num = num * 10

3.算术运算符,可以进行算术运算。并且分成两类。

a.一元运算符,++、–

b.二元运算符,+、-、*、/、%

二元运算符中前四个和数学中的加减乘除大同小异,第五个%的意思是取模,即取余数,如5 % 2的值是1,这里我们着重理解一元运算符,如下例:

int num = 5;

num++;   //这里的num++相当于num = num + 1

printf("%d",num);

这里最后打印的值应该是6。–同理,它们在变量的左右都不影响计算方式。

然后我们再看一种情况:

int num,result;

num = 5;

result = num++;  //有赋值运算符,则需要考虑一元运算符的位置来确定优先级。

printf("%d\n",result);

printf("%d\n",num);

这里我们要注意,在有赋值运算符的情况下,我们要根据一元运算符的位置来决定我们是先赋值还是先计算它,如果一元运算符在变量的左边,那我们要先计算,如果它在变量的右边,那么我们就要先赋值再计算,所以这里result的值是依然是5,num的值是6。

4.关系运算符,可以比较大小、高低和长短。

a. >   、

b. >=   、 <=,大于等于和小于等于

c. ==   、!=,恒等于和不等于

在C语言中,0表示假,1(非零)表示真,高级语言中才有true(正确)和flase(错误),但是C语言是一 门很老的语言是没有的。所以我们看一下下面例子:

prinf("%d\t%d\n",5 > 8,10 < 20);

输出结果为01,因为5 > 8为假,10 < 20为真

5 .逻辑运算符,且(&&)、或(||)、非(!),它们和数学中学的逻辑关系相似。

a. && ,条件1 && 条件2,两个条件同时为真时,结果为真。

b. || ,条件1 || 条件2,两个条件中有一个为真时,结果为真。

c. ! ,! 条件,条件为真时结果为假,条件为假时结果为真。

6.sizeof运算符,使用此运算符可以获得数据类型占用内存空间的大小,数据类型可以是一个具体的值,也可以是数据类型的关键字。

基本用法很简单:sizeof(),结果是以字节为单位,它是用来计算括号内数据的类型所占的字节,如下:

printf("%d\n",sizeof(35));  //35是整型数据,所以所占字节是4个

printf("%d\n",sizeof(char));  //char是字符型,所以所占字节是1个

printf("%d\n",sizeof(35.3f));  //35.3f是单精度浮点型,所以所占字节是4个

printf("%d\n",sizeof(35.63987));  //35.63987是双精度浮点型,所以所占字节是8个

所以打印结果分别是:4,1,4,8

运算符优先级:

从上到下的优先级(靠前的优先级最高)

() ,  sizeof(),  ++,  —

!     非

算术运算符 +, -, *, /, %

关系运算符 > , < , >= , <= , == , !=

&&  且

||      或

赋值运算符  =

其中,括号的优先级最高,赋值运算符的优先级最低,算术运算符中先算乘除后算加减。

例:C语言中打印!((18 + 45 % 3 * 5) > 16)的结果是什么

根据优先级不难看出,我们要先算45 % 3为 0 , 0 * 5依然是零,所以结果就是我们要算!(18 > 16),18 >16为1,所以这个题打印结果为0。

条件建构:

1.if结构,语法结构如下所示:

if(条件为真)                {

//代码块1;

}

else

{

//代码块2;

}

if语句遵循先判断后执行,如果(if)条件为真,那我们执行代码块1,;否则(else),我们执行代码块2,如果有多种可能,那我们可以在其中穿插else if()来继续执行。(多重if结构)

2.switch结构,语法结构如下所示:

switch(表达式)

{

case常量1:

语句1;

break;

case常量2:

语句2;

break;

……

default:

语句;

}

switch语句通常用来探讨区间内的值,一般用来处理数轴中某几个点的情况。

switch代表开关,意思就是我们打开这个switch(开关)探讨可能会出现什么case(情况或者案例),break(中断)在这里是跳出这个switch结构的意思,结构中就是说,如果switch中的表达式出现常量1的情况,那我们执行语句1,并且跳出这个结构,如果没有出现常量1的情况,那我们就看常量2,以此类          推。直到我们程序中的case都被执行完还不满足,那我们就执行default中的语句。使用switch结构时的注意点:

1.switch后的小括号里的表达式只能是整型或字符型

2.case后常量表达式的值不能相同

3.case后允许有多条语句,不需要大括号

4.如果不添加break语句,需要特别注意执行程序

5.case和default的先后顺序可以自行变动   //如果放在case之前,需要注意加break让它中断。

6.default子句是可以省略的

多重 if 结构和 switch 结构都是处理多分支条件的结构,switch适用于条件是有限个的小范围区间内,而多重if 能判断某个连续区间时的情况。

本章总结:

各种运算符的使用,赋值运算符(=)、算术运算符(一元 ++、–,二元 +、-、*、/、%)、关系运算符(>、=、<=等)、逻辑运算符(或||、且&&、非!)、复合运算符(+=、-=、*=、/=、%=等)

表达式的运算,以及它们的优先级。(重点优先级)

条件分支判断的常用结构(if,多重if,switch)

问题:

运算符的优先级?先算什么再算什么?多练习。运算符各自应用在什么地方?条件分支判断结构的练习?