【C语言初阶】分支语句 —— if语句
文章目录
【C语言初阶】分支语句 —— if语句二、分支语句(选择结构)1 选择 - 流程图2 `if` 语句2.1 语法结构2.2 不同结构的 `if` 语句2.2.1 `if` 单分支结构2.2.2 `if` 多分支结构2.2.3 `if` 多条件结构 2.3 说明2.4 悬空 `else`2.4.1 示例12.4.2 示例2 2.5 `if` 不同书写形式的对比2.5.1 示例12.5.2 示例2 2.6 `if` 语句练习2.6.1 练习12.6.2 练习2 总结:
二、分支语句(选择结构)
每个人的一生中都会面临无数的选择,而一旦确定了某个选择,那便不断地努力前行。
本章学习的 if
语句和 switch
语句,都是用来实现程序流程的选择性分支的,因此统称为选择语句(selection statement)。
1 选择 - 流程图
2 if
语句
if 语句被称为分支语句或选择语句,因为它相当于一个交叉点,程序要在两条分支中选择一条执行。
2.1 语法结构
//if单分支结构if(表达式)语句;//if多分支结构if(表达式)语句1;else语句2;//if多条件结构if(表达式1)语句1;else if(表达式2)语句2;else语句3;
说明:
1 if(表达式) 语句;
表达式求值判断一次,为真时执行语句,为假时什么也不执行。
2 if(表达式) 语句1; else 语句2;
表达式求值判断一次,为真时执行语句1,为假时执行语句2。
3 if(表达式1) 语句1; else if(表达式2) 语句2; else 语句3;
先对表达式1进行判断,为真时执行语句2,为假时则对表达式2进行判断;如果表达式2为真,则执行语句2,如果表达式2为假,则执行语句3。
如果后续还有 else if(表达式)
的结构,则依然是先判断表达式,然后执行相应的语句或者继续进行后续表达式的判断。
注意1: else
后不跟表达式,只有 if
或者 else if
之后才能跟表达式。
注意2:语句可以是一条简单语句或复合语句。表达式为真说明其是非零值。
2.2 不同结构的 if
语句
2.2.1 if
单分支结构
单分支-流程图:
示例:
#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>int main(){//if单分支结构int age = 0;scanf("%d", &age);if (age < 18){printf("未成年!\n");}return 0;}
2.2.2 if
多分支结构
多分支-流程图:
示例:
#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>int main(){//if多分支结构int age = 0;scanf("%d", &age);if (age < 18){printf("未成年!\n");}else{printf("已成年!\n");}return 0;}
2.2.3 if
多条件结构
多分支-流程图:
示例:
#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>int main(){//if多条件结构int age = 0;scanf("%d", &age);if (age >= 0 && age < 18){printf("未成年\n");}else if (age >= 18 && age < 30){printf("青年\n");}else if (age >= 30 && age < 50){printf("中年\n");}else if (age >= 50 && age < 80){printf("老年\n");}else if (age >= 80){printf("老寿星\n");}return 0;}
2.3 说明
如果表达式的结果为真,则执行语句,否则就执行 if
语句后面的其他语句。
在C语言中,0表示假,非0表示真。
if
或者 else
后面只能跟随一条语句,当需要执行多条语句时,需要用 {} 大括号将它们括起来,形成复合语句。
if-else
语句可以嵌套使用,一个 if
语句内部可以包含其他 if
语句。
2.4 悬空 else
每个 else
只与和它最近的 if
相匹配,除非最近的 if
被花括号括起来。
2.4.1 示例1
代码示例:
#include<stdio.h>int main(){//悬空elseint a = 0;int b = 2;if (a == 1)if (b == 2)printf("hehe\n");elseprintf("haha\n");//什么也不打印return 0;}
解释说明:
1 当程序执行到第一个 if
语句的位置时,进行表达式 a == 1
的求值和判断。
判断的结果为假,则不执行 if
内的语句,也就是不再对第二个 if
语句的条件表达式进行求值和判断。
本程序中的 else
与第二个 if
相匹配,而不是第一个 if
,所以当第一个 if
的条件判断为假的时候,程序流会直接跳过第二个 if
和 else
,继续执行后续其他代码。
2 也就是说,else
只与和它最近的 if
相匹配,而不是和所谓的与之对齐的 if
匹配。
2.4.2 示例2
调整代码:
#include<stdio.h>int main(){//适当使用 {} 可以使代码变得更加易读//良好的代码书写风格很重要int a = 0;int b = 2;if (a == 1){if (b == 2){printf("hehe\n");}}else{printf("haha\n");//打印haha}return 0;}
解释说明:
1 根据实际需求,可以在 if
和 else
之后添加大括号 {}
,使得程序变得更易读。
2.5 if
不同书写形式的对比
2.5.1 示例1
//代码1if (condition){return x;}return y;//代码2if (condition){return x;}else{return y;}
解释说明:
1 结论:两个代码执行效果相同,但代码2更加清楚易懂。
代码1:当 if
语句条件表达式判断为真时,执行 return x;
语句;表达式判断为假时,执行 if
语句之后的其他语句,也就是执行 return y;
。(一条 if
语句、一条 return
语句)
代码2:当 if
语句条件表达式判断为真时,执行 return x;
语句;表达式判断为假时,执行 return y;
语句。(一条 if
语句)
2.5.2 示例2
//代码1int num = 1;if (num == 5){printf("hehe\n");}//代码2int num = 1;if (5 == num){printf("hehe\n");}
解释说明:
1 结论:两个代码执行效果相同,但代码2更加清楚易懂。
代码1:在书写时,可能会出现 if (num = 5)
这样的情况,不小心漏掉了一个等号,将条件表达式由判断是否相等变成了判断一个赋值语句。
代码2:在书写时,如果出现 if (5 = num)
时,程序会报错,这样就很好的避免将条件语句中的判断相等写成赋值语句。
2 赋值表达式求值
对赋值语句判断的结果就是赋值运算符右操作数的结果,也就是将赋的值作为赋值表达式判断的结果。
2.6 if
语句练习
2.6.1 练习1
判断一个数是否为奇数
代码示例:
#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>int main(){//判断一个数是否是奇数int num = 0;scanf("%d", &num);//方法一//判断num%2的结果是否为1,为1表示是奇数,为0表示是偶数if (1 == num % 2)//%运算符的优先级高于==运算符{printf("%d是奇数.\n", num);}else{printf("%d是偶数.\n", num);}//方法二//判断num%2的结果是不是不等于0,如果不等于0则是奇数,为0则是偶数if (num % 2 != 0)//%运算符的优先级高于!=运算符{printf("%d是奇数.\n", num);}else{printf("%d是偶数.\n", num);}return 0;}
解释说明:
1 判断奇偶时,将目标数模2取余,结果为0表示偶数,结果为1表示奇数。
2.6.2 练习2
输出1~100之间的奇数
代码示例:
#include<stdio.h>int main(){//判断1~100之间的奇数//方法一//从1开始判断到100,是奇数就打印输出int i = 0;for (i = 1; i <= 100; i++)//循环了100次{if (i % 2 == 1)//判断了100次{printf("%d是奇数.\n", i);//执行了50次}}//方法二 //i每次加2,满足1~100中奇数的等差数列形式,公差为2for (i = 1; i < 100; i += 1)//循环了50次{printf("%d是奇数.\n", i);//执行了50次}return 0;}
解释说明:
1 写法一是判断1~100中的所有数,如果是奇数则打印。
2 写法二是直接打印1~100中的所有奇数,且不用作判断。
总结:
本节简单介绍了分支语句中的 if
语句,给出了三种形式的 if
语句;同时又讲解了什么是悬空 else
和 if
不同书写形式的对比。
感谢您的阅读!如有任何错误,欢迎您的批评指正!