一、逻辑操作符
1、“&&”逻辑操作符
释义:
“&&”是“和”、“与”的意思,表示两边同时成立,如:
if (a >= 4 && a <= 8)
语句1;//要求a大于等于4的的同时小于等于8才会执行语句1
注意:C语言中非零数表示为真,零表示为假
故:
int a = 0;
if ( a )
a = 1;
else
a = 2;//答案是a = 2
这是因为if语句括号内的表达式需要为真,即非零,不然执行else语句。
故若一个表达式为真,也会有一个非零返回值来表示它为真,返回值通常为1.如:
int a = 0;
if ( a >= 0 )
a = 2;//答案是2,因为a>=0这个表达式为真,返回了1值
else
a = 3;
我们也可以自己打印一下表达式的返回值:
所以我们可以知道,&&两边的返回值必须都为非零数才能成立。若&&两边都为非零数,则&&表达式成立,总体返回一个1表示真 .
练习:
int n = 9 ;
n = 1&&0&&3;//请问n = ?
//答案是0
2、“||”逻辑操作符
释义:
“||”是“或”的意思,表示两边只要有一边成立即可表达,即两边操作数有一边为非零数即成立。
注:若两边都成立只会看左边的操作数,即:
int a = 3;
if (a > = 2 || a < 0)
语句1;//会执行语句1。因为||左边成立不会再管右边
注意:&&比||优先
int a = -2;
if (a<=-1||a>=2&&a>=3)
语句1;//语句1是否可以执行?
//正确算法:a<=-1为真,a>=2&&a>=3为假,即1||0成立返回1值,故语句1可以执行
//错误算法:从左到右。a<=-1||a>=2为真,a>=3为假,即1&&0,故语句1不可以执行
练习:
int n = 9;
n = 1 || 0 || 3;//请问n = ?
//答案:1
3、逻辑取反运算符
释义:
把真的表达式变为假,把假的表达式变为真,即改变表达式的返回值。
图像解释:
例:
二、switch语句
1、switch语句表达式
switch(整型表达式){
case 整型常量1:
语句1;
case 整型常量2:
语句2;
……(n个case)
default:
语句3;}
解释:如果整型表达式的值为整型常量n,则执行相应的语句n。如果整型表达式不等于case的任何一个整型常量,那么就执行default的语句。
例:
但是如果我们运行以上程序,会发现程序并不只是打印了“a = 2",而是把case2之后的语句都打印了,运行结果如下:
这是因为switch语句会一直按顺序运行后面的代码直到运行完毕。所以如果想要程序只执行其中一个case的语句,最好在后面都加一个break跳出switch语句,如下:
还有一点需要注意的是:case和default的顺序无关,如上图不会因为default语句放在case1上面就直接执行default,结果仍然是”a = 2".(但是如果都不加break结果就会有差异)
总结就是:switch先在case语句中匹配a的值,如果没有就匹配default语句。但是匹配完后如果语句中没有break就会一直执行下去,这时候case间的顺序和case与default的顺序就很重要。
下面是两种因为顺序不同而结果不同的程序:
注:其实表达式和常量也可以用字符型,因为每个字符都对应一个整型的ASCII码。因此只需要注意switch语句不要用浮点型表达式和常量即可。
三、while循环
1、while表达式
while(表达式){
语句;}//表达式为真时循环执行代码块内的语句
表达式的真假判断仍然是上述非零数和零数,故:
while(1){
语句;}//死循环
2、do-while循环
do{
语句;}while(表达式);
do-while和while循环非常相似。只不过do-while是先执行一遍循环体再判断,而while是先判断再执行。
也就是说:
int i = 0;
do{
i++; } while ( 0 );
// i等于1
int i = 0;
while( 0 ){
i++;}
// i等于0
不过do-while用得较少。
四、for循环语句
1、for循环表达式:
for(语句1;语句2;语句3){
语句;}
图片描述:
文字描述为:先执行语句1,然后判断语句2是否为真。如果为真就执行循环体中的语句,最后执行语句3.接着继续判断语句2,如果语句2为真则接着执行循环体的语句,再执行语句3,然后再判断语句2,如此重复直到语句2为假。
例:
注意:最后i的值变为了11,因为在printf后还会执行一次语句3.
2、补充
for循环中的语句1、语句2、语句3没有必要都写出来,循环体语句也不一定要写出来,如:
for ( i = 0 ; ; i ++){ ; }//只一个;号是空语句
五、break,continue使用
1、break的使用
上面已经提到break可以跳出switch语句,其实break还可以跳出while循环、for循环、do-while循环。
如上面的死循环,如果加一个break就会跳出来,停止循环。
while(1){
break;}
注意:break使用就不会再执行循环体后面的代码,包括for语句中的语句3.
例如:
for( i = 0; i <= 10; i ++){;}
printf ( " %d " , i );//结果是11
for( i = 0; i <= 10; i ++){
if( i == 10)
break;}
printf (" %d ", i );//结果是10
2、continue循环
作用是省略下面语句开始新一轮循环。
如:
for(i = 1; i <= 5; i++){
if ( i == 3)
continue;
printf ( " %d ", i );//结果是1 2 4 5
while语句和for语句的continue有一点点不同:
while 的continue直接跳回表达式判断。
for语句的continue直接跳到语句3执行,再到语句2判断。
六、goto语句
1、表达式
goto a;//a是自己定义的名字,不是变量,不需要创建和初始化
……(直接跳过中间这部分执行语句1)
a:
语句1;
a:
语句1;
……(往回跳也是可以的)
goto a;
goto语句不能乱用,不然容易乱。但是在多层循环语句中可以使用来快速跳出。
for( ){
for( ){
for( ){
……//n个for循环
for( ){
//此时达到某个条件想要直接跳出所有for循环,但是一个一个break太麻烦
goto a;}
……} } } } } } } }
a:
语句;
分支和循环学完啦,如果笔记有错误请指正。这部分感觉还是要多多刷题,很多题目都需要好几个循环嵌套,一不小心就容易混乱。