C程序设计(第五版)谭浩强著,第七章练习第18题
求该日是该年的第几天,按照生活中的一般思路,就是把那天所在月份之前的月份的天数全部相加,随后在加上该月份的天数days。
在此基础上,再考虑是否为闰年,是否包含了二月份。
#include<stdio.h>
int main()
{
int count(int y, int m, int d);
int year, month, day, i;
printf("请输入年,月,日:");
scanf_s("%d,%d,%d", &year, &month, &day);
i = count(year, month, day);
printf("是这一年的第%d天", i);
return 0;
}
int count(int y, int m, int d)
{
int i=0;
if (m == 1)
i = d;
if (m == 2)
i = 31 + d;
if (m == 3)
i = 31 + 28 + d;
if (m == 4)
i = 31 + 28 + 31 + d;
if (m == 5)
i = 31 + 28 + 31 + 30 + d;
if (m == 6)
i = 31 + 28 + 31 + 30 + 31 + d;
if (m == 7)
i = 31 + 28 + 31 + 30 + 31 + 30 + d;
if (m == 8)
i = 31 + 28 + 31 + 30 + 31 + 30 + 31 + d;
if (m == 9)
i = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + d;
if (m == 10)
i = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + d;
if (m == 11)
i = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + d;
if (m == 12)
i = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30 + d;
if (y % 4 == 0 && y % 100 != 0 || y % 400 == 0)
{
if (m > 2)
i = i + 1;
}
return (i);
}
但是这个程序在写的过程中就发现简单的问题太过繁琐。
#include<stdio.h>
int main()
{
int count(int y, int m, int d);
int year, month, day, i;
printf("请输入年,月,日:");
scanf_s("%d,%d,%d", &year, &month, &day);
i = count(year, month, day);
printf("是这一年的第%d天", i);
return 0;
}
int count(int y, int m, int d)
{
int i = 0,j=0,n;
int a[12] = { 0,31,28,31,30,31,30,31,31,30,31,30 };
for (n = 0; j < m; j++)
{
n = n + a[j];
}
i = n + d;
if (y % 4 == 0 && y % 100 != 0 || y % 400 == 0)
{
if (m > 2)
i = i + 1;
}
return (i);
}
将数组运用其中,就精简一些啦。