C语言的选择语句允许程序在一组选项中选择一条特定的执行路径。C语言包括两类选择语句,if
语句和switch
语句。
if
语句
if
语句通过测试表达式的值从两种选项中选择一种,if语句的一般形式为:
if (表达式)
语句
其中表达式的括号是必须的。
if
语句的执行步骤是先计算圆括号内表达式的值,如果表达式的值非零,则结果为真,执行圆括号后面的语句。注意区分关系运算符中的==
和赋值运算符,因为在C语言中两则可以同时作为if
语句的表达式但具有完全不同的意义,出现这种情况时gcc
编译器在开启-Wall
选项会产生警告。
/**************************************
* using_if_1.c *
* *
* C语言中的if语句-基础 *
**************************************/
#include <stdio.h>
int main()
{
int i = 3;
int j = 5;
if (i < j)
printf("%d比%d小\n", i, j);
/*赋值表达式i=5结果为5,为真,执行printf语句*/
if (i = 5)
printf("赋值表达式作if语句表达式\n");
/*关系表达式j == 5结果为1, 为真,执行printf语句*/
if (j == 5)
printf("关系表达式作if语句表达式\n");
return 0;
}
if
语句中可以包含else
子语句,表示在圆括号内的表达式值为零时,执行else
后面的语句,其基本形式如下:
if (表达式)
语句
else
语句
if
语言内部的语句可以是C语言支持的任何类型的语句,包括if
语句本身,并且对嵌套层次没有限制。内部语句通常采用缩进形式。当嵌套层次造成程序混乱,像在表达式中使用圆括号一样使用大括号{}
。
当在else
语句的子语句中嵌套另一个if
语句时,一般不对它进行缩进,而是把每个else
都与最初的if
对齐,形成级联式if
语句的书写形式,这种形式可以避免判定数量过多时造成的过度缩进问题,同时也更清晰地显示这是一连串的判定:
if (表达式)
语句
else if (表达式)
语句
else if (表达式)
语句
else
语句
/*************************************
* using_if_2.c *
* *
* C语言if语句的else子语句及级联式if *
*************************************/
#include <stdio.h>
int main()
{
int i = 0;
scanf("%d", &i);
if (i % 2 == 0)
printf("%d是偶数\n", i);
else
printf("%d是奇数\n", i);
if (i < 0)
printf("%d < 0", i);
else if (i < 100)
printf("0 <= %d < 100\n", i);
else
printf("%d > 100\n", i);
return 0;
}
switch
语句
在编程中,常常需要把表达式和一组值相比较,从中找到匹配项,执行相应的语句。级联式if
语句可以实现这个需求,但是对于整型的表达式值和可选项来说,C语言提供了switch
语句。switch
语句比级联式if
更易读,并且执行速度往往比较快。
switch语句的常用格式是:
switch (表达式)
{
case 常量表达式:
多条语句
...
case 常量表达式:
多条语句
default:
多条语句
}
switch
语句由以下三部分组成:
- 控制表达式 。
switch
后面跟的由圆括号括起来的整型表达式称为控制表达式,该表达式的结果必须是整型或是字符型。 - 情况标号。每一种情况以
case 常量表达式 :
开始,常量表达式不能包含变量及函数调用,且结果必须为整数值。case
后面只能跟一个常量表达式,但多个情况标号可以放在同一组语句前面,表示对多组情况执行同一组语句。 - 语句。情况标号后面可跟任意数量的语句,不需要用大括号把这些语句括起来,且最后一条语句通常是
break
语句。在switch
语句中,执行break
语句时,程序会跳出switch
语句,而继续执行switch
语句后面的语句。忘记’break’语句,程序就会继续执行下面情况的语句,也是编程时常犯的错误。
C语言不允许重复的情况标号,但不要求情况的顺序,default
情况可以不放在最后。也不要求必须有default
情况,若在没有default
的情况下且所有情况都不匹配,就就直接传给switch
语句后面的语句。
/*************************************
* using_switch.c *
* *
* C语言中的switch语句 *
*************************************/
#include <stdio.h>
int main()
{
char score = '\0';
printf("Please enter your score:\n");
scanf("%c", &score);
switch (score)
{
case 'A':
case 'B':
case 'c':
case 'D':
printf("Congratulations! You passed\n");
break;
case 'E':
printf("Sorry, You failed\n");
break;
default:
printf("Wrong score!\n");
break;
}
return 0;
}
参考文献
- K.N. King 著,吕秀峰 译. C语言程序设计-现代方法. 人民邮电出版社