c语言入门:分支语句
1.分支语句
分支语句是程序中一种用于根据条件执行不同代码块的结构。当某个条件满足时,程序执行与该条件相对应的代码块,否则执行其他代码块。
简单来说就是判断+选择。
首先判断条件的正误,再根据判断来选择不同的结果。
分支语句包含if语句和switch语句。
2.if语句
2.1if语句的语法形式
if语句可以大致分为单分支,双分支和多分支,这三种语法形式。
其形式为:
单分支: if(表达式) 语句
双分支:
if(表达式)
语句
else(表达式)
语句
多分支: if(表达式) 语句 else if(表达式) 语句 else(表达式) 语句
一下是三种形式的代码例子
单分支:
#include<stdio.h>
int main()
{
int age = 19;
if (age > 18)
printf("成年\n");
return 0;
}
双分支:
#include<stdio.h>
int main()
{
int age = 19;
if (age > 18)
printf("成年\n");
else
printf("未成年\n");
return 0;
}
##注意else后面不能再添加条件否则就会报错,示例:
#include<stdio.h>
int main()
{
int age = 19;
if (age > 18)
printf("成年\n");
else(age < 18)
printf("未成年\n");
return 0;
}
该代码就是错误代码。
多分支:
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if (age < 18)
{
printf("未成年");
}
else if (age >= 18 && age < 30)
{
printf("青年");
}
else if (age >= 30 && age < 50)
{
printf("中年");
}
else if (age >= 50 && age < 80)
{
printf("老年");
}
else
{
printf("老寿星");
}
return 0;
}
2.2if语句的嵌套
if语句是允许内部再嵌套多个if语句,一下是一个示例:
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if (age >= 18)
{
if (age >= 18 && age < 30)
{
printf("青年");
}
else if (age >= 30 && age < 50)
{
printf("中年");
}
else if (age >= 50 && age < 80)
{
printf("老年");
}
else
{
printf("老寿星");
}
}
else
{
printf("未成年\n");
}
return 0;
}
这段代码就是对上述多分支示例的嵌套使用 嵌套的if语句可以任意层级地嵌套,但要注意保持代码的可读性和逻辑正确性。
2.3悬空else
悬空else是指在if语句中的else语句没有对应的if语句。这种情况会导致语法错误,因为else语句必须与if语句配对使用。
以下是一个示例:
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if (a == 1)
if (b == 2)
printf("hehe\n");
else
printf("haha\n");
return 0;
}
这段代码是一个不规范的代码。
乍一看好像是else与if (a == 1)相匹配,但并非如此。在没有被{}约束条件下,else的匹配规则是于最近的if相匹配,因此这个else所匹配的应该是if (b == 2)。
该段代码本身的逻辑应该是首先检查 a 是否等于 1,如果是,则进一步检查 b 是否等于 2。如果 b 也等于 2,则打印 "hehe",否则打印 "haha"。如果 a 不等于 1,则不会执行内层的 if 语句。相当于嵌套在了if (a == 1)里面。
当然这段代码还有一种理解就是else是与if (a == 1)相匹配的,在这种情况下
应该被视为if (a == 1)后跟随的一个语句,而printf("haha\n");应该被视为else后跟随的一个语句
因此我们应根据需要使用花括号{}将if (a == 1)语句括起来。
以下是修改后两种理解的代码
第一种:
#include <stdio.h>
int main()
{
int a = 1;
int b = 2;
if (a == 1)
{
if (b == 2)
printf("hehe\n");
else
printf("haha\n");
}
return 0;
}
第二种
#include <stdio.h>
int main()
{
int a = 1;
int b = 2;
if (a == 1)
{
if (b == 2)
printf("hehe\n");
}
else
{
printf("haha\n");
}
return 0;
}
上述代码不规范的原因是因为代码编写风格出现了问题,关于如何改良代码风格可以看一下《高质量的C/C++编程》这本书。
2.4 练习
(1)写一个程序,输入一个整数,判断它是否能被 3 或 5 整除。 (2)写一个程序,输入一个年份,判断它是否为闰年。 (3)写一个程序,输入一个字符,判断它是否为大写字母。 (4)写一个程序,输入一个学生的成绩,判断他的成绩等级(优秀、良好、中等、及格、不及格)。 (5)写一个程序,输入一个三角形的三条边,判断它是否能构成一个三角形
(1):
#include <stdio.h>
int main() {
int num;
printf("请输入一个整数:");
scanf("%d", &num);
if (num % 3 == 0 || num % 5 == 0) {
printf("%d 能被 3 或 5 整除。\n", num);
} else {
printf("%d 不能被 3 或 5 整除。\n", num);
}
return 0;
}
(2):
#include <stdio.h>
int main() {
int year;
printf("请输入一个年份:");
scanf("%d", &year);
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
printf("%d 是闰年。\n", year);
} else {
printf("%d 不是闰年。\n", year);
}
return 0;
}
(3):
#include <stdio.h>
int main() {
char ch;
printf("请输入一个字符:");
scanf(" %c", &ch);
if (ch >= 'A' && ch <= 'Z') {
printf("%c 是大写字母。\n", ch);
} else {
printf("%c 不是大写字母。\n", ch);
}
return 0;
}
(4):
#include <stdio.h>
int main() {
float score;
printf("请输入学生的成绩:");
scanf("%f", &score);
if (score >= 90) {
printf("成绩等级:优秀\n");
} else if (score >= 80) {
printf("成绩等级:良好\n");
} else if (score >= 70) {
printf("成绩等级:中等\n");
} else if (score >= 60) {
printf("成绩等级:及格\n");
} else {
printf("成绩等级:不及格\n");
}
return 0;
}
(5):
#include <stdio.h>
int main() {
float a, b, c;
printf("请输入三角形的三条边:");
scanf("%f %f %f", &a, &b, &c);
if (a + b > c && a + c > b && b + c > a) {
printf("这三条边可以构成一个三角形。\n");
} else {
printf("这三条边不能构成一个三角形。\n");
}
return 0;
}
3.switch语句
在c语言中除了if语句外,switch语句也是分支语句。switch语句常常用来处理多条件的判断。
3.1适用情形
1.当需要根据一个变量或表达式的值来执行不同的操作时。 2.当有多个可能的取值,并且每个取值需要执行不同的代码块时。 3.当使用if-else语句会导致代码冗长且难以维护时,可以考虑使用switch语句来简化代码。
3.2语法形式
switch(表达式) { case常量表达式: 语句; (break); case常量表达式: 语句; (break); case常量表达式: 语句; (break); ... case常量表达式: 语句; (break); default: 语句; }
代码举例:
#include <stdio.h>
int main()
{
int day = 0;
scanf("%d", &day);
switch (day)
{
case 1:
printf("星期一\n");
case 2:
printf("星期二\n");
case 3:
printf("星期三\n");
case 4:
printf("星期四\n");
case 5:
printf("星期五\n");
case 6:
printf("星期六\n");
case 7:
printf("星期日\n");
}
return 0;
}
该段代码的本意是根据所输入的数字来判断这一天是星期几。但是该段代码有些瑕疵,通过运行可以看出。
输入3之后不仅仅出现了星期三,而且星期四,星期五,星期六,星期日都出现了。这种情况的出现是为什么呢?这就不得不提到switch语句中的一个重要语句break语句。
3.3break语句
在switch语句中,break语句的作用是终止当前case分支的执行,跳出switch语句。
拿上述代码举例,如果在每个case语句后都加上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;
}
这时,再输入相应的数字,比如说,输入3,这时结果就是星期三,而不会出现后面的星期.
因此break可以理解为,代码执行到break后,代码就不再执行剩下的case语句了,相当于跳出了该switch语句。
但该段代码还是略有瑕疵,比如说,当输入8的时候
该段代码则什么都不会打印。当然这段代码并不算错误,只不过是我们所输入的值无法与case语句相匹配,要想避免这种情况,我们就需要一个用来兜底的工具——default语句。
3.4default语句
在C语言中,default语句是switch语句的一个可选部分,它用于在所有case标签都不匹配时执行一个默认的代码块。default语句通常放在switch语句的最后,作为所有可能情况的一个兜底方案。
当所表达的值与所有case语句都不匹配时,default语句就会执行。
因此我们可以将上面的代码稍加修改
#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;
default:
printf("输入错误\n");
}
return 0;
}
这时该段代码就可以完美的执行我们所想要达到的结果了。
3.5注意事项
switch语句中default语句并不是强制绑定在最后,它可以出现在switch语句中的任何地方,这都不算是错误,但是一般情况下都建议写在最后。
此外并不是每个case语句后都要加上break,这是根据我们的需要来定的,比如说当我们想要在输入1-5时打印工作日,输入6-7时打印休息日,这时我们的代码可以这样编写:
#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");
}
return 0;
}
由此可以看出,break语句并不是跟case语句绑死的,我们要根据自己的需求,灵活的使用break语句。
3.6练习
编写一个程序,根据用户输入的成绩等级(A、B、C、D、E),输出相应的分数范围。
#include <stdio.h>
int main() {
char grade;
printf("请输入成绩等级(A、B、C、D、E):");
scanf(" %c", &grade);
switch (grade) {
case 'A':
printf("分数范围:90-100\n");
break;
case 'B':
printf("分数范围:80-89\n");
break;
case 'C':
printf("分数范围:70-79\n");
break;
case 'D':
printf("分数范围:60-69\n");
break;
case 'E':
printf("分数范围:0-59\n");
break;
default:
printf("无效的成绩等级\n");
break;
}
return 0;
}
以上就是我对分支语句的全部理解了,如有出错,请多多指正。 拜拜,我们下次再见。