if 语句
if
1.if语句的形式:
if ( 表达式 )
执行语句
表达式成立(为真)执行,表达式不成立(为假)不执行。
2.在c语言中,0为假,非0为真,也就是如果表达式的结果为0不执行,不为0执行。
else
1.else 是经常与if 搭配使用的 组成if else语句
语句的形式如下:
if(表达式)
执行语句1
else
执行语句2
嵌套if
1.在if else语句中,else可以与另外一个if语句连用,构成多重判断
比如:
int main()
{
int num = 0;
scanf ("%d", &num);
if (num == 0)
printf("输入的数字是0\n");
else if (num > 0)//这里的if相当于嵌套在else语句中,构成了嵌套结构
printf("输入的数字是正数\n");
else
printf("输入的数字是负数\n");
return 0;
}
再如:
int main()
{
int num = 0;
scanf("%d", &num);
if (num > 0)
{
if (num % 2 == 1)
printf("奇数");
else
printf("偶数");
}//这个大括号也是嵌套在if语句中,构成了嵌套的if语句
else
{
printf("不是正数");
}
return 0;
}
所以嵌套结构既可以在if语句用,也可以在else语句中
注意事项
分支中包含多条语句:
①在if和else语句中默认都只能控制一条语句,例如:
![在这里插入图片描述](https://img-blog.csdnimg.cn/fd12109993414f8a9c66ec9a4432b826.png)
上面的代码你会发现,无论你输入的值>=18还是<18,“可以谈恋爱了”这句话都会被打印下来
这是因为if语句只控制一条语句,就是
printf(“成年了\n”);
if语句为真则打印这句话,如果为假则不会打印这句话。但是对于
printf(“可以按恋爱了”);
是独立存在的语句,不受if是真是假的影响,都会执行。
所以,如果想要if语句控制两条以上的语句,则就要使用**{}**将代码括起来,else后面也可以加大括号。
悬空else问题
如果有多个if和else,总是记住这样一条规律:else总是跟最近的if匹配。
下面看到这样的代码:
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if(a == 1)
if(b == 2)
printf("hehe\n");
else
printf("haha\n");
return 0;
}
这串代码的结果是:
这是为什么呢?这就是悬空else问题。
原因就是刚刚说过的那条规则,else与最近的if配对。
上⾯的代码排版,让 else 和第⼀个 if 语句对⻬,让我们以为 else 是和第⼀个if匹配的,当 if
语句不成⽴的时候,⾃然想到的就是执⾏ else ⼦句,打印 haha ,但实际上 else 是和第⼆个 if
进⾏匹配的,这样后边的 if…else 语句是嵌套在第⼀个 if 语句中的,如果第⼀个 if 语句就不
成⽴,嵌套 if 和 else 就没机会执⾏了,最终啥都不打印。
如果代码改成下⾯这样就更加容易理解了:
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if(a == 1)
{
if(b == 2)
printf("hehe\n");
else
printf("haha\n");
}
return 0;
}
或者我们希望else确实与第一个if配对:
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if(a == 1)
{
if(b == 2)
printf("hehe\n");
}
else
{
printf("haha\n");
}
return 0;
}
如果想要if与else是按自己的想法匹配,需要添加适当的大括号,大括号能使代码的逻辑更加清晰。
所以,在写代码的时候要注意括号的使用,让可读性增加。
switch 语句
基本概念
-
Switch语句是c语言中另外一种用来实现分支结构的语句,是一种特殊形式的 if…else结构,用来判断条件有多个结果的情况。简而言之。就是把多重的else if 变得更易用,更可读和清晰。
-
Switch语句的格式:
switch(expression)
{
case value1: statement
case value2: statement
default: statement
}
表达式(expression)不同的值,执行相应的case分支。如果没有对应,则会执行default语句。
- 注意事项:
①switch后的expression必须是整型表达式
②case后的值,必须是整型常量表达式
③case和后边的数字之间必须有空格
switch语句中的break
看到下面一串代码:
我们发现8除以3的余数为2,但是我们发现程序运行的结果多了一行“余数是0”的打印
原因是什么呢?
原因是switch语句也是分支效果的,只有在switch语句中使用break才能跳出switch语句,如果一个case语句执行了,且后面没有break,代码会继续执行下去,所以有可能执行到其他的case语句中的代码,直到遇到break或者switch语句全部结束。
所以break在switch语句中是非常重要的一部分,能够帮助实现真正的分支。
因此,每一个case语句的代码执行完后,需要加上break,才能跳出switch语句
那么我们完善这个代码:
switch语句中也可以有几种case输出的内容一样,例如:
default
在使用switch语句的时候,可能会碰到表达式中的值无法匹配到代码中case语句,这个时候要不不做处理,要不就得在switch中加人default语句。
总而言之,如果输入的值不能匹配到case语句中的一个,则会执行default语句。
注意事项
default和case的顺序问题
switch语句中case和default是没有顺序要求的,只要你的顺序是满足实际情况的就行。
不过,我们通常会把default语句放在最后面处理。
if语句和switch语句的对比
-
switch语句将各个情况更加直观的表示出来,便于阅读,但是case后面的形式是整型常量,无语输入关系表达式,局限性大;
-
if语句虽然形式上没有switch那样简洁明了,甚至如果不合理使用大括号,语句会显得很混乱,不知道执行的顺序,但是他支持的形式不止整型常量,还支持其他多种形式(关系表达式,浮点型等),使用的范围更大更广。
所以,两者都有各自的优势,要具体问题,具体分析,合理选择使用哪种分支语句。