程序的設(shè)計(jì)舉例.ppt_第1頁
程序的設(shè)計(jì)舉例.ppt_第2頁
程序的設(shè)計(jì)舉例.ppt_第3頁
程序的設(shè)計(jì)舉例.ppt_第4頁
程序的設(shè)計(jì)舉例.ppt_第5頁
已閱讀5頁,還剩42頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、程序設(shè)計(jì)舉例,B,A,NS圖,傳統(tǒng)流程圖,順序結(jié)構(gòu),B,A,B,N,如果 成績60 那么 通知補(bǔ)考 否則 告知你考試成績,A,Y,條 件P,分支結(jié)構(gòu)(選擇結(jié)構(gòu)),條 件P,A,當(dāng)型循環(huán),直到型循環(huán),真,假,假,條 件P,A,假,真,循環(huán)結(jié)構(gòu),當(dāng)型循環(huán),循環(huán)結(jié)構(gòu),直到型循環(huán),循環(huán)結(jié)構(gòu),復(fù)合語句,括住的若干條語句構(gòu)成一個(gè)復(fù)合語句 語句塊內(nèi)可以定義變量 變量僅在定義它的復(fù)合語句內(nèi)有效 變量必須在復(fù)合語句的開頭定義 復(fù)合語句可以用在任何可以使用語句的地方,if-else,選擇結(jié)構(gòu)的一種最常用形式 if (表達(dá)式)語句1;else語句2;語句3 表達(dá)式值非0時(shí),執(zhí)行語句1,然后語句3;表達(dá)式值為0時(shí),執(zhí)

2、行語句2,然后語句3 else部分可以沒有。 if (表達(dá)式)語句1;語句3 當(dāng)表達(dá)式值為0時(shí),直接執(zhí)行語句3 if-else嵌套使用時(shí),注意else和誰配對的問題,else-if,if的一種擴(kuò)展形式 if (表達(dá)式) 語句1;else if (表達(dá)式)語句2;else if (表達(dá)式)語句3;else語句4;語句5; else部分可以沒有,現(xiàn)場編程完成例4.5,體型判斷。按“體指數(shù)”對肥胖程度進(jìn)行劃分: 體指數(shù)t = 體重w / (身高h(yuǎn))2 (w 單位為公斤,h單位為米) 當(dāng)t = 27時(shí),為肥胖。 編程從鍵盤輸入你的身高h(yuǎn)和體重w,根據(jù)給定公式計(jì)算體指數(shù)t,然后判斷你的體重屬于何種類型。

3、 用3種方法編程: 算法1:用不帶else子句的if語句編程 算法2:用在if子句中嵌入if 語句的形式編程 算法3:用在else子句中嵌入if 語句的形式編程,switch,多路選擇 switch (表達(dá)式) case 常數(shù)1: 語句序列1;case 常數(shù)2: 語句序列2;default: 語句序列3; default可以沒有,但最好不省略 不要忘記break,現(xiàn)場編程完成計(jì)算器程序例4.8,編程設(shè)計(jì)一個(gè)簡單的計(jì)算器程序,要求根據(jù)用戶從鍵盤輸入的表達(dá)式: 操作數(shù)1 運(yùn)算符op 操作數(shù)2 然后,計(jì)算表達(dá)式的值,指定的運(yùn)算符為加(+)、減(-)、乘(*)、除(/),循環(huán)while,for,whi

4、le (表達(dá)式) 語句; for (表達(dá)式1; 表達(dá)式2; 表達(dá)式3) 語句; ,while,while (表達(dá)式) 語句; 只要表達(dá)式的值為非0,就重復(fù)執(zhí)行語句,直到表達(dá)式值為0時(shí)止,for,for (表達(dá)式1; 表達(dá)式2; 表達(dá)式3) 語句; 首先執(zhí)行表達(dá)式1。如果表達(dá)式2的值為非0,就重復(fù)執(zhí)行語句和表達(dá)式3,直到表達(dá)式2的值為0時(shí)止 相當(dāng)于:表達(dá)式1; while (表達(dá)式2) 語句;表達(dá)式3; 表達(dá)式1和表達(dá)式3可以沒有或者是用逗號分隔的多個(gè)表達(dá)式的組合。但最好不要有太多的表達(dá)式組合,注意,在for和while語句之后一般沒有分號 有分號表示循環(huán)體就是分號之前的內(nèi)容(空循環(huán)體) whi

