當前位置:編程學習大全網 - 源碼下載 - 求C語言編日歷源代碼的詳細說明

求C語言編日歷源代碼的詳細說明

/* 稍微改了下對齊格式,加了註釋 */

/*

1、閏年的算法:

如果某年能被4整除但不能被100整除,

或者能被400整除,

則該年是閏年.

用表達式表示就是

(year %4 == 0 && year%100 != 0) || (year%400 == 0)

2、計算某壹天是星期幾:

已知1900年的1月1號為星期壹,

然後就可以用某壹天和1900年的1月1號相差的天數對7取余來求星期,

本題是用的公元1年的1月1號作為基準

*/

#include <stdio.h>

#include<conio.h>

#include<stdlib.h>

int IsLeapYear(int); //函數定義

void main()

{

int i;

int day;

int year;

int temp;

int temp_i;

long int Year_days = 0;

int Year_Start = 1;

int Per_Year_Days;

int month_day[]={31,28,31,30,31,30,31,31,30,31,30,31,29};

printf("Please enter the year: ");

scanf("%d",&year); //輸入年份

while(Year_Start < year) //從公元1年開始執行while循環, 該年的壹月壹號為星期壹

{

if( IsLeapYear( Year_Start ) )

Per_Year_Days = 366; //如果是閏年, 則壹年有366天

else

Per_Year_Days = 365; //如果不是閏年, 則壹年有365天

Year_days = Year_days + Per_Year_Days; //Year_days為從公元1年到輸入年份的前壹年的天數的總和

Year_Start++;

}

for( temp = 1; temp <=12; temp++ ) //temp從1到12, 對應壹年內12個月

{

switch( temp ) //用switch語句將temp和12個月對應起來

{

case 1:

printf(" January(%d)\n",year); //壹月

break;

case 2:

printf(" February(%d)\n",year); //二月

break;

case 3:

printf(" March(%d)\n",year); //三月

break;

case 4:

printf(" April(%d)\n",year); //四月

break;

case 5:

printf(" May(%d)\n",year); //五月

break;

case 6:

printf(" June(%d)\n",year); //六月

break;

case 7:

printf(" July(%d)\n",year); //七月

break;

case 8:

printf(" August(%d)\n",year); //八月

break;

case 9:

printf(" September(%d)\n",year); //九月

break;

case 10:

printf(" October(%d)\n",year); //十月

break;

case 11:

printf(" November(%d)\n",year); //十壹月

break;

case 12:

printf(" December(%d)\n",year); //十二月

break;

}

i = Year_days % 7; //每個星期有7天, 故用每年的天數對7取余

printf("Mon\tTue\tWed\tThu\tFri\tSat\tSun\n");

if( i != 0 ) //如果余數不為零

for( temp_i = 0; temp_i < i; temp_i++)

printf("\t"); //則打印空格(這裏用\t代替空格, 更加美觀), 空格數為i

day = 1; //初始化day為1, 為下面的while循環做準備

if( IsLeapYear(year) && temp == 2) //如果輸入的年份是閏年, 並且月份為2

while( day <= month_day[12] ) //day為壹循環變量, 取值為1-365(閏年的話為1-366)

{

if( day >1 ) //如果天數大於壹

if( Year_days % 7 == 0 ) //如果是星期日, 則換行

printf("\n");

if( day >= 10 )

printf("%d\t",day); //打印天數+空格

else

printf("%d\t",day);

Year_days++;

day++;

}

else //如果不滿足"輸入的年份是閏年, 並且月份為2"

while (day <= month_day[temp-1])

{

if( day > 1 )

if( Year_days % 7 == 0 )

printf("\n");

if( day >=10 )

printf("%d\t",day);

else

printf("%d\t",day);

Year_days++;

day++;

}

printf("\n");

if( getch() == 'q' ) //如果輸入為q, 則退出程序

exit(0);

}

getch(); //每按壹次鍵, 打印壹個月份

}

int IsLeapYear( int year )

{

//判斷是否是閏年, 是則返回1, 否則返回0

if ((year %4 == 0) && (year % 100 != 0) ||

(year % 400 == 0) )

return 1;

else

return 0;

}

  • 上一篇:計算機硬盤中IDE模式和AHCI模式的區別
  • 下一篇:博信***贏多少人投資了
  • copyright 2024編程學習大全網