当谈论编程语言中的控制流语句时,C语言中的分支语句是一项基础而重要的主题。在本文中,我们将深入探讨C语言中的分支语句,包括if语句和switch语句的使用方法、示例以及它们之间的比较。此外,我们还将演示如何使用这些语句编写一个简单的程序。
前言
分支语句是编程中的关键组成部分,它们允许程序根据不同的条件执行不同的代码块。C语言提供了两种主要的分支语句:if语句和switch语句。这些语句使我们能够实现条件执行,根据特定情况来决定程序的行为。
if语句
基本使用
if语句是C语言中最基本的分支语句,用于在条件为真时执行一段代码。其基本语法如下:
if (判断条件)
{
// 在条件为真时执行的代码
}
表达式成立(为真),则语句执行,表达式不成立(为假),则语句不执行 。在C语言中,0为假,非0表示真。因此,表达式的结果如果是0,则语句不执行,表达式的结果如果不是0,则语句执行。
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if (age >= 18)
{
printf("你已经成年了!\n");
}
return 0;
}
在这个示例中,先输入你的年龄,如果年龄大于或等于18岁,程序将输出"你已经成年了!"。
else if 和 else
if语句还可以与else if 和 else一起使用,以实现多条件分支。这允许程序根据不同的条件执行不同的代码块。
if (condition1)
{
// 当condition1为真时执行的代码
}
else if (condition2)
{
// 当condition2为真时执行的代码
}
else
{
// 所有条件都不满足时执行的代码
}
示例
#include <stdio.h>
int main()
{
int score = 85;
if (score >= 90)
{
printf("优秀成绩!\n");
}
else if (score >= 70)
{
printf("良好成绩!\n");
}
else
{
printf("需要努力了!\n");
}
return 0;
}
程序使用if语句进行多条件测试,按照以下方式执行:
-
首先,检查
score >= 90
是否为真。如果分数大于或等于90,将输出"优秀成绩!"。 -
如果第一个条件不满足,程序继续检查
score >= 70
是否为真。如果分数大于或等于70,将输出"良好成绩!"。 -
如果前两个条件都不满足,程序执行else块中的代码,输出"需要努力了!"。
悬空else问题
下面先举一个简单的例子:
#include <stdio.h>
int main()
{
int x = 0;
int y = 1;
if (x == 1)
if (y == 1)
printf("Hello world!\n");
else
printf("Nice to meet you!\n");
return 0;
}
![](https://img-blog.csdnimg.cn/09df1dc1b349442199dffb53810a63be.png)
为什么呢?
这就是悬空 else 的问题,如果有多个 if 和 else ,可以记住:else 总是跟最接近 的 if 匹配。
上面的代码排版,让 else 和第⼀个 if 语句对齐,让我们以为 else 是和第一个if匹配的,当 if 语句不成立的时候,自然想到的就是执行 else 子句,打印 “Nice to meet you!” ,但实际上 else 是和第二个 if 进行匹配的,这样后边的 if...else 语句是嵌套在第⼀个 if 语句中的,如果第⼀个 if 语句就不成立,嵌套 if 和 else 就没机会执行了,最终啥都不打印。
修正后的代码:
#include <stdio.h>
int main()
{
int x = 0;
int y = 1;
if (x == 1)
{
if (y == 1)
{
printf("Hello world!\n");
}
}
else
{
printf("Nice to meet you!\n");
}
return 0;
}
运行实例:
switch语句
switch语句用于根据表达式的值选择不同的分支。它适用于在一个变量可以取多个值的情况。
基本使用
switch语句的基本语法如下:
switch (expression)
{
case value1:
// 当expression等于value1时执行的代码
break;
case value2:
// 当expression等于value2时执行的代码
break;
// 可以有更多的case分支
default:
// 如果expression不匹配任何case时执行的代码
}
示例
#include <stdio.h>
int main()
{
char grade = 'B';
switch (grade)
{
case 'A':
printf("优秀成绩!\n");
break;
case 'B':
printf("良好成绩!\n");
break;
case 'C':
printf("中等成绩!\n");
break;
default:
printf("需要努力了!\n");
}
return 0;
}
-
我们首先定义了一个字符变量
grade
,并将其值设置为'B',代表成绩等级。 -
使用switch语句对
grade
的值进行检查,按照以下方式执行:-
如果
grade
的值等于'A',程序将输出"优秀成绩!"。 -
如果
grade
的值等于'B',程序将输出"良好成绩!"。 -
如果
grade
的值等于'C',程序将输出"中等成绩!"。 -
如果
grade
的值不匹配任何上述情况,程序将执行默认(default)分支,输出"需要努力了!"。
-
在这个示例中,由于grade
的值为'B',它匹配了第二个case条件,因此程序执行第二个分支,输出"良好成绩!"。
if语句和switch语句的比较
if语句和switch语句都用于控制程序的分支流程,但它们在不同情况下更适合使用。
- 使用if语句,当条件是多样化的,每个条件需要不同的判断和执行代码时。
- 使用switch语句,当需要检查一个变量的不同取值,并且每个值需要执行不同的代码块时。
使用if和switch语句编写程序
#include <stdio.h>
int main() {
int monthNumber;
// 提示用户输入月份号码
printf("请输入月份号码(1-12):");
scanf("%d", &monthNumber);
// 使用if语句根据月份号码输出月份名称
if (monthNumber >= 1 && monthNumber <= 12) {
if (monthNumber == 1) {
printf("一月 (January)\n");
} else if (monthNumber == 2) {
printf("二月 (February)\n");
} else if (monthNumber == 3) {
printf("三月 (March)\n");
} else if (monthNumber == 4) {
printf("四月 (April)\n");
} else if (monthNumber == 5) {
printf("五月 (May)\n");
} else if (monthNumber == 6) {
printf("六月 (June)\n");
} else if (monthNumber == 7) {
printf("七月 (July)\n");
} else if (monthNumber == 8) {
printf("八月 (August)\n");
} else if (monthNumber == 9) {
printf("九月 (September)\n");
} else if (monthNumber == 10) {
printf("十月 (October)\n");
} else if (monthNumber == 11) {
printf("十一月 (November)\n");
} else {
printf("十二月 (December)\n");
}
} else {
printf("无效的月份号码,请输入1-12之间的数字。\n");
}
// 使用switch语句输出月份名称
printf("使用switch语句输出月份名称:\n");
switch (monthNumber) {
case 1:
printf("一月 (January)\n");
break;
case 2:
printf("二月 (February)\n");
break;
case 3:
printf("三月 (March)\n");
break;
case 4:
printf("四月 (April)\n");
break;
case 5:
printf("五月 (May)\n");
break;
case 6:
printf("六月 (June)\n");
break;
case 7:
printf("七月 (July)\n");
break;
case 8:
printf("八月 (August)\n");
break;
case 9:
printf("九月 (September)\n");
break;
case 10:
printf("十月 (October)\n");
break;
case 11:
printf("十一月 (November)\n");
break;
case 12:
printf("十二月 (December)\n");
break;
default:
printf("无效的月份号码,请输入1-12之间的数字。\n");
break;
}
return 0;
}
这个程序首先要求用户输入一个月份号码,然后使用if语句和switch语句分别根据月份号码输出对应的月份名称。在if语句中,我们使用多个if和else if语句来匹配不同的月份号码,然后输出相应的月份名称。在switch语句中,我们使用不同的case分支来匹配不同的月份号码,并输出对应的月份名称。如果输入的月份号码不在1到12之间,程序将输出"无效的月份号码"的消息。
结语
分支语句是C语言编程中的不可或缺的工具,它们使程序能够根据不同的条件做出不同的决策。if语句和switch语句分别适用于不同的情况,了解它们的用法和差异可以帮助您更好地编写C程序,实现所需的逻辑。无论您是初学者还是有经验的开发者,分支语句都是您的编程工具箱中必不可少的工具。希望本文对您有所帮助,欢迎继续学习和探索C语言的世界!
如果您想进一步了解C语言——循环语句,请访问:C语言——循环语句-CSDN博客