Ciallo~ (∠・ω< )⌒★
在计算机编程中,有四种标准化的控制流程结构,它们是:
- 顺序结构:按照代码的顺序依次执行,没有跳转或分支。
- 选择结构:根据条件的真假选择不同的执行路径。常见的选择结构有 if语句和switch语句。
- 循环结构:根据条件的真假重复执行一段代码块,直到条件不满足为止。常见的循环结构
有while循环和for循环. - 函数调用
今天我们来学习选择结构(分支结构)
目录
1. if 语句
1.1 if(单选择)
if语句的语法形式如下:
1 if(表达式)
2 语句;
表达式为真(非0)则执行语句,表达式为假(0)则不执行该语句。
尽管在一个主语句中只允许有一条语句,但这条语句可以是复合语句。一个复合语句是包含在大括号之间的一个以上的语句。形式如下
1 if(表达式)
2 {
3 语句1;
4 语句2;
5 ...
6 }
1.2 if-else(双选择)
如果我们要判断一个数是奇数还是偶数,进行单选择显然就不够了,这事就需要用到 if-else 语句进行双选择了。
它的语法形式如下:
1 if(表达式)
2 {
3 语句1;
4 }
5 else
6 {
7 语句2;
8 }
在 if 语句中,若条件式为假,则跳过后面的语句1,执行下一条语句。而对于 if-else 语句,若 if 后的条件式为假则执行else后的语句2,执行结束后再顺次执行下一条语句。
1.3 if-else链(多选择)
前面的语法想必非常简单易懂对叭,现在让我们更上一层楼。
在现实生活中,有很多情景需要做出多重判断,并相应地做出不同决策。比如火焰柚子不久前参加了C语言期末考试,如果火焰柚子的分数>=90,则会得到一个A,如果80<=分数<90,则会得到一个B,如果60<=分数<80,则会得到一个C。如果没有达到60分,则会得到一个“挂”。这时候就需要用到 if-else 链进行多选择判断了。
语法形式如下:
1 if(条件式1)
2 {
3 语句1;
4 ...
5 }
6 else if(条件式2)
7 {
8 语句2;
9 ...
10 }
11 else if(条件式3)
12 {
13 语句3;
14 ...
15 }
16 ...
17 else
18 {
19 语句;
20 }
让我们亲自完成对火焰柚子成绩的判断
1 if(score >= 90)
2 {
3 printf("A\n");
4 }
5 else if(80 <= score < 90)
6 {
7 printf("B\n");
8 }
9 else if(60 <= score <= 80)
10 {
11 printf("C\n");
12 }
13 else
14 {
15 printf("挂\n");
16 }
2. switch 语句(多选择)
switch 语句是一个能够用于要求准确地相等于一个或多个整型常数的 if-else 链位置中的专用选择语句。
语法形式如下:
switch(expression)
{
case valuel:
statement
case value2:
statement
...
default:
statement
}
上面代码中,根据表达式 expression 不同的值,执行相应的 case 分支。如果找不到对应的值,就执行 default 分支。需要注意,switch 后的 expression 必须是整型表达式。case 后的值,必须是整形常量表达式。case与整型常量表达式之间必须有空格。
上代码:
1 #include <stdio.h>
2 int main()
3 {
4 int day = 0;
5 scanf("%d", &day);
6 switch(day)
7 {
8 case 1:
9 printf("星期⼀\n");
10 break;
11 case 2:
12 printf("星期⼆\n");
13 break;
14 case 3:
15 printf("星期三\n");
16 break;
17 case 4:
18 printf("星期四\n");
19 break;
20 case 5:
21 printf("星期五\n");
22 break;
23 case 6:
24 printf("星期六\n");
25 break;
26 case 7:
27 printf("星期天\n");
28 break;
29 default:
30 printf("输入错误,请重新输入:\n");
31 break;
32 }
33 return 0;
34 }
break是用来停止执行后面的语句并跳出 switch 的。
3. 做题细节及注意事项
3.1 悬空else问题
如果有多个 if和 else,可以记住这样一条规则,else 总是跟最接近的 if 匹配。我们从下面一段代码来展开理解。
友友们思考一下这段代码的运行结果
1 #include <stdio.h>
2 int main()
3 {
4 int a = 0;
5 int b = 2;
6 if(a == 1)
7 if(b == 2)
8 printf("flame\n");
9 else
10 printf("pomelo\n");
11 return 0;
12 }
不少小伙伴贸然判断a不等于1,那么执行else后面的语句,打印pomelo。但实际运行起来,结果却是
什么都没打印!
这里就要再次强调else 总是跟最接近的 if 匹配,而不是和与之对齐的 if 匹配,所以实际上 else 是与第二个 if 匹配的,后面的 if-else 语句其实是嵌套在第一个 if 语句里的。当第一个 if 判断条件式为0时,后面的 if-else 语句就不会执行啦。
3.2 switch 分析
常挖的坑:无break(考试一定要注意!!!); case,default位置。
无break:
1 #include <stdio.h>
2 int main()
3 {
4 int day = 0;
5 scanf("%d", &day);
6 switch(day)
7 {
8 case 1:
9 printf("星期⼀\n");
10 break;
11 case 2:
12 printf("星期⼆\n");
13
14 case 3:
15 printf("星期三\n");
16 break;
17 case 4:
18 printf("星期四\n");
19
20 case 5:
21 printf("星期五\n");
22
23 case 6:
24 printf("星期六\n");
25 break;
26 case 7:
27 printf("星期天\n");
28 break;
29 default:
30 printf("输入错误,请重新输入:\n");
31 break;
32 }
33 return 0;
34 }
让我们思考输入3会发生什么呢
答案是
这就说明case中无break,则无法跳出switch,会继续向后执行,直到遇见break,才跳出switch.
case,default位置:
switch语句中的default子句可以放在任意位置
switch语句中case表达式不要求顺序