switch 是“开关”的意思,它也是一种“选择”语句,但它的用法非常简单。
switch 是多分支选择语句。说得通俗点,多分支就是多个 if。
首先我们要了解到switch语句的格式:
switch( t )//表达式,注意此处必须是整数类型int/char/整数/字符常量
{
case 1 ://此处1为常数,也可以是常量表达式
printf("Hello World");//语句1
break;
case 2 :
printf("你好啊");//语句2
break;
default:
printf("没有对应的情况");//如果没有在前面找到对应的值就会跳转到这里
}
switch语句可以看作是一种基于计算的跳转 计算控制表达式的值后程序会跳转到相匹配的case(分支标号)处
执行完分支中的最后一条语句后如果后面没有break
就会顺序执行到下面的case里去直到遇到下一个break/switch结束为止
那么,如果我们在每个 case 常量表达式 : 语句 后面没有添加break用来终止循环语句它就会自动读取到最后一种情况,直至结束。那么我们是否可以运用这一特性用于进行一些数据量较少的,但难于计算的情况呢?
答案当然是可以的,下面我们来举个例子:
这道题的题目是:输入年月日,然后根据这给出的年月日计算出这一天是对应这一年中的第几天。
#include<stdio.h>
int main() {
int a, b, c = 0;
printf("O.O请依次输入年月日:\n");
scanf_s("%d %d %d", &a, &b ,&c);
//数据年月日的输入
//a对应年,b对应月,c对应日
int j = 0;
switch(b) {
case 12: j += 31;
case 11: j += 30;
case 10: j += 31;
case 9: j += 30;
case 8: j += 31;
case 7: j += 31;
case 6: j += 30;
case 5: j += 31;
case 4: j += 30;
case 3: j += 31;
case 2: j += 28;
case 1: j += c;
break;
}//这一段switch语句用于列举一年中的每一个月的情况(每一个月有多少天)
//当b=1时需要加上的是当月的天数
//如果考虑到会胡乱输入的话可以加上'default :'
int i = a % 4;
//考虑到有闰年的存在,4年一闰年,年份能整除4的为闰年
//但后续条件需要加入不能被100整除,但能被400整除
if (b >= 3 &&i == 0 &&a % 100 != 0 || a % 400 == 0 ) {
//限定条件月份大于3且为闰年(b恰巧为2时依旧是不影响)
//不能被100整除,但能被400整除
printf("%d年是闰年\n", a);
int x = j++;
printf("这一天是在%d年的第%d日\n", a,x);
}
else {
printf("这一天是在%d年的第%d日\n",a,j);
}
return 0;
}
上面我们可以看到switch语句中没有’break’来中断这一段循环语句,它带来的的是,当你输入月份后(也就是给b赋值后)他会跳转到到b的值所对应的那种情况,然后一直运行一直给j重新赋值(一直做加法),直至‘{}’中的语句结束为止。这样就达到了叠加的效果。
执行:
最后:
1.switch语句最好用于数据比较少的情况。(个人理解)
2.对于初学者来说这是解决这种题目比较好的方法,到后面还会学到其他的语句,去更好的方法来解决这类问题。
3.做这个的话是考虑到很多老师都不会讲到这里,不会去教学生怎样去合理的运用这种错误去合理的运用。
4.我也是c语言的一枚小菜,这也是我的第一篇文章,不喜勿喷,请及时告知我的错误也会虚心听取的。