输入年月日 判断这是一年中的第几天
对于求某日为一年中第几天的问题,在解决过程中,我很受启发,本篇博客用于记录一些简单的思路,并对这一问题做一个简单笔记。
所用知识点:分支结构、循环的嵌套、条件 关系运算符
#include<stdio.h>
int main()
{
int year,month,day,sum,i;
scanf("%d %d %d",&year,&month,&day);
if(year%4!=0)*//确定以下年份不是闰年*
{
sum=0;
for(i=1;i<=month;i++)
{
sum=sum+31;*//把月份小于month的按31天累加*
}
if(month==1)
sum=sum-31+day;*//月数为一个月时 减去首先加的31天 加上日数*
else
sum=sum-month/2-(month>2)*2-30+day;*//月数不为一月时,每两月减去一天,当月份数大于二时减去两天*
printf("日数为%d天",sum);
}
if(year%4==0&&year%100!=0)*//确认年份为闰年*
{
sum=0;
for(i=1;i<=month;i++)
{
sum=sum+31;
}
if(month==1)
sum=sum-31+day;
else
sum=sum-month/2-(month>2)*1-30+day;*//当月份数大于二时仅减去一天*
printf("日数为%d天",sum);
}
return 0;
}
通过以上代码可以解决求任意日期为该年的多少天的问题,在完善本代码的过程中受到较多困扰的是在数字运算的逻辑分析及分类讨论上。
知识点启示:
- 利用关系运算符如(month>2)作为一个非0即1的量,用来判断,同时可以作为一个值被利用起来。
- 利用除号将整型数值作为被除数,以保留其商的整数部分
反思:在此代码中,我更多地注重步骤性而在精简性方面考虑较少,数字运算的易理解性不强。
在灵活掌握数值运算的基础之后应该多考虑代码的精简程度。