【C语言】选择结构超级详解

Ciallo~ (∠・ω< )⌒★
在计算机编程中,有四种标准化的控制流程结构,它们是:

  1. 顺序结构:按照代码的顺序依次执行,没有跳转或分支。
  2. 选择结构:根据条件的真假选择不同的执行路径。常见的选择结构有 if语句和switch语句。
  3. 循环结构:根据条件的真假重复执行一段代码块,直到条件不满足为止。常见的循环结构
    有while循环和for循环.
  4. 函数调用

今天我们来学习选择结构(分支结构)

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       语句28   }

在 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 19          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 19          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表达式不要求顺序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值