假定已知年月日,计算出这是该年的第几天,求友友指点代码
#include<stdio.h>//假定已知年月日,计算出这是该年的第几天
int main(){
int year;
int month;
int day;
printf("请输入年月日:");
scanf("%d%d%d",&year,&month,&day);
if((year%4==0&&year%100!=0)||year%400==0)
printf("%d是闰年",year);
else
printf("%d不是闰年",year);//此前为判断闰否年
int sum=0;
int i=month;
int j=day;
while(!(month==i&&day==j)){
while(month==1||month==3||month==5||month==7||month==8||month==10||month==12){//这些月份为31天
sum++;
if(day==31)
break;
}
while(month==4||month==6||month==9||month==11){
sum++;
if(day==30)
break;
}
}
printf("这是%d年的第%d天",year,sum);
return 0;
} 你的代码存在一些问题。首先,你需要确定计算每个月份的总天数,而不是仅仅增加天数。其次,在循环中使用 while 似乎并不适当。此外,你还需要考虑闰年二月的情况。我已经修改了你的代码,修复了这些问题:
#include <stdio.h>
int main() {
int year, month, day;
printf("请输入年月日:");
scanf("%d%d%d", &year, &month, &day);
int is_leap_year = (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
int days_in_month[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if (is_leap_year) {
days_in_month = 29;
}
int days_passed = 0;
for (int i = 1; i < month; i++) {
days_passed += days_in_month;
}
days_passed += day;
printf("这是%d年的第%d天\n", year, days_passed);
return 0;
}
这个修改后的代码应该可以正确地计算给定年月日是该年的第几天。
请注意,我使用了一个数组 days_in_month 来存储每个月的天数,如果是闰年,就更新二月的天数。
最后,使用一个 for 循环累加已过去的天数。 isdkz 发表于 2023-3-15 20:17
你的代码存在一些问题。首先,你需要确定计算每个月份的总天数,而不是仅仅增加天数。其次,在循环中使用 w ...
大神,17和20行有点不懂{:10_269:} 啊这啧啧啧 发表于 2023-3-15 20:47
大神,17和20行有点不懂
第17行:for (int i = 1; i < month; i++) {
这是一个 for 循环,它的目的是遍历从1到给定的 month - 1(不包含 month 本身)的所有月份。
这里的变量 i 用作月份的计数器。循环的执行顺序是从1开始(即1月),递增到 month - 1(即输入的月份的前一个月份)。
第18行:days_passed += days_in_month;
这行代码是在循环中执行的。它将 days_in_month(即第 i 个月的天数)累加到 days_passed(已经过去的天数)。
因此,当循环结束时,days_passed 将包含从1月到 month - 1 月(不包含 month 本身)的所有月份的天数总和。
第20行:days_passed += day;
这行代码在循环外执行。在完成对之前月份的天数累加后,我们需要将输入的当月的天数(即 day)加入已过去的天数。
因此,days_passed 现在包含了从年初到输入日期的总天数。
简而言之,这段代码的目的是计算从年初到输入日期(包括输入的月和日)的总天数。它首先累加输入月份之前所有月份的天数,然后加上输入的当月天数。 isdkz 发表于 2023-3-15 20:54
第17行:for (int i = 1; i < month; i++) {
这是一个 for 循环,它的目的是遍历从1到给定的 month...
好的好的,为什么我运行出来的结果不对{:10_266:} 本帖最后由 两手空空儿 于 2023-3-16 11:31 编辑
啊这啧啧啧 发表于 2023-3-15 21:09
好的好的,为什么我运行出来的结果不对
有没有可能是你输入的不对,导致结果不对? 输入的时候你并没有设置分隔符
输入完以后输出一下年月日验证一下 两手空空儿 发表于 2023-3-16 11:29
有没有可能是你输入的不对,导致结果不对? 输入的时候你并没有设置分隔符
输入完以后输出一下年月日 ...
输出都是29天{:10_266:} #include <stdio.h>
int main(void) {
int year, month, day, days = 0;
printf("请输入年月日:");
scanf("%d%d%d", &year, &month, &day);
days += day;
for (int m = 1; m < month; ++m) {
days += m == 2 ? 28 : (m < 8 && m & 1) || (m > 7 && !(m & 1)) ? 31 : 30;
}
days += ((!(year % 4) && (year % 100)) || !(year % 400));
printf("这是%d年的第%d天", year, days);
return 0;
} 我用2楼的代码加了个循环,输出完全没有问题,你再检查一下自己的输入吧
两手空空儿 发表于 2023-3-17 10:11
我用2楼的代码加了个循环,输出完全没有问题,你再检查一下自己的输入吧
唉,好像是的哎。不过,为什么用,或者;就有点问题呢{:10_269:} 啊这啧啧啧 发表于 2023-3-17 22:57
唉,好像是的哎。不过,为什么用,或者;就有点问题呢
scanf("%d%d%d",&year,&month,&day);
没有指定分隔符号,默认是空格或换行
scanf("%d,%d,%d",&year,&month,&day); 这样是用“,”分隔,输入的时候要用“,” 两手空空儿 发表于 2023-3-18 09:08
scanf("%d%d%d",&year,&month,&day);
没有指定分隔符号,默认是空格或换行
好的好的
页:
[1]