大學(xué)C程序設(shè)計教程課件_第1頁
大學(xué)C程序設(shè)計教程課件_第2頁
大學(xué)C程序設(shè)計教程課件_第3頁
大學(xué)C程序設(shè)計教程課件_第4頁
大學(xué)C程序設(shè)計教程課件_第5頁
已閱讀5頁,還剩40頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、大學(xué)C+程序設(shè)計教程西安交通大學(xué)計算機教學(xué)實驗中心第2章 控制結(jié)構(gòu)本章目標(biāo)結(jié)構(gòu)化程序設(shè)計方法的基本思想C+的基本控制結(jié)構(gòu)C+的控制語句結(jié)構(gòu)化程序設(shè)計方法的基本思想V+的幾種基本控制語句熟悉使用偽代碼的編程方法1授 課 內(nèi) 容 2.1 程序的基本控制結(jié)構(gòu) 2.2 自頂向下,逐步求精2.3 +的控制結(jié)構(gòu)2.4 偽代碼 調(diào)試技術(shù)程序設(shè)計舉例22.1 程序的基本控制結(jié)構(gòu) 結(jié)構(gòu)化程序設(shè)計方法 的基本思想是任何程序都可以用三種基本結(jié)構(gòu)表示,即順序結(jié)構(gòu),選擇結(jié)構(gòu),循環(huán)結(jié)構(gòu)。由這三種基本結(jié)構(gòu)經(jīng)過反復(fù)嵌套構(gòu)成的程序成為結(jié)構(gòu)化程序。而這些結(jié)構(gòu)中的各種程序流程語句就是流程控制語句。語句序列1語句序列2語句序列 1條

2、件?成立不成立語句序列 2語句序列不成立成立條件?順序結(jié)構(gòu) 選擇結(jié)構(gòu) 循環(huán)結(jié)構(gòu)3模塊化程序結(jié)構(gòu) 模塊化 就是把程序劃分為若干個部分,每個部分獨立存放、完成一個特定的功能。其目的是降低程序的復(fù)雜度,使設(shè)計出來的程序便于閱讀、調(diào)試和維護。 一個模塊可以是一條語句、一段程序、一個函數(shù)等 基本特征是其僅有一個入口和一個出口 模塊相互獨立,內(nèi)聚性很強,一個模塊完成一個功能 56例2-1 驗證“哥德巴赫猜想”“哥德巴赫猜想”表述為:任何 一個大于等于4的偶數(shù)均可以表示為兩個素數(shù)之和。第一步 提出問題: 驗證哥德巴赫猜想 第二步 設(shè)一上限數(shù)M,驗證 從4到M的所有偶數(shù)是否能被 分解為兩個素數(shù)之和。1. 定義

3、一個變量X,初值為4。2. 每次令其加2,并驗證X能否 被分解為兩個素數(shù)之和,直到 X不小于M為止。驗證哥德巴赫猜想X = 4X M ?驗證x是否能被分解為兩個素數(shù)之和X = X +2否是8驗證哥德巴赫猜想(續(xù)一)第三步 如何驗證X是否能被分解為兩個素數(shù)之和。1. 從P=2開始;2. 判別XP是否仍為素數(shù):3. 若是,打印該偶數(shù)的分解式。4. 否則,換更大的素數(shù),再繼續(xù)執(zhí)行2.。如此循環(huán),直到用于檢測的素數(shù)大X/2且X 與其之差仍不是素數(shù),則打印“哥德巴赫猜想”不成立。 P = 2P= x / 2 ?處理哥德巴赫猜想不成立的情況打印出X的分解情況是否9驗證哥德巴赫猜想(續(xù)二)第四步 生成下一個

4、素數(shù)。 (1)當(dāng)前素數(shù)P加1 (2)判別P是否是素數(shù); (3)若是素數(shù),返回P; (4)否則,P加1,繼續(xù)執(zhí)行( 2)。 P = P + 1是素數(shù)?P = P + 1否返回素數(shù) P10驗證哥德巴赫猜想(續(xù)三)經(jīng)過四步分解精化,將“驗證哥德巴赫猜想”這個命題已經(jīng)分解為計算機可以求解的數(shù)學(xué)模型了。剩下的問題就是編程求解了。如何編程正是我們這門課程要解決的問題。關(guān)于“驗證哥德巴赫猜想”的求解程序稍后給出。112.3 C+語言的控制結(jié)構(gòu)C語言是一種很好的結(jié)構(gòu)化程序設(shè)計語言,它提供了實現(xiàn)結(jié)構(gòu)化程序所需的多種流程控制語句。分類如下:121、順序結(jié)構(gòu)順序結(jié)構(gòu)語句包括:說明語句賦值語句I/O 語句復(fù)合語句和空

