天天看點

2013級C++第12周項目——函數應用

【項目1-當年第幾天】

  定義一個函數,其參數為年、月、日的值,傳回這一天為該年的第幾天。要求在main函數中輸入年月日,然後調用這個函數求值,并在main函數中輸出結果。

【項目2-太樂了】先聽故事,再程式設計式。

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

2013級C++第12周項目——函數應用

  用sin和cos的泰勒展開式程式設計式,求出sin(π/2)、sin(56°)、cos(87°)、cos(π/3),當最後一項的絕對值小于0.00001時,累加結束(求絕對值的函數也可以自定義函數myabs實作)。

  下面是程式模闆,請完成自定義函數的聲明和定義,并将main函數中下劃線部分補充完整。

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

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

  提示:程式的輸出應該為

【項目3-多檔案程式組織】

【項目4-學習輔助軟體開發】通過本題學習一些系統函數。

  第一組是數學函數,需要#include<cmath>支援,包括log、log10、 pow、 pow10、 sqrt、 acos、 asin、 atan、 cos、 sin、 tan、 cosh、 sinh、 tanh、 ceil、 floor。

  第二組是時間函數,需要#include<ctime>的支援。暫介紹一個函數long time(long *tloc)。調用time(0)将傳回自格林威治時間1970年1月1日淩晨至現在所經過的秒數。顯然,下面的代碼可以用于測試一段代碼運作的時間:

  第三組是随機數函數,需要#include<cstdlib>支援。(1)void srand(unsigned seed)用于初始化随機數發生器,參數seed稱作為“種子數”,用不同的種子數可以産生不一樣的序列,故time(0)的傳回值常用作種子數。(2)int rand()産生一個0到rand_max(一個系統内已經定義的很大的數)的整型随機數并傳回。例如,下面的程式産生10個0~5的随機數

任務1——猜數字遊戲

  随機産生一個1000内的數字,要求使用者猜測這個整數。輸入一個猜測想的整數,判斷是否與産生的随機數相等,由螢幕顯示判斷結果。如果猜得不對,給出“大了”或“小了”的提示,直到猜出這個數為止。(可以再加一個要求,猜了幾次才得到正确結果。)

任務2——國小生算術能力測試系統

  設計一個程式,用來實作幫助國小生進行算術運算練習,它具有以下功能:提供10道加、減、乘、除四種基本算術運算的題目,每道題中的操作數是随機産生的,且操作數不超過2位數的正整數;練習者根據顯示的題目輸入自己的答案,程式自動判斷輸入的答案是否正确并顯示出相應的資訊。最後顯示做對了幾道題。

【項目5-銀行系統】

  這是我們要做的一個真正的項目!涉及到的技術都用過了,隻不過,程式真的要長得多了。

  在學習中,總是想要些成就感的。當你沒有做過一些事情的時候,總是不能知道所學知識究竟能幹些什麼。在學習過程中,完成一個像樣的項目,那是一件很酷的事情,也讓我們更有激情。做好心理準備,中間可能會有些困難,但相信沉下心來還是可以完成的。

  要做項目的需求最好能和大家的生活實踐聯系起來,我們想得到。另外,還能和我們的課程同步上。兩廂結合,我們就開個銀行,做個自動取款機吧。

  如果沒有用過自動取款機,先用你的銀行卡取一次錢去吧,權當作調研。

  我們首先插卡,輸密碼。做純軟體模拟,我們沒有讀卡機,好吧,認為卡已經插好了。

  為了讓大家一點一點地做出來,我試圖分解其中的工作,我們逐漸完善,“增量式”地完成工作。你可以每做完一個任務,就發一篇博文,将這樣一個成長的階段記錄下來。

任務1——搭一個架構

  你的程式運作後的界面如圖:

  

2013級C++第12周項目——函數應用

用const定義全局的常變量password,作為銀行卡的密碼(真銀行卡的密碼可不是這樣,它要分别記住各個帳戶的密碼,我們現在認為所有卡都這個密碼)。

判斷輸入的密碼是否正确,如果不正确,提示:“你這個笨腦瓜!”并退出程式,(注意,真銀行可不敢罵人,你的銀行這樣寫寫無妨。)否則,繼續下面的工作。

使用者如圖輸入功能選擇,根據給出的答複,用switch多分支完成下面的顯示:

a. 輸入1,顯示“您的餘額是xxxx.xx元。”(想過瘾,用你覺得足夠大的數當餘額)

b. 輸入2-4的提示自編;

c. 輸入0,顯示“謝謝,歡迎下次再來!”(好有禮貌)

d. 輸入不是0-4,提示“輸錯,不要急!”

  隻要輸入不是0,循環處理業務。

  寫完程式後,請将之釋出為博文(程式中的注釋自己加,程式前要有,中間也來些必要的)。

任務2——引入函數改善程式結構

  1、資料

  仍然隻支援一位使用者,是以使用者帳号不必存儲。

  要用全局變量存儲:(1)使用者密碼(由于支援改密碼功能,是以用變量,暫先用整型,聲明時賦初值);(2)帳戶餘額(用浮點數表示,聲明時賦初值)

  2、在輸入密碼環節,實作有限次密碼輸入的限制,如果三次都沒有輸入正确,程式将直接退出,不允許使用者繼續操作。

查驗密碼功能做成一個函數。例如:

  3、main()函數的結構将如下所示,work函數用于處理業務。

  4、辦理業務的函數work的結構如下:

  其中,各項業務分别編制一個函數完成。提示功能菜單(1.查詢、2.取款、3.存款、4.轉帳、5.改密、0.退出)後,由使用者輸入功能選擇,用switch多分支完成對應的功能(有的功能依然隻輸出一句話提示即可)。圖示給出建議(鼓勵在合理範圍内别出心裁):

2013級C++第12周項目——函數應用

輸入1(查詢),調用函數showbalance(),顯示“您的餘額是xxxx.xx元。”

輸入2(取款),調用drawmoney(),完成取款。要求輸入取款金額,若餘額不夠,提示不能取款,否則,帳戶餘額減少。取款後給出提示:“你的餘額還有xxx.xx元”。

在實際業務中,還涉及到計算的問題。本題暫不考慮,作為拓展建議,可以在此處考慮計息。

輸入3(存款):調用deposit(),完成存款,餘額增加(過瘾吧,想存多少存多少)。存款後給出提示:“你的餘額是xxx.xx元”。

輸入4(轉帳):調用transferaccounts(),完成轉帳,隻支援轉出功能。要求輸入對方帳号和轉帳金額,若金額充足,完成轉帳,目前帳戶的餘額減少,對方帳戶餘額增加。由于本題隻有一個帳号,故對方帳戶增加的操作先不做了。

輸入5(改密):調用updatepassword()改變密碼。要求先輸入舊密碼,對了以後才能改密。新密碼要輸入兩次,隻有兩次完全相同時才可以完成修改。

輸入0,顯示“謝謝,歡迎下次再來!”退出循環,傳回調用函數。

輸入不是0-5,提示“輸錯了,不要急!”

  以後我們再做支援多個帳戶的銀行系統。

任務3——将程式用多檔案組織

  将任務2中的代碼,涉及密碼、帳戶的函數放在一個檔案中,完成各項功能的函數放在另一個檔案中,main函放也單獨一個檔案。

繼續閱讀