十月十七日记录。
if的嵌套形式
if(表达式1)
if(表达式2) 语句块1
else 语句块2
else 语句块3
if嵌套形式的意义在于判断条件的细化、判断后可以有更多分支。
简单说就是经过一个路口选完路线后面还有一个路口可以选择路线。
条件运算符
可用“?”简化if的判断表达式。
例如:
if(a>b)
{max = a;}
else
{max = b;}
简化结果如下:
max = (a>b)?a:b;
连if都没了...
“?”可理解为对括弧内部表达式存疑并判断,判断结束后输出结果。
注意是a“比”b。
switch语句
if语句一般只有两个分支可选,实际问题中通常有更多分支需求,若用嵌套的if语句则略显凌乱与冗余,还难阅读。于是switch语句应运而生。
switch(表达式)
{
case 情况1:
语句块1;
case 情况2:
语句块2;
case 情况3:
语句块3;
.
.
.
case 情况n:
语句块n;
default:
默认情况语句块;
}
此处default表示若所有case都不满足,则只运行default。
注意情况后应加入冒号“:”。
注意switch不能加入大于号或小于号!
来个错误示范:
//依据分数段评判等级。
#include<stdio.h>
int main()
{
int grade;
printf("请输入你的分数:\n");
scanf("%d",&grade);
printf("你的评级为:");
if(0<=grade<=100)
{
switch(grade)
{
case grade>=90:
printf("A\n");
break;
case grade>=80:
printf("B\n");
break;
case grade>=60:
printf("C\n");
break;
case grade<60:
printf("D\n");
break;
default:
printf("这不是我要的内容。\n");
}
}
else
{
printf("这不是我要的内容。\n");
}
return 0;
}
这里在case内加入了大于号小于号,程序会直接报错。
注意每个语句块后应加入break以跳出语句,否则电脑会直接执行所有语句。
若想用switch比较大小,可以转换思路:
多路开关模式的switch语句
在原有的switch语句中,去除部分break,可达到多种检验结果使用一种解决方式的效果。
//依据分数段评判等级。
#include<stdio.h>
int main()
{
int grade;
printf("请输入你的分数:\n");
scanf("%d",&grade);
switch(grade)
{
case 90:
case 91:
case 92:
case 94:
case 95:
case 96:
case 97:
case 98:
case 99:
case 100:
printf("你的评级为:A\n");
break; //后续可添加更多分数值
default:
printf("这不是我要的数值");
}
return 0;
}
当然,这种方式太过繁琐,不适用于此种问题。
也可以if语句和switch语句混用,但过程比较混乱。
//尝试分数转评级
#include<stdio.h>
int main()
{
int grade,iSwitch;
printf("请输入你的分数:\n");
scanf("%d",&grade);
if(0 <= grade && grade<100) //在分数区间是(0,100]时进入第一部分循环
{
printf("你的评级为:");
iSwitch = grade % 10; //通过表达式为switch铺路
switch(iSwitch)
{
case 10:
case 9:
printf("A");
break;
case 8:
printf("B");
break;
case 7:
printf("C");
break;
case 6:
printf("D");
break;
case 5:
case 4:
case 3:
case 2:
case 0:
printf("E");
break;
default:
break;
}
}
else if(grade == 100) //表达式无法解释100就直接新加分支条件
{
printf("你的评级为:A\n");
}
else //输入内容不对则不进行计算
{
printf("这不是我要的数值。\n");
}
return 0;
}
代码较长,但思路清晰。