switchcase语句: #include <stdio.h>
/*
知识点:1.switch括号里只输入变量名,满足条件值写在case后(带空格)
2.case语句放在switch里面,而if-else语句则是并行,else不在if语句里面
3.使用switchcase语句时要搭配break使用,否则所有不含break的case输出语句都会输出
4.break只是跳出switchcase语句,switchcase后面的语句会依然执行,
而return -1则是程序提前结束,后面的所有语句均不会执行
参考该程序:puts("运行结束");这一句
5.当需要输入字符并且在这之前还要输入其它内容时,需要考虑回车字符吸收情况
6.defualt在switch{}里面使用,与case书写格式相同,并且default可以不用,程序不会出错
7.switch括号里必须添加变量名
*/
int main()
{
int idata;
char cdata;
puts("请输入一个数:");
scanf("%d",&idata);
switch(idata)
{ //case和变量值之间要有空格
case 99: //若为char型,则这里用 case '字母'格式(注意要有单引号)
puts("满足条件99");
break; //如果没用break,则会从满足条件的puts输出开始,
//一直输出到含有break的那个puts语句结束
case 100:
case 101: //用来表示同时满足两种情况,将两个case放在一起共同使用一个puts
puts("满足条件100或101");
break;
default: //default不使用也不会出错
puts("满足其它条件");
}
getchar(); //吸收回车字符,因为输入数字后会按回车,此时回车被scanf当作字符输入从而满足default条件
puts("请输入一个字符:");
// getchar(); //放在这一行也可以
scanf("%c",&cdata);
switch(cdata)
{
case 'a':
case 'b':
puts("满足a或b的情况");
break;
default:
puts("满足其它情况");
}
puts("运行结束");
return 0;
}
错误情况:(针对第一个switch即int型)(只有case 99没有使用break)
D:\C语言\code\第三章>gcc test_switchcase.c
D:\C语言\code\第三章>a.exe
请输入一个数:
99
满足条件99 //case 99没有使用break,后面会继续输出
满足条件100或101 //因为100和101用了break,因此后面不会输出
运行结束
错误情况:(没有使用getchar吸收回车)
D:\C语言\code\第三章>gcc test_switchcase.c
D:\C语言\code\第三章>a.exe
请输入一个数:
99
满足条件99
请输入一个字符:
满足其它情况 //输入数字后按动回车,此时回车被scanf当作字符输入,因此需要吸收
运行结束
正确编译:
D:\C语言\code\第三章>gcc test_switchcase.c
D:\C语言\code\第三章>a.exe
请输入一个数:
2
满足其它条件
请输入一个字符:
b
满足a或b的情况
运行结束
switchcase练习:学生成绩等级划分
#include <stdio.h>
//例:学生成绩分类(90分以上为A等,70-89为B等,60-69分为C等,其余不及格)
/*
知识点:将switchcase里的输入值除以一个数以缩小判断范围
*/
int main()
{
int grade;
puts("请输入学生的成绩:");
scanf("%d",&grade);
switch(grade/10) //将成绩除以10,将判断条件限制在0-10缩小范围
{
case 10:
puts("满分,你太牛了");
break;
case 9:
// case 8: //case里不能出现两个相同的条件(两个case 8),否则编译错误
puts("你的等级为A");
break;
case 8:
case 7:
puts("你的等级为B");
break;
case 6:
puts("你的等级为C");
break;
//方法一:
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
puts("不及格,还需要努力");
break;
/*
//方法二: //不使用default也可以,不会出错
default:
puts("不及格,还需要努力");
}
*/
puts("程序结束");
return 0;
}
D:\C语言\code\第三章>a.exe
请输入学生的成绩:
0
不及格,还需要努力
程序结束
D:\C语言\code\第三章>a.exe
请输入学生的成绩:
59
不及格,还需要努力
程序结束
D:\C语言\code\第三章>
D:\C语言\code\第三章>a.exe
请输入学生的成绩:
60
你的等级为C
程序结束
D:\C语言\code\第三章>a.exe
请输入学生的成绩:
100
满分,你太牛了
程序结束
#include <stdio.h>
//题目:根据路程算折扣 s<250 没有,250<=s<500 2%折扣,500<=s<1000 5%,
// 1000<=s<2000 8%,2000<=s<3000 10%,s>=3000 15%
int main()
{
int discount;
int route;
puts("请输入路程:");
scanf("%d",&route);
//方法一:
if(route>=250)
{
if(route>=500)
{
if(route>=1000)
{
if(route>=2000)
{
if(route>=3000)
{
puts("方法一discount=15%");
}else{
puts("方法一discount=10%");
}
}else{
puts("方法一discount=8%");
}
}else{
puts("方法一discount=5%");
}
}else{
puts("方法一discount=2%");
}
}else{
puts("方法一discount=0");
}
//方法二:
if(route<250)
{
puts("方法二discount=0");
}
if(route>=250 && route<500)
{
puts("方法二discount=2%");
}
if(route>=500 && route<1000)
{
puts("方法二discount=5%");
}
if(route>=1000 && route<2000)
{
puts("方法二discount=8%");
}
if(route>=2000 && route<3000)
{
puts("方法二discount=10%");
}
if(route>=3000)
{
puts("方法二discount=15%");
}
//方法三:
if(route<250)
{
puts("方法三discount=0");
}else if(route>=250 && route<500)
{
puts("方法三discount=2%");
}else if(route>=500 && route<1000)
{
puts("方法三discount=5%");
}else if(route>=1000 && route<2000)
{
puts("方法三discount=8%");
}else if(route>=2000 && route<3000)
{
puts("方法三discount=10%");
}else
{
puts("方法三discount=15%");
}
//方法四:
switch(route/250)
{
case 0:
puts("方法四discount=0");
break;
case 1:
puts("方法四discount=2%");
break;
case 2:
case 3:
puts("方法四discount=5%");
break;
case 4:
case 5:
case 6:
case 7:
puts("方法四discount=8%");
break;
case 8:
case 9:
case 10:
case 11:
puts("方法四discount=10%");
break;
default:
puts("方法四discount=15%");
break;
}
puts("计算结束");
return 0;
}
D:\C语言\code\第三章>gcc ex6_if_switch.c
D:\C语言\code\第三章>a.exe
请输入路程:
0
方法一discount=0
方法二discount=0
方法三discount=0
方法四discount=0
计算结束
D:\C语言\code\第三章>a.exe
请输入路程:
1000
方法一discount=8%
方法二discount=8%
方法三discount=8%
方法四discount=8%
计算结束
D:\C语言\code\第三章>a.exe
请输入路程:
9999
方法一discount=15%
方法二discount=15%
方法三discount=15%
方法四discount=15%
计算结束
练习:写程序,输入x输出对应y #include <stdio.h>
//题目:写程序,输入x输出对应y,y=x(x<1),y=2x-1(1<=x<10),y=3x(x>=10)
int main()
{
int x;
int y;
puts("请输入x的值:");
scanf("%d",&x);
//方法一:
if(x<1)
{
// y=x; //用这种表达式,然后将printf后面写成y也可
printf("方法一y=%d\n",x);
}else if(x>=1 && x<10)
{
// y=2*x-1; //注:在使用函数表达式时,要用+ - * / 符号表示
printf("方法一y=%d\n",2*x-1);
}else
{
// y=3*x;
printf("方法一y=%d\n",3*x);
}
//方法二:
switch(x) //括号内必须加所要输入的变量名
{
case 0:
printf("方法二y=%d\n",x);
break; //不加break则会一直输出到含有break的语句才停止
case 1: //例如:请输入x的值:
case 2: // 0
case 3: // 方法一y=0
case 4: // 方法二y=0
case 5: // 方法二y=-1
case 6: // 方法二y=0
case 7: // 输出结束
case 8:
case 9:
printf("方法二y=%d\n",2*x-1);
break;
default: //default语句作为switch最后一句可以不加break
printf("方法二y=%d\n",3*x);
}
puts("输出结束");
return 0;
}
D:\C语言\code\第三章>gcc ex7_if_switch.c
D:\C语言\code\第三章>a.exe
请输入x的值:
0
方法一y=0
方法二y=0
输出结束
D:\C语言\code\第三章>a.exe
请输入x的值:
5
方法一y=9
方法二y=9
输出结束
D:\C语言\code\第三章>a.exe
请输入x的值:
99
方法一y=297
方法二y=297
输出结束