c语言编程序实现:输入任意一个年份、月份,输出该月份的公历日历(要求用循环控制打印)。 提示: 1.先求出从公元1年1月1日到这个月的1日总共有多少天,并求出这个月的1日是星期几。 2.可以将每个月的天数存入一个数组中,但是不需要将一个月的每一天存入数组中。 输入格式: 输入年份、月份,数据之间以空格分隔。 输出格式: 每项数据占4个字符宽度,右对齐。
时间: 2024-02-16 07:59:41 浏览: 117
以下是C语言编写的程序实现所述功能:
```c
#include <stdio.h>
int main() {
int year, month, days, weekDay, i, j, k, count;
int daysOfMonth[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
char week[7][4] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
printf("Please input the year and month: ");
scanf("%d%d", &year, &month);
// 计算该月第一天是星期几,并计算该月总天数
days = 0;
for (i = 1; i < year; i++) {
if ((i % 4 == 0 && i % 100 != 0) || i % 400 == 0) {
days += 366;
} else {
days += 365;
}
}
for (i = 0; i < month - 1; i++) {
days += daysOfMonth[i];
if (i == 1 && ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)) {
days++; // 闰年二月多一天
}
}
weekDay = (days + 1) % 7; // 公元1年1月1日是星期一,需要加1
// 打印日历
printf("%4s%4s%4s%4s%4s%4s%4s\n", "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat");
count = 0;
for (i = 0; i < weekDay; i++) {
printf(" "); // 打印月份第一天之前的空格
count++;
}
for (i = 1; i <= daysOfMonth[month - 1]; i++) {
printf("%4d", i);
count++;
if (count == 7) {
printf("\n");
count = 0;
}
}
if (count != 0) {
for (i = count; i < 7; i++) {
printf(" "); // 打印月份最后一天之后的空格
}
printf("\n");
}
return 0;
}
```
程序首先通过输入年份和月份,计算出该月第一天是星期几以及该月总天数。接着,程序打印出日历表头,并根据该月第一天是星期几打印出该月第一天之前的空格。然后,程序循环打印出该月的每一天,每打印一天计数器加1,当计数器等于7时换行。最后,程序判断该月最后一天之后是否有空格需要打印,并输出换行符。
阅读全文