用C 解決「三天打魚兩天曬網」問題

2021-10-22 20:38:30 字數 2644 閱讀 7126

中國有句俗語叫「三天打魚兩天曬網」。某人從2023年1月1日起開始「三天打魚兩天曬網」,問這個人在以後的某一天中是「打魚」還是「曬網」。用c或c++語言實現程式解決問題。

基本要求:1.程式風格良好(使用自定義注釋模板),提供友好的輸入輸出。

提高要求:1.輸入資料的正確性驗證。

2.使用檔案進行資料測試。如將日期 20100101 20111214 等資料儲存在in.txt檔案中,程式讀入in.dat檔案進行判定,並將結果輸出至out.txt檔案。

(1) 要計算從2023年1月1日起到指定的某一天共有多少天

在此重要的是要判斷閏年,平年加365天閏年加366天;判斷閏年的方法是:年份能被4除盡而不能被100除盡或者能被400除盡(year%4==0&&year%100!=0||year%400=0)

(2) 「打魚」「曬網」的週期是5天,所以可以用計算出來的天數除以5,根據餘數判斷是在「打魚」還是「曬網」:餘數1,2,3是在打魚4,0是在曬網

(3)演算法流程圖:

/*

name: 判斷打魚還是曬網

author:lu

date: 21/03/21 23:22

description: 輸入年份日期判斷是否輸入正確,

計算天數,平年加365天 閏年加366天;

對天數取餘,判斷打魚還是曬網; */

#include

"iostream"

#include

"fstream"

using

namespace std;

class

time

;//計算天數

int time::

calculdays()

;//計算閏年個數並增加天數

for(

int k=

2010

;k)//計算從2010到輸入年前為止前幾年的天數

else

// cout

for(

int i=

1;ialldays+

=day;

//計算出到輸入日期的總天數

dday=alldays%5;

// cout

}//判斷年份輸入正確與否及打魚曬網

int time::

judge()

; cout<<

"請輸入年"

<

cin>>year;

if(year<

2010

)//判斷年份是否有效

cout<<

"請輸入月"

<

cin>>month;

if(month<

0||month>12)

//判斷月份是否有效

cout<<

"請輸入日"

<

cin>>day;

if(month<=

0||day>monthd[month-1]

)//判斷月份是否有效

calculdays()

;if(dday<=

3&&dday!=0)

//求餘判斷打魚還是曬網

//cout

"在打魚"

<

else

cout<<

"在曬網"

<

cout<<

"距2023年1月1日的天數為:"

<

}int

main()

用例:2019 7 8;2010 1 4,2010 1 2;

在設計此程式時我認為最關鍵的就是如何計算總天數,在此我首先想到了先用乙個判斷閏年的函式判斷經過的年份是否是閏年,但是再把如何這個函式應用到計算天數中對我的編寫來說有點複雜和有一點不好理解,所以就把它一起納入計算的函式裡,使用迴圈語句加if判斷語句判斷年份是否是閏年,閏年天數就加366天平年就加365天。

然後遇到的最大的難題就是使用檔案進行資料測試,在網上找了很多方法和教程應用到自己程式上還是無法執行成功,最終也沒有完成這個提高任務實屬遺憾,檔案讀取讀入這一方面的知識自己其實在學c++的時候就不是很懂,課下雖然也有做過這方面的練習但也只是照課本上照貓畫虎並沒有真正理解,這次作業也提醒了我自己應該對這一方面的知識多研究研究,爭取早日攻克這一難題。

在此次作業中,自己對c++的知識因為長久不用也有些遺忘,犯了很多低階的錯誤,如沒有呼叫函式就使用裡面的變數進行運算結果出錯,如陣列沒有注意陣列a[12]與陣列裡元素a[0]…a[11]的關係導致填入多餘資料導致陣列溢位。

此次作業讓我收穫最大的地方就是學會了用斷點除錯的方法找到自己的邏輯錯誤:如一直輸出曬網,天數計算錯誤。

總之通過這次練習,我發現自己的程式設計能力還有待提高,今後一定要認真學習基礎知識多多練習在實踐中感悟提高。

三天打魚,兩天曬網。

判斷某人從2010年1月1日起開始 三天打魚,兩天曬網 到之後某一天是在打漁還是曬網 設計日期 2019.3.1 include define year 2010 void main 用陣列表示每月的天數 printf 請輸入所要判斷的時間 n scanf 4d 2d 2d year,month,d...

三天打魚兩天曬網問題

中國有句俗語叫 三天打魚兩天曬網 某人從2010年1月1日起開始 三天打魚兩天曬網 問這個人在以後的某一天是 打魚 還是 曬網 1 輸入乙個年月日,判斷輸入的年月日是否符合實際。如果輸入符合要求,計算從2010年1月1日到所輸入日期的總天數。總天數的演算法 首先計算從2010到所輸入年份的所有年的天...

三天打魚兩天曬網(c )

中國有句俗語叫 三天打魚兩天曬網 某人從2010年1月1日起開始 三天打魚兩天曬網 問這個人在以後的某一天中是 打魚 還是 曬網 思路 問題分析與演算法設計 根據題意可以將解題過程分為三步 1 計算從2010年1月1日開始至指定日期共有多少天 2 由於 打魚 和 曬網 的週期為5天,所以將計算出的天...