列印指定年份的日曆

来源:https://www.cnblogs.com/TomHe789/archive/2020/03/05/12423209.html
-Advertisement-
Play Games

輸入年份,列印出該年的日曆: #include <stdio.h> void PrintEnter(int mod); void PrintSkip(int lastday); void PrintTitle(int year,int month); int JudgeDays(int year, ...


輸入年份,列印出該年的日曆:

#include <stdio.h>
void PrintEnter(int mod);
void PrintSkip(int lastday);
void PrintTitle(int year,int month);
int JudgeDays(int year, int month);
void PrintMonth(int year, int mod, int lastday);
int main()
{
    int year;
    //每一個月的最後一天
    int lastday = 1;
    printf("請輸入年份:");
    scanf("%d",&year);
    //判斷這一年的第一天為星期幾
    //公式: (5(year-1)/4-(year-1)/100+(year-1)/400)%7+1
    int flag = (5 * (year-1) / 4 - (year-1) / 100+(year-1)/400) % 7+1;

    //計算開頭有幾個\t
    int skip = flag - 1;

    //判斷是否需要換行 判斷每月最後一天
    int mod = skip;

    //直接調用PrintMonth函數列印月曆
    PrintMonth(year,mod,lastday);
    return 0;
}

/**
 * @brief JudgeDays 判斷月份的天數
 * @param year      判斷年份是否為閏年
 * @param month     需要判斷的月份
 * @return          返回值為月份的天數
 */
int JudgeDays(int year, int month) {

        if(month==4||month==6||month==9||month==11)
            return 30;
        else if(month==2) {
            //判斷年份是否為閏年
            if(year % 400 == 0 || (year % 100 !=0 && year % 4 == 0))
                return 29;
            else
                return  28;
        }
        else
            return 31;

}

/**
 * @brief PrintTitle    列印月份的開頭
 * @param month         需要列印的月份
 */
void PrintTitle(int year, int month) {
    printf("\n");
    printf("%d年%d月\n",year,month);
    printf("--------------------------------\n");
    printf("一   二   三   四   五   六   日\n");
}

/**
 * @brief PrintSkip 解決每一月開頭的空格問題
 * @param lastday   上一月份的最後一天
 */
void PrintSkip(int lastday) {
    int i;
    for(i = 0;i < lastday;i++) {
        printf("     ");
    }
}

/**
 * @brief PrintEnter    判斷是否換行
 * @param mod           換行的標誌(判斷是否是七的倍數)
 */
void PrintEnter(int mod) {
    if(mod % 7 ==0)
        printf("\n");
}

/**
 * @brief PrintMonth    列印月曆
 * @param year          月曆的年數
 * @param mod           換行的標誌
 * @param lastday       每個月最後一天的標識
 */
void PrintMonth(int year, int mod, int lastday) {

    //列印月曆的頭
    PrintTitle(year,1);

    //列印空格
    PrintSkip(lastday);

    //列印一月月曆
    int i;
    for(i = 1;i <= 31;i++) {
        mod++;
        printf("%-5d",i);

        //換行
        PrintEnter(mod);

        //判斷一月的最後一天
        if(i == 31)
            lastday = mod % 7;
    }

    //每列印一個月換一行
    printf("\n");
    int month;
    for(month = 2;month < 13;month++) {

        //列印月曆的頭
        PrintTitle(year,month);

        //列印空格
        PrintSkip(lastday);

        //列印二月到十二月的日曆
        int i;
        for(i = 1;i <= JudgeDays(year, month);i++) {
            mod++;
            printf("%-5d",i);

            //換行問題
            PrintEnter(mod);

            //判斷每月的最後一天
            if(i == JudgeDays(year, month))
                lastday = mod % 7;
        }
        //每列印一個月換一行
        printf("\n");
    }
}

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、內容回顧 面向對象 單例模塊 單例模塊:設計模式 單例的應用場景 logging模塊 記錄日誌的 記錄錯誤、操作日誌 給程式員看的:①統計使用;②用來做故障排除的(debug);③記錄錯誤,完成優化代碼的。 logging.basicconig:①使用方便,②不能實現,編碼問題;不能同時向文件和 ...
  • 今日內容 1、mro演算法和super super()表示執行父類的方法。 2、正則表達式和re模塊 1. re模塊本身只是用來操作正則表達式。 (1)正則表達式 匹配字元串 表單驗證 爬蟲 (4)正則表達式規則(元字元,量詞) 3、量詞 ...
  • 一、正則常用的方法 1.match:從開始位置開始查找,一次匹配 2.sear​ch:從任何位置查找,一次匹配 3.findall​:全部匹配,返回列表 4.finditer​:全部匹配,返回迭代器 5.​split:分割字元串,返回列表 ​6.sub:替換 7.匹配中文 中文unicode編碼[u ...
  • Socket(套接字) 介紹 UDP 和 TCP 協議之前,先熟悉下 socket 的基本概念。 基本概念 Socket 是通信的基石,是支持 TCP/IP 協議的網路通信的基本操作單元,在網路通信過程中端點的一種抽象表示。網路中使用 Socket 傳輸數據是一種特殊的網路 I/O。 工作模式 打開 ...
  • qsort()函數的使用 qsort()函數是 C 庫中實現的快速排序演算法,包含在 頭文件中,其時間複雜度為 O(nlogn)。函數原型如下: 此函數需要四個參數。 第一個參數是需要排序的數組的基地址,因為是 類型,所以此函數可以給任何類型的數組進行排序; 第二個參數是待排序的數量(size_t 是 ...
  • 基於SSM開發校園外賣零食購物商城系統 開發環境: Windows操作系統開發工具: Eclipse+Jdk+Tomcat+MySql資料庫運行效果圖 源碼及原文鏈接:https://javadao.xyz/forum.php?mod=viewthread&tid=113 ...
  • 基於Struts2開發寵物領養系統的設計與實現 開發環境: Windows操作系統開發工具:MyEclipse+Jdk+Tomcat+MySQL資料庫運行效果圖 源碼及原文鏈接:https://javadao.xyz/forum.php?mod=viewthread&tid=116 ...
  • 函數只能面向過程,來回互相調用後順序執行, 簡單的編碼項目,還能應付的過來, 複雜的大型項目,調用多了,就會亂。 如何才能不亂呢,可嘗試下, 面向對象類的概念, 將現實世界的事物抽象成對象,將現實世界中事物的關係抽象成類, 即要秉著“萬物皆對象,一切皆可歸類”的中心思想, 去建立你的代碼模型。 一聽 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...