使用C語言打印月歷
打印日歷應(yīng)該是程序員入門時(shí)候的一個(gè)基礎(chǔ)練習(xí)。打印一年的日歷有許多不同的實(shí)現(xiàn),我這里提一個(gè)可以實(shí)現(xiàn)的方法。首先需要確定該年是閏年還是平年,閏年的二月是29天,全年是366天;平年二月是28天,全年365天。還需要確定該年的每一天是星期幾。從0001年1月1日是星期一開始,該值可以通過使用該年到元年的總天數(shù)模7來求得。最后考慮怎樣輸出日歷,可以先將日歷存儲(chǔ)在一個(gè)二維數(shù)組里面,也可以直接將它輸出。
#include<stdio.h>
/*判斷是平年還是閏年*/
int IsLeap (int year) {
if((year%4==0)&& (year%100!=0) || (year%400==0))
return 1;
else
return 0;
}
/*計(jì)算今年的第一天是星期幾*/
int FirstWeeday (int year) {
int days = (year-1)*365 + (year-1)/4 - (year-100)/100 + (year-1)/400;
return days%7;
}
/*打印星期*/
void PrintWeedTitl () {
int i;
for(i = 0;i<7;i++){
switch(i) {
case 0 : printf(" Sun ");break;
case 1 : printf("Mon ");break;
case 2 : printf("Tue ");break;
case 3 : printf("Wed ");break;
case 4 : printf("Thu ");break;
case 5 : printf("Fri ");break;
case 6 : printf("Sat ");break;
default : break;
}
}
printf("\n");
}
/*打印月份*/
void PrintMonTitl(int month) {
switch(month) {
case 0 : printf("Jan\n");break;
case 1 : printf("Feb\n");break;
case 2 : printf("Mar\n");break;
case 3 : printf("Apr\n");break;
case 4 : printf("May\n");break;
case 5 : printf("Jun\n");break;
case 6 : printf("Jul\n");break;
case 7 : printf("Aug\n");break;
case 8 : printf("Sep\n");break;
case 9 : printf("Oct\n");break;
case 10 : printf("Nov\n");break;
case 11 : printf("Dec\n");break;
default : break;
}
}
/*格式化輸出日歷*/
void PrintYear (int year) {
int m,i,d;
char c=' ';
int MONTH[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
if(IsLeap(year)) MONTH[1] = 29;
int firstwed = FirstWeeday(year);
printf("Year: %d\n",year);
printf("========================\n");
for(m = 0;m<12;m++) {
PrintMonTitl(m);
PrintWeedTitl();
for(d=1;d<=MONTH[m];d++) {
if(d == 1) {
for(i = 0;i<firstwed;i++)
printf("%5c",c);
printf("%5d",d);
}
else {
printf("%5d",d);
}
if((firstwed+d-1)%7 == 6) printf("\n");
}
firstwed = (firstwed + MONTH[m])%7;
printf("\n");
}
}
/*測(cè)試結(jié)果*/
int main() {
int year = 2016;
PrintYear(year);
}
代碼的測(cè)試結(jié)果如下:

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C++11正則表達(dá)式詳解(regex_match、regex_search和regex_replace)
正則表達(dá)式(regular expression)是計(jì)算機(jī)科學(xué)中的一個(gè)概念,又稱規(guī)則表達(dá)式,下面這篇文章主要介紹了C++11正則表達(dá)式(regex_match、regex_search和regex_replace)的相關(guān)資料,需要的朋友可以參考下2022-09-09
C++11智能指針中的 unique_ptr實(shí)例詳解
unique是獨(dú)特的、唯一的意思,故名思議,unique_ptr可以“獨(dú)占”地?fù)碛兴赶虻膶?duì)象,它提供一種嚴(yán)格意義上的所有權(quán)。這篇文章主要介紹了C++11智能指針中的 unique_ptr實(shí)例詳解,需要的朋友可以參考下2020-06-06
C語言數(shù)據(jù)結(jié)構(gòu)之單向鏈表詳解分析
鏈表可以說是一種最為基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)了,而單向鏈表更是基礎(chǔ)中的基礎(chǔ)。鏈表是由一組元素以特定的順序組合或鏈接在一起的,不同元素之間在邏輯上相鄰,但是在物理上并不一定相鄰。在維護(hù)一組數(shù)據(jù)集合時(shí),就可以使用鏈表,這一點(diǎn)和數(shù)組很相似2021-11-11
基于C中一個(gè)行壓縮圖的簡(jiǎn)單實(shí)現(xiàn)代碼
首先簡(jiǎn)單說一下什么是行壓縮圖,其實(shí)嚴(yán)格意義上應(yīng)該是行壓縮矩陣2013-05-05
C++實(shí)現(xiàn)線性代數(shù)矩陣行簡(jiǎn)化
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)線性代數(shù)矩陣行簡(jiǎn)化,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-02-02
C++ using namespace std 用法深入解析
以下是對(duì)C++中using namespace std的用法進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下2013-07-07
關(guān)于C++中0是十進(jìn)制還是八進(jìn)制的問題
本篇文章中,小編將為大家介紹關(guān)于C++中0是十進(jìn)制還是八進(jìn)制的問題,有需要的朋友可以參考一下2013-04-04

