运算符、表达式和条件结构
内容概要:各种运算符的使用
运算符的优先级
表达式的计算
条件分支结构判断的常用结构
表达式:
表达式是运算符和操作数的组合,如下所示:
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)
问题:
运算符的优先级?先算什么再算什么?多练习。运算符各自应用在什么地方?条件分支判断结构的练习?