-
Notifications
You must be signed in to change notification settings - Fork 0
/
C语言万年历.c
108 lines (93 loc) · 1.84 KB
/
C语言万年历.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#include <stdio.h>
int year,month,day,sum;
int run[12]={31,29,31,30,31,30,31,31,30,31,30,31};
int ping[12]={31,28,31,30,31,30,31,31,30,31,30,31};
//用数组输入闰年和平年各月份的天数
char *weekday[7]={"一","二","三","四","五","六","日"};
void blank()
{
printf("* * * * * * * * * * * * * *\n");
}
void title()
{
printf(" 万 年 历 \n");
}
int runorping(int year) //闰年和平年的天数不同,因此设置不同的返回值
{
int a = year%4;
int b = year%400;
int c = year%100;
if ((a==0 && c!=0) || b==0) {
return 1;
} else {
return 0;
}
}
int difference(int year,int month,int day,int run[],int ping[]) //计算1900年1月1日星期一到输入日期的天数和
{
int i;
int sum = 0;
for (i=1900; i<year; i++) {
int j = runorping(i);
if (j==1) {
sum+=366;
} else {
sum+=365;
}
}
for (i=0; i<month-1; i++) {
if (runorping(year)==1) {
sum+=run[i];
} else {
sum+=ping[i];
}
}
return sum;
}
void print(int sum,int year,int month)
{
int tabnumber = sum%7;
int enter = 7 - tabnumber;
int i;
for (i=0; i<tabnumber; i++) {
printf("\t");
}
if (runorping(year)==1) {
for (i=1; i<=run[month-1]; i++) {
printf("%d\t",i);
if (i==enter || (i-enter)%7==0) {
printf("\n");
}
}
printf("\n");
}
if (runorping(year)==0) {
for (i=1; i<=run[month-1]; i++) {
if (i != day) {
printf("%d\t",i);
} else if (i == day) {
printf("@%d\t",i);
}
if (i==enter || (i-enter)%7==0) {
printf("\n");
}
}
printf("\n");
}
}
int main()
{
scanf("%d%d%d",&year,&month,&day);
blank();
title();
blank();
int i;
for (i=0; i<7; i++) {
printf("%s",weekday[i]);
printf("\t");
}
printf("\n");
int sum = difference(year,month,day,run,ping);
print(sum,year,month);
return 0;
}