选择结构也就是条件结构和分支结构,这里,将介绍两种选择控制结构:if语句和switch语句。
if语句
1.单分支选择语句
if(表达式)
语句
在执行该语句时,应先判断表达式的值:真(非0)则执行语句,假(0)则跳过该语句。
若if后的语句不止一条时,应该加上{}
2.双分支选择语句
if (表达式)
语句组1
else
语句组2
执行该语句时,先判断表达式的值:真(非0)则执行语句1,假(0)则执行语句2。
例如:
3.多分支选择语句
if (表达式1) 语句1
else if(表达式2) 语句2
else if (表达式3) 语句3
...
else if(表达式m) 语句m
else 语句n
此外,我们应该注意,else总是和上方未配对过的最近的if配对的,与此同时配对else和if的连线不能交叉。
#include <stdio.h>
int main()
{
int x, y;
scanf("%f", &x,&y);
if (x != y)
if (x > y)
printf("x>y\n");/*注意else和它所配对的if对齐*/
else
printf("x<y\n");
else
printf("x<y\n");
return 0;
}
写代码时清晰明了的格式有助于自己或他人阅读代码,以便更好的理解。
switch语句
语法:
switch(表达式)
{
case 常量表达式1:语句1;
case 常量表达式2:语句2;
...
case 常量表达式n:语句n;
default:语句n+1;
}
在执行switch语句时,先计算表达式的值,当表达式的值与case后面的常量表达式相等时,执行此case后面的语句。
这里有一个代码:
#include <stdio.h>
int main()
{
int x;
scanf("%d",&x);
switch(x)
{
case 1:printf("Monday!\n");
case 2:printf("Tuesday!\n");
case 3:printf("Wednesday!\n");
case 4:printf("Thursday!\n");
case 5:printf("Friday!\n");
case 6:printf("Saturday!\n");
case 7:printf("Sunday!\n");
}
return 0;
}
此时,输入5时,运行结果为
出现这个情况的原因是:case常量表达式只相当于一个语句标号,表达式的值和标号相等则从该标号开始执行,不能做到在执行完该语句后跳出整个switch语句,为了解决这一问题,可以用break语句:
#include <stdio.h>
int main()
{
int x;
scanf("%d", &x);
switch (x)
{
case 1:printf("Monday!\n");break;
case 2:printf("Tuesday!\n");break;
case 3:printf("Wednesday!\n");break;
case 4:printf("Thursday!\n");break;
case 5:printf("Friday!\n");break;
case 6:printf("Saturday!\n");break;
case 7:printf("Sunday!\n");break;
}
return 0;
}
此时,输入5时运行结果为:
在这里需要注意的是,switch后面的表达式是整形表达式,case后的常量表达式也可以是字符,因为字符是以ASCII存储的。