天天看點

C++程式設計-第12周函數序設計上機實踐項目

  本次上機對應的教學内容:第4章   函數

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

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

C++程式設計-第12周函數序設計上機實踐項目

  任務1:補充完下面的程式,使程式輸出上面的兩個星号圖,要求在main()函數中調用自定義函數printstars()。

  給出的程式如下:

  要求:左圖必需實作,右圖嘗試實作。

  回答:實作右圖遇到了什麼困難?如何解決,有何辦法?用你想到的辦法嘗試一下。

  進一步提示:如果要輸出的不是星号(*)圖,而是井号(#)圖,該如何改上面的程式?試着實施一下。

  任務2:請先閱讀已經定義好的函數printchs(),然後利用這個函數輸出星号圖:

  要求:分别程式設計式,輸出左右兩個星号圖;

  進一步要求:有了printchs()函數,這兒的處理比任務1要友善了很多。如果要輸出的不是星号(*)圖,而是井号(#)圖,該如何改上面的程式?試着實施一下。

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

  通過項目1中的3個任務,請思考:你認為函數的參數有什麼作用?在設計中如何考慮參數,會給調用帶來友善?将你的體會寫到上機報告的博文中。

【項目2-求解分段函數的值】

C++程式設計-第12周函數序設計上機實踐項目

  提示:函數求解的結果要在main()中使用,要用return <表達式>得到傳回值。

  通過這個項目,體會函數利用傳回值的方法。

【項目3-四數的最大公約數】

  輸入四個數,并求出其最大公約數

【項目4-回文、素數】

   編制一個傳回值為bool型的函數isprimer(),用于判斷參數是否為素數,ispalindrome()用于判斷參數是否是回文數,調用函數回答以下問題(可以分别編制幾個程式完成,也可以在一個main()函數中完成,輸出時,用明顯的提示語,說明正在完成哪個任務。)

(1)輸出10000以内的所有素數。

(2)輸出10000以内的所有回文數。

(3)輸出10000以内的所有回文素數。

(4)拓展(選做):若一個素數的反序數仍為素數,則稱它為可逆素數。求10000以内的所有可逆素數,在上面的代碼基礎上拓展。

【項目5-特殊三位數】

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

  參考程式段:

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

  求組合數公式為:

C++程式設計-第12周函數序設計上機實踐項目

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

【項目6-泰勒展開】

  先聽故事,再程式設計式。故事是這樣的:話說sin和cos是一對夫婦。一天,sin去聽相聲了,cos在家。過了一會,有人敲門,cos開門一看,是一個不認識的多項式函數。cos問:你是誰啊?他說:我是你的老公sin啊。cos說:你不是去聽相聲了嗎?怎麼成這幅摸樣了?他說:是啊,太樂了!故事講完了。不懂嗎?好好學高數。否則,挂了不冤。

C++程式設計-第12周函數序設計上機實踐項目

  程式設計式求出sin(π/2)、sin(56°)、cos(87°)、cos(π/3)

  一點說明:數學庫(#include<cmath>)中已經提供了sin和cos函數,一般解題中我們直接調用即可,而本題要求自定義函數實作,為差別起見,分别起名為mysin和mycos。

  提示和要求:(1)要求自定義函數要寫在main函數之後;(2)自定義函數中求解的效率問題必須考慮(用好疊代方法);(3)關于精度:當最後一項的絕對值小于0.00001時,累加結束(求絕對值的函數也可以自定義實作);(4)為驗證求解是否正确,可以調用數學庫中相應的函數,輸出結果以對比。

  迷底揭曉:将任意函數展開為多項式,是計算機求解數值問題的一個重要手段。高等數學中的“泰勒定理”為我們解決這一大類問題提供了理論依據與方法指導。sin聽相聲“太樂”了,變成了多項式,太太cos都不認識了。高等數學、線性代數等課程為我們提供解決各種問題的基礎知識,是大學中最為實用的學科,學好,必須的。

【項目6擴充(選做)-編制三角函數表】

  要求在main()函數中調用show_sin_table(min_angle, max_angle),顯示角度值為min_angle到max_angle之間的所有角度(間隔為1度)的正弦值。要求不能用數學庫函數,将項目6中的mysin函數拷貝到這個程式中,用于計算sin值。例如show_sin_table(0, 90)可以顯示出所有0到90度的正弦值。為取得更好的效果,可以考慮像英尺到米的轉換一樣,以速查表格的形式給出結果。

繼續閱讀