本题要求编写程序计算某年某月某日是该年中的第几天。
输入格式 :
输入在一行中按照格式“yyyy / mm / dd”(即“年 / 月 / 日”)给出日期。
注意:闰年的判别条件是该年年份能被4整除但不能被100整除、或者能被400整除。闰年的2月有29天。
输出格式 :
在一行输出日期是该年中的第几天。
输入样例1 :
2009 / 03 / 02
输出样例1 :
61
第一次:
//运行有点问题,没办法打印
#include<stdio.h>
int main() {
int year = 0, month = 0, day = 0;
int d_30 = 0, d_31 = 0, d_28 = 0;
int flag = 0, num = 0;
scanf("%d/%d/%d\n", &year, &month, &day);
switch (month) {
case 1:d_28 = 0, d_30 = 0, d_31 = 1;break;
case 2:d_28 = 1, d_30 = 0, d_31 = 1;break;
case 3:d_28 = 1, d_30 = 0, d_31 = 2;break;
case 4:d_28 = 1, d_30 = 1, d_31 = 2;break;
case 5:d_28 = 1, d_30 = 1, d_31 = 3;break;
case 6:d_28 = 1, d_30 = 2, d_31 = 3;break;
case 7:d_28 = 1, d_30 = 2, d_31 = 4;break;
case 8:d_28 = 1, d_30 = 2, d_31 = 5;break;
case 9:d_28 = 1, d_30 = 3, d_31 = 5;break;
case 10:d_28 = 1, d_30 = 3, d_31 = 6;break;
case 11:d_28 = 1, d_30 = 4, d_31 = 6;break;
case 12:d_28 = 1, d_30 = 4, d_31 = 7;break;
default:break;
}
num = 28 * d_28 + 30 * d_30 + 31 * d_31;
//判断是否是闰年
if ((year % 4 == 0 && year % 100 != 0) && (year % 400 == 0) && month > 2) {
flag = 1;
}
//输出是第几天
if (flag == 1) {
num += 1;
printf("%d", num);
}
else {
printf("%d", num);
}
return 0;
}
第二次
基本正确但并不是全对
#include<stdio.h>
int main()
{
int year = 0, month = 0, day = 0, m = 0;
int pre = 0;
scanf("%d/%d/%d\n", &year, &month, &day);
switch (month) {
case 1:pre = 0;break;
case 2:pre = 31;break;
case 3:pre = 59;break;
case 4:pre = 90;break;
case 5:pre = 120;break;
case 6:pre = 151;break;
case 7:pre = 181;break;
case 8:pre = 212;break;
case 9:pre = 243;break;
case 10:pre = 273;break;
case 11:pre = 304;break;
case 12:pre = 334;break;
default:break;
}
day += pre;
if ((year % 4 == 0 && year % 100 != 0) && (year % 400 == 0) && month > 2) {
day = day + 1;
printf("%d", day);
}
//此处有误,要注意是闰二月以后才+1,以前不加;
else {
printf("%d", day);
}
return 0;
}
第三次
改了但还是不能全对
#include<stdio.h>
int main()
{
int year = 0, month = 0, day = 0, m = 0;
int pre = 0;
int flag = 0;
scanf("%d/%d/%d\n", &year, &month, &day);
switch (month) {
case 1:pre = 0;break;
case 2:pre = 31;break;
case 3:pre = 59;break;
case 4:pre = 90;break;
case 5:pre = 120;break;
case 6:pre = 151;break;
case 7:pre = 181;break;
case 8:pre = 212;break;
case 9:pre = 243;break;
case 10:pre = 273;break;
case 11:pre = 304;break;
case 12:pre = 334;break;
default:break;
}
day += pre;
//等等好像这里也有错
if ((year % 4 == 0 && year % 100 != 0) && (year % 400 == 0) && month > 2) {
flag = 1;
}
if (flag == 1 && month >= 2) {
day = day + 1;
}
printf("%d", day);
return 0;
}
网上的
#include <stdio.h>
int main()
{
int year, month, day;
int sum = 0, flag = 0;
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;
default: sum = 334; break;
}
sum += day;
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
flag = 1;
if (flag == 1 && month > 2)
sum++;
printf("%d", sum);
return 0;
}
第四次
再改一遍,加油马上就要全对了
#include<stdio.h>
int main()
{
int year = 0, month = 0, day = 0, m = 0;
int pre = 0;
int flag = 0;
scanf("%d/%d/%d\n", &year, &month, &day);
switch (month) {
case 1:pre = 0;break;
case 2:pre = 31;break;
case 3:pre = 59;break;
case 4:pre = 90;break;
case 5:pre = 120;break;
case 6:pre = 151;break;
case 7:pre = 181;break;
case 8:pre = 212;break;
case 9:pre = 243;break;
case 10:pre = 273;break;
case 11:pre = 304;break;
case 12:pre = 334;break;
default:break;
}
day += pre;
//应该是这里还有问题
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0) && month > 2) {
day = day + 1;
}
printf("%d", day);
return 0;
}
第五次
全对(乐
#include<stdio.h>
int main()
{
int year = 0, month = 0, day = 0, m = 0;
int pre = 0;
int flag = 0;
scanf("%d/%d/%d\n", &year, &month, &day);
switch (month) {
case 1:pre = 0;break;
case 2:pre = 31;break;
case 3:pre = 59;break;
case 4:pre = 90;break;
case 5:pre = 120;break;
case 6:pre = 151;break;
case 7:pre = 181;break;
case 8:pre = 212;break;
case 9:pre = 243;break;
case 10:pre = 273;break;
case 11:pre = 304;break;
case 12:pre = 334;break;
default:break;
}
day += pre;
//果不其然,判断年和月要分开,用()
if (((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) && month > 2) {
day = day + 1;
}
printf("%d", day);
return 0;
}