5、語句用花括號括起來的程序段落又稱為分程序或者復(fù)合語句。復(fù)合語句的一般形式: 復(fù)合語句可以嵌套,即在復(fù)合語句中可以有其它復(fù)合語句空語句:在C語言中經(jīng)常使用只有一個分號的語句,它程為空語句在語法上占據(jù)一個語句的位置,但不具備任何可執(zhí)行的功能。 13選擇分支的嵌套if(表達式1) 語句1else if(表達式2)語句2else if(表達式3)語句3else if(表達式m)語句melse語句nelse總是與它上面的最近的if配對。如果if與else的數(shù)目不一樣,可以加花括弧來確定配對關(guān)系。例如: if() if ()語句1 else語句2(內(nèi)嵌if) 15選擇結(jié)構(gòu)之二多路(開關(guān))選擇語句 語句格式

6、: switch(整數(shù)表達式) case 數(shù)值1: 語句序列1; . case 數(shù)值n: 語句序列n; default : 語句序列n+1; 計算整型表達式值 = ?語句序列1.語句序列2語句序列n162.4 偽代碼C語言的控制結(jié)構(gòu)語句和自然語言結(jié)合起來描述算法比畫流程圖省時、省力,且更容易轉(zhuǎn)化為程序不能運行,例如: e = 1.0; n = 1; u = 1.0;while (通項u大于等于107) 計算新的通項值 u = u/n; 將新通項值加到結(jié)果近似值上; 準(zhǔn)備處理下一項 n = n+1;18獲得幫助的方法(四種)F1幫助。單擊一個單詞、突出顯示一條短語或單擊一條錯誤信息,再按F1就可

7、以了;可在源代碼編輯器窗口、幫助窗口、輸出窗口中使用;幫助索引,它包含絕大多數(shù)所需的信息;搜索機制,搜索的范圍比索引要廣的多;幫助目錄,使用幫助窗口中目錄選項卡可以閱讀某個主題的所有內(nèi)容。19常見錯誤語法錯誤少了;函數(shù)名輸入錯誤語義錯誤將“=”誤輸入為“=”邏輯錯誤簡單跟蹤:在程序中加入輸出語句注意:雙擊Visual C+ output窗口的錯誤信息,就可以打開產(chǎn)生該錯誤的源代碼,并且光標(biāo)會位于出錯的那一行上。202.7 調(diào)試技術(shù):Developer Studio 的文本編輯器Undo和Redo查找和替換Find& ReplaceFind in Files編程指導(dǎo)信息List Member 列

8、成員Type Info 簡單介紹Parameter Info 參數(shù)信息Complete Word 自動輸入21程序設(shè)計舉例2.百分制化為五分制3.用while結(jié)構(gòu)求e值4.用do-while結(jié)構(gòu)求e值5.水仙花6.猜幻數(shù)游戲 實例編程:哥德巴赫猜想22例2.2 百分制化為五分制算法分析: 1、取一個百分成績經(jīng)過運算得到5分制成績。構(gòu)造什么樣的表達式呢? “百分成績/10 =” ? 2、共有5個分數(shù)檔,選擇分支大于2,因此用多路開關(guān)語句switch。 3、計算結(jié)果應(yīng)該是唯一的。轉(zhuǎn)換后應(yīng)從switch中break出來。 4、輸入一個百分成績,就應(yīng)該轉(zhuǎn)換成5分制成績。因此,轉(zhuǎn)換程序應(yīng)編成子函數(shù)。23

9、轉(zhuǎn)換成績子函數(shù)/ Example 2-2:將百分制的分數(shù)轉(zhuǎn)換為5級制分數(shù)#include int main()int old_grade, new_grade;coutold_grade;switch (old_grade/10)case 10:case 9:new_grade = 5;break;case 8:new_grade = 4;break;case 7: new_grade = 3;break;25主函數(shù)(VC0202.cpp) case 6:new_grade = 2;break;default:new_grade = 1;cout”Before transformed, the

10、 score is ”old_gradeendl;cout”After transformed, the score is ”new_grade 10 -7 ?計算: u = u / n; e = e + u ; n = n + 1;是否輸出結(jié)果 e28計算e程序(VC0203.cpp)/ Example 2-3:計算常數(shù)e的值#include int main()double e = 1.0;double u = 1.0;int n = 1;while(u = 1.0e-7)u = u/n;e = e+u;n = n+1;cout e = e ( n = n ) endl;return 0;

