當年大一,程式設計開始於彙編的枯燥,接下來學習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...