C语言求高手!!!!!!!!!!!输入年份月份就能显示当月月历,并能看出日期是星期几,并且是否是闰年

如题所述

#include <stdio.h>

//判断是否是闰年
int isLeap(int year)
{
if((year % 4 == 0) && (year % 100 != 0)||(year % 400 == 0))

return 1;
else
return 0;
}

//计算一个月有多少天
int daysOfMonth(int year,int month)
{
int days = 31;

if(month == 4 || month == 6 || month == 9 || month == 11)
days = 30;
if(month == 2)
days = (isLeap(year)?29:28);
return days;
}

//计算从公元元年到今天共有多少天
int totalDays(int year,int month,int day)
{
int sum = 0;
int i,j;

for(i=1;i<year;i++)
{
sum += 365+isLeap(i);
}
for(i=1;i<month;i++)
{
sum += daysOfMonth(year,i);
}
sum += day;
return sum;
}

int main(void)
{
int year,month,day;
int sum;
int weekday;
int i;

do
{
printf("please enter the date(yyyy-mm-dd)\n");
scanf("%d-%d-%d",&year,&month,&day);
}while(year<1600 || month<1 || month>12 || day<1 || day>daysOfMonth(year,month));
if(i = isLeap(year))
{
printf("Your entry is leap year!\n");
}
sum = totalDays(year,month,day);
weekday = sum % 7;

printf("the day is 星期%d\n",weekday);
printf(" su mo tu we th fr sa \n");
weekday = totalDays(year,month,1)%7;
printf("%*s",weekday*3," ");

sum = daysOfMonth(year,month);

for(i=1;i<=sum;i++)
{
printf("%3d",i);
if(++weekday%7==0)
printf("\n");
}
printf("\n");
}
基本实现题目要求,编译通过,调试没有问题。。。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-05-31
#include<stdio.h>
void main()
{
int day;
int mouth;
int year;
int i,j,m,n;
int weekday;
long wantyear;
int sum;
printf("请输入你想查询的年份:");
scanf("%d",&wantyear);
printf("********************************************************\n");
printf(" %d年 \n",wantyear);
printf("________________________________________________________\n");
for(year=1;year<=wantyear;year++)
{
if((year%4==0&&year%100!=0)||year%400==0)
sum+=366;
else sum+=365;
}
weekday=sum%7;
do{
for(mouth=1;mouth<=12;mouth++){
printf("%d月 日 一 二 三 四 五 六\n",mouth);
printf(" ");
// for(i=0;i<=weekday;i++)
// printf(" ");
switch(mouth)
{
case 1:case 3:case 5:case 7:case 8:case 10:case 12:day=31;break;
case 4:case 6:case 9:case 11:day=30;break;
case 2:if((wantyear%4==0&&wantyear%100!=0)||wantyear%400==0) day=29;
else day=28;
break;
}
//printf(" ");
for(i=0;i<=weekday;i++)
printf(" ");

for(j=1,m=weekday;j<=day;j++)
{ m=m++%7;
if((weekday+j)%7==0){

printf("\n");
printf(" ");}
printf("%6d",j);
}
weekday=m;
printf("\n\n\n\n");
}
}
while(mouth<12);
}
第2个回答  2012-06-02
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>

int yue()
{
int i,x,day,j,s=0,sum=365,m,month,c,d;
printf("请输入年份:");
scanf("%d",&x);
printf("请输入月份:");
scanf("%d",&month);
while(1){
int a[12]={31,28,31,30,31,30,31,31,30,31,30,31};
day=(x+(x-1)/4-(x-1)/100+(x-1)/400)%7;
if(x%100==0){
if(x%400==0){
a[1]++;sum++;}
}
else if(x%4==0){
a[1]++;sum++;}
if(day==0)
day=7;
sum=sum+day;
for(i=0;i<12;i++){
if(i==month-1){
printf("%d年%d月:\n\n",x,month);
printf(" SUN MON TUE WED THU FRI SAT\n");}
{for(j=1;j<=a[i];j++)
{if(j==1)
for(m=0;m<day%7*5;m++)
if(i==month-1)
printf(" ");
if(i==month-1)
printf("%5d",j);
if((day+j)%7==0)
if(i==month-1)
printf("\n");}
day=(day+a[i])%7;}
}
c=getch();
if(c==27)
return 0;
d=getch();
if(c==72&&d==224||c==224&&d==72)
{system("cls");x--;}
else if(c==224&&d==80||c==80&&d==224)
{system("cls");x++;}
else if(c==75&&d==224||c==224&&d==75)
{system("cls");month--;
if(month<=0)
{x--;month=12;}}
else if(c==77&&d==224||c==224&&d==77)
{system("cls");month++;
if(month>12)
{month=1;x++;}}
else break;
}}

int second(int year, int month, int days)
{
static int mdays[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30 };
int i, y = year - 1;
for (i=0; i<month; ++i) days += mdays[i];
if (month>2)
{
if (((year%400)==0) || ((year&3)==0 && (year%100))) ++days;
}
return (y+y/4-y/100+y/400+days)%7;
}

void secondproblem()
{
int year,month,day,w;
static char* wday[]={ "日","一","二","三","四","五","六" };
printf("请输入年份:\n");
scanf("%d",&year);
printf("请输入月份:\n");
scanf("%d",&month );
printf("请输入日期:\n");
scanf("%d",&day);
if((year%4==0&&year%100!=0||year%400==0)==1)
printf("%d年 是闰年\n", year);
else
printf("%d年 是平年\n", year);
w = second(year,month,day);
printf("%d年%d月%d日 是星期%s.\n\n", year, month, day, wday[w]);

}

void ShowMenu()
{
char *str[4]={"请选择:","1:输出月历","2:输出星期几+公历节日","3:退出",};
int i;
for(i=0;i<4;i++)
printf("%s\n",str[i]);
}
int main()
{
int a;
system("cls");
do{
ShowMenu();
printf("请输入您的选择:");
scanf("%d",&a);
switch(a)
{
case 1:
yue();
break;
case 2:
secondproblem();
break;
case 3:
break;

}
}while(a!=3);
return 0;
}
相似回答