C語言打印某一年中某月的日歷
在做學(xué)校作業(yè)發(fā)現(xiàn)的一道不錯(cuò)的練手題目,記錄下來方便復(fù)習(xí)
大致思路:
- ① 判斷輸入的年份是否閏年;
- ② 計(jì)算輸入月份的第一天是該年的第幾天;
- ③ 計(jì)算輸入月份的第一天是星期幾;
- ④ 輸出。
結(jié)合代碼使用:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int arr1[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
int i = 0;
int year = 0;
int month = 0;
int days = 0;
int week = 0;//判斷第一天周幾
scanf("%d%d", &year, &month);
if((year % 4 == 0 && year % 100 != 0)||(year % 400 == 0))//判斷是否是閏年
{
arr1[2] = 29;//閏年2月29天
}
for (i = 0; i < month; i++)
{
days += arr1[i];//計(jì)算該月第一天是該年多少天
}
days++;//該月第一天,還要把這一天算上
//套用計(jì)算星期幾的公式
week = (year - 1 + (year - 1) / 4 - (year - 1) / 100 + (year - 1) / 400 + days) % 7;
printf(" 日 一 二 三 四 五 六\n");//表頭
int arr2[50] = {0};
for (i = 0; i < week; i++)
{
printf(" ");//整型數(shù)組不能存放空格,因此直接把空格打印出來
}
arr2[week] = 1;
for (i = week + 1; i <= arr1[month]+week-1; i++)//把輸入月份的每一天放到數(shù)組中
{
arr2[i] = arr2[i-1]+1;
}
int count = 0;//記錄已打印幾個(gè)數(shù)據(jù),打印7個(gè)數(shù)據(jù)就換行
i = week;
int flag = 1;//用于記錄是否為第一行,第一行不能用count計(jì)數(shù)方式換行
while (i<=arr1[month]+week-1)//把該月所有天數(shù)都打印出來
{
if (flag <= 7-week)
{
printf("%3d", arr2[i]);
if (flag == 7 - week)//打印夠數(shù)據(jù)后換行
printf("\n");
flag++;
}
else
{
printf("%3d", arr2[i]);
count++;
if (count == 7)
{
count = 0;
printf("\n");
}
}
i++;
}
return 0;
}
實(shí)現(xiàn)結(jié)果:


以上所述是小編給大家介紹的C語言打印某一年中某月的日歷,希望對大家有所幫助。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
C語言全部內(nèi)存操作函數(shù)的實(shí)現(xiàn)詳細(xì)講解
這篇文章主要介紹了C語言全部內(nèi)存操作函數(shù)的實(shí)現(xiàn)詳細(xì)講解,作者用圖文代碼實(shí)例講解的很清晰,有感興趣的同學(xué)可以研究下2021-02-02
深入分析父子線程、進(jìn)程終止順序不同產(chǎn)生的結(jié)果
本篇文章是對父子線程、進(jìn)程終止順序不同產(chǎn)生的結(jié)果進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05
C++編程模板匹配超詳細(xì)的識(shí)別手寫數(shù)字實(shí)現(xiàn)示例
大家好!本篇文章是關(guān)于手寫數(shù)字識(shí)別的,接下來我將在這里記錄我的手寫數(shù)字識(shí)別的從零到有,我在這里把我自己的寫代碼過程發(fā)出來,希望能幫到和我一樣努力求知的人2021-10-10
C++實(shí)現(xiàn)LeetCode(102.二叉樹層序遍歷)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(102.二叉樹層序遍歷),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07
linux c 獲取本機(jī)公網(wǎng)IP的實(shí)現(xiàn)方法
本篇文章是對在linux中使用c語言獲取本機(jī)公網(wǎng)IP的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05
C++ Boost PropertyTree示例超詳細(xì)講解
Boost是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱。Boost庫是一個(gè)可移植、提供源代碼的C++庫,作為標(biāo)準(zhǔn)庫的后備,是C++標(biāo)準(zhǔn)化進(jìn)程的開發(fā)引擎之一,是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱2022-11-11

