前面我们看到的代码都是顺序执行的,也就是先执行第一条语句,然后是第二条、第三条……一直到最后一条语句,这称为顺序结构。
但是对于很多情况,顺序结构的代码是远远不够的,比如一个程序限制了只能成年人使用,儿童因为年龄不够,没有权限使用。这时候程序就需要做出判断,看用户是否是成年人,并给出提示。
在C语言中,选择结构主要有下面几种:
- if:简单的逻辑判断
- if-else:二选一结构
- if-else if:多选一结构
- switch:等值多选一
C 语言把任何非零和非空的值假定为 true,把零或 null 假定为 false。
if 语句
C 语言中 if 语句的语法:
if(boolean_expression) {
/* 如果表达式为真将执行的语句 */
}
实例:
#include <stdio.h>
int main ()
{
/* 局部变量定义 */
int a = 10;
/* 使用 if 语句检查布尔条件 */
if( a < 20 ) {
/* 如果条件为真,则输出下面的语句 */
printf("a 小于 20\n" );
}
printf("a 的值是 %d\n", a);
return 0;
}
结果:
a 小于 20
a 的值是 10
if-else 语句
C 语言中 if-else 语句的语法:
if(boolean_expression) {
/* 如果布尔表达式为真将执行的语句 */
} else {
/* 如果布尔表达式为假将执行的语句 */
}
如果布尔表达式为 true,则执行 if 块内的代码。如果布尔表达式为 false,则执行 else 块内的代码。
实例:
#include <stdio.h>
int main ()
{
int a = 100;
if( a < 20 ) {
printf("a 小于 20\n" );
} else {
printf("a 大于 20\n" );
}
printf("a 的值是 %d\n", a);
return 0;
}
结果:
a 大于 20
a 的值是 100
if-else if 语句
当使用 if-else if 语句时,以下几点需要注意:
- 一个 if 后可跟零个或多个 else if
- 一旦某个 else if 匹配成功,其他的 else if 或 else 将不会被执行
C 语言中的 if-else if 语句的语法:
if(boolean_expression 1) {
/* 当布尔表达式 1 为真时执行 */
} else if( boolean_expression 2) {
/* 当布尔表达式 2 为真时执行 */
} else if( boolean_expression 3) {
/* 当布尔表达式 3 为真时执行 */
} else {
/* 当上面条件都不为真时执行 */
}
实例:
#include <stdio.h>
int main () {
int a = 100;
if( a == 10 ) {
printf("a 的值是 10\n" );
} else if( a == 20 ) {
printf("a 的值是 20\n" );
} else if( a == 30 ) {
printf("a 的值是 30\n" );
} else {
printf("没有匹配的值\n" );
}
printf("a 的准确值是 %d\n", a );
return 0;
}
结果:
没有匹配的值
a 的准确值是 100
switch 语句
一个 switch 语句允许测试一个变量等于多个值时的情况。每个值称为一个 case,且被测试的变量会对每个 switch case 进行检查。
C 语言中 switch 语句的语法:
switch(expression){
case constant-expression :
statement(s);
break;
case constant-expression :
statement(s);
break;
default :
statement(s);
break;
}
switch 语句必须遵循下面的规则:
- switch 语句中的 expression 是一个常量表达式,必须是一个整型或枚举类型。
- 在一个 switch 中可以有任意数量的 case 语句。每个 case 后跟一个要比较的值和一个冒号。
- case 的 constant-expression 必须与 switch 中的变量具有相同的数据类型,且必须是一个常量或字面量。
- 当遇到 break 语句时,switch 终止,控制流将跳转到 switch 语句后的代码。
- 不是每一个 case 都需要包含 break。如果 case 语句不包含 break,控制流将会执行后面的 case,直到遇到 break 为止。
- 一个 switch 语句可以有一个可选的 default,出现在 switch 的结尾。default 可用于在上面所有 case 都不匹配时执行一个任务。
实例:
#include <stdio.h>
int main ()
{
/* 局部变量定义 */
char grade = 'B';
switch(grade)
{
case 'A' :
printf("很棒!\n" );
break;
case 'B' :
case 'C' :
printf("做得好\n" );
break;
case 'D' :
printf("您通过了\n" );
break;
case 'F' :
printf("最好再试一下\n" );
break;
default :
printf("无效的成绩\n" );
}
printf("您的成绩是 %c\n", grade );
return 0;
}
结果:
做得好
您的成绩是 B