5、le (i 100);i+; for (i = 0; i 100; i+);printf(%d, i); for通常有一個(gè)循環(huán)變量控制循環(huán)的次數(shù),不要在循環(huán)體內(nèi)改變這個(gè)變量,do-while,do 語句;while (表達(dá)式); 首先執(zhí)行語句,然后判斷表達(dá)式的值。如果表達(dá)式為0,繼續(xù)向下執(zhí)行,否則,再次執(zhí)行語句,再次判斷表達(dá)式的值 語句會被至少執(zhí)行一次,條 件P,A,當(dāng)型循環(huán),直到循環(huán),真,假,假,條 件P,A,假,真,假,條 件P,條 件P,A,假,當(dāng)循環(huán)條件第一次就為假時(shí),選擇三種循環(huán)的一般原則,如果循環(huán)次數(shù)已知,用for 如果循環(huán)次數(shù)未知,用while 如果循環(huán)體至少要執(zhí)行一次,用do-

6、while 這只是“一般”原則,不是“原則”,現(xiàn)場編程完成例4.6 ,例4.9,例4.6:猜數(shù)游戲:先由計(jì)算機(jī)“想”一個(gè)數(shù)請人猜,如果人猜對了,則計(jì)算機(jī)給出提示:“Right!”, 否則提示:“Wrong!”,并告訴人所猜的數(shù)是大還是小。 例4.9:先由計(jì)算機(jī)“想”一個(gè)1到100之間的數(shù)請人猜,如果人猜對了,則結(jié)束游戲,否則計(jì)算機(jī)給出提示,告訴人所猜的數(shù)是太大還是太小,直到人猜對為止。計(jì)算機(jī)記錄人猜的次數(shù),以此來反映猜數(shù)者“猜”的水平。,猜數(shù)游戲用到的庫函數(shù),隨機(jī)函數(shù)rand() #include RAND_MAX在stdlib.h中定義,不大于雙字節(jié)整數(shù)的最大值32767 產(chǎn)生0,RAND_

7、MAX 之間的隨機(jī)數(shù) magic = rand(); 產(chǎn)生0,b-1 之間的隨機(jī)數(shù) magic = rand()%b; 產(chǎn)生a,a+b-1 之間的隨機(jī)數(shù) magic = rand()%b + a; 現(xiàn)場編程完成例4.6,發(fā)現(xiàn)問題,猜數(shù)游戲用到的庫函數(shù),隨機(jī)函數(shù)srand 為函數(shù)rand()設(shè)置隨機(jī)數(shù)種子來實(shí)現(xiàn)對函數(shù)rand所產(chǎn)生的偽隨機(jī)數(shù)的 “隨機(jī)化” 通過鍵入隨機(jī)數(shù)種子,產(chǎn)生0,100之間的隨機(jī)數(shù) scanf(%u, ,猜數(shù)游戲用到的庫函數(shù),隨機(jī)函數(shù)srand 為函數(shù)rand()設(shè)置隨機(jī)數(shù)種子來實(shí)現(xiàn)對函數(shù)rand所產(chǎn)生的偽隨機(jī)數(shù)的 “隨機(jī)化” 使用計(jì)算機(jī)讀取其時(shí)鐘值并把該值自動設(shè)置為隨機(jī)數(shù)種

8、子,產(chǎn)生0,100之間的隨機(jī)數(shù) 函數(shù)time()返回以秒計(jì)算的當(dāng)前時(shí)間值,該值被轉(zhuǎn)換為無符號整數(shù)并用作隨機(jī)數(shù)發(fā)生器的種子 #include srand(time(NULL); magic = rand() % 100 + 1;,死循環(huán),永遠(yuǎn)不會退出的循環(huán)為死循環(huán) for (;) while (1) do while (1) 一般情況下,要極力避免死循環(huán) 絕大多數(shù)程序不需要死循環(huán)。如果出現(xiàn),往往都是bug 時(shí)間過長的循環(huán)會造成“假死”效果,也要考慮解決,現(xiàn)場編程完成例4.11,國王的許諾。相傳國際象棋是古印度舍罕王的宰相達(dá)依爾發(fā)明的。舍罕王十分喜歡象棋,決定讓宰相自己選擇何種賞賜。 位聰明的宰相

9、指著88共64格的象棋盤說:陛下,請您賞給我一些麥子吧,就在棋盤的第一個(gè)格子中放1粒,第2格中放2粒,第3格放4粒,以后每一格都比前一格增加一倍,依此放完棋盤上的64個(gè)格子,我就感恩不盡了。 舍罕王讓人扛來一袋麥子,他要兌現(xiàn)他的許諾。 國王能兌現(xiàn)他的許諾嗎?試編程計(jì)算舍罕王共要多少麥子賞賜他的宰相,這些麥子合多少立方米? (已知1立方米麥子約1.42e8粒) 總粒數(shù)為:sum=1+2+22+23+263,方法1,#define CONST 1.42e8 #include #include main() int n; double term, sum = 0; /*累加求和變量賦初值*/ for

10、 (n=1; n=64; n+) term = pow(2, n-1); /*根據(jù)累加項(xiàng)的規(guī)律計(jì)算累加項(xiàng) */ sum = sum + term; /*作累加運(yùn)算*/ printf(sum = %en, sum); /*打印總麥粒數(shù)*/ printf(volum = %en, sum/CONST);/*打印折合的總麥粒體積數(shù)*/ ,方法2,#define CONST 1.42e8 /*定義符號常量CONST值為1.42e8 */ #include main() int n; double term = 1, sum = 1; /*累乘求積、累加求和變量賦初值*/ for (n=2; n=64;

11、 n+) term = term * 2; /*根據(jù)后項(xiàng)總是前項(xiàng)的2倍計(jì)算累加項(xiàng)*/ sum = sum + term; /*作累加運(yùn)算*/ printf(sum = %en, sum); /*打印總麥粒數(shù)*/ printf(volum = %en, sum/CONST); /*打印折合的總麥粒體積數(shù)*/ ,使用嵌套的循環(huán)體時(shí),應(yīng)注意以下問題,在嵌套的各層循環(huán)體中,使用復(fù)合語句(即用一對大花括號將循環(huán)體語句括起來)保證邏輯上的正確性 內(nèi)層和外層循環(huán)控制變量不應(yīng)同名,以免造成混亂 嵌套的循環(huán)最好采用右縮進(jìn)格式書寫,以保證層次的清晰性 循環(huán)嵌套不能交叉,即在一個(gè)循環(huán)體內(nèi)必須完整的包含著另一個(gè)循環(huán),

