选择语句(逻辑表达式 + if语句 + switch语句)

本文详细介绍了C语言中的逻辑表达式和条件控制结构,包括if语句、逻辑运算符、switch语句的使用。讲解了关系运算符产生0或1的真假值,逻辑运算符的短路特性,以及if语句和复合语句的配合使用。此外,还阐述了switch语句的执行流程和break语句的重要性。通过对这些基础知识的掌握,读者能够更好地理解和运用C语言的条件控制逻辑。
摘要由CSDN通过智能技术生成

5.1 逻辑表达式

①包括if语句在内的某些C语句都必须测试表达式的值是“真”还是“假”,诸如i > j这样的比较运算会产生整数:0(假)或1(真);

②C语言的关系运算符和数学上的 <  >  <=  >=运算符相对应,只是在C语言的表达式中时产生的结果是0(假)或1(真)。 eg  表达式10 < 11的值为1, 表达式11 < 10 的值为0;

③关系运算符的优先级低于算术运算符,且都是左结合; eg ( i + j )< ( k - 1) ; 

④判等运算符

符号含义
==等于
!=不等于

 左结合, 产生0(假)和1(真), 优先级低于关系运算符。 eg  (i < j)==  (j < k)

⑤逻辑运算符

符号含义
!逻辑非
&&逻辑与
||逻辑或

逻辑运算符将任何非零值作为真值处理,同时将任何零值操作数作为假值来处理;

⑥如果表达式的值为0,!表达式的结果为1;表达式1和2的值都是非零值,那么表达式1&&表达式2的结果为1;如果表达式1或表达式2的值中任意一个(或两者都)是非零值,表达式1||表达式2的结果为1;其他情况下,结果都是0;

⑦&&和||都会对操作数进行短路运算,首先计算左操作数的值,然后计算右操作数,如果表达式的值可以仅有左操作数推导,则不计算右操作数的值,也不执行右边的表达式;

5.2 if 语句

① 【if 语句】 if(表达式) 语句

②表达式两边的圆括号是必须的,没有then,圆括号后面加分号;则执行空语句。执行if语句时,先计算圆括号内表达式的值,如果表达式的值非0(真值),再执行圆括号后面的语句;

③不要混淆 ==(判等) 和 =(赋值), eg   if( i= 0)测试结果总是为真,因为其为赋值;

④if语句判定变量是否落在某个范围  if (a <=  i && i <= b);判定变量在范围之外 if (i < a || i > b);

⑤注意,在if语句中,语句是一条语句而不是多条语句;

⑥【复合语句】  {多条语句}  通过在一组语句周围放置花括号,可以强制编译器将其作为一条语句处理;

⑦为了表示清楚,通常将一条复合语句放在多行内,每行有一条语句,每条语句内部仍然以分号结尾,但复合语句不是,花括号外不加分号;

⑧【带有else子句的if语句】 if (表达式) 语句 else 语句    如果if(表达式)内的值为0,那么就执行else语句。

⑨if和else对齐排列在语句起始位置,内部语句常采用缩进格式;

⑩即使在不必要的情况下也可以添加花括号,这样容易添加更多的语句到子句中,避免了增加语句时忘记加 {} 引发的错误;

⑾级联式 if 语句

if (表达式)
    语句
else if (表达式)
    语句
...
else if (表达式)
    语句
else
    语句

需要判定一系列的条件,一旦其中某一个条件为真就立刻停止。这种格式中最后两行else语句不是总出现,级联式if语句并不是新的语句类型,只是普通的if语句,碰巧有另外一条if语句作为else子句,而且这条if语句又有另外一条if语句作为他自己的else子句,以此类推;

⑿C语言遵循的规则是else子句应该属于离他最近的还未和其他else匹配的if语句,,为了使else子句属于外层的if语句,可以把内层的if语句用花括号括起来;

⒀【条件表达式】 表达式1 ? 表达式2 : 表达式3     表达式1,表达式2,表达式3可以是让任何类型的表达式,如果表达式1成立,那么表达式2,否则表达式3,表达式2或表达式3计算出来的值就是整个条件表达式的值。

5.3  switch语句

①【switch语句】 

switch (表达式) {
    case 常量表达式 : 语句; break;
    ...
    case 常量表达式 :语句; break;
    default : 语句;
}

②C语言把字符当成整数来处理,因此switch语句能对字符进行判定,但不能用浮点数和字符串;常量表达式中不能包含变量和函数调用,常量表达式的值也必须是整数(字符也可以);每个分支标号后面可以跟任意数量的语句且不需要用花括号,每组语句最后一条通常是break语句;default分支不一定放在最后;多个分支标号可以放置在同一组语句的前面,为节省空间,几个分支标号可放置在同一行中

switch (grade){
case 4: case 3: case 2: case 1:
    printf ("Passing");
    break;
case 0: printf("Failing"); 
    break;
default:
    printf("Illegal grade");
    break;
}

③switch语句不要求一定有default分支,如果default不存在,控制表达式的值和任何一个分支标号都不匹配,控制会直接转给switch后面的语句;

④break语句的作用:执行break语句会使程序跳出switch语句,继续执行switch后面的语句。switch语句实际上是一种基于计算的跳转,对控制表达式求值时,控制会跳转到与switch表达式的值相匹配的分支标号处,执行完分支中最后一条语句后,程序控制向下跳转到下一个分支的第一条语句上,忽略下一个分支的分支标号,如果没有break语句(或者其他某种跳转语句),控制将会从一个分支继续到下一个分支;

⑤switch语句中最后一个分支不需要break语句,但通常还会放一个break语句,防止将来增加分支时出现丢失break的问题;

⑥当int 型和float型混在一个表达式中时,表达式类型为float型

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值