文章目录
1. 分支语句(选择结构)
C语言分为三种结构:
顺序结构
选择结构
循环结构
1.1 if语句
if(表达式)
语句1;
else
语句2;
//多分支
if(表达式1)
语句1;
else if(表达式2)
语句2;
else
语句3;
1.1.1单分支
例:
#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
if (num % 2 == 0)
printf("偶数\n");
else
printf("奇数\n");
return 0;
}
输入一个偶数,符合if后面的表达式,执行if条件下的语句
注意:
如果条件成立,只能执行一条语句,例如下面这段代码,else无法控制第二条语句printf(“非偶数\n”);
#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
if (num % 2 == 0)
printf("偶数\n");
else
printf("奇数\n");
printf("非偶数\n");
return 0;
}
若要执行多条语句,则需要使用代码块
即 {} ,此时代码块中的语句else都可以控制
#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
if (num % 2 == 0)
printf("偶数\n");
else
{
printf("奇数\n");
printf("非偶数\n");
}
return 0;
}
1.1.2多分支
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if (age < 18)
printf("未成年\n");
else if (age >= 18 && age <= 45)
printf("青年\n");
else if (age >= 46 && age <= 69)
printf("中年\n");
else
printf("老年\n");
return 0;
}
输入50,符合第三个分支条件,所以输出中年
1.1.3 else的匹配
else与离他最近的if匹配
看下面这段代码
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if (age >= 18)
if (age > 45)
printf("中年\n");
else
printf("未成年\n");
return 0;
}
else是与离它最近的if匹配,当输入30时,不满足age>45,执行else语句,输出未成年
适当的 {} 可以使代码的逻辑更清楚
上面的代码可以修改为
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if (age >= 18)
{
if (age > 45)
printf("中年\n");
}
else
printf("未成年\n");
return 0;
}
这样, else 就会与第一个 if 条件匹配
1.2 switch语句
1.2.1 语句格式
switch(整型表达式)
{
语句项;
}
语句项:
case 整形常量表达式:
语句;
1.2.2 break的作用
在switch语句中,break是退出语句的意思,搭配break才能实现真正的分支
例:
#include <stdio.h>
int main()
{
int day = 0;
scanf("%d", &day);
switch (day)
{
case 1:
printf("周一\n");
break;
case 2:
printf("周二\n");
break;
case 3:
printf("周三\n");
break;
case 4:
printf("周四\n");
break;
case 5:
printf("周五\n");
break;
case 6:
printf("周六\n");
break;
case 7:
printf("周日\n");
break;
}
return 0;
}
在输入5时,执行所对应的语句,执行完成后便退出switch语句
若没有break,则结果如下
#include <stdio.h>
int main()
{
int day = 0;
scanf("%d", &day);
switch (day)
{
case 1:
printf("周一\n");
break;
case 2:
printf("周二\n");
case 3:
printf("周三\n");
case 4:
printf("周四\n");
case 5:
printf("周五\n");
break;
case 6:
printf("周六\n");
break;
case 7:
printf("周日\n");
break;
}
return 0;
}
在输入2时,会执行相对应的语句,但在执行完成后不会退出,会一直运行到有break的地方,运行结果如下
利用break这一特性,在switch语句中,若多个条件后是同一结果,则可以简化代码
#include <stdio.h>
int main()
{
int day = 0;
scanf("%d", &day);
switch (day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("工作日\n");
break;
case 6:
case 7:
printf("休息日\n");
break;
}
return 0;
}
1.2.3 default子句
当switch语句中,所有表达的值与所有case标签的值都不匹配,并不会报错,而如果不想忽略不匹配的值时,可以使用default语句
例:
#include <stdio.h>
int main()
{
int day = 0;
scanf("%d", &day);
switch (day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("工作日\n");
break;
case 6:
case 7:
printf("休息日\n");
break;
default:
printf("输入错误\n");
break;
}
return 0;
}
输入10,与所有case标签的值都不匹配,此时执行default语句,结果如下
default语句可以放在switch语句开头,也可以放在结尾,但放在开头时一定要有break,放在结尾时可以省略