C语言的选择结构有两种:if语句、switch语句
1.if语句的四种结构:
1.if(条件)
{
语句1;
语句2;
....
}
2.if(条件)
{
语句1;
语句2;
....
}
else
{
语句3;
}
3.if(条件1)
{
语句1;
语句2;
....
}
else if(条件2)
{
语句3;
语句4;
....
}
else if(条件3)
{
语句5;
语句6;
....
}
....
4.if(条件)
语句; // 此结构if语句的循环体只有其后的一句,不建议这样写,容易出错。
2.使用的注意点:
1.条件中判断是否相等时,常量一般放在左边,变量一般放在右边,如:
if(0==a) //if(a==0) 如果这样写,容易写成a=0,结果只会一直输出else中的内容
{
printf("A\n");
}
else
{
printf("B\n");
}
2.if语句后不要跟“;”,如:
if(10>6); // 代码块的定义问题,if后面加了;大括号里面的内容与之无关
{
int a=5;
}
3.变量的作用域问题,如:
if(10>6)
{
int a=5;
}
printf(%d\n",a); //此处的a会报错,因为没有定义a,大括号里面的a的作用域只限于括号内
main()
{
if(10>6)
int a=5;
} //这样也是不对的,因为a的作用域不明确.
3.几种if语句的执行效率比较:
#include <stdio.h>
int main()
{
// 1.提示输入分数值
printf("请输入分数值:\n");
// 2.接收输入
int score;
scanf("%d", &score);
// 3.判断等级
if (score>=90 && score<=100) //不能写成100>=score>=90,同等级的运算符运算顺序是从左到右的,先判断100大于score,不管结果是1还是0,此条件的最后结果都为0
{ // [90, 100]
printf("A\n");
}
else if (score>=80)
{// [80, 89]
printf("B\n");
}
else if (score>=70)
{ // [70, 79]
printf("C\n");
}
else if (score>=60)
{ // [60, 69]
printf("D\n");
}
else
{
printf("E\n");
}
//另一种
if (score>=90 && score<=100)
{ // [90, 100]
printf("A\n");
}
else if (score>=80 && score<=89)
{ // [80, 89]
printf("B\n");
}
else if (score>=70 && score<=79)
{ // [70, 79]
printf("C\n");
}
else if (score>=60 && score<=69)
{ // [60, 69]
printf("D\n");
}
else
{
printf("E\n");
}
//另一种
if (score>=90 && score<=100)
{ // [90, 100]
printf("A\n");
}
if (score>=80 && score<=89)
{ // [80, 89]
printf("B\n");
}
if (score>=70 && score<=79)
{ // [70, 79]
printf("C\n");
}
if (score>=60 && score<=69)
{ // [60, 69]
printf("D\n");
}
if (score<=59)
{
printf("E\n");
}
return 0;
}
其中最后一种的执行效率最差,因为每个if语句都判断,第一种执行效率最高,判断条件少。
4.switch选择结构
switch(数值)
{
case 数值1:
语句1;
break;
case 数值1:
语句2;
break;
case 数值1:
语句3;
break;
default:
语句4;
break;
}
break的作用是退出整个switch语句,如果case后面没有break,程序就会执行后面所有case中的语句,直到遇到break为止,如:
switch(10)
{
case 10:
printf("A\n");
case 5:
printf("B\n");
case 2:
printf("C\n");
break;
default:
printf("D\n");
break;
} //此语句会输出A和B。
switch(10)
{
case 10:
case 9: // 可以这样写,表示a的值为9和10都输出A
printf("A\n");
case 5:
printf("B\n");
case 2:
printf("C\n");
break;
default:
printf("D\n");
break;
}
此外,如果要在case分支语句里定义新的变量,必须使用大括号,这样才能避免作用域不明确的问题。