12、合法的嵌套循環(huán),現(xiàn)場編程完成例4.14,編程輸出如下形式的乘法九九表,#include main() int m, n; for (m=1; m10; m+) printf(%4d, m); /*打印表頭*/ printf(n); for (m=1; m10; m+) printf( -); printf(n); for (m=1; m10; m+) for (n=1; n10; n+) printf(%4d, m*n); printf(n); ,現(xiàn)場編程完成例4.15,將上例輸出格式改成如下的下三角格式打印,#include main() int m, n; for (m=1; m10; m

13、+) printf(%4d, m); /*打印表頭*/ printf(n); for (m=1; m10; m+) printf( -); printf(n); for (m=1; m10; m+) for (n=1; n=m; n+) printf(%4d, m*n); printf(n); ,現(xiàn)場編程完成例4.16,馬克思手稿中有一道趣味數(shù)學(xué)題:有30個(gè)人,其中有男人、女人和小孩,在一家飯館里吃飯共花了50先令,每個(gè)男人各花3先令,每個(gè)女人各花2先令,每個(gè)小孩各花1先令,問男人、女人和小孩各有幾人? 解方程組 窮舉法,方法1:采用三重循環(huán)窮舉x,y,z的全部可能的組合,#include m

14、ain() int x,y,z; printf(Man t Women t Childernn); for (x=0; x=30; x+) for (y=0; y=30; y+) for (z=0; z=30; z+) if (x+y+z=30 ,方法2:改進(jìn)算法,#include main() int x,y,z; printf(Man t Women t Childernn); for (x=0; x=16; x+) for (y=0; y=25; y+) z = 30 x - y; if (3 * x + 2 * y + z = 50) printf(%3d t %5d t %8dn,x

15、,y,z); ,流程的轉(zhuǎn)移控制,break語句 continue語句 goto語句 return語句 標(biāo)準(zhǔn)庫函數(shù)exit(),break和continue,對for、while、do-while循環(huán)進(jìn)行內(nèi)部手術(shù) break,退出循環(huán) continue,中斷此次循環(huán)體的執(zhí)行,開始下一次 break和continue少用為妙,break和continue,標(biāo)號舉例 error: goto舉例 goto error; 一般形式 goto 語句標(biāo)號; 語句標(biāo)號: 或 語句標(biāo)號: goto 語句標(biāo)號;,goto與標(biāo)號(label),exit()函數(shù),exit(0) 作用是終止整個(gè)程序的執(zhí)行,強(qiáng)制返回操作

16、系統(tǒng) 調(diào)用該函數(shù)需要嵌入頭文件,輸入一個(gè)整數(shù),判斷它是否是素?cái)?shù),方法1,#include main() int m, i, k; printf(Please enter a number:); scanf(%d, ,Please enter a number:,6,Program is over!,No!,方法1,#include main() int m, i, k; printf(Please enter a number:); scanf(%d, ,Please enter a number:,5,Program is over!,Yes!,方法2,#include main() int m, i, k; printf(Please enter a number:); scanf(%d, ,Please

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論