C语言11-分支结构1

C语言的程序包含三种操作流程。

1.顺序流程

我们之前写的所有代码都为顺序流程。

流程1–>流程2–>流程3–>流程4–>流程5

2.分支流程

3.循环流程

分支流程

现在我们有一个新的需求:输入一个整数,判断它是否在1~10之间,如果在输出yes,如果不在就什么都不做。

现在我们来分析一下这个需求的流程图。

z9V5VA.png

显然此流程出现了岔路不属于顺序流程而属于分支流程。

if语句

if语句的基本格式为

1
2
3
if(测试条件){
当条件为真时运行的函数;
}

现在让我们将新需求带入if语句的基本格式。

新的需求:输入一个整数,判断它是否在1~10之间,如果在输出yes,如果不在就什么都不做。

1
2
3
if(1<=X<=10){
printf("yes\n");
}

但是上述if的语句是错误的,if的测试条件只能为单项,上述的测试条件分为两项1<=x和x<=10。

这时为了将这两项测试条件和为一项就要用到逻辑与符号&&(此内容会在关系”运算符和逻辑运算符”章节中出现)。

即正确的写法为。

1
2
3
if(1<=x && x<=10){
printf("yes\n");
}

下面让我们来看一下完整的代码。

1
2
3
4
5
6
7
8
9
#include<stdio.h>
int main(){
int x;//声明x变量为整数int类型
scanf("%d",&x);//运用scanf函数扫描输入值并保存在变量x中。
if(1<=x && x<=10){ //通过if判断表达式判断x是否为1-10之间的数
printf("yes\n");//如果是则输出yes
}
return 0;
}

关于&&

&&是逻辑运算符,要求前后的关系都满足。

1
2
3
4
5
6
if(1<=x && x<=10){ //如果x=0,满足0<=10但是不满足1<=0
printf("yes\n");//yes不会被输出
}
if(1<=x && x<=10){ //如果x=30,满足1<=30但是不满足30<=10
printf("yes\n");//yes不会被输出
}

else关键字

现在我们修改一下需求:输入一个整数,判断它是否在1~10之间,如果在输出yes,如果不在就输出no。

现在我们来分析一下这个需求的流程图。

zP2f3Q.png

我们在原来的程序上加上段printf(“no\n”);试试看。

1
2
3
4
5
6
7
8
9
10
#include<stdio.h>
int main(){
int x;//声明x变量为整数int类型
scanf("%d",&x);//运用scanf函数扫描输入值并保存在变量x中。
if(1<=x && x<=10){ //通过if判断表达式判断x是否为1-10之间的数
printf("yes\n");//如果是则输出yes
}
printf("yes\n");//输出no
return 0;
}

结果发现无论输入的数字是否在1-10之间都会输出no。不符合我们的需求,我们只需要在输入值不在1-10之间的时候输出no,此时我们就要用到else关键词了,else关键词后的语句会在if判断为否的时候执行。我们根据这条原理再来修改一下程序。

1
2
3
4
5
6
7
8
9
10
11
#include<stdio.h>
int main(){
int x;//声明x变量为整数int类型
scanf("%d",&x);//运用scanf函数扫描输入值并保存在变量x中。
if(1<=x && x<=10){ //通过if判断表达式判断x是否为1-10之间的数
printf("yes\n");//如果是则输出yes
}else{//如果if判断为否
printf("yes\n");//输出no
return 0;
}
}

现在我们的程序就完美实现了需求。

我们来总结一下if-else的基本写法:

1
2
3
4
5
if(测试条件){
条件为真时所执行的函数;
}else{
条件为假时所执行的函数;
}

有关另外一种写法

1
2
3
4
5
6
7
8
9
10
#include<stdio.h>
int main(){
int x;
scanf("%d",&x);
if(2<=x && x<=10)
printf("yes");
else
printf("no");
return 0;
}

这样的写法也可以成功运行if…else…函数,但是它和上面正常写法略有区别

1
2
3
4
5
6
7
8
9
10
11
12
#include<stdio.h>
int main(){
int x;
scanf("%d",&x);
if(2<=x && x<=10)
printf("yes");
printf("2333");
else
printf("no");
printf("2333");
return 0;
}

在部分IDE软件中上述代码会编译报错,”2333”无论如何都不会被打印,在没有大括号的情况下if…else…只能识别下方的第一行代码。即printf(“yes”);和printf(“no”);

if…else if…else…语句

现在我们给出一个新的需求:要求输入一个整数,如果数值小于2,则输出Left;如果数值在2到10之间,则输出In;如果数值大于10,则输出Right。

流程图是这样的

zV8gdH.png

我们根据上方的if…else…代码来简单分析一下if…else if…else…语句如何写

1
2
3
4
5
6
7
if(小于2){
输出Left
}else if(210之间){
输出In
}else{
输出Right
}

我们来根据这段分析来写出真正的程序

1
2
3
4
5
6
7
8
9
10
11
12
13
#include<stdio.h>
int main(){
int x;
scanf("%d",&x);
if(x<2){
printf("Left");
}else if(x>=2 && x<=10){
printf("In");
}else{
printf("Right");
}
return 0;
}

再加上注释

1
2
3
4
5
6
7
8
9
10
11
12
13
#include<stdio.h>
int main(){
int x;//声明x变量为整数int类型
scanf("%d",&x);//运用scanf函数扫描输入值并保存在变量x中
if(x<2){//if进行第一步判断x是否小于2
printf("Left");
}else if(x>=2 && x<=10){//进行第二步判断x是否在2-10之间
printf("In");
}else{//第三种可能性就是x大于10所以之间跳过if判断填写else语句
printf("Right");
}
return 0;
}