天天看點

2013級C++第11周項目——函數的定義與調用

【項目1-調用函數輸出星号圖】

  這一組的練習意在通過調用函數輸出星号圖,體會與了解函數的工作過程,并為其後編制自定義函數實作特定功能。

  (1)補充完下面的程式,使程式輸出星号圖:

2013級C++第11周項目——函數的定義與調用

  (2)根據main函數中對printchs函數的調用,以及printchs的功能要求,編寫printchs函數。

  (3)在由多個函數構成的程式中,程式員常用的做法是,main()函數先定義,其他自定義函數後定義,這時必須在main()函數前聲明自定義的函數(請詳讀教材4.4.3小節)。按這個要求,重寫上面任務2中的程式。

  (4)利用任務2中定義的printchs函數,再實作以前寫過的其他星号圖,體會定義函數帶來了的好處。

【項目2-求最大公約數】輸入兩個數,并求出其最大公約數

  如果算法方面有問題,請參考:

  

2013級C++第11周項目——函數的定義與調用

【項目2擴充-求四數的最大公約數】

  在上面程式基礎上,增加函數gcds函數的聲明和定義,實作求4數最大公約數的功能

  提示:(1)既然在項目2中gcd函數已經實作了求兩數最大公約數的功能,gcds中可以調用gcd——先分别求出前兩數、後兩數的最大公約數,再求出最大公約數的最大公約數;(2)修改main函數,以完成對新新定義的函數的“測試”

【項目3-回文、素數】

  (1)編制一個函數reverse,傳回給定資料的“反序數”,例如輸入1234,輸出4321。請編制reverse函數,在下面代碼的基礎上補充相關的部分,實作要求的功能。

2013級C++第11周項目——函數的定義與調用

  (2)編制ispalindrome(),用于判斷參數是否是回文數——回文數,即從前往後讀和從後往前讀都一樣的數,如1221和121都是回文數,而1231、123都不是回文數。請編制ispalindrome(函數,在下面代碼的基礎上補充相關的部分,實作要求的功能。

  (3)編制一個傳回值為bool型的函數isprimer(),用于判斷參數是否為素數(是素數傳回true,否則false),自編main函數用于測試;

  (4)編制main函數,調用上面定義的3個函數,完成

輸出1000以内的所有素數。

輸出1000以内的所有回文數。

輸出1000以内的所有回文素數。

若一個素數的反序數仍為素數,則稱它為可逆素數。求10000以内的所有可逆素數。

 【項目4-特殊三位數】

  請輸出滿足條件n=a!+b!+c!的所有三位數n,其中,a、b、c分别是n的百、十、個位數。要求用自定義函數實作求階乘。

  參考程式段:

【項目4拓展(選做)-求組合數】

  求組合數公式為:

2013級C++第11周項目——函數的定義與調用

  編一程式,輸入m和n的值,求組合數。要求分别定義求階乘和求組合的函數,求組合數的函數調用求階乘的函數來實作求解,在main()函數中,負責輸入輸出及調用求組合數的函數。

【項目5-歌手大獎賽計分系列】

  (1)在歌手大獎賽中,有10個評委為參賽的選手打分,分數為0~10分(運作時由人控制)。選手最後得分為:去掉一個最高分和一個最低分後其餘8個分數的平均值。請編寫一個程式實作(可以先不考慮用自定義函數實作)。

  (2)将計算選手成績的功能(包括輸入成績、計算和顯示結果)利用一個函數void calscore(int n)實作。為增大函數的适用面,有評委人數由函數的參數n決定(這樣,在main函數調用時,需要将評委人數作為實參)。

  (3)進一步完善(2)的程式。輸入時,難免有錄入錯誤發生,如果輸入的成績不在0-10之間,要求使用者立即重新輸入(在函數calscore中修改);一次運作程式隻計算一位選手成績太麻煩,要求輸出目前選手的最後得分後,提示“按任意鍵計算下一位選手的成績,退出請選擇n:”如果輸入的不是n或n,可以為下一位選手計算成績(在main函數中進行控制即可)。

  參考運作圖:

2013級C++第11周項目——函數的定義與調用

繼續閱讀