c语言简单万年历实训报告
时间: 2023-07-03 13:28:22 浏览: 225
C语言实训万年历
以下是一个简单的C语言万年历实现的报告:
1. 实验目的
通过编写一个简单的C语言程序,实现一个万年历,加深对C语言的掌握和理解。
2. 实验环境
- 操作系统:Windows 10
- 开发环境:Dev-C++ 5.11
3. 实验过程
万年历是一个比较常见的小项目,其主要的实现思路是根据用户输入的年份和月份,计算出该月的天数以及该月1号是星期几,然后在控制台中输出一个类似于日历的视图。具体过程如下:
3.1 用户输入
首先,需要让用户输入需要显示的年份和月份,可以使用scanf函数来读取用户的输入:
```c
int year, month;
printf("请输入年份:");
scanf("%d", &year);
printf("请输入月份:");
scanf("%d", &month);
```
3.2 计算月份天数
接下来,需要计算出该月的天数。可以通过判断月份是否为2月来确定该月的天数。如果是2月,需要判断是否为闰年,闰年的2月有29天,非闰年的2月只有28天。如果不是2月,则根据月份的奇偶性来确定该月的天数,其中奇数月有31天,偶数月有30天。
```c
int days;
if (month == 2) {
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
days = 29;
} else {
days = 28;
}
} else {
if (month == 4 || month == 6 || month == 9 || month == 11) {
days = 30;
} else {
days = 31;
}
}
```
3.3 计算1号是星期几
根据公历的规律,每个月1号的星期几是可以计算出来的。这里采用蔡勒公式来计算,具体实现如下:
```c
int dayOfWeek(int year, int month, int day) {
if (month == 1 || month == 2) {
month += 12;
year--;
}
int c = year / 100;
int y = year % 100;
int m = month;
int d = day;
int w = (c / 4) - 2 * c + y + (y / 4) + (13 * (m + 1) / 5) + d - 1;
while (w < 0) {
w += 7;
}
return w % 7;
}
int weekDay = dayOfWeek(year, month, 1);
```
3.4 输出日历视图
最后,根据月份的天数和1号的星期几,可以在控制台上输出一个类似于日历的视图。具体实现可以使用循环来输出每一天的日期,并根据星期几的不同来控制输出格式。
```c
printf("日 一 二 三 四 五 六\n");
for (int i = 0; i < weekDay; i++) {
printf(" ");
}
for (int i = 1; i <= days; i++) {
printf("%2d ", i);
if ((i + weekDay) % 7 == 0) {
printf("\n");
}
}
```
4. 实验结果
编译运行以上代码,可以在控制台上输出一个类似于日历的视图,例如:
```
请输入年份:2022
请输入月份:10
日 一 二 三 四 五 六
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
```
5. 实验总结
通过本次实验,我深入理解了C语言的基本语法和控制结构,并学会了如何使用C语言来实现一个小项目。在实现万年历的过程中,我学会了如何处理日期和时间相关的问题,以及如何控制输出格式。这对于我的日后编程学习和工作都有很大的帮助。
阅读全文