【CC++】打印日历
生活随笔
收集整理的這篇文章主要介紹了
【CC++】打印日历
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
根據輸入的年份和月份來輸出該年月的日歷。
- 上圖中每個漢字(一、二…日)占四個字節,右對齊,由于漢字顯示本身就占2個字節,所以只需要在漢字前面多輸出兩個空格就好了。每個日期數字占4個字節,也是右對齊,這樣能使輸出的日歷上下對齊。
- 剩下的事情就是循環輸出這個月的所有日期了,這個月有多少天可以專門用一個函數實現,注意閏年二月(判閏年的函數這里又可以用一次了)是29天。
- 在 1 號前應該留多少空位(如果 1 號是星期 n ,則留 n-1 個空位,每個空位是一個日期的寬度),注意什么時候換行(日期加 1號前空位數量是 7 的倍數則換行)。
要求
- 每個漢字(一、二、…、日)占四個字節,右對齊,由于漢字顯示本身就占2個字節,所以只需要在漢字前面多輸出兩個空格就好了;
- 每個日期數字占4個字節,也是右對齊,這樣能使輸出的日歷上下對齊。
預期輸出
程序
// 包含兩種I/O庫,可以使用任一種輸入輸出方式 #include <stdio.h> #include <iostream> using namespace std;// 函數printMonth:按要求的格式打印某年某月的日歷 // 參數:year-年,month-月 // 返回值:無 void printMonth(int year, int month);// leapYear:判斷閏年 // 參數:y-年 // 返回值:1-是閏年,0-不是閏年 int leapYear(int y) {if((y % 4 == 0 && y % 100 != 0 )|| y % 400 == 0)return 1;return 0; }// 函數whatDay:計算某年某月的1號是星期幾 // 參數:year-年,month-月 // 返回值:1到7--星期1到星期日 int whatDay(int year, int month) {// 1年月日是星期一int w = 1;int i;// 1到year-1都是全年for(i = 1; i < year; i++){if(leapYear(i))w += 366;elsew += 365;}switch(month){case 12: // 加月的w += 30;case 11: // 加月的w += 31;case 10: // 加月的w += 30;case 9: // 加月的w += 31;case 8: // 加月的w += 31;case 7: // 加月的w += 30;case 6: // 加月的w += 31;case 5: // 加月的w += 30;case 4: // 加月的w += 31;case 3: // 加月的if(leapYear(year))w += 29;elsew += 28;case 2: // 加月的天w += 31;case 1: // 1月不加了;}// 得到-6,其中為星期天w = w % 7; // 調整星期天if(w == 0)w = 7;return w; }void printMonth(int year, int month) {int d = whatDay(year, month);int n = 0;cout << " " << "一 " << "二 " << "三 "<< "四 " << "五 " << "六 " << "日" << endl;for (int i = 0; i < d - 1; i++){cout << " ";}switch (month){case 1:n = 31;break;case 2:if (leapYear(year))n = 29;else n = 28;break;case 3:n = 31;break;case 4:n = 30;break;case 5:n = 31;break;case 6:n = 30;break;case 7:n = 31;break;case 8:n = 31;break;case 9:n = 30;break;case 10:n = 31;break;case 11:n = 30;break;case 12:n = 31;break;}for (int i = 1; i < n + 1; i++){if (i < 10)cout << " " << i;elsecout << " " << i;switch (d){case 1:if ((i % 7) == 0)cout << endl;break;case 2:if ((i % 7) == 6)cout << endl;break;case 3:if ((i % 7) == 5)cout << endl;break;case 4:if ((i % 7) == 4)cout << endl;break;case 5:if ((i % 7) == 3)cout << endl;break;case 6:if ((i % 7) == 2)cout << endl;break;case 7:if ((i % 7) == 1)cout << endl;break;}}cout << endl; }int main() {// 年、月int y, m;// 輸入年月cin >> y >> m;// 輸出該年月的日歷printMonth(y,m);return 0; }測試
???????
總結
以上是生活随笔為你收集整理的【CC++】打印日历的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【科普】72名图灵奖获得者的成就
- 下一篇: C++ 圆的面积