【编程练习】今天是今年的第几天?
题目:2018年11月19日是2018年的第几天?
(1)首先,定义一个数组把平年的每个月的天数保存起来。如:
static int month_arr[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
定义13个元素且第一个元素为0的目的是为了让数组下标与月份相对应。
(2)其次,把这个月之前的所有月份的天数加起来,再加上今天(即今天是这个月的第几天),如以下函数:
int sum_day(int month, int day)
{
int i, sum = 0;
for (i = 1; i < month; i++)
{
sum += month_arr[i];
}
sum += day;
return sum;
}
(3)最后,判断年份是不是闰年,并且如果月份大于3的话,总天数就加1,因为闰年2月(29天)比平年2月(28天)多1天。闰年的判断条件是:
能被4整除,不能被100整除
能被400整除
判断闰年的函数为:
/* 判断year是不是闰年,函数返回1则year为论年 */
int leap(int year)
{
int leap = 0;
leap = (year%4==0&&year%100!=0)||(year%400==0);
return leap;
}
示例程序:
#include <stdio.h>
/* 定义静态存储变量并赋初值 */
static int month_arr[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int sum_day(int month, int day);
int leap(int year);
int main(void)
{
int year = 0, month = 0, day = 0;
int sum_days = 0;
printf("请输入日期(如:2018-11-19):");
scanf("%d-%d-%d", &year, &month, &day);
sum_days = sum_day(month, day); //粗略计算天数
//如果是闰年且月份大于3,则天数加一(因为闰年2月有29天)
if(leap(year) && month>=3)
{
sum_days = sum_days + 1;
}
printf("%d-%d-%d是该年的第%d天.\n", year, month, day, sum_days);
return 0;
}
/* 粗略计算总天数(因为还不知道今年是闰年还是平年) */
int sum_day(int month, int day)
{
int i, sum = 0;
for (i = 1; i < month; i++)
{
sum += month_arr[i];
}
sum += day;
return sum;
}
/* 判断year是不是闰年,函数返回1则year为论年 */
int leap(int year)
{
int leap = 0;
leap = (year%4==0&&year%100!=0)||(year%400==0);
return leap;
}
程序运行结果为:
方法二与方法一差不多,不同的是方法二先把每个月最后一天与该年1月1日有多少天给算出来。
示例程序:
#include <stdio.h>
int main(void)
{
int year,month,day,sum,Year_Flag;
printf("请输入日期(如:2018-11-19):");
scanf("%d-%d-%d", &year, &month, &day);
switch(month)
{
case 1:sum=0;break;
case 2:sum=31;break;
case 3:sum=59;break;
case 4:sum=90;break;
case 5:sum=120;break;
case 6:sum=151;break;
case 7:sum=181;break;
case 8:sum=212;break;
case 9:sum=243;break;
case 10:sum=273;break;
case 11:sum=304;break;
case 12:sum=334;break;
default:printf("data error!");break;
}
sum = sum + day;
if((year%400==0)||(year%4==0&&year%100!=0))
{
Year_Flag=1;
}
else
{
Year_Flag=0;
}
if(Year_Flag==1&&month>2)
{
sum++;
}
printf("%d-%d-%d是该年的第%d天.\n", year, month, day, sum);
return 0;
}
以上就是提供的计算某一天是该年的第几天的两种方法,应该还有很多更好更简便的解法,但是小编觉得适合自己的解法才是最好的解法。