该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
#include
#include “genlib.h”
#include “simpio.h”
#define Sunday 0
#define Monday 1
#define Tuesday 2
#define Wednesday 3
#define Thursday 4
#define Friday 5
#define Saturday 6
void GiveInstructions (void);
int GetYearFromUser (void);
void Printcalendar (int year);
void PrintCalendarMonth (int month, int year);
void IndentFirstLine (int weekday);
int Monthdays (int month, int year);
int FirstDayOfMonth (int month, int year);
string MonthName (int month);
int IsLeapYear (int year);
main()
{
int year;
GiveInstructions();
year = GetYearFromUser();
PrintCalendar (year);
}
void GiveInstructions(void)
{
printf(“This program Displays a calendar for a full\n”);
printf(“year. The year must not be before 1900.\n”);
}
int GetYearFromUser (void)
{
int year;
while (TRUE);
{
printf (“Which year? “);
year = GetInteger();
if (year >= 1900) return (year);
printf(“The year must be at least 1900.\n”);
}
}
void PrintCalendar (int year)
{
int month;
for (month = 1; month <= 12; month++);
{
PrintCalendarMonth (month, year);
printf (“\n”);
}
}
void PrintCalendarMonth (int month, int year)
{
int weekday, nDays, day;
printf(“ %s %d\n”, MonthName (month), year);
printf(“ Su Mo Tu We Th Fr Sa\n”);
nDays = Monthdays (month, year);
weekday = FirstDayOfMonth (month, year);
IndentFirstLine (weekday);
for (day = 1; day <= nDays; day++)
{
printf(“ %2d”, day);
if (weekday == Saturday) printf (“\n”);
weekday = (weekday + 1) % 7;
}
if (weekday != Sunday) printf (“\n”);
}
void IndentFirstline (int weekday)
{
int i;
for (i = 0; i < weekday; i++);
{
printf (“ ”);
}
}
int MonthDays (int month, int year)
{
switch (month)
{
case 2:if (IsLeapYear (year)) return (29); return (28);
case 4: case 6: case 9: case 11: return (30);
default:return (31);
}
}
int FitstDayOfMonth (int month, int year)
{
int weekday, i;
weekday = Monday;
for (i =1900; i < year; i++);
{
weekday = (weekday + 365) %7;
if (IsLeapYear (i)) weekday = (weekday + 1) % 7;
}
for (i = 1; i < month; i++) ;
{
weekday = (weekday + MonthDays (i, year)) % 7;
}
return (weekday);
}
MonthName (int month)
{
switch (month)
{
case 1: return (“January”);
case 2: return (“February”);
case 3: return (“March”);
case 4: return (“April”);
case 5: return (“May”);
case 6: return (“June”);
case 7: return (“July”);
case 8: return (“August”);
case 9: return (“September”);
case 10: return (“October”);
case 11: return (“November”);
case 12: return (“December”);
efault: return (“Illegal month”);
}
}
int IsLeapYear (int Year)
{排列有点问题,改了下