题目:
输入某年某月某日,判断这一天是这一年的第几天?
解题思路:
1、首先在计算之前要先了解一年中每月有多少天。1、3、5、7、8、10、12月有31天,4、6、9、11月有30天,2月平年28天,闰年29天。
2、要了解平年还是闰年的判断方法。
闰年:年份可以被4整除但不能被一百整除,或者可以被400整除。
(year % 4 == 0 && year % 100 != 0) || year % 400 == 0
3、本题采用两种方法去解决这个问题,第一种利用switch case语句,第二种采用数组存储每个月的天数来解决问题。
程序代码:
方法一:
#include <stdio.h>
int main(int argc, char *argv[])
{
int year, month, day;//定义变量接收输入的年月日
int num = 0;//存储结果
printf("请输入年、月、日信息(示例:2000 12 12):");
scanf("%d%d%d",&year,&month,&day);
switch(month){
case 1:
num = day; break;
case 2:
num = day + 31; break;
case 3:
num = day + 59; break;//先按照平年计算,最后进行修改
case 4:
num = day + 90; break;
case 5:
num = day + 120; break;
case 6:
num = day + 151; break;
case 7:
num = day + 181; break;
case 8:
num = day + 212; break;
case 9:
num = day + 243; break;
case 10:
num = day + 273; break;
case 11:
num = day + 304; break;
case 12:
num = day + 334; break;
default:
return 0;
}
if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0){
num++;
}//判断平年还是闰年,如果是闰年就加一天
printf("%d年%d月%d日是%d年的第%d天\n",year,month,day,year,num);
return 0;
}
方法二:
#include <stdio.h>
int main(int argc, char *argv[])
{
int year, month, day;//定义变量接收输入的年月日
int num = 0;//存储结果
int i;
int a[12] = {31,28,31,30,31,30,31,31,30,31,30,31};//暂时设定2月为28天
printf("请输入年、月、日信息(示例:2000 12 12):");
scanf("%d%d%d",&year,&month,&day);
num = day;
for(i = 1; i < month; i++){
num += a[i - 1];
}
if(month > 2){
if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0){
num++;
}
}//判断平年还是闰年,如果是闰年就加一天
printf("%d年%d月%d日是%d年的第%d天\n",year,month,day,year,num);
return 0;
}
运行结果:
请输入年、月、日信息(示例:2000 12 12):2015 10 1
2015年10月1日是2015年的第274天
请输入年、月、日信息(示例:2000 12 12):2000 12 31
2000年12月31日是2000年的第366天
请输入年、月、日信息(示例:2000 12 12):2000 12 12
2000年12月12日是2000年的第347天