#include <stdio.h>
void print_day(int day)
{
switch(day){
case 1:
printf("Monday\n");
break;
case 2:
printf("Tuesday\n");
break;
case 3:
printf("Wednesday\n");
break;
case 4:
printf("Thursday\n");
break;
case 5:
printf("Friday\n");
break;
case 6:
printf("Saturday\n");
break;
case 7:
printf("Sunday\n");
default:
printf("Illegal day number!\n");
break;
}
}
int main(void)
{
print_day(2);
return 0;
}
以上是使用switch语句实现;C语言规定各case
分支的常量表达式必须互不相同,如果控制表达式不等于任何一个常量表达式,则从default
分支开始执行,通常把default
分支写在最后,但不是必须的。
#include <stdio.h>
void print_day(int day)
{
char days[8][10] = { "", "Monday", "Tuesday",
"Wednesday", "Thursday", "Friday",
"Saturday", "Sunday" };
if (day < 1 || day > 7)
printf("Illegal day number!\n");
printf("%s\n", days[day]);
}
int main(void)
{
print_day(2);
return 0;
}
这个程序中定义了一个多维字符数组char days[8][10];
,为了使1~7刚好映射到days[1]~days[7]
,我们把days[0]
空出来不用,所以第一维的长度是8,为了使最长的字符串"Wednesday"
能够保存到一行,末尾还能多出一个Null字符的位置,所以第二维的长度是10。
这两个程序的功能是一样的,但是后者代码简洁多了。通过下标访问字符串组成的数组可以代替一堆case
分支判断,这样就可以把每个case
里重复的代码(printf
调用)提取出来,从而又一次达到了“提取公因式”的效果。
写代码最重要的是选择正确的数据结构来组织信息,设计控制流程和算法尚在其次,只要数据结构选择得正确,其它代码自然而然就变得容易理解和维护了。