版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第5章 C+的流程控制語(yǔ)句,5.1 C+語(yǔ)言的語(yǔ)句和程序結(jié)構(gòu) 5.2 選擇結(jié)構(gòu)語(yǔ)句 5.3 循環(huán)結(jié)構(gòu)語(yǔ)句 5.4 轉(zhuǎn)向語(yǔ)句 5.5 程序舉例 5.6 程序調(diào)試方法簡(jiǎn)介 作業(yè):47,9,10(1),19(2),20,5.1 C+語(yǔ)言的語(yǔ)句和程序結(jié)構(gòu),一個(gè)C+源程序:由若干個(gè)源程序文件組成。 一個(gè)源程序文件:由編譯預(yù)處理命令、全局類型定義、全局變量定義、函數(shù)定義等組成。 一個(gè)函數(shù):包括函數(shù)首部和函數(shù)體。函數(shù)體包含局部類型定義、局部變量定義、函數(shù)原型聲明、編譯預(yù)處理命令、若干個(gè)語(yǔ)句等。,C+語(yǔ)句的分類,說(shuō)明語(yǔ)句:完成數(shù)據(jù)類型和變量的定義。 控制語(yǔ)句:改變程序執(zhí)行順序的語(yǔ)句,包括:條件、循環(huán)、開關(guān)、轉(zhuǎn)
2、向、返回語(yǔ)句。 函數(shù)調(diào)用語(yǔ)句:在函數(shù)調(diào)用后加分號(hào)構(gòu)成。如: sin(x); 表達(dá)式語(yǔ)句:在表達(dá)式后加分號(hào)構(gòu)成。如: i=i+1; 空語(yǔ)句:僅由一個(gè)分號(hào)所構(gòu)成,不執(zhí)行任何動(dòng)作。 復(fù)合語(yǔ)句(也稱塊語(yǔ)句):用花括號(hào)把一個(gè)或多個(gè)語(yǔ)句括起來(lái)后構(gòu)成的語(yǔ)句。作為一個(gè)語(yǔ)句處理。,5.2 選擇結(jié)構(gòu)語(yǔ)句,選擇語(yǔ)句也稱分支語(yǔ)句:根據(jù)給定條件,選擇執(zhí)行兩個(gè)或兩個(gè)以上分支程序段中的某一個(gè)。 C+語(yǔ)言的選擇語(yǔ)句: 條件語(yǔ)句:if。有三種形式。 開關(guān)語(yǔ)句:switch。,條件語(yǔ)句,格式1: if() S 其中,是任何C+表達(dá)式,通常為算術(shù)表達(dá)式、關(guān)系表達(dá)式、邏輯表達(dá)式或逗號(hào)表達(dá)式;S是一個(gè)單一語(yǔ)句,包括復(fù)合語(yǔ)句和空語(yǔ)句。作
3、為判斷條件的必須用括號(hào)括起來(lái)。 格式2: if() S1 else S2,例5.1 從鍵盤上輸入三個(gè)整數(shù),輸出三個(gè)數(shù)中的最大數(shù)。 分析:先讀入三個(gè)數(shù),求出前兩個(gè)數(shù)中的大數(shù),再求出該大數(shù)與第三個(gè)數(shù)之間的最大數(shù)。 #include void main(void) int a,b,c,t; coutabc; if(ab) t=a; else t=b; /A coutc) couttn;else coutcn;/C ,A、B、C三行可用下列語(yǔ)句替代: t=a; if(tb) t=b; if(tc) t=c; coutn最大數(shù)是tendl;,例5.2 求ax2+bx+c=0的根。a、b、c從鍵盤輸入,a
4、0。 分析:當(dāng)輸入a、b、c的值后,若b2-4ac0,則方程有兩個(gè)不同的實(shí)根;若b2-4ac=O,則方程有兩個(gè)相等的實(shí)根。 #include #include void main(void) float a,b,c,delta; coutabc; delta=b*b-4*a*c;,if(delta=0) /使用復(fù)合語(yǔ)句 delta=sqrt(delta); if(delta) cout方程有兩個(gè)不同的實(shí)根:; coutnx1=(-b+delta)/2/a; couttx2=(-b-delta)/2/an; else cout方程有兩個(gè)相等的實(shí)根:x1=x2= -b/2/an; else cou
5、t方程沒(méi)有實(shí)根!n; ,條件語(yǔ)句,格式3: if() S1 else if() S2 else if . else Sn 注意,當(dāng)出現(xiàn)如下形式的嵌套條件語(yǔ)句時(shí): if(e1) if(e2) S1 else S2 C+規(guī)定:else與其前面最近的還沒(méi)有配對(duì)的if進(jìn)行配對(duì)。這樣,上面的條件語(yǔ)句中else與第二個(gè)if配對(duì)。若希望else與第一個(gè)if配對(duì),則可用改變: if(e1) if(e2) S1 else S2,例5.3 輸入三角形的三邊,判斷其為何種三角形。 #include void main(void) int a,b,c; coutabc; if(a+b=c|b+c=a|a+c=b) c
6、out不能組成三角形!n; else if(a=b ,開關(guān)語(yǔ)句: switch,格式: switch() case :; break; case :; break; case :; break; default: ,開關(guān)語(yǔ)句: switch,執(zhí)行過(guò)程: 先求的值,再依次與case后面的比較,若與某一的值相等,則轉(zhuǎn)去執(zhí)行該case后邊的語(yǔ)句序列,一直執(zhí)行下去,直至遇到break語(yǔ)句或開關(guān)語(yǔ)句的右花括號(hào)為止。否則,若有default分支,則執(zhí)行該分支后邊的語(yǔ)句序列,否則什么也不執(zhí)行。 與if語(yǔ)句相比: 任一開關(guān)語(yǔ)句均可用條件語(yǔ)句來(lái)實(shí)現(xiàn),但反之不然。原因是開關(guān)語(yǔ)句限定表達(dá)式的取值類型,而條件語(yǔ)句中的
7、條件表達(dá)式可取任意類型的值。 開關(guān)語(yǔ)句結(jié)構(gòu)清晰,易理解。,例5.4 輸入一個(gè)字符,判斷它是元音字母還是空白符。 #include void main(void) char c; cin.get(c); switch(c) case a: case A: case e: case E: case i: case I: case o: case O: case u: case U: cout這是元音字母n; break; case : case n: case t: cout這是空白符n; break; default: cout這是其它字符n; ,請(qǐng)畫程序流程圖 用if語(yǔ)句改寫本例,5.3 循環(huán)
8、結(jié)構(gòu)語(yǔ)句,循環(huán):某條件成立時(shí),重復(fù)執(zhí)行的操作。 問(wèn)題:計(jì)算1+2+3+100。 分析:編程時(shí)不可能依次列出1100個(gè)數(shù)。設(shè) 變量sum累計(jì)和值,初值為1; 變量i 存放當(dāng)前待累計(jì)的數(shù),初值為2。 算法: s1.給變量sum賦初值1,i賦初值2; s2.令sum=sum+i,i=i+1; s3.若i=100,則轉(zhuǎn)s2; s4.輸出sum的值。,s2和s3是重復(fù)執(zhí)行的操作。 while、dowhile和for語(yǔ)句實(shí)現(xiàn)循環(huán),并把這三個(gè)語(yǔ)句稱為循環(huán)結(jié)構(gòu)語(yǔ)句。,while語(yǔ)句,格式: while() S 其中,表達(dá)式是任何表達(dá)式;語(yǔ)句S是任一語(yǔ)句,稱為循環(huán)體。 執(zhí)行過(guò)程:先計(jì)算表達(dá)式的值,若表達(dá)式的值不
9、等于0,則執(zhí)行語(yǔ)句S,再計(jì)算表達(dá)式的值,重復(fù)以上過(guò)程,直到表達(dá)式的值等于0為止。,特點(diǎn):先判斷后執(zhí)行,故循環(huán)體有可能一次也不執(zhí)行。,例5.6 用while語(yǔ)句求1+2+3+100的值。 #include void main(void) int i=2,/待求和的當(dāng)前項(xiàng) s=1;/當(dāng)前項(xiàng)前所有項(xiàng)的累加和 while(i=100) s+=i; i+; cout1+2+3+100=sn; ,必須明確所用變量的含義及初值,或:while(i=100) s+=i,i+; 或:while(i=100) s+=i+;,dowhile語(yǔ)句,格式: do 語(yǔ)句 while(); 語(yǔ)句為任一語(yǔ)句,是循環(huán)體;表達(dá)式
10、是任一表達(dá)式。 執(zhí)行過(guò)程:先執(zhí)行語(yǔ)句,后判斷表達(dá)式的值;若表達(dá)式的值不為0,則繼續(xù)執(zhí)行循環(huán)體,直到表達(dá)式的值為0時(shí)為止。,特點(diǎn):先執(zhí)行后判斷,故循環(huán)體至少執(zhí)行一次。,例5.7 用dowhile語(yǔ)句求1+2+100。 #include void main(void) int i=2, /待求和的當(dāng)前項(xiàng) s=1; /當(dāng)前項(xiàng)前所有項(xiàng)的累加和 do s+=i+; while(i=100); cout1+2+3+100=sn; ,for語(yǔ)句,格式: for(;) 語(yǔ)句 表達(dá)式13是任何表達(dá)式;語(yǔ)句是任一語(yǔ)句,為循環(huán)體。,特點(diǎn):先判斷后執(zhí)行,循環(huán)體有可能一次也不執(zhí)行。,執(zhí)行過(guò)程: 計(jì)算表達(dá)式1; 若表達(dá)式
11、2的值為0,則執(zhí)行,否則轉(zhuǎn); 執(zhí)行語(yǔ)句,計(jì)算表達(dá)式3,轉(zhuǎn); 結(jié)束循環(huán)。,例5.8 用for語(yǔ)句求1+2+100。 #include void main(void) int i,/待求和的當(dāng)前項(xiàng) s;/當(dāng)前項(xiàng)前所有項(xiàng)的累加和 for(i=2,s=1;i=100;i+) s+=i; cout1+2+3+100=sendl; ,表達(dá)式1通常用于設(shè)置循環(huán)初值,多為賦值表達(dá)式和逗號(hào)表達(dá)式。,表達(dá)式2通常用于循環(huán)結(jié)束條件的判斷,多為關(guān)系表達(dá)式、邏輯表達(dá)式。,表達(dá)式3通常用于改變循環(huán)的結(jié)束條件。,從循環(huán)的組成要素上講,for語(yǔ)句的常用形式應(yīng)為: for(循環(huán)變量初始化;循環(huán)結(jié)束條件;循環(huán)變量更新) 循環(huán)體語(yǔ)
12、句 例5.9 輸入一行字符,并按輸入的順序輸出該行字符。 #include void main(void) char c; cout“輸入一行字符串:n; for(cin.get(c);c!=n;cin.get(c) coutc;/依次輸出字符 coutc;/輸出最后一個(gè)字符,即結(jié)束條件n ,三種循環(huán)語(yǔ)句的比較,for和while語(yǔ)句都是先判斷循環(huán)條件,循環(huán)體可能一次也不執(zhí)行。而dowhile語(yǔ)句是先執(zhí)行循環(huán)體,后判斷循環(huán)條件,所以循環(huán)體至少要執(zhí)行一次。因此對(duì)于至少要執(zhí)行一次重復(fù)結(jié)構(gòu)的程序段,建議使用dowhile語(yǔ)句,而對(duì)于其他的重復(fù)結(jié)構(gòu)的程序段,可使用for或while語(yǔ)句。 由于for語(yǔ)
13、句有三個(gè)表達(dá)式,可分別用于循環(huán)變量初始化、循環(huán)結(jié)束條件和循環(huán)控制變量的更新,所以用得最多的是for語(yǔ)句,其次是while語(yǔ)句,而dowhile語(yǔ)句相對(duì)于前兩種語(yǔ)句用得少一些。,合理使用循環(huán)語(yǔ)句,合理使用循環(huán)語(yǔ)句,可優(yōu)化程序結(jié)構(gòu),精簡(jiǎn)程序。例如,例5.9 再用while和dowhile語(yǔ)句實(shí)現(xiàn):,#include void main(void) char c; cout“輸入字符串:n; cin.get(c); while(c!=n) coutc; cin.get(c); coutc; ,#include void main(void) char c; cout“輸入字符串:n; do cin.
14、get(c); coutc; while(c!=n); ,從例5.9的三個(gè)程序可見,本例用dowhile語(yǔ)句時(shí),程序最簡(jiǎn),其次為for語(yǔ)句,再次為while語(yǔ)句。,循環(huán)的嵌套及其應(yīng)用,循環(huán)的嵌套:循環(huán)的內(nèi)嵌語(yǔ)句也可以是循環(huán)語(yǔ)句。 例5.10 輸出1000以內(nèi)所有完數(shù)?!巴陻?shù)”是指與其因子之和相等的數(shù)。例如6=123,即6是完數(shù)。輸出完數(shù)按如下形式,例如,對(duì)于完數(shù)6,應(yīng)顯示: 6=1+2+3 分析: sum保存一個(gè)數(shù)的因子和; i1000以內(nèi)的一個(gè)數(shù),初值為2,終值為1000; j i的試探因子,取值從1到i/2。因1是i的因子,故直接作為sum的初值,j的初值為2。若i%j為0,則說(shuō)明j是i的
15、因子,則sum+=j。,#include void main(void) int i, /1000以內(nèi)的一個(gè)數(shù) j, /i的試探因子 sum;/i的因子和 for(i=2;i=1000;i+) /外層for語(yǔ)句 for(sum=1,j=2;j=i/2;j+)/內(nèi)層for語(yǔ)句 if(i%j=0) sum+=j; if(sum=i) /i是完數(shù),按指定格式輸出 couti=1”; for(j=2;j=i/2;j+) /因未存i的因子,需再求 if(i%j=0) cout+j; coutendl; ,5.4 轉(zhuǎn)向語(yǔ)句,goto語(yǔ)句是一條非常簡(jiǎn)單的無(wú)條件轉(zhuǎn)向語(yǔ)句,它可以將程序的執(zhí)行流程轉(zhuǎn)到程序中的任何
16、位置,通常是從它所在的地方轉(zhuǎn)移到帶有標(biāo)號(hào)的語(yǔ)句處。 goto語(yǔ)句與條件語(yǔ)句組合,可形成當(dāng)型和直到型循環(huán)。 濫用goto語(yǔ)句,會(huì)導(dǎo)致程序流程過(guò)于復(fù)雜,降低程序的可讀性、可維護(hù)性等。 軟件危機(jī)爆發(fā)后,goto語(yǔ)句一度成為爭(zhēng)論的焦點(diǎn)。 結(jié)構(gòu)化程序設(shè)計(jì)為了保持程序結(jié)構(gòu)的單入口、單出口特性,嚴(yán)格限制直接使用goto語(yǔ)句,但考慮到有時(shí)不得不改變程序執(zhí)行的流程,C+語(yǔ)言提供了功能受到限制的轉(zhuǎn)向語(yǔ)句break和continue來(lái)替代goto語(yǔ)句。,break語(yǔ)句,格式: break; 該語(yǔ)句只用在switch或循環(huán)語(yǔ)句中。 用在開關(guān)語(yǔ)句switch中的某個(gè)分支語(yǔ)句中,其作用是結(jié)束開關(guān)語(yǔ)句的執(zhí)行,并把控制轉(zhuǎn)移到
17、該開關(guān)語(yǔ)句之后的第一個(gè)語(yǔ)句執(zhí)行。 用在循環(huán)語(yǔ)句的循環(huán)體中,當(dāng)執(zhí)行到break語(yǔ)句時(shí),直接結(jié)束該循環(huán)語(yǔ)句的執(zhí)行,把控制轉(zhuǎn)移到緊跟該循環(huán)語(yǔ)句之后的語(yǔ)句執(zhí)行。,例5.11 判別所輸入的一個(gè)大于1的正整數(shù)是否是素?cái)?shù)。 #include #include void main(void) int x,i,j; /x存放所輸入的正整數(shù) coutx; for(i=2,j=(int)sqrt(x);ij) coutx是素?cái)?shù)!n; else coutx不是素?cái)?shù)!n; ,特別關(guān)注:當(dāng)循環(huán)語(yǔ)句存在多個(gè)結(jié)束出口時(shí),通常會(huì)在該循環(huán)結(jié)束后,對(duì)不同結(jié)束出口作出不同的處理,因此,正確區(qū)分不同結(jié)束出口是非常重要的。,問(wèn)題:例5.
18、11程序中的for語(yǔ)句 能否不用break語(yǔ)句?若能,如何修改for語(yǔ)句?,continue語(yǔ)句,格式: continue; 只用在循環(huán)語(yǔ)句的循環(huán)體中,作用是結(jié)束本次循環(huán)的循環(huán)體,提前進(jìn)入下一次循環(huán)。對(duì)于while和dowhile循環(huán)來(lái)說(shuō),若遇到continue,則跳到循環(huán)的位置;而對(duì)于for循環(huán)來(lái)說(shuō),則跳到for循環(huán)的處。 與break語(yǔ)句的區(qū)別:break是結(jié)束循環(huán);continue是結(jié)束本次循環(huán),提前進(jìn)入下一次循環(huán)。,例5.12 輸入兩個(gè)大于1的正整數(shù)并輸出。若輸入有誤,則給出提示并允許重新輸入,直到輸入正確為止。 分析: 檢查輸入數(shù)據(jù)很重要。例如在例5.11中,若運(yùn)行時(shí)輸入整數(shù)1,程序
19、輸出也是1是素?cái)?shù)!。程序運(yùn)行時(shí),難免輸入出錯(cuò),應(yīng)允許用戶重新輸入,直到輸入正確為止,除非特殊場(chǎng)合,如用戶身份驗(yàn)證等。 為了便于輸入出錯(cuò)時(shí)重新輸入,程序使用dowhile循環(huán),并設(shè)置一個(gè)輸入出錯(cuò)標(biāo)志error,用作輸出不同提示信息的依據(jù)和循環(huán)結(jié)束條件。,#include void main(void) int x,y, /x、y分別存放所輸入的正整數(shù) error=0;/輸入出錯(cuò)標(biāo)志。為1時(shí)出錯(cuò),為0時(shí)正常 coutx; if(xy; if(y2) error=1; while(error); /error為1表示輸入出錯(cuò),需要重新輸入 coutnn輸入的兩個(gè)數(shù)為x,yendl; ,goto語(yǔ)句簡(jiǎn)
20、介*,標(biāo)號(hào) label:S S是任一語(yǔ)句,包括空語(yǔ)句;label為語(yǔ)句標(biāo)號(hào),簡(jiǎn)稱為標(biāo)號(hào),采用標(biāo)識(shí)符。標(biāo)號(hào)無(wú)需定義,可直接使用。 goto語(yǔ)句 goto label; 其中,label是語(yǔ)句標(biāo)號(hào),當(dāng)執(zhí)行到該語(yǔ)句時(shí),無(wú)條件地將控制轉(zhuǎn)移到標(biāo)有該標(biāo)號(hào)的語(yǔ)句處執(zhí)行。,*goto語(yǔ)句的主要用途,從循環(huán)體內(nèi)轉(zhuǎn)移到循環(huán)體外:但可用break或continue替代。 從多層循環(huán)的內(nèi)層跳到外層循環(huán)外:但這種用法不符合結(jié)構(gòu)化編程原則,不提倡使用。 不允許從循環(huán)語(yǔ)句的外面轉(zhuǎn)移到循環(huán)語(yǔ)句的里面。 與if語(yǔ)句構(gòu)成循環(huán):如例5.13所示。但可由while、dowhile和for取代,因此也不提倡這樣使用。,例5.13 用g
21、oto和if構(gòu)成循環(huán),求1+2+100的值。 #include void main(void) int i=2, /待求和的當(dāng)前項(xiàng) s=1; /當(dāng)前項(xiàng)前的所有項(xiàng)的累加和 lp: if(i=100)/goto語(yǔ)句和if語(yǔ)句構(gòu)成while型循環(huán) s+=i+; goto lp; cout1+2+3+100=sn; ,exit()函數(shù),exit( )函數(shù)是stdlib.h庫(kù)中的函數(shù),原型為: void exit(int status); 執(zhí)行該函數(shù)時(shí),將終止當(dāng)前程序的執(zhí)行并將控制返還操作系統(tǒng)。但終止前,系統(tǒng)要做必要的收尾工作,如關(guān)閉該程序打開的文件,寫完緩沖輸出的內(nèi)容,釋放變量占用內(nèi)存(不含堆內(nèi)存)等
22、。status為終止程序的原因,0表示正常退出,非0表示異常退出。,5.5 程序舉例,例5.14 編程計(jì)算1!+2!+10!。 分析:每項(xiàng)都是計(jì)算階乘,可用循環(huán)結(jié)構(gòu)處理。#include void main(void) int i,/取值從110,初值為2 p,/保存i!,初值為1 s;/前i個(gè)階乘和,初值為1 for(i=2,p=1,s=1;i=10;i+) p*=i; s+=p; cout1!+2!+3!+10!=sn; ,程序運(yùn)行結(jié)果: 1!+2!+3!+10!=4037913,n!的溢出問(wèn)題及處理,用double或long double型變量存放階乘值。對(duì)于某些C+系統(tǒng),可用8字節(jié)整型
23、,如VC+的_int64。 自編大整數(shù)運(yùn)算程序:例如使用字符型數(shù)組實(shí)現(xiàn)。 近似方法:當(dāng)階乘值大于等于10時(shí),就除以10,使指數(shù)加1。最后將尾數(shù)和指數(shù)分別輸出。,#include void main(void) int i,e; /e保存階乘的指數(shù),初值為0 double p;/保存階乘的尾數(shù),初值為1 for(i=2,p=1,e=0;i=10)/階乘p反復(fù)除以10,分離指數(shù) p/=10.0; e+; cout1000000!=peeendl; ,程序運(yùn)行結(jié)果: 1000000!=8.26393e5565708,例5.15 編寫程序,利用以下公式計(jì)算的近似值,直到最后一項(xiàng)的絕對(duì)值小于10-8為止
24、。 分析:本題屬于求和問(wèn)題,可用循環(huán)語(yǔ)句解決。 主要特點(diǎn): 所算的項(xiàng)數(shù)是未知,循環(huán)的結(jié)束條件是最后一項(xiàng)的絕對(duì)值小于10-8。 每個(gè)計(jì)算項(xiàng)的符號(hào)正負(fù)相間,每一項(xiàng)的分母比前一項(xiàng)增加2。 要求計(jì)算到最后一項(xiàng)的絕對(duì)值小于10-8,即有效位數(shù)超過(guò)7位,已超出float型的精度范圍,應(yīng)使用double型。,#include #include #include void main() double pi=0,/4的前n項(xiàng)的和,初值為0 t=1, /4的當(dāng)前項(xiàng)的值,初值為1 n=1; /n表示分母 int s=-1; /s表示符號(hào) while(fabs(t)=1E-8) pi+=t; n+=2; s=-s;
25、t=-s/n; coutsetiosflags(ios:fixed) setprecision(8)pi*4endl; ,程序運(yùn)行結(jié)果: 3.14159263,例5.16 用迭代法求 的近似值。求平方根的迭代公式為: 直到|xn+1-xn|10-8為止。 分析:迭代法是數(shù)值近似計(jì)算的重要方法之一。 變量a 存放輸入的正數(shù) 變量x0 代表公式里的xn,初值為a/2 變量x1 代表公式里的xn+1,其值由公式計(jì)算 算法: 若|x1-x0|10-8則x1就是所求平方根的近似值; 否則將x1賦給x0,再計(jì)算新的x1,重復(fù)上述過(guò)程。,#include #include #include void mai
26、n(void) double x0,x1,a; couta; while(aa; ,x1=a/2; do x0=x1; x1=(x0+a/x0)/2; while(fabs(x1-x0)1e-8); couta的平方根等于: setiosflags(ios:fixed) setprecision(8)x1n; ,程序運(yùn)行結(jié)果: 輸入一個(gè)正數(shù):3 3的平方根等于:1.73205081,例5.17 輸入一行字符,分別統(tǒng)計(jì)數(shù)字字符、字母字符和其它字符的個(gè)數(shù)。 分析:輸入任何字符使用cin.get()函數(shù)。 源程序: #include void main(void) int digit=0, /統(tǒng)計(jì)數(shù)
27、字字符的個(gè)數(shù) letter=0, /統(tǒng)計(jì)字母字符的個(gè)數(shù) other=0; /統(tǒng)計(jì)其他字符的個(gè)數(shù) char c;,cout=0 ,例5.18 用生成偽隨機(jī)數(shù)的庫(kù)函數(shù)rand(),設(shè)計(jì)一個(gè)自動(dòng)出題程序,能實(shí)現(xiàn)兩位正整數(shù)的四則運(yùn)算。四則運(yùn)算的具體類型也由隨機(jī)數(shù)確定。共出10題,每題10分,最后給出總分。注意,減法計(jì)算題要保證被減數(shù)大于等于減數(shù),除法的結(jié)果為商。 分析: 偽隨機(jī)數(shù)庫(kù)函數(shù)rand()的介紹參見3.4.2節(jié)。 兩位正整數(shù)的范圍是1099,共90個(gè)數(shù),因此,用rand()函數(shù)生成的兩位正整數(shù)可表示為: rand()%90+10 其它說(shuō)明參見程序中的注釋。源程序如下。,源程序: #includ
28、e #include void main(void) int i, /循環(huán)變量,用作出題序號(hào) a,b, /隨機(jī)生成的兩個(gè)操作數(shù) c, /計(jì)算機(jī)算出的參考答案 d, /答題者算出的答案 op, /隨機(jī)生成的運(yùn)算類型 sum=0; /答題者答題累計(jì)所得分?jǐn)?shù) srand(c); /初始化偽隨機(jī)數(shù)發(fā)生器,for(i=0;i10;i+) a=rand()%90+10;b=rand()%90+10;op=rand()%4; switch(op) case 0: couta+b=; c=a+b; break; case 1: if(ab) int t=a; a=b; b=t; couta-b=; c=a-b
29、; break; case 2: couta*b=; c=a*b; break; case 3: couta/b=; c=a/b; ,cind; if(d=c) sum+=10; cout正確,加10分!n; else cout錯(cuò)誤,不得分!n; cout“10題中,答對(duì):”sum/10 “題,得分:sumn; ,例5.19 在同一坐標(biāo)中輸出sinx和cosx兩條曲線。應(yīng)注意處理以下問(wèn)題: 用s代表sinx曲線,用c代表cosx曲線; 當(dāng)x為某值時(shí),若sinx=cosx,此時(shí)只要求輸出s; 輸出一條軸(x軸),由字符l或!或|構(gòu)成。 分析: 字符界面:每屏25行,每行80個(gè)字符。若顯示內(nèi)容超過(guò)
30、25行,則前面顯示的內(nèi)容向前滾動(dòng)并消失。 坐標(biāo)系統(tǒng):為了便于周期性顯示正弦和余弦曲線,將顯示器的水平方向作為y軸,垂直方向作為x軸。 正弦和余弦函數(shù)的取值范圍為-1,1,需將其展寬映射到-38,38,再映射到1,77,以便顯示。 為了整屏顯示正弦和余弦函數(shù)的一個(gè)周期,從一個(gè)周期上等間隔取了24點(diǎn)。,#include #include #define PI 3.1415926 void main(void) int i,sinx,cosx; for(float x=0;x2*PI;x+=PI/12) cosx=39+(int)(38*cos(x); sinx=39+(int)(38*sin(x); for(i=1;i80;i+) /注意輸出字符的順序 if(i=sinx) couts; else if(i=cosx) coutc; else if(i=39) coutl; else cout ; coutn; ,5.6 程序調(diào)試方法簡(jiǎn)介,用分支和循環(huán)語(yǔ)句編程,可處理的問(wèn)題更加廣泛。 隨著程序復(fù)雜性的增加,出錯(cuò)的機(jī)會(huì)增大
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 小學(xué)數(shù)學(xué)期中考試題型分析報(bào)告
- 市場(chǎng)管理行業(yè)分析報(bào)告
- 移動(dòng)游戲行業(yè)產(chǎn)品分析報(bào)告
- 酸奶行業(yè)swot分析報(bào)告
- 茶陵行業(yè)現(xiàn)狀分析報(bào)告
- 馬尾藻行業(yè)市場(chǎng)分析報(bào)告
- 流量行業(yè)分析報(bào)告
- 鋰電行業(yè)前瞻分析報(bào)告
- 供熱行業(yè)特性分析報(bào)告
- 物業(yè)公司各種衛(wèi)生制度
- 安全附件管理制度規(guī)范
- 工程轉(zhuǎn)接合同協(xié)議
- DL∕T 5210.6-2019 電力建設(shè)施工質(zhì)量驗(yàn)收規(guī)程 第6部分:調(diào)整試驗(yàn)
- 七年級(jí)數(shù)學(xué)上冊(cè)期末試卷及答案(多套題)
- 2024年度初會(huì)《初級(jí)會(huì)計(jì)實(shí)務(wù)》高頻真題匯編(含答案)
- UI設(shè)計(jì)師面試考試題(帶答案)
- GB/T 13542.1-2009電氣絕緣用薄膜第1部分:定義和一般要求
- 政府會(huì)計(jì)準(zhǔn)則優(yōu)秀課件
- 陣發(fā)性室性心動(dòng)過(guò)速課件
- 無(wú)機(jī)與分析化學(xué)理論教案
- 檸檬酸安全技術(shù)說(shuō)明書(msds)
評(píng)論
0/150
提交評(píng)論