分支结构
正文开始,让我们来回忆一下,C语言是一个结构化的程序语言。有顺序结构、选择结构、循环结构。那C语言可以通过什么来实现这些结构呢。
我们可以通过if、switch来实现分支结构,通过for、while、do while来实现循环结构。
这一篇文章我将会对分支结构所涉及的语句展开详细讲解
1. if语句
1.2 if…else语句
1.3 嵌套if
1.4 悬空else问题
2. switch语句
2.1 break用法
2.2 default用法
1.if语句
if语句的语法形式如下:
1 if(表达式)
2 语句
简单来说if语句就是进行判断,如果条件判断为真,在C语言中也表示为非0,则执行语句;反之,如果条件判断为假,即为0,则不执行语句。
实操一下(判断奇数):
1 #include<stdio.h>
2 int main()
3 {
4 int num = 0;
5 scanf("%d", &num);
6 if (num % 2 == 1)
7 {
8 printf("%d 是奇数\n", num);
9 }
10 return 0;
11 }
哈哈哈没说错吧是不是超简单,别光看着自己试试!!!
1.2 if…else
既然讲到了if语句肯定离不开else,我们已经通过if判断出来不是奇数,那我们要怎么才能更加清晰的表示是奇数还是偶数呢?
if…else语句的语法形式如下:
1 if(表达式)
2 语句1
3 else
4 语句2
光说不练假把式来吧:
1 #include<stdio.h>
2 int main()
3 {
4 int num = 0;
5 scanf("%d", &num);
6 if (num % 2 == 1)
7 {
8 printf("%d 是奇数\n", num);
9 }
10 else
11 {
12 printf("%d 是偶数\n", num);
13 }
14 return 0;
15 }
看出什么小差别了嘛?真是小天才,没错else后面没有表达式进行判断,敲重点!!!不要忽视这个小细节,else后边不需要接表达式!
1.3 嵌套if语句
当我想要构成多重判断的时候这个就可以派上用场了。还是同样的例子我们要先判断一个数一个数是否为正数,再判断是奇数还是偶数,并输出;如果不是正数则输出:非正数。
1 #include<stdio.h>
2 int main()
3 {
4 int num = 0;
5 scanf("%d",&num);
6 if (num > 0)
7 {
8 if (num % 2 == 0)
9 {
10 printf("偶数");
11 }
12 else
13 {
14 printf("奇数");
15 }
16 }
17 else
18 {
19 printf("非正数");
20 }
21 return 0;
22 }
一点点的把程序细化,原本看起来好像很难的程序是不是简单起来了呢。
1.4 悬空else问题
这一次让我们先看一段代码
1 #include<stdio.h>
2 int main()
3 {
4 int a = 0;
5 int b = 0;
6 if (a == 1)
7 if (b == 2)
8 printf("hehe\n");
9 else
10 printf("hhh\n");
11 return 0;
12 }
这段代码最后会打印出来什么呢?答案揭晓: 什么都不会打印
敲重点!!!请各位未来的技术大牛们记住一个规则,else总是跟最接近的if配对。
如果我们把代码修改一下呢:
#include<stdio.h>
int main()
{
int a = 0;
int b = 0;
if (a == 1)
{
if (b == 2)
printf("hehe\n");
}
else
{
printf("hhh\n");
}
return 0;
}
这样是不是一下就看懂了。在编写代码的过程中要带上适当的大括号,代码的逻辑会更加清晰,各位在写代码时要注意括号的使用,让代码的可读性更高。
2. switch语句
在我们的实际生活中,我们需要判断的东西很繁杂,比如我们像判断1-7中某一个数对应的是星期几,我们如果用if语句去实现效率太低了。switch语句就会帮助我们提高效率。
switch语句的语法形式如下:
1 switch(表达式)
2 {
3 case 常量1:语句1
4 case 常量2:语句2
7 }
接下来我为各位展示一段代码去实现我上面所说的星期几的对应:
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 }
30 return 0;
31 }
是不是要比if语句方便很多!需要注意的是 case后面的数字要有空格且必须是整形常量表达式。
2.1 break的用法
如果上边的代码我们的需求发生变化
1 输入1-5,输出的是工作日;
2 输入6-7,输出的是休息日。
那么参考代码如下:
1 #include<stdio.h>
2 int main()
3 {
4 int day = 0;
5 scanf("%d",&day);
6 switch (day)
7 {
8 case 1:
9 case 2:
10 case 3:
11 case 4:
12 case 5:
13 printf("工作日\n");
14 break;
15 case 6:
16 case 7:
17 printf("休息日\n");
18 break;
19 }
20 return 0;
21 }
这样就可以简单的实现我们的要求了,我们可以根据实际情况决定代码中是否要使用break,在哪里使用。敲重点!!!每一个case语句中的代码执行完成后,需加上break,才能跳出这个switch语句。
2.2 default的用法
在使用switch语句的时候,我们经常可能遇到一种情况,比如switch后的表达式中的值无法匹配代码中的case语句时,这时候可以在switch语句中加入default子句。
1 switch(expression)
2 case value1: statement
3 case value2: statement
4 default:statement
5 }
我们拿前面那个打印星期的练习来举例:
1 #include<stdio.h>
2 int main()
3 {
4 int day = 0;
5 scanf("%d",&day);
6 switch (day)
7 {
8 case 1:
9 case 2:
10 case 3:
11 case 4:
12 case 5:
13 printf("工作日\n");
14 break;
15 case 6:
16 case 7:
17 printf("休息日\n");
18 break;
19 default:
20 printf("输入错误");
21 }
22 return 0;
23 }
这样就可以更加精细化我们的代码啦。
小课堂!!!switch语句中的case子句和default子句没有顺序要求,只要你的顺序满足实际需求就可以,不过我们通常是把default子句放在最后处理的。
公主王子们,要多自己敲代码实践一下哟,下一篇我将会为大家继续分享循环篇。