C语言,求助万年历打印问题

zhouchun907 2011-06-13 06:31:42
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define TRUE 1
/*主函数*/
void main()
{
int year;
int PutinYear(void);
year = PutinYear ();
void GetMonth(int year);
GetMonth (year);
}
/*输入年份*/
int PutinYear(void)
{
int year;

while(TRUE)
{
printf("请输入年份(1-3000) : ");
scanf("%d", &year);
if(year > 0&&year<3001)
{
return year;
}
}
}
/*判断是否为闰年*/
int LeapYear(int year)
{
return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
}
/*调用每个月份*/
void GetMonth (int year)
{
int month;
for(month = 1; month <= 12; month++)
{
void PrintMonth(int month, int year);
PrintMonth(month, year);
printf("\n");
}
}

enum{Sunday, Monday, Tuesday, Wednesday,
Thursday, Friday, Saturday};
/*打印万年历*/
void PrintMonth(int month, int year)
{
int weekday, ndays, day;
char *MonthName(int month);
printf(" %s", MonthName(month));/*打印开头一行的月份*/
printf("\n 周日 周一 周二 周三 周四 周五 周六\n");
int MonthDays(int year, int month);
ndays = MonthDays(year, month);
int FirstDay(int year, int month);
weekday = FirstDay(year, month);
void Blank(int weekday);
Blank(weekday);
for(day = 1; day <= ndays; day++)
{
printf(" %4d", day);
if(weekday == Saturday)/* 是星期六就打印换行*/
{
printf("\n");
}
weekday = (weekday + 1) % 7;/* 计算是星期几*/
}
if(weekday != Sunday)
printf("\n");
getch();
}
/*输出每个月份名*/
char *MonthName(int month)
{
char *name[] =
{
"Illegal month", "一月", "二月", "三月",
"四月", "五月", "六月", "七月", "八月",
"九月", "十月", "十一月", "十二月"
};
return (month < 1 || month > 12) ? name[1] : name[month];
}
/*输出每个月份的天数*/
int MonthDays(int year, int month)
{
int LeapYear(int year);
switch(month)
{
case 2 :
if(LeapYear(year))/* 如果是闰年*/
{
return 29;
}
return 28;
case 4 : case 6 : case 9 : case 11 : return 30;
default : return 31;
}
}
/*推算星期*/
int FirstDay(int year, int month)
{
int i, weekday;
weekday = Monday;
for(i = 1; i < year; i++)
{
weekday = (weekday + 365) % 7;
if(LeapYear(i))/* 如果是闰年就加1*/
{
weekday = (weekday + 1) % 7;
}
}
for(i = 1; i < month; i++)
{
int MonthDays(int year, int month);
weekday = (weekday + MonthDays(year, i)) % 7;
}
return weekday;
}

void Blank(int weekday)
{
int i;
for(i = 0; i < weekday; i++)
{
printf(" ");
}
}

这是我编写的万年历 输出时是一次输出一个月 需要改成一次输出一排(两个月为一排) 按回车后再显示下一排 直到显示完12个月
如: 1月 2月

3月 4月
求解~~~
...全文
254 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Ailen 2011-10-12
  • 打赏
  • 举报
回复
这是编程作业吧。。。。。我们曾经也做过。。。
hzc543806053 2011-10-11
  • 打赏
  • 举报
回复
寂寞读南华 2011-10-11
  • 打赏
  • 举报
回复
是啊 看了一下你的程序
赵4老师 2011-10-11
  • 打赏
  • 举报
回复
参考JScript源代码:
1900-2050年超酷百年日历http://download.csdn.net/detail/zhao4zhong1/1211949
偶是江湖中人 2011-10-11
  • 打赏
  • 举报
回复
昨感觉与我发的帖一样的……
ryfdizuo 2011-06-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zhouchun907 的回复:]

能把代码发给我看看么 如果第一行输出1月 2月 那变量不是要全部重写??
[/Quote]
恩,是啊,我看了一下你的程序,是要全部改动的。
zhouchun907 2011-06-13
  • 打赏
  • 举报
回复
能把代码发给我看看么 如果第一行输出1月 2月 那变量不是要全部重写??
ryfdizuo 2011-06-13
  • 打赏
  • 举报
回复
一行一行输出,你程序需要重写一下,例如第一行输出一月信息的同时输出二月的信息。

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