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

下載本文檔

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

文檔簡(jiǎn)介

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

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

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

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

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

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

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

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

9、轉(zhuǎn)換成績(jī)子函數(shù)/ Example 2-2:將百分制的分?jǐn)?shù)轉(zhuǎn)換為5級(jí)制分?jǐn)?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 ?計(jì)算: u = u / n; e = e + u ; n = n + 1;是否輸出結(jié)果 e28計(jì)算e程序(VC0203.cpp)/ Example 2-3:計(jì)算常數(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:計(jì)算常數(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、用窮舉法對(duì)100999之間的每個(gè)數(shù)進(jìn)行驗(yàn)證。驗(yàn)證公式為: hdn= h3 + d3 + n32、如何分解一個(gè)3位數(shù)的百位、十位和個(gè)位?是關(guān)鍵! 百位 = n / 100 整除100,丟棄小數(shù) 十位 = (n /

12、10 )% 10 整除10,得百十位。再 對(duì)10取余數(shù),得十位數(shù) 個(gè)位 = n % 10 n對(duì)10取余數(shù),得個(gè)位 例: 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的個(gè)位數(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)隨機(jī)給出一個(gè)數(shù)字(即幻數(shù)),游戲者去猜,如果猜對(duì),打印成功提示,否則打印出錯(cuò)提示,并提示游戲者選擇下一步動(dòng)作,最多可以猜5次。算法 for(i=0; n=5; i=i+1)if (猜對(duì))打印成功提示;else打印出錯(cuò)提示;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實(shí)例編程: 哥德巴赫猜想算法分析:1) 用“篩選”法生成素?cái)?shù)表PrimeListM。先在素?cái)?shù)表中產(chǎn)生到-1的所有自然數(shù),然后將已確定的所有素?cái)?shù)的倍數(shù)置(求模取余為)。 2,3,5,7,13,17,.2) 這樣一來(lái),素?cái)?shù)表中有許多0,為找下一個(gè)素?cái)?shù),要跳過(guò)這些0。3) 分解0到M-1之間的所有偶數(shù); 循環(huán)(x

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

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

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論