c語言輸入日期輸出日曆判斷星期幾簡單程式碼
阿新 • • 發佈:2021-01-25
在我們刷oj準備藍橋杯時,程式碼在下面
我們遇見這樣一個題目:輸入一個日期 輸出這個月的日曆
如圖所示:
我這個程式碼也是想了很久才寫出來 被判斷日期的事情逼瘋了
相信很多人寫這個程式碼遇見的問題主要就是如何判斷每個月的第一天是星期幾,題者我也找了很多公式 但是都覺得太過於麻煩,比如給定一個指定的日期,從那裡迴圈計算得來,有一個公式是直接可以得出當前日期的,但是並不是首月,不過可以逆推回去,
week=((year-1)+((year-1)/4)-((year-1)/100)+((year-1)/400)+day-7); //相信大家很迷糊為什麼-7,其實我也不能很好解釋 有意向的同學可以去看一下 //蔡勒公式,我也是-1然後發現bug 有些時候並不能直接表示,改來改去隨便輸 //入一個居然成功了 大家可以自己試試,可能有誤 抱歉 a=week%7;//算星期幾,0為特殊情況 也就是7; if (a==0) { a=a+7;//防止為0 }
#include<stdio.h>
int main()
{
int year,month,das,week;//n年份 月份 日期 星期
int day=1;
int temp;//套用星期幾的公式 總數
int i=1;
int a;
scanf("%d%d%d",&year,&month,&das);
if(month>12||day>31)
{
printf("瞎幾把輸入啥呢");
return 0;
}
for (i = 1; i < month; i++)
{
if (i == 1 || i == 3 || i == 5 || i == 7 || i == 8 || i == 10 || i == 12)
day+=31;//判斷
else if (i==2)
{
if (year% 4 == 0 && year% 100 != 0 || year % 400 == 0)
day+=29;
else
day+=28;
}
else
day+=30;
}
week=((year-1)+((year-1)/4)-((year-1)/100)+((year-1)/400)+day-7);
a=week%7;//算星期幾,0為特殊情況 也就是7;
if (a==0)
{
a=a+7;//防止為0
}
int end;//每個月的最後一天
if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12)
end=31;
else if (month == 2)
{
if (year% 4 == 0 && year% 100 != 0 || year % 400 == 0)
end=29;
else
end=28;
}
else
end=30;
//printf("%d",day);
printf(" %d年%d月%d日是這一年的第%d天\n", year, month,das,day+das-1);//輸出日曆日曆標題
printf(" 一 二 三 四 五 六 七\n");
for(int m=1;m<a;m++)
{
printf(" ");//a是星期幾 空格堆過去;
}
for(i=1;i<=end;i++)
{
printf("%3d",i);
if((i+a-1)%7==0)//換行
{
printf("\n");
}
}
return 0;
}
程式碼就是這樣了 謝謝各位 有不懂可以私信評論 謝謝大家