C语言编程练习33:日历本
题目描述
我们经常需要使用日历,所以需要一个能生成日历的程序。
先要求你写一个程序,只需要输入年份,就能生成正确的日历。
先要求你写一个程序,只需要输入年份,就能生成正确的日历。
输入
输入包含多组测试数据。每组输入一个整数Y(1800<=Y<=2100),表示公元年份。
输出
对于每组输入,输出对应的日立本。选中下面的输出样例查看具体的输出格式,注意空格的输出。
样例输入 Copy
2010
样例输出 Copy
2010 January February March Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa 1 2 1 2 3 4 5 6 1 2 3 4 5 6 3 4 5 6 7 8 9 7 8 9 10 11 12 13 7 8 9 10 11 12 13 10 11 12 13 14 15 16 14 15 16 17 18 19 20 14 15 16 17 18 19 20 17 18 19 20 21 22 23 21 22 23 24 25 26 27 21 22 23 24 25 26 27 24 25 26 27 28 29 30 28 28 29 30 31 31 April May June Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa 1 2 3 1 1 2 3 4 5 4 5 6 7 8 9 10 2 3 4 5 6 7 8 6 7 8 9 10 11 12 11 12 13 14 15 16 17 9 10 11 12 13 14 15 13 14 15 16 17 18 19 18 19 20 21 22 23 24 16 17 18 19 20 21 22 20 21 22 23 24 25 26 25 26 27 28 29 30 23 24 25 26 27 28 29 27 28 29 30 30 31 July August September Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa 1 2 3 1 2 3 4 5 6 7 1 2 3 4 4 5 6 7 8 9 10 8 9 10 11 12 13 14 5 6 7 8 9 10 11 11 12 13 14 15 16 17 15 16 17 18 19 20 21 12 13 14 15 16 17 18 18 19 20 21 22 23 24 22 23 24 25 26 27 28 19 20 21 22 23 24 25 25 26 27 28 29 30 31 29 30 31 26 27 28 29 30 October November December Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa 1 2 1 2 3 4 5 6 1 2 3 4 3 4 5 6 7 8 9 7 8 9 10 11 12 13 5 6 7 8 9 10 11 10 11 12 13 14 15 16 14 15 16 17 18 19 20 12 13 14 15 16 17 18 17 18 19 20 21 22 23 21 22 23 24 25 26 27 19 20 21 22 23 24 25 24 25 26 27 28 29 30 28 29 30 26 27 28 29 30 31 31
机构平台标程
#include <stdio.h>
char *cal_title[12][2] =
{
{
" January ",
"Su Mo Tu We Th Fr Sa"
},
{
" February ",
"Su Mo Tu We Th Fr Sa"
},
{
" March ",
"Su Mo Tu We Th Fr Sa"
},
{
" April ",
"Su Mo Tu We Th Fr Sa"
},
{
" May ",
"Su Mo Tu We Th Fr Sa"
},
{
" June ",
"Su Mo Tu We Th Fr Sa"
},
{
" July ",
"Su Mo Tu We Th Fr Sa"
},
{
" August ",
"Su Mo Tu We Th Fr Sa"
},
{
" September ",
"Su Mo Tu We Th Fr Sa"
},
{
" October ",
"Su Mo Tu We Th Fr Sa"
},
{
" November ",
"Su Mo Tu We Th Fr Sa"
},
{
" December ",
"Su Mo Tu We Th Fr Sa"
}
};
int month[12][6][7];
int days_num[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int first_day(int year);
int sp_year (int year);
int main (void)
{
int Y;
while (scanf ("%d", &Y) == 1)
{
for (int a = 0; a < 12; a++)
for (int b = 0; b < 6; b++)
for (int c = 0; c < 7; c++)
month[a][b][c] = 0;
//printf ("偏移%d\n", first_day (Y));
printf (" %d \n\n", Y);
if (sp_year (Y))
days_num[1] = 29;
int first = first_day (Y);
for (int x = 0; x < 12; x++)
{
for (int i = 0; i < days_num[x]; i++)
{
*(*(month[x])+(i + first)) = i + 1;
}
first = (first + days_num[x]) % 7;
}
//printf ("%d\n", *(*(month[0])+33));
for (int y = 1; y <= 4; y++)
{
for (int j = 0; j < 2; j++)
{
for (int x = 1; x <= 3; x++)
{
printf ("%s", cal_title[(y - 1) * 3 + x - 1][j]);
printf (x == 3? "\n": " ");
}
}
for (int j = 0; j < 6; j++)
{
for (int x = 1; x <= 3; x++)
{
for (int i = 0; i < 7; i++)
{
if (month[(y - 1) * 3 + x - 1][j][i] == 0)
printf (" ");
else
printf ("%2d", month[(y - 1) * 3 + x - 1][j][i]);
if (i != 6) printf (" ");
}
printf (x == 3? "\n": " ");
}
}
}
}
return 0;
}
int first_day (int year)
{
int first = 3;
for (int i = 1800; i < year; i++)
{
first++;
if (sp_year (i))
{
first++;
}
}
return (first % 7);
}
int sp_year (int year)
{
if (year % 100 == 0)
{
return year % 400 == 0;
}
else
return year % 4 == 0;
}

浙公网安备 33010602011771号