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

来源:百度知道 编辑:UC知道 时间:2024/09/20 12:09:04
#include <stdio.h>
void main()
{
int c,y,m,d,i; /*定义相关变量 c总和天数 y年份 m月份 d日期 i用于赋值 */

printf("请输入年份,月份,日期:\n");
scanf("%d%d%d",&y,&m,&d); /*获取从键盘输入的值*/

while((y <= 1900 || m >= 13 || d >= 32)) /*对月份和日期的约束语句 请求完善*/
{
printf("你的输入有误!\n");
printf("请重新输入年份,月份,日期:");
scanf("%d%d%d",&y,&m,&d); /*获取从键盘输入的值*/
}

c=0; /*初始化c的值*/
for (i = 1900; i<y; i++) { /*判断闰年*/
if (i%4==0&&i%100||i%400==0)
c+=366;
else
c+=365;
}
if (y%4==0&&y%100||y%400==0) i=1; /*判断是不是闰年,如果是闰年就要在三月之后多加1天*/
else i=0;
switch (m) /*选择判断语句,判断相关月份的天数用于计算总和天数*/
{
case 1:
m=0;
break;
case 2:
m=31;
break;
case 3:
m=59+i;
break;
case 4:
m=90+i;

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语句并不影响程序简洁性,固未作简化

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=getWe