不知道为啥输出的日历就是对不上
作业条件有:1800年一月一日星期三
好像是从1800到之后的天数的问题
我算了一下1800.1.1到2021.9.1一共80962天
但我的程序运行的是80880天
找不到问题
帮帮孩子吧大神!!!
#include <stdio.h>
#include<stdlib.h>
int confirmlp(y);
int leapyear(y);
int eng(m);
int check(d,m,y,r);
int confirmday(m,y,d,r);
int printhead(m,y);
int num(m,y,r,numlpyear);
int printbody(m,y,d,blanknum);
int main(void)
{
int m,y,d,numlpyear,r,blanknum;
printf("Print month and year(m,y):");
scanf("%d,%d",m,y);
r=confirmlp(y);
numlpyear=leapyear(y);
eng(m);
printhead(m,y);
check(m,y);
d=confirmday(m,y,d);
blanknum=num(m,y,numlpyear,r);
printbody(m,y);
return 0;
}
int confirmlp(y)//判断该年是否为闰年
{
int r=0;
if((y%4==0&&y%100!=0)||y%400==0)
{
r=1;
}
return r;
}
int leapyear(y)//算该年之前的闰年数
{
int i,count=0;
for(i=0;i<y-1800;i++)
{
if((i%4==0)&&(i%100!=0)||i%400==0)
{
count++;
}
}
return count;
}
int eng(m)//把月份数字变英文
{
switch(m)
{
case 1:return "January";break;
case 2:return "February";break;
case 3:return "Match";break;
case 4:return "April";break;
case 5:return "May";break;
case 6:return "June";break;
case 7:return "July";break;
case 8:return "August";break;
case 9:return "September";break;
case 10:return "October";break;
case 11:return "November";break;
case 12:return "December";break;
}
return 0;
}
int check(d,m,y,r)//检查输入是否正确
{
if((d<1||d>31||y<1800||m>12||m<1)||(r==1&&m==2&&d>29)||(r==0&&m==2&&d>28)||((m==4||m==6||m==9||m==11)&&d>30))
{
printf("error");
exit(0);
}
return 0;
}
int confirmday(m,y,d,r)//判断该月天数
{
if(m==1||m==3||m==5||m==7||m==8||m==10||m==12)
{
d=31;
}
if(m==4||m==6||m==9||m==11)
{
d=30;
}
if(r==0&&m==2)
{
d=28;
}
if(r==1&&m==2)
{
d=29;
}
return d;
}
int printhead(m,y)//打印表头
{
printf("%s %d",eng(m),y);
printf("-----------------------------");
printf("SUN MON TUE WEN THU FRI SAT ");
return 0;
}
int num(m,y,r,numlpyear)//算第一天前面的空白格数
{
int i,d1,d2=0,num,bnum;
d1=((y-1800-numlpyear)365+numlpyear366);
for(i=1;i<=m;i++)
{
if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)
{
d2+=31;
}
if(i==4||i==6||i==9||i==11)
{
d2+=30;
}
if(r==0&&i==2)
{
d2+=28;
}
if(r==1&&i==2)
{
d2+=29;
}
}
num=d1+d2;
bnum=num%7+3;
return bnum;
}
int printbody(m,y,d,blanknum)//打印主体
{
int i;
for(i=1;i<=d+blanknum;i++)
{
if(i<=blanknum)
{
printf(" ",i);
}
else
{
if(i<=9)
{
printf(" %d ",i);
}
else
{
printf(" %d ",i);
}
}
if(i==7||i==14||i==21||i==28||i==35||i==42)
printf("\n");
}
return 0;
}
你这个写的也太麻烦了,这么写,有帮助请点一下我回答右上方的采纳
#include <stdio.h>
#include <stdlib.h>
int day_diff(int year_start, int month_start, int day_start
, int year_end, int month_end, int day_end)
{
int y2, m2, d2;
int y1, m1, d1;
m1 = (month_start + 9) % 12;
y1 = year_start - m1/10;
d1 = 365*y1 + y1/4 - y1/100 + y1/400 + (m1*306 + 5)/10 + (day_start - 1);
m2 = (month_end + 9) % 12;
y2 = year_end - m2/10;
d2 = 365*y2 + y2/4 - y2/100 + y2/400 + (m2*306 + 5)/10 + (day_end - 1);
return (d2 - d1);
}
int main(void)
{
printf("%d\n", day_diff(1800, 1, 1, 2021, 9, 1));
return 0;
}
你还是好好学学语法吧,很多函数参数都没写数据类型