那年曾經的C ,列印萬年曆

2021-09-10 08:08:51 字數 2549 閱讀 3249

當年大一,程式設計開始於彙編的枯燥,接下來學習c++課程,伴隨著上機熟悉語法,在學校機房待著,想也無事,何不用已學的語法列印個日曆玩玩。首先想到的是簡單點的每個月日曆依次列印,即1 * 12格式,而且需要手動輸入1月1日是星期幾,後來實現了,乾脆試試3 * 4格式的日曆吧,在網上查詢自動計算當前日期是星期幾的公式,只要正確獲取到需要列印年份1月1日是星期幾,就可以列印全能日曆了。

這幾天發現當時寫的**還在,故整理執行起來,也算是回憶下大學時光了。

在linux/unix系統中可以使用cal命令來檢視日曆。

#include#includeusing namespace std;

#define error_message "引數範圍: 1900 - 9999"

#define calendar_head " 日 一 二 三 四 五 六 日 一 二 三 四 五 六 日 一 二 三 四 五 六"

#define days_week 7

int is_leap(int);

int month_days(int, int);

int fill_data(int, int, int*);

void print(int*, int, int);

int main(int argc, char* ar**)

// 得到輸入年份引數

int year = atoi(ar**[1]);

// 由於歷史上對日曆修改過,例如2023年9月2日後一天是9月14日,為減小複雜度,我們計算1900之後的日曆,也可以使用蔡勒公式計算某一天是星期幾

if(year < 1900 || year > 9999)

cout << setw(36) << year << endl;

// 計算2023年1月1日到輸入年份1月1日之間有多少天,每四年中有乙個閏年,加上閏年的天數,再者2023年1月1日是星期一,故再加1

int total_days = (year - 1900) * 365 + (year - 1900 - 1) / 4 + 1;

// 2023年到2023年之間每四年有乙個閏年,而2200、2300等這些世紀年不是閏年,需要減去,例如計算2023年之前的天數需要減去2023年少的1天

// 計算2023年之前的天數需要減去2天,2301減去3天,2401減去3天,2501減去4天。。。

if(year > 2100)

// 計算這一年的1月1日是星期幾

int first_day = total_days % days_week;

// 用於累計一年中的天數

int days;

for(int i = 0, month = 1; i < 4; i++), a2[42] = , a3[42] = ;

cout << setw(12) << month << setw(23) << (month + 1) << setw(23) << (month + 2) << endl;

cout << calendar_head << endl;

days = month_days(month, year);

first_day = fill_data(first_day, days, a1) % days_week;

days = month_days(month + 1, year);

first_day = fill_data(first_day, days, a2) % days_week;

days = month_days(month + 2, year);

first_day = fill_data(first_day, days, a3) % days_week;

month += 3;

// 輸出向右對齊

cout << setiosflags(ios::right);

// 列印資料

for(int j = 0, start = 0, end = 6; j < 6; j++)

} return 0;}/*

* 判斷是否是閏年

*/int is_leap(int year)

return 0;}/*

* 計算某月有多少天

*/int month_days(int month, int year)

if(month == 4 || month == 6 || month == 9 || month == 11)

if(month == 2 && is_leap(year))

return 28;}/*

* 根據每個月的第一天是星期幾,往陣列中新增資料

*/int fill_data(int first_day, int days, int *a)

return first_day;}/*

* 42個資料中,如果值為0,則列印空白

*/void print(int *a, int start, int end)else

start++;

}}

使用gcc編譯執行

C語言列印萬年曆

date.h檔案如下 列印萬年曆從1900年起 ifndef date h define date h include define out of year 1 是否是閏年 bool isleap int year 從year到1900年間閏年個數 int leapyearnum int year ...

java如何列印萬年曆

scanner input new scanner system.in system.out.println 萬年曆 int year 0 int month 0 system.out.print 請輸入年份 year input.nextint system.out.print 請輸入月份 mon...

C實現萬年曆

要求 輸入年份輸出這一年的日曆 注意 公元1900年一月一日是星期一,這一年是平年 思路 獲取輸入的年份y,首先獲取從公元1900年到 y 1 年 的天數,然後獲得該年份的第一天是星期幾,進行輸出。這次例項,我花費了很長的時間,最後發現錯誤的原因出在在求某一年是閏年還是平年的時候,我沒有田間retu...