![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiYWan5SZwUGZyE2NyQ2NyczNkJGM1UGOxgzN1gzM0gTMkZTOw8CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.gif)
點選藍字關注我們
C語言漁夫打魚曬網問題
如果一個漁夫從 2011 年 1 月 1 日開始每三天打一次漁,兩天曬一次網,程式設計實作當輸入 2011 1 月 1 日以後的任意一天,輸出該漁夫是在打漁還是在曬網。
實作過程:
(1) 自定義函數 leap(),用來判斷輸入的年份是否是閏年。
(2) 自定義函數 number(),用來計算輸入日期距 2011 年 1 月 1 日共有多少天。
(3) main() 函數作為程式的入口函數,在 main() 函數中調用上面兩個函數。程式代碼如下:
#include
int leap(int a)
{
if (a%4==0&&a%100!=0||a%400==0)
return 1;
else
return 0;
}
int number(int year,int month,int day)
{
int sum = 0, i, j, k;
int a[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int b[12]={31,29,31,30,31,30,31,31,30,31,30,31};
if(leap(year)==1)
for(i=0;i
sum+=b[i];
else
for(i=0;i
sum+=a[i];
for(j=2011;j
if (leap(j)==i)
sum+=366;
else
sum+=365;
sum+=day;
return sum;
}
int main()
{
int year,month,day,n;
printf("請輸入年月日\n");
scanf("%d%d%d",&year,&month,&day);
n=number(year,month,day);
if((n%5)<4&&(n%5)>0)
printf("%d:%d:%d 打魚\n",year,month,day);
else
printf("%d:%d:%d 曬網\n",year,month,day);
return 0;
}
運作結果:
請輸入年月日
2011 1 4
2011:1:4 曬網
技術要點:
本執行個體主要有以下兩個技術要點:
(1) 判斷輸入的年份(2011 年以後包括 2011 年)是否為閏年,這裡自定義函數 leap() 來進行判斷。該函數的核心内容就是閏年的判斷條件即能被 4 整除但不能被 100 整除,或能被 400 整除。
(2) 求輸入日期距 2011 年 1 月 1 日有多少天。首先判斷 2011 年距輸入的年份有多少年,這其中有多少年是閏年就将 sum 加多少個 366,有多少年是平年便将 sum 加上多少個 365。
(3) 其次要将 12 個月每月的天數存到數組中,因為閏年 2 月份的天數有别于平年,故采用兩個數組 a 和 b 分别存儲。若輸入年份是平年,月份為 m 時就在前面累加日期的基礎上繼續累加存儲着平年每月天數的數組的前 m-1 個元素,将累加結果加上輸入的日期便求出了最終結果。閏年的算法類似。
計算機與控制工程學院團委宣傳部
材料來源:學習部
排版編輯:胡志信
執行編輯:蔡金晶
責任編輯:宋健棟
審 核:賀 毅