目录
1、if语句
形式一:一个条件,一个结果或没有结果
//格式:
if(表达式)
{
语句体;
}
格式说明:表达式运算的结果要么为真(非0),要么为假(0)
执行过程:
1.先执行表达式,看它的结果是真还是假
2.如果表达式的值为真,就执行语句体,然后结束if语句
3.如果表达式的值为假,不执行语句体,然后结束if语句
//例:如果小明的成绩达到80分,小明妈妈就带他去看电影
#include<stdio.h>
int main()
{
int score;
printf("请输入小明的成绩:");
scanf("%d",&score);
if(score>=80)
{
printf("小明去看电影啦!\n");
}
return 0;
}
形式二:一个条件,两个结果中的一个结果
//格式
if(表达式)
{
表达式1;
}
else
{
表达式2;
}
格式说明:表达式运算的结果要么为真(非0),要么为假(0)
执行过程:
1.先执行表达式,看它的结果是真还是假
2.如果表达式的值为真,就执行语句体1,然后结束i语句
3.如果表达式的值为假,就执行语句体2,然后结束if语句
//例:小明考试成绩如果达到60分,小明就可以去看电影,否则小明就要被打屁股
#include<stdio.h>
int main()
{
int score;
printf("请输入小明的考试成绩:");
scanf("%d",&score);
if(score >= 60)
{
printf("小明去看电影啦!\n");
}
else
{
printf("小明被妈妈打屁股啦!正在家里学习呢!\n");
}
return 0;
}
形式三:n个条件,n个结果中的一个结果
//格式
if(表达式1)
{
语句体1;
}
else if(表达式2)
{
语句体2;
}
. . . . . .
. . . . . .
. . . . . .
else if(表达式n-1)
{
语句体n-1;
}
else
{
语句体n;
}
格式说明:表达式1~n:运算的结果要么为真(非0),要么为假(0)
执行过程:
1.先执行表达式1,看它的结果是真还是假
2.如果为真,则执行语句体1,if语句结束
3.如果为假,就执行表达式2,看它的结果是真还是假;
4.如果表达式2的结果为真,就执行语句体2,if让语句结束
5.如果表达式2的结果为假,就执行表达式3,看它的结果是真还是假
......依次类推
6.如果表达式n1的值为真,就执行语句体n1,if语句结束
7.如果以上所有表达式都为假,就直接执行语句休n,if语句结束
/*小明爸爸说:小明你如果考试及格,就带你去看电影
如果考试成绩在70~79分,就带你去游乐场游玩
如果考试成绩在80~89分,就带你去迪士尼游玩
如果考试成绩在90~100处,就带你去新马泰游玩
否则就打屁股*/
#include<stdio.h>
int main()
{
int score;
printf("请输入小明的考试成绩:\n");
scanf("%d",&score);
if(score >= 60 && score < 70)
{
printf("小明去看电影啦!\n");
}
else if(score >=70 && score < 80)
{
printf("小明去游乐场玩啦!\n");
}
else if(score >= 80 && score < 90)
{
printf("小明去迪士尼玩啦!\n");
}
else if(score >= 90 && score <= 100)
{
printf("小明去新马泰玩去啦!\n");
}
else
{
printf("小明被打屁股啦!\n");
}
return 0;
}
总结:
1.if语句可以嵌套
2.if语句的第二种和三种形式,else和它后面的人括号可以一起省略
3.if语句的格式二和三元运算表达式可以互相转换
2、switch语句
使用场景:
1.如果条件和结果是有限多个,并且条件是固定的一些常量,我们可以考虑使用switch语句
2.switch语句可以转换成if语句----if语句是最常用
//switch代码的格式
switch(表达式)
{
case 常量1:
语句体1;
break;
case 常量2:
语句体2;
break;
...
case 常量n-1:
语句体n-1;
break;
default:
语句体n;
break;//(可选择是否添加)
}
格式说明:
1.表达式一般写一个变量, 变量的值是一个确定的常量
2.当遇到break或者switch语句的右大括号时,switch语句结束
3.表达式中的数据类型: char, short, int , long, long long ; 但不能是浮点数
//输入一个数字,打印这个数字对应的是星期几(输入1,输出星期一...输入7,输出星期天)
#include<stdio.h>
int main()
{
int num;
printf("请输入1~7中的一个数值:");
scanf("%d",&num);
switch(num)
{
case 1 : printf("星期一\n");break;
case 2 : printf("星期一\n");break;
case 3 : printf("星期一\n");break;
case 4 : printf("星期一\n");break;
case 5 : printf("星期一\n");break;
case 6 : printf("星期一\n");break;
case 7 : printf("星期一\n");break;
default : printf("输入有误!\n");break;
}
return 0;
}
switch语句的case穿透现象:
当case后的break被省略,就会直接执行它后面紧跟的case中的语句体(不会判断表达式是否和它后面的case常量是否相同)
default语句执行的条件:当所有的case都不成立时,才执行default语句,default语句一般写在所有case之后,但它是可以写到case之前或者中间;如果default没有放在最后,它的break不能省略,否则会case穿透
总结:
1.switch语句有局限性,switch语句可以转换成if语语句,但不是所有的if语句都能转换成switch语句
2.switch语句常常用在对有限多个常量判断相同是使用
3、举例
尝试分别用if语句和switch实现以下需求
根据成绩输入等级
90~99 A 80~89 B 70~79 C 60~69 D 0~59 E
#include<stdio.h>
int main()
{
int score;
printf("请输入成绩:");
scanf("%d",&score);
//switch语句实现
printf("switch语句实现结果:");
switch(score/10)
{
case 0 :
case 1 :
case 2 :
case 3 :
case 4 :
case 5 : printf("E\n");break;
case 6 : printf("D\n");break;
case 7 : printf("C\n");break;
case 8 : printf("B\n");break;
case 9 :
case 10: printf("A\n");break;
default: printf("输入分数有误\n");break;
}
//if-else语句实现结果
printf("if-else语句实现结果:");
if(score>=0&&score<60)printf("E\n");
else if(score>=60&&score<70)printf("D\n");
else if(score>=70&&score<80)printf("C\n");
else if(score>=80&&score<90)printf("B\n");
else if(score>=90&&score<=100)printf("A\n");
else printf("输入分数有误\n");
return 0;
}