C语言输出日历问题,比较急,高悬赏

4. 日历显示
试设计一个程序显示2010年日历。用户可连续查看某月日历,直到键入‘N’或‘n’为止。
(2010年第一天为周五)
输出举例:
Enter month in 2010 to display calendar (1-12): 1
****************************************************
SUN MON TUE WED THU FRI SAT
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Would you like to display another month (y/n) ? y
Enter month in 2010 to display calendar (1-12): 13
ERROR- Enter month in range of (1-12)!
Enter month in 2010 to display calendar (1-12): 6
****************************************************
SUN MON TUE WED THU FRI SAT
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Would you like to display another month (y/n) ? N

#include<stdio.h>

#include<stdlib.h>

main()

{     void calendar(int month);

      int month,i=1;

      char flag;

      do{

      printf("Enter month in 2010 to display calendar(1-12):");

      scanf("%d",&month);

      if(!(month>0&&month<13))

      {printf("ERROR-Enter month in range of (1-12)!\n");

      continue;}

      calendar(month);

      printf("Would you like to display another month (y/n) ?");

      scanf("%c",&flag);

      getchar();

      }while(!(flag=='N'||flag=='n'));

      system("pause");

      }

      

void calendar(int month)

{

     int a[12]={31,28,31,30,31,30,31,31,30,31,30,31};

     int sum=0,i,j,k,date;

     for(i=0;i<month-1;i++)

     {sum+=a[i];}

     date=(sum%7+5)%7;

     printf("*********************************************\n");

     printf("SUN    MON   TUE    WED    THU    FRI    SAT\n");

     for(j=0;j<date;j++)

     printf("      ");

     for(k=1;k<=a[month-1];k++)

     {printf("%6d",k);

     if(!((date+k)%7)) printf("\n");}

     printf("\n");

     }

温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-10-13
//花了好长时间弄好了,不知道你满意不

#include <stdio.h>

/*该函数有两个参数 days是要显示的月份的天数, weekday是本月第一天是星期几 */
void month_display(int days,int weekday)
{
int i=0;
printf("\n");
while(i++<weekday) printf("\t");
for(i=0;i<days;i++)
{
if(i%7+weekday == 7) printf("\n");
printf("%d\t",i+1);
}
printf("\n");
}

void proc()
{
int i,inkey,beforedays=0;
int daysofmonth[12]={31,28,31,30,31,30,31,31,30,31,30,31};
char *weekday[7]={"SUN","MON","TUE","WED","THU","FRI","SAT"};

do{
printf("Enter month in 2010 to display calendar (1-12):");
scanf("%d",&inkey);
if(inkey>12||inkey<1) printf("ERROR- Enter month in range of (1-12)!\n");
}while(inkey>12||inkey<1);

printf("****************************************************\n");
for(i=0;i<7;i++) printf("%s\t",weekday[i]);

//计算要求月份以前所以月份天数和,用来计算本月处是周几 (beforedays+5)%7
for(i=0;i<inkey-1;i++) beforedays+=daysofmonth[i];

month_display(daysofmonth[inkey-1],(beforedays+5)%7);
printf("****************************************************\n");
}

int main()
{
char key = 'y';
while( key != 'N' && key != 'n' )
{
proc();
printf("Would you like to display another month (y/n) ?");
getchar();
scanf("%c",&key);
}
return 0;
}
相似回答
大家正在搜