用c语言数组实现某年某月某日是当年的第几天:在下列程序逻辑上有错误,请在已有程序的基础上进行修改。本题考察的数组/循环/分支结构的综合运用,请仔细分析程序的逻辑结构。 #include<stdio.h> int main(){ int month_day[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; int year,month,day; int i; scanf("%d%d%d",&year,&month,&day); if(month<0||month>12) printf("date error"); else{ for(i=1;i<month;i++){ day=day+month_day[i]; if (month==2&&((year%4==0 && year%100 !=0) || year%400==0)) day++; } } printf("%d",day); } 思路:将每个月的天数存入数组month_day中,例如month_day[2]的值是28,表示2月是28天。 7月13日是第几天? for(月份1~6) day=day+month_day[i]; 然后考虑平年闰年情况,确定2月的天数。
时间: 2023-11-27 09:53:32 浏览: 54
在原有程序中,计算每个月的天数时并没有判断月份是否合法,导致输入不合法的月份时仍会计算天数,因此需要在输入月份后进行判断。同时,在计算2月的天数时,应该先判断该年是否为闰年,再根据判断结果确定2月的天数。修改后的程序如下:
```
#include<stdio.h>
int main(){
int month_day[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int year,month,day;
int i;
scanf("%d%d%d",&year,&month,&day);
if(month<1||month>12) { // 判断月份是否合法
printf("date error");
}
else{
for(i=1;i<month;i++){
day=day+month_day[i];
}
if (month==2){ // 判断2月的天数
if ((year%4==0 && year%100 !=0) || year%400==0) {
day++;
}
}
}
printf("%d",day);
return 0;
}
```
以7月13日为例,程序输出结果为194,即7月13日是当年的第194天。
相关问题
在c语言中编译程序可以做到输入某年某月某日,判断这是当年的第几天
是的,可以在 C 语言中编写程序来实现这样的功能。以下是一个示例程序,可以输入日期并计算是当年的第几天:
```c
#include <stdio.h>
int main() {
int year, month, day;
printf("请输入日期(格式:年-月-日):");
scanf("%d-%d-%d", &year, &month, &day);
// 计算当年的第几天
int days = 0;
int daysOfMonth[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
for (int i = 0; i < month - 1; i++) {
days += daysOfMonth[i];
}
if (month > 2 && (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)) {
days += 1; // 闰年的2月有29天
}
days += day;
printf("这是当年的第%d天。\n", days);
return 0;
}
```
注意,在计算是否是闰年时,需要考虑到以下规则:
- 能够被4整除但不能被100整除的年份是闰年;
- 能够被400整除的年份也是闰年。
这个程序可以实现你的要求,但是如果你有更多的需求或者问题,请随时提出。
c语言用数组从键盘上输入某年某月某日,判断这一天是这一年的第几天
```c
#include<stdio.h>
int main()
{
int year, month, day;
int i, leap = 0, sum = 0;
int a[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
printf("请输入年月日:\n");
scanf("%d%d%d", &year, &month, &day);
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
leap = 1; // 判断是否为闰年
}
if (month < 1 || month > 12 || day < 1 || day > 31) {
printf("输入的日期有误!\n");
return 0;
}
a[2] = 28 + leap; // 修改二月的天数
for (i = 1; i < month; i++) {
sum += a[i]; // 累加前面月份的天数
}
sum += day; // 加上当前月份的天数
printf("%d年%d月%d日是%d年的第%d天。\n", year, month, day, year, sum);
return 0;
}
```
使用数组存储每个月份的天数,通过累加得到这一天是这一年的第几天。注意闰年的判断和二月的天数需要特殊处理。