溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

怎么用C語言實(shí)現(xiàn)按月顯示的日歷

發(fā)布時(shí)間:2021-08-27 18:00:49 來源:億速云 閱讀:142 作者:chen 欄目:編程語言

這篇文章主要講解了“怎么用C語言實(shí)現(xiàn)按月顯示的日歷”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“怎么用C語言實(shí)現(xiàn)按月顯示的日歷”吧!

我們的基本步驟是:

1、定義輸入函數(shù),也就是你要輸入的年和月。2、計(jì)算當(dāng)前年的第一天是星期幾。我們需要定義一個(gè)基準(zhǔn)年,再定義出基準(zhǔn)年的第一天是星期幾。最后計(jì)算出當(dāng)前年與基準(zhǔn)年之間的差值,用最后的結(jié)果加上基準(zhǔn)年第一天是星期幾,結(jié)果再%7即可。3、計(jì)算當(dāng)前月的第一天是星期幾。計(jì)算出當(dāng)前年的第一天和當(dāng)前月的第一天之間的差值,再加上當(dāng)前年的第一天,用最后的結(jié)果%7即可。4、打印最后的結(jié)果。5、要注意區(qū)別平年和閏年,這里我們用一個(gè)二維數(shù)組來區(qū)別。

具體實(shí)現(xiàn)代碼如下:

#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h>/*基本思路:定義一個(gè)基準(zhǔn)年,然后通過基準(zhǔn)年計(jì)算出當(dāng)前年的第一天是星期幾(用當(dāng)前年與基準(zhǔn)年之間的差值再加上基準(zhǔn)年第一天是星期幾,最后的結(jié)果%7),通過當(dāng)前年的第一天計(jì)算出當(dāng)前月的第一天是星期幾(計(jì)算出當(dāng)前年的第一天到當(dāng)前月的第一天差值,再加上當(dāng)前年的第一天是星期幾,最后的結(jié)果%7)。最后輸出(先空出當(dāng)前月的第幾天個(gè)空格然后輸出當(dāng)前月的天數(shù),當(dāng)當(dāng)前月的第一天加上相應(yīng)的天數(shù)%7為0時(shí),就換行)。還要注意閏年平年的區(qū)別,在此用一個(gè)二維數(shù)組區(qū)別*//*定義月份 用二維數(shù)組區(qū)分平年閏年*/int months[2][13] = { { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 },     { 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 } };/*判斷是否為閏年函數(shù) 是則返回1 否則返回0*/int is_leap(int year){ return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);}/*輸入函數(shù)*/void input(int *month, int *year){ printf("year/month:"); scanf("%d/%d", year, month);}/*某一年的第一天是星期幾函數(shù)*/int first_day_of_year(int year){ int base_year = 2000;//定義基準(zhǔn)年 int base_first = 6;//基準(zhǔn)年的第一天是星期六 int i = 0; int total = 0;//當(dāng)前年與基準(zhǔn)年的差值 for (i = base_year; i < year; i++) {  total += 365 + is_leap(i);//閏年is_leap為1 平年為0 } total += base_first; return total % 7;}/*當(dāng)前月的第一天是星期幾*/int first_day_of_month(int first_day, int year, int month){ int i = 0; int total = 0; for (i = 1; i < month; i++) {  total += months[is_leap(year)][i]; } total += first_day; return total % 7;}/*輸出函數(shù)*/void output(int first_day, int year, int month){ printf("Sun Mon Tue Wed Thu Fir Sat\n"); int i = 0; for (i = 0; i < first_day; i++) {  printf(" ");//這個(gè)月第一天是星期幾前面就空幾天 } for (i = 1; i <= months[is_leap(year)][month]; i++) {  printf("%3d ", i);  if ((i + first_day) % 7 == 0)//用于換行  {   printf("\n");  } } printf("\n");}int main(){ int month = 0; int year = 0; input(&month, &year);//輸入函數(shù) int first_day = first_day_of_year(year); first_day = first_day_of_month(first_day, year, month); output(first_day, year, month); system("pause"); return 0;}

感謝各位的閱讀,以上就是“怎么用C語言實(shí)現(xiàn)按月顯示的日歷”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對怎么用C語言實(shí)現(xiàn)按月顯示的日歷這一問題有了更深刻的體會,具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識點(diǎn)的文章,歡迎關(guān)注!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI