当前位置: 代码迷 >> C语言 >> 各位请进,有问题请教,急!!!!!
  详细解决方案

各位请进,有问题请教,急!!!!!

热度:381   发布时间:2004-12-19 21:23:00.0
各位请进,有问题请教,急!!!!!

实验名称:万年历的查询及打印

【内容】:设计一个查询并打印万年历的程序。

【步骤】:

1 画出程序流程图;

2 编写程序;

3 调试程序,对调试过程中出现的问题进行分析,找出错误的原因并予改正;

4 写出通过调试并修改正确的原程序。

【要求】:

2 程序运行后,首先在屏幕上显示主菜单:

3 查询某年某月某日是星期几

4 查询某年是否是闰年

5 打印某年的全年日历

6 退出

4 在主菜单中输入1后,显示:

请输入年月日(XXXXXXXX

      运行后输出:XXXXXXXX日是星期X,是否继续查询(Y/N

      如果输入Y,则重新显示 请输入年月日(XXXXXXXX,否则回到主菜单。

6 在主菜单中输入2后,显示:

请输入要查哪一年?(XXXX

       运行后输出:XXXX年是(否)是闰年,是否继续查询(Y/N)?

      如果输入Y,则重新显示,请输入要查哪一年?(XXXX,否则回到主菜单。

8 在主菜单中输入3后,显示:

请输入要打印的年份(XXXX

       运行后输出XXXX年的日历,格式为:

XXXX

X(月数)

0 1 2 3 4 5 6

S M T W T F S

x x x x x x x

x x x xx xx xx xx

xx xx xx xx xx xx xx

xx xx xx xx xx xx xx

xx xx xx

X(月数)

0 1 2 3 4 5 6

S M T W T F S

x x x x

x x x xx  xx xx xx

xx xx xx xx xx xx xx

xx xx xx xx xx xx xx

xx xx xx xx xx

.

.

.

.

.

       运行完后显示:是否继续打印(Y/N)?

       如果输入Y,则重新显示,请输入要打印的年份(XXXX,否则回到主菜单。

10 在主菜单中输入4后,显示:是否要真的退出(Y/N)?

         如果输入Y,结束程序运行,否则重新显示主菜单。

【提示】:

2 闰年计算:A 能被4整除,但不能被100整除的年份是闰年 B 能被100整除又能被400整除的年份是闰年。

3 闰年的二月是29天,平年的二月是28

4 星期几的计算:

S=X-1+(X-1)/4-(X-1)/100+(X-1)/400+C

X是年份,C是该年从元旦开始到到这一日的天数。

S/7的余数既是星期数

119821226

由于1982年不是闰年(不能被4整除),所以该年的二月是28天。

C=31+28+31+30+31+30+31+31+30+31+30+26=360

(1月到11月的天数+12月的实际天数)

S=1982-1+(1982-1)/4+(1982-1)/100+(1982-1)/400+360=2821.3925

S/7=2821/7=403 余数为0,所以该日是星期天。

例2:2000年3月8日

     由于2000年是闰年(能被4整除,又能被100和400整除),所以该年的二月是29天。

C=31+2+=68 (1月到2月的天数+3月的实际天数)

S=2000-1+(2000-1)/4+(2000-1)/100+(2000-1)/400+68=2551.757

S/7=2551/7=364 余数为3,所以该日是星期三。

我写的代码如下,不知道怎么搞的,如果输入今天的日期,总说是星期五还是六吧.各位帮帮忙

#include <stdio.h> int knowday(int year,int month,int day); int puanduan(int year); void printdata(int year); int duoshaotian(int year,int month,int day); main() { char juxu='Y'; int year,m,month,day,select,data; printf("/************************************************/\n"); printf("program explaination:\n"); printf("Y stand for:you want to continue!\n"); printf("N stand for:you want to exit!\n"); printf("1 can know what day is the day you input!\n"); printf("2 can know if the year you input is run nian!\n"); printf("3 can print nian li of the year you input!\n"); printf("/************************************************/\n"); while(juxu=='Y') { printf("what do you want to do now?"); printf("please input the number:"); scanf("%d",&m); switch(m) { case 1:printf("please input the year/month/day:"); scanf("%d%d%d",&year,&month,&day); data=knowday(year,month,day); printf("%d %d %d is xingqi %d\n",year,month,day,data); break; case 2:printf("please input the year:"); scanf("%d",&year); if(puanduan(year)) printf("%d is nun nian!\n",year); else printf("%d is ping nian!\n",year); break; case 3:printf("please input the year:"); scanf("%d",&year); printdata(year); break; default:printf("the number you input is wrong!\n"); } printf("do you want to continue?Y/N\n"); scanf("%c",&juxu); getch(); } }

/*判断是否是闰年*/ int puanduan(int year) { if(year%4==0&&year%100!=0||year%400==0) return 1; else return 0; }

/*计算输入的那天离元旦多少天*/ int duoshaotian(int year,int month,int day) {int i,sum=0; int total=0; int mon[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; for(i=1;i<month;i++) sum+=mon[i]; total=sum+day; if(month>2&&puanduan(year)) total++; return total; }

/*算出输入的那天是星期几*/ int knowday(int year,int month,int day) { int num,a; num=duoshaotian(year,month,day); a=year-1+(year-1)/4.0+(year-1)/100.0+(year-1)/400.0+num; return a%7; } /*打印输入年的年份*/ void printdata(int year) { int mon[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; int i,n,j,k,rizi; if(puanduan(year)) mon[3]++; printf(" year:%d",year); for(i=1;i<13;i++) {printf("********************************\n"); printf("* month:%d *\n",i); printf("********************************\n"); printf("0 1 2 3 4 5 6\n"); printf("sa mo tu we th fr sa\n"); printf("--------------------------------\n"); rizi=knowday(year,i,1); n=0; for(j=0;j<rizi;j++) {printf(" "); n++; } for(k=1;k<=mon[i];k++) {printf("%-2d",k); printf(" "); n++; if(n%7==0) printf("\n"); } printf("\n"); } }

搜索更多相关的解决方案: 万年历  size  New  

----------------解决方案--------------------------------------------------------
怎么没人帮我呀
----------------解决方案--------------------------------------------------------

switch(m) { case 1:printf("please input the year/month/day:"); scanf("%d%d%d",&year,&month,&day); data=knowday(year,month,day); printf("%d %d %d is xingqi %d\n",year,month,day,data); break; case 2:printf("please input the year:"); scanf("%d",&year); if(puanduan(year)) printf("%d is nun nian!\n",year); else printf("%d is ping nian!\n",year); break; case 3:printf("please input the year:"); scanf("%d",&year); printdata(year); break; default:printf("the number you input is wrong!\n"); }

我想是这一部分有问题,我没有来得急试。你再看一下吧!


----------------解决方案--------------------------------------------------------
  相关解决方案