c语言打印日历,大神帮我看看代码。。。

#include<stdio.h>#include<stdlib.h>
int isLeap(int year);
int GetMonthDays(int year,int month);
int GetWeekDay(int year,int month,int day);
void PrintMonthCalender(int startDay,int days);
int a,c,m,n;
int main(void){
int b;
printf("please input year and month:\n");
scanf("%d%d",&a,&b);
printf("\t\t\t\t%d--%d\n",a,b);
printf("\tSun.\tMon.\tTue.\tWed.\tThu.\tFri.\tSat.\t\n");
c=isLeap(a);
m=GetMonthDays(a,b);
n=GetWeekDay(a,b,1);
PrintMonthCalender(n,m);
system("pause");
return 0;
}
int isLeap(int year){
if((year%4==0&&year%100!=0)||year%400==0)
return 1;
else
return 0;
}
int GetMonthDays(int year ,int month){
switch(month)
{
case 1:
case 5:
case 3:
case 7:
case 8:
case 10:
case 12:
return 31; break;
case 4:
case 6:
case 9:
case 11:
return 30; break;
case 2:
if(c==1)
return 29 ;break;
if(c==0)
return 28 ;break;
}
}
int GetWeekDay(int year,int month,int day){
int result=0,days,weekDay;
switch(month-1)
{
case 11: result+=30;
case 10: result+=31;
case 9: result+=30;
case 8: result+=31;
case 7: result+=31;
case 6: result+=30;
case 5: result+=31;
case 4: result+=30;
case 3: result+=31;
case 2: result+=30;
case 1: result+=31;
case 0: result+=day;
}
if (c==1)
result++;
days=(a-1)*365+(a-1)/400-(a-1)/100+(a-1)/4;
days+=result;
weekDay=days%7;
return weekDay;
}
void PrintMonthCalender(int startDay,int days){
int i=2;
switch(startDay)
{
case 6: printf("\t");
case 5: printf("\t");
case 4: printf("\t");
case 3: printf("\t");
case 2: printf("\t");
case 1: printf("\t");
case 0: printf("\t1");break;
}
for(;i<=m;i++)
{
startDay++;
printf("\t%d",i);
if(startDay==6)
printf("\n");
}
}这是我的代码,能运行但是结果不正确,大家给我改一下。。

#include<stdio.h>

#include<stdlib.h>

int isLeap(int year);

int GetMonthDays(int year,int month);

int GetWeekDay(int year,int month,int day);

void PrintMonthCalender(int startDay,int days);

int a,c,m,n;

 

int main(void)

{

    int b;

    printf("please input year and month:\t");

    scanf("%d%d",&a,&b);

   

    printf("\t\t\t\t%d--%d\n",a,b);

   

    printf("\tSun.\tMon.\tTue.\tWed.\tThu.\tFri.\tSat.\t\n");

    c=isLeap(a);

    m=GetMonthDays(a,b);

    n=GetWeekDay(a,b,1);

    PrintMonthCalender(n,m);

   

    printf("\n");

    system("pause");

    return 0;

}

 

int isLeap(int year)

{

    if((year%4==0&&year%100!=0)||year%400==0)

        return 1;

    else 

        return 0;

}

 

int GetMonthDays(int year ,int month)

{

    switch(month)

    {

    case 1: 

    case 5:

    case 3: 

    case 7:

    case 8: 

    case 10:

    case 12:

         return 31; break;

   

    case 4:

    case 6:

    case 9:

    case 11:

         return 30; break;

   

    case 2:

         if(c==1)  return 29 ;break;

         if(c==0)  return 28 ;break; 

    }

}

 

int GetWeekDay(int year,int month,int day)

{

    int result=0,days,weekDay;

    switch(month-1)

    {

        case 11: result += 30;

        case 10: result += 31;

        case 9:  result += 30;

        case 8:  result += 31;

        case 7:  result += 31;

        case 6:  result += 30;

        case 5:  result += 31;

        case 4:  result += 30;

        case 3:  result += 31;

        case 2:  result += 30;

        case 1:  result += 31;

        case 0:  result += day;

    }

   

    if (c==1) result++;

    days=(a-1)*365+(a-1)/400-(a-1)/100+(a-1)/4;

    days+=result;

    weekDay=days%7;

    return weekDay;

}

 

void PrintMonthCalender(int startDay,int days)

{

    int i=3;                                         /* ä»Ž3开始循环 */

    switch(startDay)

    {

        case 6: printf("\t");

        case 5: printf("\t");

        case 4: printf("\t");

        case 3: printf("\t");

        case 2: printf("\t");

        case 1: printf("1\t");                /* ä»Ž1 å¼€å§‹*/

        case 0: printf("2");break;        /*  2固定在1后面 */

    }

    for(;i<=m;i++)

    {

        startDay++;

        printf("\t%d",i);

        if( startDay%7 == 0 )  printf("\n");   /* ä¸€è¡Œ7个数据*/

    }

}


运行效果:

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-11-14
你这不是叫我们给你改一下啊,这得用砍的。
第2个回答  2012-11-16
亲,不管代码长不长,都要养成注释的好习惯哦