问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

c语言的代码,帮我完善一下

发布网友 发布时间:2023-03-22 22:53

我来回答

2个回答

热心网友 时间:2023-12-10 22:57

int getWeekDay(int,int,int);/*判断是周几*/
int getMonthDays(int,int);/*判断某年某月有几天*/
void printMonthCalender(int,int);/*输出某年某月的日历*/
int isLeapYear(int);/*判断是否是闰年*/

main()
{
int year;
int month;
int startDay,monthDays;

printf("input the year(YYYY):");
scanf("%d",&year);

for(month=1;month<=12;month++){
startDay=getWeekDay(year,month,1); /*计算出该月第一天是星期几。返回值为0~6,分别代表周日,周一~周六*/
monthDays=getMonthDays(year,month); /*计算出该月共有几天*/
printf("\t\t\t%d-%d\n",year, month);
printMonthCalender(startDay,monthDays);
}
system("pause");
}

/*输入年月日,判断是星期几。
输出:0:表示周日,1:表示周一,2:周二,。。。6:周六*/
int getWeekDay(int year,int month,int day)
{
int days1;/*从0001年到year-1年共有几天*/
int days2; /*从year年初到month-1月共有几天*/
long int totalDays; /*从0000年到year年month月1号共有几天*/
int i;

/*计算从0001年到year-1年年底共有几天:days1。能被400整除的年数为: (year-1)%400)
关键在于如何表示出能被4整除但是不能被100整除的年数。
设 0001年到year-1年年底 能被4整除的年数为x (x=(year-1)%4)
0001年到year-1年年底 能被4整除但是不能被100整除的年数为 y,
0001年到year-1年年底 能被4整除也能被100整除的年数为 z(z=(year-1)%100,因为能被100整除则肯定能被4整除)
则 y=x-z= (year-1)%4- (year-1)%100
故0001到year-1年内闰年总年数为:(year-1)%400)+(year-1)%4- (year-1)%100 */
days1= (year-1)*365+(year-1)/400+(year-1)/4-(year-1)/100; ; /*从0001年到year-1年的日子总数*/

/*计算从year年初到month-1月共有几天:days2*/
days2=0;
for(i=1;i<=month-1;i++)
days2+=getMonthDays(year,i); /*第二次用到该函数*/

/*计算总天数*/
totalDays=days1+days2+day;

return (totalDays%7);/*公元第一天是周一*/
}

/*判断指定的某年某月的天数*/
int getMonthDays(int year,int month)
{
int days;
switch(month){
case 1:case 3:case 5:case 7:case 8:case 10:case 12:
days=31;break;
case 2:
if (isLeapYear(year))
days=29;/*闰年*/
else
days=28;
break;
case 4:case 6:case 9:case 11:
days=30;break;
}
return days;
}

/*函数功能:检测是否闰年。
入参:year。要检测的年;
返回值:0:不是闰年;1:是闰年*/
int isLeapYear(int year)
{
return(year%4==0 && year%100!=0 || year%400==0);
}

void printMonthCalender(int startDay,int days)
{
int i;
int count;/*控制换行*/

/*打印表头*/
printf("Sun.\tMon.\tTue.\tWed.\tThu.\tFri.\tSat.\n");

/*打印前面空格*/
for(i=1;i<=startDay;i++)
printf("\t");

count= startDay;/*已经打印了startDay个空格*/
for(i=1;i<=days;i++){
printf("%d\t",i);
count++;
if(count%7==0)
printf("\n");
}
printf("\n\n");
}

热心网友 时间:2023-12-10 22:58

while((y <= 1900 || m >= 13 || d >= 32)) /*先做一个整体判断*/
{
printf("你的输入有误!\n");
printf("请重新输入年份,月份,日期:");
scanf("%d%d%d",&y,&m,&d); /*获取从键盘输入的值*/
}
//add
while((d==31)&&((m==2)||(m==4)||(m==6)||(m==9)||(m==11))) /*小月为31天的非法判断*/

while((m==2)&&(d>=30)) /*二月30天非法判断*/

while((m==2)&&!(y%4==0&&y%100||y%400==0)&&(d>=29)) /*非闰年的2月29天非法判断*/

//为了表达清楚,while条件做出分别判断,你可以将它们进行或操作,经VC++运行测试成功!
//另外,我个人认为你的switch语句并不影响程序简洁性,固未作简化
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
为什么有世界三大男高音,而没有人是世界三大最高男音? 各位,请教一个问题。给一个初次见面的朋友用日文怎么写信? 男友不好意思夸我,怎么办? 结婚不发朋友圈 2023年哈尔滨12月一般多少度-12月份去哈尔滨穿什么合适 《狱中联欢》教案 狱中联欢、赤壁之战、田忌赛马、一夜的工作、石灰吟按时间的先后顺序排... 狱中联欢是按照——顺序来记叙的?文中详写的是——略写的是—— 如何对待轻视你的人? 看透身边这七种人,提升自己格局和认知 政务审计软件源代码怎么查 觥筹意思 吴潜《贺新郎(寄赵南仲端明)》原文及翻译赏析 怎么关闭开启简单桌面模式 刷百度关键词排名原理 友邦保险文案 光大理财五天了没有收益 光大理财-阳光碧灵活1号怎么样? 奥迪Q5何时再出新版? 问:现在怎么能买到最新版Q5 答:奥迪Q5L Sportback本月发布 奥迪Q5再推新版本,运动定位,700N.m扭矩 世界上有没有小火龙和皮卡丘 十二生肖里面有火龙吗? 火龙果里为什么没有火龙? 世界真的有火龙吗? 世上真有火龙吗? 世界上真的有火龙吗? 2022年12月26要不要核酸坐飞机杭州机场 2022年125日杭州超市需要核酸检测证明吗 12月3日杭州上火车需要核酸检测报告吗 大学C语言设计代码 关于三国杀杨修 关于三国杀 杨修的问题 手机三国杀中杨修值得换吗? nba2k23选秀名单哪个年份有意思 nba2k23选秀名单中国球员 NBA2k终极联盟更换选秀名单 描写供暖的诗句 宣纸以什么而得名 求CS1.6下载地址,要能加电脑的1.5也可以 cs1.6怎么在steam下载 天之痕...疟鬼滴问题... 轩辕剑天之痕疟鬼怎么得 天之痕中,疟鬼是如何合成的? 轩辕剑天之痕中山鬼+疟鬼的出现位置??? 企业年金从哪查 女字的田字格怎么写呢? 螳臂当车意思解释 宋上繁华怎么提升声望 关于碧的古诗句