求一年中的天数
#include<stdio.h>int main()
{
/*********begin*********/
int Y,M,D;
char a,b;
scanf("%d%c%d%c%d",&Y,&a,&M,&b,&D);
if (Y % 4 = 0 && Y % 100 != 0||Y % 400 = 0)
switch (M)
case 1:printf("%d",D); break ;
case 2:printf("%d",31+D); break ;
case 3:printf("%d",60+D); break ;
case 4:printf("%d",91+D); break ;
case 5:printf("%d",121+D); break ;
case 6:printf("%d",152+D); break ;
case 7:printf("%d",182+D); break ;
case 8:printf("%d",213+D); break ;
case 9:printf("%d",244+D); break ;
case 10:printf("%d",274+D); break ;
case 11:printf("%d",305+D); break ;
case 12:printf("%d",335+D); break ;
default :printf("您输入错误。");
else
switch (M)
case 1:printf("%d",D); break ;
case 2:printf("%d",31+D); break ;
case 3:printf("%d",59+D); break ;
case 4:printf("%d",90+D); break ;
case 5:printf("%d",120+D); break ;
case 6:printf("%d",151+D); break ;
case 7:printf("%d",181+D); break ;
case 8:printf("%d",212+D); break ;
case 9:printf("%d",243+D); break ;
case 10:printf("%d",273+D); break ;
case 11:printf("%d",304+D); break ;
case 12:printf("%d",334+D); break ;
default :printf("您输入错误。");
/*********end*********/
return 0;
} 这段代码是一个计算一年中的天数的程序。它首先通过输入获取年份(Y)、月份(M)和日期(D),然后根据输入的年份和月份计算出一年中的天数,并输出结果。
代码中使用了两个switch语句来处理不同的情况。首先,根据输入的年份判断是否为闰年,如果是闰年,则根据输入的月份计算出一年中的天数;如果不是闰年,则根据输入的月份计算出一年中的天数。
在第一个switch语句中,根据输入的月份(M)的不同,使用不同的case来计算天数,并使用printf函数输出结果。例如,如果输入的月份为1,则直接输出输入的日期(D);如果输入的月份为2,则输出31加上输入的日期(D)。
在第二个switch语句中,逻辑与运算符的优先级高于逻辑或运算符,所以需要使用括号将逻辑与运算符的表达式括起来。同样,根据输入的月份(M)的不同,使用不同的case来计算天数,并使用printf函数输出结果。
在最后的default语句中,如果输入的月份不在1到12之间,则输出"您输入错误。"。
然而,这段代码存在一些问题:
1. 缺少了switch语句和case语句的大括号,导致代码逻辑错误。
2. 在if语句中,等号使用错误,应该使用双等号来进行相等比较。
3. 缺少了break语句,导致程序会继续执行下一个case语句,输出错误的结果。
下面是修复了上述问题的代码:
#include<stdio.h>
int main()
{
int Y, M, D;
char a, b;
scanf("%d%c%d%c%d", &Y, &a, &M, &b, &D);
if ((Y % 4 == 0 && Y % 100 != 0) || Y % 400 == 0) {
switch (M) {
case 1:
printf("%d", D);
break;
case 2:
printf("%d", 31 + D);
break;
case 3:
printf("%d", 60 + D);
break;
case 4:
printf("%d", 91 + D);
break;
case 5:
printf("%d", 121 + D);
break;
case 6:
printf("%d", 152 + D);
break;
case 7:
printf("%d", 182 + D);
break;
case 8:
printf("%d", 213 + D);
break;
case 9:
printf("%d", 244 + D);
break;
case 10:
printf("%d", 274 + D);
break;
case 11:
printf("%d", 305 + D);
break;
case 12:
printf("%d", 335 + D);
break;
default:
printf("您输入错误。");
}
} else {
switch (M) {
case 1:
printf("%d", D);
break;
case 2:
printf("%d", 31 + D);
break;
case 3:
printf("%d", 59 + D);
break;
case 4:
printf("%d", 90 + D);
break;
case 5:
printf("%d", 120 + D);
break;
case 6:
printf("%d", 151 + D);
break;
case 7:
printf("%d", 181 + D);
break;
case 8:
printf("%d", 212 + D);
break;
case 9:
printf("%d", 243 + D);
break;
case 10:
printf("%d", 273 + D);
break;
case 11:
printf("%d", 304 + D);
break;
case 12:
printf("%d", 334 + D);
break;
default:
printf("您输入错误。");
}
}
return 0;
}
修复了代码中的问题后,现在可以正确计算一年中的天数并输出结果了。 这个代码用于求输入日期处于一年当中的第几天(手写代码,可能有点bug)
struct Date
{
int day;
int month;
int year;
};
int days(int, int, int, int);
int days(int a, int b, int c, int i)
{
while(b--)
{
switch(b)
{ case 1: c += 31; break;
case 3: c += 31; break;
case 5: c += 31; break;
case 7: c += 31; break;
case 8: c += 31; break;
case 10: c += 31; break;
case 12: c += 31; break;
case 4: c += 30; break;
case 6: c += 30; break;
case 9: c += 30; break;
case 11: c += 30; break;
case 2: break;
}
}
if((b) > 2)
{
if(i == 0)
{
c += 29;
}
else
{
c += 28;
}
}
return c;
}
int main(void)
{
struct Date head;
int i, sum;
do
{
printf("请输入年月日:");
scanf("%d-%d-%d", &head.year, &head.month, &head.day);
i = fabs((head.year) - 2000);
i = i % 4;
if(i != 0 && head.day >= 29 && head.month == 2)//非闰年 >= 29天
{
printf("错误!该年2月只有28天!!\n");
}
else if(i == 0 && head.day > 29 && head.month == 2)//润年 > 29天
{
printf("错误!该年2月只有29天!!\n");
}
if (head.month == 1 || (head.month>1 && head.month <= 7 && (head.month % 2) == 1) ||
(head.month>=8 && head.month <= 12 && head.month % 2 == 0) && head.day > 31)
{
printf("date error!\n");
}
else if((head.month>1 && head.month < 7 && (head.month % 2) == 0) ||
(head.month>=8 && head.month <= 12 && head.month % 2 == 1) && head.day > 30)
{
printf("date error!\n");
}
else
break;
} while (1);
sum = days(head.year, head.month, head.day, i);
printf("该日是本年的第 %d 天\n", sum);
return 0;
}
页:
[1]