每个月上下有星号边框,每两个月在一行的万年历c语言程序
时间: 2024-03-16 19:44:52 浏览: 66
好的,以下是一个简单的万年历程序的C语言代码,其中包括每个月上下有星号边框,每两个月在一行排列。请注意,此代码仅提供参考,您可以根据自己的需求进行修改和优化。
```c
#include <stdio.h>
#include <stdlib.h>
int main()
{
int year, month, day, week, days_in_month, i, j;
printf("请输入年份:");
scanf("%d", &year);
printf("请输入月份:");
scanf("%d", &month);
char *months[] = {"", "一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"};
int days[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; // 每个月的天数
// 判断是否为闰年
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
{
days[2] = 29;
}
// 计算每个月的天数和起始日期
days_in_month = days[month];
int offset = 1;
for(i = 1; i < year; i++)
{
for(j = 1; j <= 12; j++)
{
offset += days[j];
}
if(i % 4 == 0 && i % 100 != 0 || i % 400 == 0)
{
offset++;
}
}
for(i = 1; i < month; i++)
{
offset += days[i];
}
// 计算当月的第一天是星期几
week = offset % 7;
// 打印日历表头
printf("-----------------------------------\n");
printf(" %s %d年\n", months[month], year);
printf("-----------------------------------\n");
printf(" 日 一 二 三 四 五 六\n");
// 打印日历主体
for (i = 0; i < week; i++)
{
printf(" ");
}
for (i = 1; i <= days_in_month; i++)
{
if(week == 0)
{
printf("\n");
}
if(i == 1 || i == days_in_month || (week == 5 && i == 2) || (week == 6 && i == 1))
{
printf("*%2d*", i);
}
else
{
printf(" %2d ", i);
}
week = (week + 1) % 7;
}
printf("\n");
return 0;
}
```
在这个程序中,我们首先输入年份和月份,然后计算当月的天数、起始日期和第一天是星期几。接着,我们输出日历表头和主体,日历主体中包括了每个月上下有星号边框的要求。最后,我们通过控制台输出整个日历。
阅读全文