大家都知道,break的作用就是终止它所在的switch语句后循环语句的执行。在这里呢,我们不去探讨break在循环里的终止作用,也不去回忆在循环里是跳出本层循环,不去研究它与continue或者return的区别。在这里,我们简简单单的谈一下,它在switch语句中的利用。
有这样一道编程题目:输入某年某月某日三个值,判断这是这一年的第几天。一般的情况,我们会这样写代码:
#include<stdio.h> void main() { int year,month,day,num; printf("请任意输入年月日:"); scanf("%d,%d,%d",&year,&month,&day); switch(month) { case 1:num=day; break ; case 2:num=31+day; break; case 3:num=day+28+31; break; case 4:num=day+28+31+30; break; case 5:num=day+28+31+30+31; break; case 6:num=day+28+31+30+31+30; break; case 7:num=day+28+31+30+31+30+31; break; case 8:num=day+28+31+30+31+30+31+31; break; case 9:num=day+28+31+30+31+30+31+31+30; break; case 10:num=day+28+31+30+31+30+31+31+30+31; break; case 11:num=day+28+31+30+31+30+31+31+30+31+30; break; case 12:num=day+28+31+30+31+30+31+31+30+31+30+31; break; } if((year%4==0&&year%100!=0)||(year%400==0)) { if(num>31+28) num=num+1; } printf("输出的年月日为这一年的第%d天\n",num); }
code1
上述代码的基本思想就是先不考虑闰年和平年,以月为switch执行的判断式,逐月累加,得到结果,最后再判断闰年,天数加1.上述代码呢,也无所谓不好,但是case语句下,越到后面重复越多,累加效果月明显。那么,我们就可以这样考虑,放弃break的跳出功能,每一月都是在上一个月的基础上,加上上一月对应的天数。这样,我们便得到的下面的代码:
#include <stdio.h> void main() { int year,month,date,day = 0; printf("请输入年月日,用逗号分隔:"); scanf("%d,%d,%d",&year,&month,&date); switch(month) { case 12: day += 30; case 11: day += 31; case 10: day += 30; case 9: day += 31; case 8: day += 31; case 7: day += 30; case 6: day += 31; case 5: day += 30; case 4: day += 31; case 3: day += 28; case 2: day += 31; case 1: day += date; } if(month > 2) { if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) { day += 1; } } printf("这是该年的第%d天\n",day); }
Code2
代码相比上面的,简洁不少。而且,巧用break也是你的代码较之他人有不同之处。这样的小技巧,在我们平时的代码中,应该多思考思考。
时间: 2024-12-18 04:22:36