11、29例2.4 用do-while結(jié)構(gòu)求e值/ Example 2-4:計算常數(shù)e的值#include int main()double e = 1.0;double u = 1.0;int n= 1;dou = u/n;e = e+u;n = n+1;while(u=1.0E-7);cout e = e ( n = n ) endl;return 0;30例2.5 水仙花算法分析:1、用窮舉法對100999之間的每個數(shù)進行驗證。驗證公式為: hdn= h3 + d3 + n32、如何分解一個3位數(shù)的百位、十位和個位?是關(guān)鍵! 百位 = n / 100 整除100,丟棄小數(shù) 十位 = (n /

12、10 )% 10 整除10,得百十位。再 對10取余數(shù),得十位數(shù) 個位 = n % 10 n對10取余數(shù),得個位 例: 371 h = 371/100 = 3 d = (371/10)%10 = 37 % 10 = 7 n = 371 % 10 = 131程序邏輯功能框圖 n = 100n 999 ? i = n / 100; j = ( n /10 )% 10 ; k = n % 10 ; h = I 3+j 3 + k 3h=n ?打印該水仙花數(shù) n = n +1 是否是否32打印水仙花程序(VC0205.cpp)/ Example 2-5:打印所有的水仙花數(shù)#include int ma

13、in()int n, i, j, k;for(n=100; n=999; n=n+1)i = n/100; / 取出n的百位數(shù)j = (n/10)%10; / 取數(shù)n的十位數(shù)k = n%10; / 取出n的個位數(shù)33if(n=i*i*i+j*j*j+k*k*k)cout n = i3 + j3 + k3endl;return 0;34例2-6 猜幻數(shù)游戲系統(tǒng)隨機給出一個數(shù)字(即幻數(shù)),游戲者去猜,如果猜對,打印成功提示,否則打印出錯提示,并提示游戲者選擇下一步動作,最多可以猜5次。算法 for(i=0; n=5; i=i+1)if (猜對)打印成功提示;else打印出錯提示;35/ Examp

14、le 2-6:猜幻數(shù)游戲#include #include int main()int magic; int guess; magic=rand();coutGuess the magic number. It is between 0 and 32767.endl;for(int i=1; iguess;if(guess=magic) cout*Right*endl; break;else if(i=5)coutThe i time is wrong. End of game!endl; else36/ Example 2-6:猜幻數(shù)游戲(續(xù)) if(guessmagic)coutYou h

15、ave been wrong for i time(s). Please try a bigger one.endl; elsecoutYou have been wrong for i time(s). Please try a smaller one.endl; return 0;37實例編程: 哥德巴赫猜想算法分析:1) 用“篩選”法生成素數(shù)表PrimeListM。先在素數(shù)表中產(chǎn)生到-1的所有自然數(shù),然后將已確定的所有素數(shù)的倍數(shù)置(求模取余為)。 2,3,5,7,13,17,.2) 這樣一來,素數(shù)表中有許多0,為找下一個素數(shù),要跳過這些0。3) 分解0到M-1之間的所有偶數(shù); 循環(huán)(x

16、M) x初值取4 先取素數(shù)P=2,判別 若PrimeListx-p等于0,說明分 解不成功,p取素數(shù)表中下一個素數(shù);再執(zhí)行 若PrimeListx-p不等于0,分解成功,打印分解式 x = x + 2,繼續(xù)執(zhí)行,檢查下一個偶數(shù)。38程序邏輯功能框圖 建立素數(shù)表reatPrimeList(PrimeList)X M ?P =M/2?P = 2x = x +2是否是否是否x = 4打印該偶數(shù)分解式顯示“哥德巴赫猜想錯“39程序模塊結(jié)構(gòu) 主函數(shù)main()子函數(shù)生成素數(shù)表CreatPrimeList( )子函數(shù)求下一個素數(shù)NextPrimeNomber()子函數(shù)求下一個素數(shù)NextPrimeNomb

17、er()40程序(生成素數(shù)表子函數(shù))#include #define M 10001 /* 定義驗證范圍 */void CreatPrimeList(int PrimeList) int i, j; for(i=0; iM; i = i+1) PrimeListi = i; i = 2; while( i M / 2 ) /只需驗證一半數(shù)據(jù) for(j=i+1; jM; j=j+1) if(PrimeListj!=0 & PrimeListj%PrimeListi=0) PrimeListj = 0; i = NextPrimeNumber(i,PrimeList); 41求下一個素數(shù)子函數(shù)/函數(shù) NextPrimeNumber: 求下一個素數(shù)int NextPrimeNumber(int p, int PrimeList) p = p+1; while(PrimeListp=0) p = p+1; return PrimeListp;42主函數(shù)(VC0201.cpp)voi

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論