C语言入门——分支循环(2)算术逻辑操作符、switch、while、do-while、for循环语句和goto语句

本文详细讲解了C语言中的逻辑操作符(&&,||)的用法,以及switch语句、while、do-while、for循环的原理和break/continue/goto的使用。强调了控制流程的理解和实践的重要性,特别是复杂循环结构的处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、逻辑操作符

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:

     语句;

   分支和循环学完啦,如果笔记有错误请指正。这部分感觉还是要多多刷题,很多题目都需要好几个循环嵌套,一不小心就容易混乱。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值