學院:
專業:
班級:
姓名:
設計日期:
總分:
壹、設計題目:
C語言輸出萬年歷
二、題目闡述及設計思路:
C語言輸出萬年歷,輸入年份、月份,計算得到的是這壹天是星期幾;給定年,月,計算此月有多少天 。本程序運用的萬年歷的計算公式: d=a-1+(a-1)/4-(a-1)/100+(a-1)/400+c; 其中a為年c為該日期在本年中的天數,d取整數,當d/7余數0時是星期天,余數1時是星期壹依此類推。
三、主要知識點:
運用函數調用,if,else函數switch語句。for,while,循環語句。
四、程序清單:
#include <stdio.h>
int m_day(int year,int month)/*此函數是給定年,月,計算此月有多少天.*/
{
if ((year%4==0 &&year%100!=0) ? (year%400==0))
switch(month)
{
case 1: case 3: case 5: case 7: case 8: case 10: case 12: return 31;
case 4: case 6: case 9: case 11: return 30;
case 2: return 29;
}
else
switch(month)
{
case 1: case 3: case 5: case 7: case 8: case 10: case 12: return 31;
case 4: case 6: case 9: case 11: return 30;
case 2: return 28;
}
}
int main()
{
int year,month;
int i, days=0, d, day=0;
printf ("Enter the year and month:\n");
scanf ("%d %d ", &year, &month );
for (i=1;i<month; i++)
days+=m_day (year,i);
d=year-1+(year-1)/4-(year-1)/100+(year-1)/400+days+1;
printf("%d-%d\n",year,month);
printf(" Sun Mon Tue Wed Thu Fri Sat\n");
for (i=0;i<d%7;i++)
printf(" ");
for (i=1;i<=7-d%7;i++)
{
day++;
printf("%5d",day);
}
printf("\n");
while(1)
{
for (i=1;i<=7;i++)
{
day++;
if (day>m_day(year,month))
printf("%5d",day);
}
printf("\n");
}
}
五、設計結果說明:
1、設計優點:
程序充分利用所學的C語言知識,運用了函數的調用、循環語句、以及return語句,使得編程更加有條理。簡單易懂,結構清晰,也使得程序的使用更加方便。
2、設計不足:
在編程序時,由於考慮到時間和受所學知識的限制,只能輸入年份、月份,計算得到的是這壹天是星期幾;給定年,月,計算此月有多少天 。而並不能輸入公歷的年月日,輸出農歷年月日以及輸入農歷節氣,輸出當年農歷的年月日及公歷年月日。