c语言 二维数组和指针数组实现日历
时间: 2024-01-29 19:38:54 浏览: 122
以下是用二维数组和指针数组实现日历的C语言代码:
```
#include <stdio.h>
int main()
{
int year, month, days, i, j, k;
int calendar[6][7]; // 二维数组
int *p[6]; // 指针数组
printf("请输入年份和月份(例如:2022 11):");
scanf("%d %d", &year, &month);
// 计算该月有多少天
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;
}
// 计算该月的第一天是星期几
int weekday = 0;
for (i = 1900; i < year; i++) {
if ((i % 4 == 0 && i % 100 != 0) || (i % 400 == 0)) {
weekday += 366 % 7;
} else {
weekday += 365 % 7;
}
}
for (i = 1; i < month; i++) {
if (i == 2) {
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
weekday += 29 % 7;
} else {
weekday += 28 % 7;
}
} else if (i == 4 || i == 6 || i == 9 || i == 11) {
weekday += 30 % 7;
} else {
weekday += 31 % 7;
}
}
weekday = (weekday + 1) % 7;
// 初始化二维数组和指针数组
for (i = 0; i < 6; i++) {
p[i] = calendar[i]; // 指针数组指向二维数组的每一行
for (j = 0; j < 7; j++) {
calendar[i][j] = 0;
}
}
// 填充日期
k = 1;
for (i = 0; i < 6; i++) {
if (i == 0) {
for (j = weekday; j < 7; j++) {
calendar[i][j] = k++;
}
} else {
for (j = 0; j < 7 && k <= days; j++) {
calendar[i][j] = k++;
}
}
}
// 打印日历
printf(" %d年%d月\n", year, month);
printf("日 一 二 三 四 五 六\n");
for (i = 0; i < 6; i++) {
for (j = 0; j < 7; j++) {
if (calendar[i][j] == 0) {
printf(" ");
} else {
printf("%2d ", calendar[i][j]);
}
}
printf("\n");
}
return 0;
}
```
该程序首先读取年份和月份,然后计算该月有多少天和该月的第一天是星期几。接着使用二维数组和指针数组来存储和操作日历数据,最后打印出日历。
阅读全文