【C语言入门教程】3.3 条件控制语句
在程序的 3 种基本结构中,第二种是选择结构,选择结构是根据程序运行时获得的条件,决定程序执行情况。条件控制语句可用来实现这种结构,C 语言提供了 if 语句和 switch 语句两种条件控制语句,if 语句用于二选一的情况,而 switch 语句用于多选一的情况。
3.3.1 if 语句
if 语句通过表达式的值判读是否执行与其关联的代码,当表达式结果为 0 时,不执行关联的代码,当表达式结果为非 0 时,则执行关联的代码。使用 if 语句的格式为:
if (表达式) { 语句 }
如下例所示:
int a, b; // 声明两个整型变量 printf("请输入数值,格式为:a,b\n"); // 提示数据输入的格式 scanf("%d,%d", &a, &b); // 输入两个数值,存入变量 a 和 b 中 if (a > b) // 判读变量 a 是否大于 b { printf("数值 a 大于数值 b"); // 当变量 a 大于变量 b 时,执行此输出语句 } if (a <= b) // 判读变量 a 是否不大于 b { printf("数值 a 不大于数值 b"); }
该代码的作用是比较输入的两个变量的大小,其中使用了两组 if 语句实现,将问题分解为两种不同的条件。在这种情况下,可加入 else 语句简化代码,else 的作用是在前面的 if 条件表达式为 非0 的情况下,执行其后一组关联的代码。如下例所示:
if (a > b) { printf("数值 a 大于数值 b"); } else { printf("数值 a 不大于数值 b"); }
if 语句也可以实现多选一的条件判读。在比较两个数值的大小时,如果需要考虑两个数值相等的情况,则可以使用 else if 语句实现。如下例所示:
if (a > b) { printf("数值 a 大于数值 b"); } else if (a == b) { printf("数值 a 等于数值 b"); } else { printf("数值 a 小于数值 b"); }
if 语句可多层嵌套,即在关联代码中,包含另外的 if 语句。需要注意的是,没组 if 语句要与同一层次的 else if 语句 和 else 语句条件相对应,否则会出现程序逻辑错误。前面的数值比较问题没有判读输入数值是否合法,可加入一组 if 语句解决此问题,如下例代码所示:
if (scanf("%d,%d", &a, &b) != 2) // 根据 scanf()函数的返回值,检查输入是否为 2 个数值 { printf("输入的数值格式不合法"); } else { if (a > b) { printf("数值 a 大于 数值 b"); } else if (a == b) { printf("数值 a 等于数值 b"); } else { printf("数值 a 小于数值 b"); } }
上例利用了 scanf() 函数的返回值判读输入的数据是否合法,scanf() 函数会返回有效取得数值的个数。在第一组的 if 语句内,嵌套了比较两个变量大小的 if 语句。
注意:被嵌套的代码可增加每行前的空格缩进,这种书写习惯能提高代码的可读性,避免混淆了不同层次的条件语句。
3.3.2 switch 语句
当需要使用多选一的选择结构时,可使用 switch 语句实现相当于 if 语句与多个 else if 语句的组合,并且能实现将多个满足条件的分支执行。switch 语句的基本结构如下:
switch (表达式)
{
case 常量表达式 1 :
关联代码 1;
<break 终止命令>
case 常量表达式 2 :
关联代码 2;
<break 终止命令>
.
.
.
case 常量表达式 n :
关联代码 n;
<break 终止命令>
default : 关联代码 n+1;
}
switch 语句的表达式与 case 子语句的常量表达式进行比较。如果结果相等,则执行 case 子语句内相关联的代码。switch 语句会依次执行每个满足条件的 case 子语句,当一个 case 子语句条件满足后,如果希望终止 switch 语句的执行,可加入 break 命令。break 命令执行后,其后的 case 子语句 和 default 子语句 和 default 子子语句都被跳过。default 子语句是默认执行条件,如果没有 case 子语句满足条件,或者 执行的case 子语句没有使用 break 命令终止 switch 语句执行,则 default相关联的代码被执行。如下例所示:
int c; printf("请输入五分制成绩:"); scanf("%d", &c); switch (c) { case 5 : printf("\n成绩为 优秀"); break; case 4 : printf("\n成绩为 良好"); break; case 3 : printf("\n成绩为 及格"); break; default : printf("\n成绩为 不及格"); }
switch 语句可嵌套使用,与 if 语句一样需要注意没组语句的对应关系。另外,case 子语句必须用常量表达式作为条件,否则会造成语法错误。