本文实例为大家分享了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
|
#include <stdio.h> #include <stdlib.h> #include <string.h> int GetWeek( int year, int month, int day); //求今天是周几。周四就返回 4 。周日 返回 0;非法返回 -1; int GetDaysInMonth( int year, int month); /*求指定月总共多少天*/ int CreateMonthData( int MonthDay[6][7], int year, int month); void PrintMonth( int MonthDay[6][7]); int main() { int MDate[6][7] = {{0}}; int y = 0; int m = 0; int ret = 0; printf ( "Plear input year month:\n" ); scanf ( "%d%d" ,&y,&m); if (m <= 0 || m > 12) { printf ( "Your month is invalid\n" ); return 1; } ret = CreateMonthData(MDate,y,m); if (ret == 0) { PrintMonth(MDate); } return 0; } int CreateMonthData( int MonthDay[6][7], int year, int month) { int week = GetWeek(year,month,1); //返回第几周。 int day = 1; int i = 0; int j = 0; int daysInMonth = GetDaysInMonth(year,month); //当月天数。 if (week < 0) { printf ( "GetWeek Failed\n" ); return -1; } /*给第0行赋值*/ for (j = 0;j < 7;j++) { if (j < week) { MonthDay[0][j] = 0; } else { MonthDay[0][j] = day; day++; } } /*给第1~5赋值*/ for (i = 1;i < 6;i++) { for (j = 0;j < 7;j++) { if (day > daysInMonth) { MonthDay[i][j] = 0; } else { MonthDay[i][j] = day; day++; } } } return 0; } /*将二维数组中本月日期按如下形式显示:以2017年1月为例*/ /* 日 一 二 三 四 五 六 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 0 0 0 0 0 0 0 0 0 0 0 */ void PrintMonth( int MonthDay[6][7]) { int i=0; int j=0; printf ( " 日 一 二 三 四 五 六\n" ); for (i=0;i<6;i++) { for (j=0;j<7;j++) { printf ( "%2d " ,MonthDay[i][j]); } printf ( "\n" ); } } |
第二个文件源码
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
|
#include <stdio.h> #include <stdlib.h> #include <string.h> //润年 int LeapDays[12] = {31,29,31,30,31,30,31,31,30,31,30,31}; //非闰年 int CommonDays[12] = {31,28,31,30,31,30,31,31,30,31,30,31}; //闰年返回 1 ,否则返回 0; int IsLeapYear( int year) { if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) { return 1; } else { return 0; } } // 输入非法 返回 0;否则返回 1; int IsValidDate( int year, int month, int day) { int ret = 1; if (month < 1 || month > 12 || day < 1 || year <= 0) { return 0; } if (IsLeapYear(year)) { if (day > LeapDays[month - 1]) { ret = 0; } } else { if (day > CommonDays[month - 1]) { ret = 0; } } return ret; } /*求这一天是当年的第多少天*/ int GetDaysInYear( int year, int month, int day) { int sum=0; //总天数 int isrun=IsLeapYear(year); //闰年返回 1 ;否则返回 0; int i=0; int j=0; if (isrun) { for (i=0;i<month-1;i++) { sum=sum+LeapDays[i]; } } else { for (i=0;i<month-1;i++) { sum=sum+CommonDays[i]; } } sum=sum+day; return sum; } /*求指定月总共多少天*/ int GetDaysInMonth( int year, int month) { int isrun=IsLeapYear(year); //闰年返回 1 ;否则返回 0; if (isrun) { return LeapDays[month-1]; } else { return CommonDays[month-1]; } } //求今天是周几。周四就返回 4 。周日 返回 0;非法返回 -1; int GetWeek( int year, int month, int day) { int sum = 0; if (0 == IsValidDate(year,month,day)) { printf ( "Input date is invalid\n" ); return -1; } sum = year -1; sum = sum + sum / 4 - sum / 100 + sum / 400; sum = sum + GetDaysInYear(year,month,day); return sum % 7; } |
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/wang_huizhang/article/details/54137220