C语言——日历显示
在Linux中cal命令显示系统月历与日历。
使用C语言复复刻“cal”命令的显示。
main.c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
// 获取指定日期是星期几
int getWeekday(int year, int month, int day) {
if (month < 3) {
month += 12;
year--;
}
int c = year / 100;
year %= 100;
int w = (c / 4 - 2 * c + year + year / 4 + 13 * (month + 1) / 5 + day - 1) % 7;
return (w + 7) % 7;
}
// 显示每个月的一行的日历
int show_month_line(int year, int month, int day) {
int week = getWeekday(year, month, day);
int count = 7;
// 判断闰年
int isLeapYear = (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
int months[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if (isLeapYear) {
months[1] = 29;
}
for (int i = 0; i < week; i++) {
printf(" ");
count--;
}
for (int i = 0; i < count; i++) {
if (day <= months[month - 1]) {
printf("%3d", day);
day++;
} else {
printf(" ");
}
}
return day;
}
// 显示每三个月一组的日历
void show_three_months(int year, int start_month) {
char *month_names[] = {"January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December"};
for (int i = start_month; i < start_month + 3; i++) {
printf("%10s %d%7s", month_names[i - 1], year," ");
}
printf("\n");
for (int i = start_month; i < start_month + 3; i++) {
printf(" Su Mo Tu We Th Fr Sa ");
}
printf("\n");
int day[3] = {1, 1, 1};
for (int i = 0; i < 6; i++) {
for (int j = start_month; j < start_month + 3; j++) {
day[j - start_month] = show_month_line(year, j, day[j - start_month]);
printf(" ");
}
printf("\n");
}
printf("\n");
}
// 显示全年的日历
void show_year(int year) {
for (int i = 1; i <= 12; i += 3) {
show_three_months(year, i);
}
}
int main() {
system("color 0A");
show_year(2025);
return 0;
}
结果对比
在main函数中调用show_year函数,参数为所要查询的月份,即可在终端显示。
对比Linux中的显示,还原度还是可以的。
相关文章
【数据结构】——哈夫曼树
速通回忆 这里是完整的代码和运行结果,可以直接选择看下面代码的思路去快速回忆哈夫曼树,或从下面理论部分开始学习 ``` #include "stdio.h" #include "stdlib.h" /* 哈夫曼树结点的结构体 */ typedef struct { int weight; /* 权重 */ int parent; /* 父母结点下标 */ int l...
c
强化C【C语言笔记】——位运算
位运算符C语言提供了六种位运算符 - &:按位与 - !:按位或 - ^:异或 - ~:取反 - <<:左移 - \>>:右移 按位与运算 **其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1,否则为0** 按位与运算通常用来对某些位清0 按位或运算 **其功能是参与运算的两数各对应的二进位相或。只要对应的二个二进位有一个为1时,结果位就...
c
C语言中规中矩的大树
**没事干,写个树玩玩,真正的“撸树”** 在Ubuntu终端、VScode终端显示 代码 ``` #include "stdio.h" int main(){ int high = 5; //层高 int count = 5; //层数 int start; //每层开始*数 int...
c