之前我在编写个代码的时候是把它用大量的if逻辑判断语句,我并没有把是闰年这个条件选择出来,只是依据一般的想法——
#include <stdio.h>
#define M 13
int main()
{/********** Begin **********/int days[M] = {0,31,28,31,30,31,30,31,31,30,31,30,31}; //按人的习惯从1开始int year,month,day,sum=0,i;scanf("%d %d %d", &year,&month,&day);if((year%4==0&&year%100!=0)||(year%400==0)){days[2]=29;if(month>=2) for(i=1;i<month;i++) sum+=days[i];else sum=day;}else{if(month<2)sum=day;else{for(i=1;i<month;i++)sum+=days[i];}}sum=sum+day;printf("这一天是这一年的第%d天",sum);/********** End **********/return 0;
}
我并没有想到把是不是闰年这一条件给反到一旁分开判断和补齐,而是简单粗暴的把月份分成了>2和<2。
谭浩强的代码就比我的要好多了这个代码的运行效率极高。
我按照自己的想法非得先判断是闰年与否才开始计算,十分繁琐。我从这学到——编写代码要把大同的数据让计算机一并处理,再去处理唯一的特殊情况,这比便判断。同时可以依据不同的程序机构来编写。把它们作为主体。这样程序不仅仅是在可重复使用上对用户的方便更是对编写代码者的方便(虽然二者经常会被搞混)。就是把for循环while循环等基础结构用到极致,把一切都尽可能地包含进去,特殊情况再分开处理。