第3章 結(jié)構(gòu)化程序設(shè)計(jì)C語(yǔ)言_第1頁(yè)
第3章 結(jié)構(gòu)化程序設(shè)計(jì)C語(yǔ)言_第2頁(yè)
第3章 結(jié)構(gòu)化程序設(shè)計(jì)C語(yǔ)言_第3頁(yè)
第3章 結(jié)構(gòu)化程序設(shè)計(jì)C語(yǔ)言_第4頁(yè)
第3章 結(jié)構(gòu)化程序設(shè)計(jì)C語(yǔ)言_第5頁(yè)
已閱讀5頁(yè),還剩116頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、1第第3章章 結(jié)構(gòu)化程序設(shè)計(jì)結(jié)構(gòu)化程序設(shè)計(jì)3.1 基本語(yǔ)句基本語(yǔ)句3.2 順序結(jié)構(gòu)順序結(jié)構(gòu)3.3 選擇結(jié)構(gòu)選擇結(jié)構(gòu)3.4 循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)3.5 簡(jiǎn)單程序設(shè)計(jì)實(shí)例簡(jiǎn)單程序設(shè)計(jì)實(shí)例23.1 基本語(yǔ)句表達(dá)式語(yǔ)句基本語(yǔ)句表達(dá)式語(yǔ)句 基本語(yǔ)句主要有表達(dá)式語(yǔ)句、空語(yǔ)句、基本語(yǔ)句主要有表達(dá)式語(yǔ)句、空語(yǔ)句、goto語(yǔ)句語(yǔ)句、break語(yǔ)句、語(yǔ)句、continue語(yǔ)句、語(yǔ)句、return語(yǔ)句等?;菊Z(yǔ)句都以分號(hào)為結(jié)束符。語(yǔ)句等?;菊Z(yǔ)句都以分號(hào)為結(jié)束符。1表達(dá)式語(yǔ)句表達(dá)式語(yǔ)句格式:格式:表達(dá)式表達(dá)式;例如:例如:k+; k = k+2;33.1 基本語(yǔ)句基本語(yǔ)句空語(yǔ)句空語(yǔ)句2空語(yǔ)句空語(yǔ)句格式:格式:;功能:功

2、能:什么也不做的語(yǔ)句。什么也不做的語(yǔ)句。例如:例如:for( , , ) /* 無(wú)循環(huán)體無(wú)循環(huán)體 */ if(條件條件1) if(條件條件2) 語(yǔ)句語(yǔ)句1; else else 語(yǔ)句語(yǔ)句2; 43.1 基本語(yǔ)句基本語(yǔ)句break語(yǔ)句語(yǔ)句3break語(yǔ)句語(yǔ)句格式:格式:break;功能:功能:強(qiáng)制結(jié)束它所在的控制結(jié)構(gòu)強(qiáng)制結(jié)束它所在的控制結(jié)構(gòu) (switch或循環(huán)結(jié)或循環(huán)結(jié)構(gòu)構(gòu))。例如:例如:for( , , ) /* 大括號(hào)內(nèi)是循環(huán)體大括號(hào)內(nèi)是循環(huán)體 */ 語(yǔ)句語(yǔ)句1; break; /* 跳出循環(huán),轉(zhuǎn)做語(yǔ)句跳出循環(huán),轉(zhuǎn)做語(yǔ)句2 */ 語(yǔ)句語(yǔ)句2; 53.1 基本語(yǔ)句基本語(yǔ)句continue語(yǔ)句

3、語(yǔ)句4continue語(yǔ)句語(yǔ)句格式:格式:continue;功能:功能:提早結(jié)束當(dāng)前輪次循環(huán)體的執(zhí)行,進(jìn)入下一提早結(jié)束當(dāng)前輪次循環(huán)體的執(zhí)行,進(jìn)入下一輪循環(huán)輪循環(huán)。例如:例如: for( , , ) /* 大括號(hào)內(nèi)是循環(huán)體大括號(hào)內(nèi)是循環(huán)體 */ 語(yǔ)句語(yǔ)句1; continue; /* 不執(zhí)行語(yǔ)句不執(zhí)行語(yǔ)句2 */ 語(yǔ)句語(yǔ)句2; 語(yǔ)句語(yǔ)句3; 63.1 基本語(yǔ)句基本語(yǔ)句return語(yǔ)句語(yǔ)句5return語(yǔ)句語(yǔ)句格式:格式:return;或;或 return 表達(dá)式表達(dá)式;功能:功能:結(jié)束函數(shù)的這次執(zhí)行,將控制返回到函數(shù)調(diào)用處結(jié)束函數(shù)的這次執(zhí)行,將控制返回到函數(shù)調(diào)用處。說明:說明:return; 只

4、能用于函數(shù)不返回結(jié)果的函數(shù)體中;只能用于函數(shù)不返回結(jié)果的函數(shù)體中; return 表達(dá)式表達(dá)式; 用于函數(shù)有返回結(jié)果的函數(shù)體中。用于函數(shù)有返回結(jié)果的函數(shù)體中。 例如:例如:void swap(int a, int b) /* 大括號(hào)內(nèi)是函數(shù)體大括號(hào)內(nèi)是函數(shù)體 */ 語(yǔ)句語(yǔ)句1; return; /* 不執(zhí)行語(yǔ)句不執(zhí)行語(yǔ)句2,返回到調(diào)用函數(shù),返回到調(diào)用函數(shù) */ 語(yǔ)句語(yǔ)句2; 73.1 基本語(yǔ)句基本語(yǔ)句goto語(yǔ)句語(yǔ)句6goto語(yǔ)句語(yǔ)句格式:格式:goto 語(yǔ)句標(biāo)號(hào);語(yǔ)句標(biāo)號(hào);功能:功能:控制立即轉(zhuǎn)移到控制立即轉(zhuǎn)移到goto后標(biāo)號(hào)所指定的語(yǔ)句處后標(biāo)號(hào)所指定的語(yǔ)句處繼續(xù)執(zhí)行。繼續(xù)執(zhí)行。 例如:例如

5、:start: i = 0; . . . goto start;83.2 順序結(jié)構(gòu)順序結(jié)構(gòu)目前,結(jié)構(gòu)化程序設(shè)計(jì)提供三種基本結(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)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)順序結(jié)構(gòu):順序結(jié)構(gòu):描述一個(gè)計(jì)算步驟序列,表示從步描述一個(gè)計(jì)算步驟序列,表示從步驟序列的第一個(gè)計(jì)算步驟開始,順序執(zhí)行每個(gè)計(jì)算步驟序列的第一個(gè)計(jì)算步驟開始,順序執(zhí)行每個(gè)計(jì)算步驟,直至最后一個(gè)計(jì)算步驟。驟,直至最后一個(gè)計(jì)算步驟。在在C C程序中,順序執(zhí)行的語(yǔ)句序列,用花括號(hào)括程序中,順序執(zhí)行的語(yǔ)句序列,用花括號(hào)括住,就構(gòu)成住,就構(gòu)成C C語(yǔ)言的復(fù)合語(yǔ)句。語(yǔ)言的復(fù)合語(yǔ)句。復(fù)合語(yǔ)句中

6、的每個(gè)計(jì)算步驟可以是單個(gè)語(yǔ)句,復(fù)合語(yǔ)句中的每個(gè)計(jì)算步驟可以是單個(gè)語(yǔ)句,也可以是一個(gè)控制結(jié)構(gòu)。也可以是一個(gè)控制結(jié)構(gòu)。 9順序結(jié)構(gòu)順序結(jié)構(gòu) 例例【例例】交換變量交換變量x x、y y的值。的值??煞纸鉃橐韵马樞驁?zhí)行的三個(gè)計(jì)算:可分解為以下順序執(zhí)行的三個(gè)計(jì)算: temp = x; /* 將將x的值保存到變量的值保存到變量temp */ x = y; /* 變量變量x置置y值值 */ y = temp; /* 變量變量y置置temp的值的值 */ 若把交換變量若把交換變量x、y的值作為一個(gè)不可分割的整的值作為一個(gè)不可分割的整體來考慮,應(yīng)把它們寫成復(fù)合語(yǔ)句:體來考慮,應(yīng)把它們寫成復(fù)合語(yǔ)句: /* 本復(fù)合

7、語(yǔ)句要求外面為它定義本復(fù)合語(yǔ)句要求外面為它定義temp變量變量 */ temp = x; x = y; y = temp; 10順序結(jié)構(gòu)順序結(jié)構(gòu) 說明說明在構(gòu)造復(fù)合語(yǔ)句時(shí),為完成指定的工作,在構(gòu)造復(fù)合語(yǔ)句時(shí),為完成指定的工作,可能需要臨時(shí)工作變量,可能需要臨時(shí)工作變量,例如,以上述中的例如,以上述中的temptemp變量。在語(yǔ)句序列中插入變量定義,引入變量。在語(yǔ)句序列中插入變量定義,引入只有復(fù)合語(yǔ)句內(nèi)的語(yǔ)句可使用的臨時(shí)變量。例只有復(fù)合語(yǔ)句內(nèi)的語(yǔ)句可使用的臨時(shí)變量。例如,將前面的例子改寫成以下形式:如,將前面的例子改寫成以下形式: int temp; /* 定義自己專用的臨時(shí)變量定義自己專用的臨

8、時(shí)變量 */ temp = x; x = y; y = temp; 113.3 選擇結(jié)構(gòu)選擇結(jié)構(gòu) 選擇結(jié)構(gòu)可分為選擇結(jié)構(gòu)可分為兩路條件選擇結(jié)構(gòu)兩路條件選擇結(jié)構(gòu)和和多路按值選擇結(jié)構(gòu)多路按值選擇結(jié)構(gòu)兩種。兩種。3.3.1 兩路條件選擇結(jié)構(gòu)兩路條件選擇結(jié)構(gòu) (if 語(yǔ)句語(yǔ)句) 由一個(gè)條件和兩個(gè)供選擇的分支語(yǔ)句組由一個(gè)條件和兩個(gè)供選擇的分支語(yǔ)句組成,用于按條件成立與不成立兩種情況,成,用于按條件成立與不成立兩種情況,作兩種選一的控制。作兩種選一的控制。12兩路條件選擇結(jié)構(gòu)兩路條件選擇結(jié)構(gòu) (if 語(yǔ)句語(yǔ)句)if 語(yǔ)句的一般形式為:語(yǔ)句的一般形式為: if (表達(dá)式表達(dá)式) 語(yǔ)句語(yǔ)句1 else 語(yǔ)句語(yǔ)

9、句2 表達(dá)式?表達(dá)式?語(yǔ)句語(yǔ)句2假(假(0)真(非真(非0)語(yǔ)句語(yǔ)句1例如:例如: if (a b) printf(MAX = %fn, a); else printf(MAX = %fn, b);說明:當(dāng)說明:當(dāng)ab成立時(shí),輸出成立時(shí),輸出a,否則,輸出,否則,輸出b。 13if 語(yǔ)句語(yǔ)句無(wú)無(wú)else當(dāng)當(dāng) if 語(yǔ)句中的語(yǔ)句語(yǔ)句中的語(yǔ)句2 2為空語(yǔ)句時(shí),為空語(yǔ)句時(shí),if 語(yǔ)句的形式為:語(yǔ)句的形式為: if (表達(dá)式表達(dá)式) 語(yǔ)句語(yǔ)句 表達(dá)式?表達(dá)式?語(yǔ)句語(yǔ)句假(假(0)真(非真(非0)例如:例如: max=a; if (max b) max=b; printf(MAX = %fn, max)

10、;說明:將說明:將a、b中大的數(shù)存于中大的數(shù)存于max,最后輸出,最后輸出max。 14if 語(yǔ)句語(yǔ)句例例3.1和和3.2【例例3.1】求求m = max(a, b)。 if ( a b ) /* 如果如果a c & b + c a & c + a b ) float s ; /* 因?yàn)槭琼樞蚪Y(jié)構(gòu),必須寫成復(fù)合語(yǔ)句因?yàn)槭琼樞蚪Y(jié)構(gòu),必須寫成復(fù)合語(yǔ)句 */ s = ( a + b + c ) / 2.0; area = sqrt(s * ( s - a ) * ( s - b ) * ( s - c); else area = 0.0; /* 不能構(gòu)成三角形不能構(gòu)成三角形 */15if 語(yǔ)句語(yǔ)句例

11、例3.3和和3.4 ( if 嵌套嵌套)【例例3.3】若若ch中的字符為大寫字母,則改為對(duì)應(yīng)的小寫字母中的字符為大寫字母,則改為對(duì)應(yīng)的小寫字母。 if (ch=A & ch= 90 ) printf(Excellent.n); else if ( score b ) /* 按小到大排列按小到大排列 */ temp = a; a = b; b = temp;193.3.1 if 語(yǔ)句的說明語(yǔ)句的說明1.1. 如果如果if語(yǔ)句中的語(yǔ)句、語(yǔ)句語(yǔ)句中的語(yǔ)句、語(yǔ)句1 1、語(yǔ)句、語(yǔ)句2 2是一個(gè)是一個(gè)簡(jiǎn)單語(yǔ)句,在這些簡(jiǎn)單語(yǔ)句之后會(huì)有一個(gè)簡(jiǎn)單語(yǔ)句,在這些簡(jiǎn)單語(yǔ)句之后會(huì)有一個(gè)分號(hào)。分號(hào)。2.2. 如果如果if

12、語(yǔ)句中的語(yǔ)句、語(yǔ)句語(yǔ)句中的語(yǔ)句、語(yǔ)句1、語(yǔ)句、語(yǔ)句2是由多是由多個(gè)語(yǔ)句組成的順序結(jié)構(gòu)時(shí),則必須將它們個(gè)語(yǔ)句組成的順序結(jié)構(gòu)時(shí),則必須將它們寫成復(fù)合語(yǔ)句。寫成復(fù)合語(yǔ)句。if ( a b ) /* 按小到大排列按小到大排列 */ temp = a; a = b; b = temp;203.3.1 if 語(yǔ)句的說明語(yǔ)句的說明3. 3. 在在if語(yǔ)句中,每個(gè)語(yǔ)句中,每個(gè)else總要與它前面的總要與它前面的if對(duì)對(duì)應(yīng),不可能出現(xiàn)沒有對(duì)應(yīng)應(yīng),不可能出現(xiàn)沒有對(duì)應(yīng)if 的的else?!纠?if ( a b ) max = b; else max = a; else max = c; /* 錯(cuò)誤錯(cuò)誤 */ 2

13、1【例例3.5】輸入輸入3個(gè)整數(shù),輸出它們中的最大數(shù)個(gè)整數(shù),輸出它們中的最大數(shù)為求三個(gè)數(shù)中的最大者,最簡(jiǎn)潔的辦法是先將其中某一為求三個(gè)數(shù)中的最大者,最簡(jiǎn)潔的辦法是先將其中某一個(gè)預(yù)作最大者,然后逐一與其它兩個(gè)數(shù)比較,當(dāng)發(fā)現(xiàn)有更大個(gè)預(yù)作最大者,然后逐一與其它兩個(gè)數(shù)比較,當(dāng)發(fā)現(xiàn)有更大者時(shí),就以它重置最大者。者時(shí),就以它重置最大者。#include void main() int a, b, c, max; printf(輸入輸入3個(gè)整數(shù)個(gè)整數(shù). n); scanf(%d%d%d, &a, &b, &c); max = a; if (max b) max = b; if (max = y = zx =

14、 y = z。方法:方法:先調(diào)整先調(diào)整x x和和y y,使,使 x = yx = y;再調(diào)整;再調(diào)整x x和和z z,使,使 x = zx = z;至此,至此,x x為最大值。最后再調(diào)整為最大值。最后再調(diào)整y y和和z z,使,使 y = zy = z。#include void main() int x, y, z, temp; printf(Enter x, y, z.n); scanf(%d%d%d, &x, &y, &z); if (x =y */ if (x =z */ if (y =z */ printf(%dt%dt%dn, x, y, z);23【例例3.7】求一元二次方程的根

15、求一元二次方程的根 設(shè)一元二次方程為設(shè)一元二次方程為ax2+bx+c=0,對(duì)輸入的系數(shù),對(duì)輸入的系數(shù)a、b、c,有以下幾種情況需要考慮:,有以下幾種情況需要考慮:(1) a0:方程有兩個(gè)根。方程有兩個(gè)根。(2) a=0, b0:方程退化為方程退化為bx+c=0, 方程根為:方程根為:-c/b。(3) a=0, b=0:方程為同義反復(fù)方程為同義反復(fù)(c=0), 或或 矛盾矛盾(c0)。由以上分析得到以下程序結(jié)構(gòu):由以上分析得到以下程序結(jié)構(gòu): (1) 輸入方程系數(shù)輸入方程系數(shù) a, b, c; if ( a != 0.0 ) (2)求兩個(gè)根求兩個(gè)根; else if ( b != 0.0 ) (3

16、) 輸出方程根輸出方程根 -c/b; else if ( c = 0 ) (4) 輸出方程同義反復(fù)字樣輸出方程同義反復(fù)字樣; else (5) 輸出方程矛盾字樣輸出方程矛盾字樣;24【例例3.7】求一元二次方程的根求一元二次方程的根分析分析分析分析1:對(duì)步驟、,用對(duì)步驟、,用C語(yǔ)言描述非常簡(jiǎn)單。語(yǔ)言描述非常簡(jiǎn)單。分析分析2:對(duì)步驟,根椐判別式:對(duì)步驟,根椐判別式: =b2-4ac0,有兩個(gè)實(shí)根,有兩個(gè)實(shí)根 =b2-4ac0,有兩個(gè)復(fù)根,有兩個(gè)復(fù)根 對(duì)于兩個(gè)復(fù)根情況,可分別計(jì)算它們的實(shí)部和虛部。對(duì)于對(duì)于兩個(gè)復(fù)根情況,可分別計(jì)算它們的實(shí)部和虛部。對(duì)于實(shí)根,也可根據(jù)上面給出的公式計(jì)算兩個(gè)根。但是考慮

17、到實(shí)根,也可根據(jù)上面給出的公式計(jì)算兩個(gè)根。但是考慮到 b2 4ac 時(shí),有一個(gè)根就非常接近零。數(shù)值計(jì)算中,兩個(gè)非常時(shí),有一個(gè)根就非常接近零。數(shù)值計(jì)算中,兩個(gè)非常接近的數(shù)執(zhí)行減法求出的值的精度很低。為此先求出一個(gè)絕接近的數(shù)執(zhí)行減法求出的值的精度很低。為此先求出一個(gè)絕對(duì)值大的根對(duì)值大的根root1。然后,利用根與系數(shù)的關(guān)系。然后,利用根與系數(shù)的關(guān)系: root1*root2 = c/a 即即 root2 = c/(a*root1)求出求出 root2。25【例例3.7】求一元二次方程的根求一元二次方程的根程序程序#include #include /* 使用數(shù)學(xué)庫(kù)函數(shù)使用數(shù)學(xué)庫(kù)函數(shù) */void

18、main() double a, b, c, delta, re, im, root1, root2; printf(輸入方程系數(shù)輸入方程系數(shù) a, b, cn); scanf(%lf%lf%lf,&a,&b,&c); if (a != 0.0) /* 有兩個(gè)根有兩個(gè)根 */ delta = b*b-4.0*a*c; /* 求判別式求判別式 */ re = -b/(2.0*a); im= sqrt(fabs(delta)/(2.0*a); /* fabs是求絕對(duì)值函數(shù)是求絕對(duì)值函數(shù) */ if (delta= 0.0) /* 兩個(gè)實(shí)根兩個(gè)實(shí)根, 先求絕對(duì)值大的根先求絕對(duì)值大的根*/ root1

19、 = re + (b 0.0 ? im : -im); root2 = c/(a*root1); printf(兩實(shí)根分別是兩實(shí)根分別是: %7.5f, %7.5fn,root1,root2); 26【例例3.7】求一元二次方程的根求一元二次方程的根程序續(xù)程序續(xù) else printf(兩復(fù)根分別是兩復(fù)根分別是: %7.5f+%7.5fI, %7.5f-%7.5fIn, re, fabs(im), re, fabs(im); else /* a = 0.0 */ if (b != 0.0) printf(單根單根 %7.5fn, -c/b); else if (!c) printf(方程同義反

20、復(fù)方程同義反復(fù).n); else printf(方程矛盾方程矛盾.n); 27l說明:uif后面的表達(dá)式類型任意l語(yǔ)句可以是復(fù)合語(yǔ)句l if(x) if(x!=0)l if(!x) if(x=0)例 考慮下面程序的輸出結(jié)果考慮下面程序的輸出結(jié)果: #include void main() int x,y; scanf(“%d,%d”,&x,&y); if(xy) x=y; y=x; else x+; y+; printf(“%d,%dn”,x,y);Compile Error!28 一般形式:一般形式:if (expr1) if (expr2) statement1 else statemen

21、t2else if(expr3) statement3 else statement4內(nèi)嵌內(nèi)嵌if內(nèi)嵌內(nèi)嵌ifif (expr1) if (expr2) statement1 else statement2內(nèi)嵌內(nèi)嵌ifif (expr1) if (expr2) statement1else statement3 內(nèi)嵌內(nèi)嵌ifif (expr1) statement1else if(expr3) statement3 else statement4內(nèi)嵌內(nèi)嵌ifif 語(yǔ)句的嵌套語(yǔ)句的嵌套形式形式29 if if 語(yǔ)句中的語(yǔ)句中的“表達(dá)式表達(dá)式”一定要用一定要用()()括起來,括起來, 如:如:if

22、 if abab ; () 表達(dá)式后面只控制一條語(yǔ)句,但可以是一條表達(dá)式后面只控制一條語(yǔ)句,但可以是一條 復(fù)合語(yǔ)句復(fù)合語(yǔ)句 if if else else 配對(duì)原則:配對(duì)原則:缺省缺省 時(shí),時(shí),elseelse總是總是和它上面離它最近的需配對(duì)的和它上面離它最近的需配對(duì)的ifif配對(duì)配對(duì)if()if()if()else.else.else.if 語(yǔ)句的語(yǔ)句的注意要點(diǎn)注意要點(diǎn)實(shí)現(xiàn)實(shí)現(xiàn)if else 正確配正確配對(duì)方法:加對(duì)方法:加 30例: if (a= =b) if(b= =c) printf(“a= =b= =c”); else printf(“a!=b”);修改: if (a= =b) if

23、(b= =c) printf(“a= =b= =c”); else printf(“a!=b”);if 語(yǔ)句語(yǔ)句配對(duì)原則分析配對(duì)原則分析按照配對(duì)原則,else與最近的未配對(duì)的if配對(duì)如果需要如紅箭頭所示配對(duì)的話則應(yīng)修改如下:31看下面程序,寫輸出結(jié)果看下面程序,寫輸出結(jié)果: : main()/注意程序的縮進(jìn)規(guī)則 int x=100,a=10,b=20; int v1=5,v2=0; if(ab) if(b!=15) if(!v1) x=1; else if(v2) x=10; x=-1;printf(“x=%d”,x); 課堂練習(xí)課堂練習(xí) (if 語(yǔ)句語(yǔ)句)答案:答案:x=-132讀程序?qū)懡Y(jié)果

24、:第1題#includevoid main( ) int a,b,c;int x=35;a=b=c=0;if(!a)x-;else if(b) if(c)x=3;else x=4;printf(x=%d,x);第2題#includevoid main( ) int a,b,c;int x=35;a=b=c=0;if(!a)x-;else if(b) ;if(c)x=3;else x=4;printf(x=%d,x);答案:答案:x= 答案:答案:x= 課堂練習(xí)課堂練習(xí) (if 語(yǔ)句語(yǔ)句)33第三題第三題#includevoid main()int m=5;if(m+5)printf(“%dn”

25、,m);else printf(“%dn”,m-);答案:答案:634if 語(yǔ)句的練習(xí)(填空)語(yǔ)句的練習(xí)(填空) 當(dāng)當(dāng)a=1,b=3,c=5,d=4時(shí)時(shí),執(zhí)行下面一段程序后,執(zhí)行下面一段程序后,x的值是()的值是() /注意程序的縮進(jìn)規(guī)則注意程序的縮進(jìn)規(guī)則if(ab)if(cd)x=1;else if(ac)if(bd)x=2;else x=3; else x=6;else x=7;答案:答案:2353.3.2 多路按值選擇結(jié)構(gòu)多路按值選擇結(jié)構(gòu)switch語(yǔ)句描述多路按值選擇結(jié)構(gòu)。語(yǔ)句描述多路按值選擇結(jié)構(gòu)。switch語(yǔ)句的一般形式為:語(yǔ)句的一般形式為: switch (表達(dá)式表達(dá)式) cas

26、e 常量表達(dá)式常量表達(dá)式1: 語(yǔ)句序列語(yǔ)句序列1 case 常量表達(dá)式常量表達(dá)式2: 語(yǔ)句序列語(yǔ)句序列2 . case 常量表達(dá)式常量表達(dá)式n: 語(yǔ)句序列語(yǔ)句序列n default : 語(yǔ)句序列語(yǔ)句序列n+1 36switch 語(yǔ)句語(yǔ)句執(zhí)行過程執(zhí)行過程語(yǔ)句序列語(yǔ)句序列n+1語(yǔ)句序列語(yǔ)句序列1.語(yǔ)句序列語(yǔ)句序列n+1語(yǔ)句序列語(yǔ)句序列2. 表達(dá)式表達(dá)式=?語(yǔ)句序列語(yǔ)句序列n+1語(yǔ)句序列語(yǔ)句序列n語(yǔ)句序列語(yǔ)句序列n+1值值1值值2值值n所有條件所有條件都不滿足都不滿足說明:說明:若遇到若遇到break語(yǔ)句,則直接轉(zhuǎn)向語(yǔ)句,則直接轉(zhuǎn)向switch出口出口37switch 語(yǔ)句說明語(yǔ)句說明1. swit

27、ch后面括號(hào)內(nèi)的表達(dá)式只限于是整型表達(dá)式、字后面括號(hào)內(nèi)的表達(dá)式只限于是整型表達(dá)式、字符型表達(dá)式或枚舉型表達(dá)式。符型表達(dá)式或枚舉型表達(dá)式。 2.當(dāng)表達(dá)式的值與某一個(gè)當(dāng)表達(dá)式的值與某一個(gè)“case 常量表達(dá)式常量表達(dá)式”的值相的值相等時(shí),就執(zhí)行等時(shí),就執(zhí)行case后面的語(yǔ)句,只要未遇到后面的語(yǔ)句,只要未遇到break語(yǔ)語(yǔ)句或句或goto語(yǔ)句就一直向下執(zhí)行,直至語(yǔ)句就一直向下執(zhí)行,直至switch語(yǔ)句出口。語(yǔ)句出口。3.只有當(dāng)所有條件都不匹配時(shí),才執(zhí)行只有當(dāng)所有條件都不匹配時(shí),才執(zhí)行default后面的后面的語(yǔ)句序列。語(yǔ)句序列。4.每一個(gè)每一個(gè)case的常量表達(dá)式的值必須互不相同,并與的常量表達(dá)式的

28、值必須互不相同,并與switch后面括號(hào)內(nèi)的表達(dá)式值的類型相一致。后面括號(hào)內(nèi)的表達(dá)式值的類型相一致。5.語(yǔ)句序列由任意條合法的語(yǔ)句構(gòu)成,也可以沒有語(yǔ)句序列由任意條合法的語(yǔ)句構(gòu)成,也可以沒有語(yǔ)句。語(yǔ)句。38 void main() char choice; printf(Enter choice !(A, B, C, .n); scanf(%c, &choice); switch (choice) case A : printf( A chosen!n); case B : printf( B chosen!n); case C : printf( C chosen!n); default :

29、printf( default chosen!n); 如輸入字符如輸入字符B ,則程序的執(zhí)行將輸出:,則程序的執(zhí)行將輸出: B chosen! C chosen! default chosen!【例例3.8】輸入選擇,輸出相應(yīng)的選擇名稱輸入選擇,輸出相應(yīng)的選擇名稱39switch 語(yǔ)句語(yǔ)句break語(yǔ)句語(yǔ)句break作用:作用:控制轉(zhuǎn)向控制轉(zhuǎn)向switch語(yǔ)句的后繼語(yǔ)句,即跳語(yǔ)句的后繼語(yǔ)句,即跳 出出Switch語(yǔ)句。語(yǔ)句。【例例3.9】根據(jù)天氣情況,安排活動(dòng)。根據(jù)天氣情況,安排活動(dòng)。int w_con; /* 天氣情況變量定義天氣情況變量定義 */printf(天氣如何天氣如何? 1:晴天晴

30、天, 2:多云多云, 3:下雨下雨 );scanf(%d,&w_con);switch (w_con) case 1 : printf(上街購(gòu)物上街購(gòu)物!n); break; case 2 : printf(去游泳去游泳!n); break; case 3 : printf(在家看電視在家看電視!n);break; default: printf(錯(cuò)誤選擇錯(cuò)誤選擇!n); 40【例例3.10】計(jì)算計(jì)算switch (int) (x+0.5) case 1: y = sin(x); break; case 2: case 3: case 4: y = log(x); break; case 5:

31、 case 6: case 7: y = exp(x); break; default : printf(自變量自變量x值超出范圍值超出范圍n ); break; sin(x) 0.5 x 1.5y(x) = log(x) 1.5 x 4.5 exp(x) 4.5 x 7.541例例 #include void main() / switch 語(yǔ)句的嵌套語(yǔ)句的嵌套 int x=1,y=0,a=0,b=0; switch(x) case 1: switch(y) case 0: a+; break; case 1: b+; break; case 2: a+;b+; break; case 3:

32、 a+;b+; printf(“na=%d,b=%d”,a,b); 運(yùn)行結(jié)果:運(yùn)行結(jié)果:a=2,b=1 課堂練習(xí)課堂練習(xí) (1.讀讀switch 語(yǔ)句語(yǔ)句)42#includevoid main( ) int a=1,b=2;int y;switch(pow(a,2)+pow(b,2)case 1: case 3:y=a+b;break;case 0:case 5:y=a-b;printf(%5d%d,y,a); 課堂練習(xí)課堂練習(xí) (2.switch 語(yǔ)句語(yǔ)句是否有錯(cuò)是否有錯(cuò))分析:錯(cuò)分析:錯(cuò)因?yàn)橐驗(yàn)閟witch后面后面括號(hào)內(nèi)括號(hào)內(nèi)表達(dá)式不能表達(dá)式不能為為double43void main()

33、 int x=0,y=2,z=1; switch(x)case 0: switch(y=2)case 1:printf(*);break;case 2:printf(%);break;case 1: switch(z)case 1:printf($);case 2:printf(*);break;default:printf(#); 課堂練習(xí)課堂練習(xí) (3.讀讀switch 語(yǔ)句語(yǔ)句)運(yùn)行結(jié)果:運(yùn)行結(jié)果:*$*44循環(huán)控制循環(huán)控制 為什么需要循環(huán)?為什么需要循環(huán)?& 編程計(jì)算編程計(jì)算10的階乘的階乘& 現(xiàn)需要把十個(gè)同學(xué)的成績(jī)輸入計(jì)算機(jī),并進(jìn)行統(tǒng)計(jì)計(jì)現(xiàn)需要把十個(gè)同學(xué)的成績(jī)輸入計(jì)算機(jī),并進(jìn)行統(tǒng)計(jì)計(jì)

34、算平均值,請(qǐng)用前面學(xué)過的知識(shí)編程來解決算平均值,請(qǐng)用前面學(xué)過的知識(shí)編程來解決453.4 循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)C語(yǔ)言提供描述三種不同的循環(huán)結(jié)構(gòu)的語(yǔ)句:語(yǔ)言提供描述三種不同的循環(huán)結(jié)構(gòu)的語(yǔ)句: while語(yǔ)句、語(yǔ)句、do_while語(yǔ)句、語(yǔ)句、for語(yǔ)句語(yǔ)句3.4.1 while語(yǔ)句語(yǔ)句一般形式:一般形式:while (表達(dá)式表達(dá)式) 語(yǔ)句語(yǔ)句執(zhí)行過程:執(zhí)行過程:(1) 計(jì)算循環(huán)條件表達(dá)式的值計(jì)算循環(huán)條件表達(dá)式的值(2) 當(dāng)表達(dá)式的值為非當(dāng)表達(dá)式的值為非0時(shí),轉(zhuǎn)步驟時(shí),轉(zhuǎn)步驟(3); 當(dāng)表達(dá)式的值為當(dāng)表達(dá)式的值為0時(shí),結(jié)束循環(huán)時(shí),結(jié)束循環(huán)(3) 執(zhí)行循環(huán)體,并轉(zhuǎn)步驟執(zhí)行循環(huán)體,并轉(zhuǎn)步驟 (1)說明:若循

35、環(huán)體由兩個(gè)以上語(yǔ)句組成,循環(huán)體應(yīng)寫成復(fù)說明:若循環(huán)體由兩個(gè)以上語(yǔ)句組成,循環(huán)體應(yīng)寫成復(fù)合語(yǔ)句合語(yǔ)句循環(huán)體循環(huán)體46v執(zhí)行流程執(zhí)行流程:expr循環(huán)體循環(huán)體假假(0)真真(非非0)while while 循環(huán)循環(huán)語(yǔ)句語(yǔ)句while while 循環(huán)語(yǔ)句循環(huán)語(yǔ)句下面的語(yǔ)句下面的語(yǔ)句47例例 用用while循環(huán)求循環(huán)求 1001nn#include void main() int i,sum=0; i=1; while(i100,用,用i+語(yǔ)句達(dá)語(yǔ)句達(dá)到此目的;如果無(wú)到此目的;如果無(wú)i+語(yǔ)句,將導(dǎo)致循環(huán)條件永語(yǔ)句,將導(dǎo)致循環(huán)條件永遠(yuǎn)成立,永不結(jié)束。遠(yuǎn)成立,永不結(jié)束。3. 當(dāng)循環(huán)體為空時(shí),可用空語(yǔ)句代

36、替。當(dāng)循環(huán)體為空時(shí),可用空語(yǔ)句代替。例:跳過輸入的空白類字符:例:跳過輸入的空白類字符: while( (c=getchar() ) = | c = t );無(wú)循環(huán)體,無(wú)循環(huán)體,用空語(yǔ)句表示用空語(yǔ)句表示49while語(yǔ)句說明語(yǔ)句說明(續(xù))(續(xù))4. 有時(shí)很難寫出循環(huán)條件,可用有時(shí)很難寫出循環(huán)條件,可用 1 代之代之(表示條件為真)(表示條件為真), 但在循環(huán)體中必須有但在循環(huán)體中必須有 break 語(yǔ)句(用于跳出循環(huán))。語(yǔ)句(用于跳出循環(huán))。 while (1) . if (表達(dá)式表達(dá)式) break; . 50例例 顯示顯示110的平方的平方#include void main() int

37、i=1; while(i=10) printf(%d*%d=%dn,i,i,i*i); i+; 運(yùn)行結(jié)果:運(yùn)行結(jié)果:1*1=12*2=43*3=94*4=165*5=256*6=367*7=498*8=649*9=8110*10=10051課堂練習(xí)課堂練習(xí) (while 語(yǔ)句)語(yǔ)句)1、設(shè)有如下程序:、設(shè)有如下程序:#include void main() int n=9; while(n-6) printf(%d,n);printf(%d,n);該程序段的輸出結(jié)果是該程序段的輸出結(jié)果是_ A) 987 B)876 C) 8765 D)9876 答案:答案:C解答:解答:不管是否滿足循環(huán)不管是

38、否滿足循環(huán)條件,條件,n=n-1都要進(jìn)行都要進(jìn)行52【例例3.12】求學(xué)生平均成績(jī),當(dāng)輸入負(fù)數(shù)時(shí)結(jié)束求學(xué)生平均成績(jī),當(dāng)輸入負(fù)數(shù)時(shí)結(jié)束#include void main() int sum, count, mark; sum = 0; count = 0; while (1) /* 循環(huán)條件永遠(yuǎn)為真循環(huán)條件永遠(yuǎn)為真 */ printf(輸入成績(jī)輸入成績(jī)(小于小于0 結(jié)束結(jié)束)n); scanf(%d,&mark); if (mark 0) break; /* 跳出跳出while循環(huán)循環(huán) */ sum += mark; /* 累計(jì)總分累計(jì)總分 */ count+; /* 學(xué)生人數(shù)計(jì)數(shù)器增學(xué)生人數(shù)

39、計(jì)數(shù)器增1 */ if (count) printf(平均成績(jī)?yōu)椋浩骄煽?jī)?yōu)椋?.2fn, (float)sum)/count); else printf(沒有數(shù)據(jù)輸入沒有數(shù)據(jù)輸入.n);53#include void main() int c, nwhite, nother, ndigit; nwhite=nother=ndigit=0; printf(Enter string linen); while (c=getchar() != n) switch(c) case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: c

40、ase 8: case 9: ndigit+; break; case : case t: nwhite+; break; default: nother+; break; printf(digit=%dtwhite space=%dtother=%dn, ndigit, nwhite, nother);【例例3.13】統(tǒng)計(jì)輸入字符行中,空白類字符、數(shù)統(tǒng)計(jì)輸入字符行中,空白類字符、數(shù)字符和其它字符的個(gè)數(shù)字符和其它字符的個(gè)數(shù)543.3.2 do-while語(yǔ)句語(yǔ)句執(zhí)行過程:執(zhí)行過程:(1) 執(zhí)行循環(huán)體執(zhí)行循環(huán)體(2) 求循環(huán)條件表達(dá)式的值求循環(huán)條件表達(dá)式的值(3) 當(dāng)表達(dá)式的值為非當(dāng)表達(dá)式的值為

41、非0時(shí),轉(zhuǎn)步驟時(shí),轉(zhuǎn)步驟 (1); 當(dāng)表達(dá)式的值為當(dāng)表達(dá)式的值為0時(shí),結(jié)束循環(huán)。時(shí),結(jié)束循環(huán)。注意:注意:分號(hào)是分號(hào)是do-while語(yǔ)句的結(jié)束符,不能省語(yǔ)句的結(jié)束符,不能省略。略。循環(huán)體循環(huán)體& 一般形式:一般形式: do do 循環(huán)體語(yǔ)句;循環(huán)體語(yǔ)句; while(while(表達(dá)式表達(dá)式) );55 dowhile語(yǔ)句語(yǔ)句執(zhí)行流程執(zhí)行流程& 執(zhí)行流程:執(zhí)行流程:do循環(huán)體循環(huán)體expr假假(0)(0)真真( (非非0)0)while do while do while循環(huán)循環(huán)下面的語(yǔ)句下面的語(yǔ)句56 dowhile 語(yǔ)句的特點(diǎn)語(yǔ)句的特點(diǎn) v特點(diǎn):先執(zhí)行循環(huán)體,后判斷條件表達(dá)式特點(diǎn):先執(zhí)行

42、循環(huán)體,后判斷條件表達(dá)式v說明:說明:l至少執(zhí)行一次循環(huán)體至少執(zhí)行一次循環(huán)體ldowhile可轉(zhuǎn)化成可轉(zhuǎn)化成while結(jié)構(gòu)結(jié)構(gòu)expr循環(huán)體循環(huán)體假假(0)(0)真真( (非非0)0)循環(huán)體循環(huán)體whilewhile循環(huán)循環(huán)57 while和和 dowhile 語(yǔ)句的對(duì)照語(yǔ)句的對(duì)照 expr循環(huán)體循環(huán)體假假(0)真真(非非0)whilewhile while 循環(huán)循環(huán)下面的語(yǔ)句下面的語(yǔ)句do循環(huán)體循環(huán)體expr假假(0)(0)真真( (非非0)0)while do while do while循環(huán)循環(huán)下面的語(yǔ)句下面的語(yǔ)句58do-while語(yǔ)句說明語(yǔ)句說明 1. 與與while語(yǔ)句一樣,當(dāng)循環(huán)

43、體由多個(gè)語(yǔ)句組語(yǔ)句一樣,當(dāng)循環(huán)體由多個(gè)語(yǔ)句組成時(shí),必須把它們書寫成復(fù)合語(yǔ)句。成時(shí),必須把它們書寫成復(fù)合語(yǔ)句。2. while與與do-while區(qū)別區(qū)別while:先判別表達(dá)式,后執(zhí)行循環(huán)體,當(dāng)先判別表達(dá)式,后執(zhí)行循環(huán)體,當(dāng) while 表達(dá)式第一次為假時(shí),循環(huán)體一次也表達(dá)式第一次為假時(shí),循環(huán)體一次也不執(zhí)行。不執(zhí)行。do-while:先執(zhí)行循環(huán)體,后判別表達(dá)式。因先執(zhí)行循環(huán)體,后判別表達(dá)式。因此,使用此,使用do-while至少執(zhí)行一次循環(huán)體。至少執(zhí)行一次循環(huán)體。59課堂練習(xí)課堂練習(xí) (dowhile 語(yǔ)句)語(yǔ)句)選擇題:選擇題:假定假定a和和b為為int型變量,則執(zhí)行以下語(yǔ)句后型變量,則執(zhí)行

44、以下語(yǔ)句后b的值為的值為_ a1; b10; do ba; a; while (b0); A) 4 B)5 C) 1 D)6 答案:答案:A解答:解答:不管是否滿足循環(huán)不管是否滿足循環(huán)條件,條件,b=b-1都要進(jìn)行都要進(jìn)行60do-while語(yǔ)句例語(yǔ)句例【例例3.15】求方程求方程f(x)=3x3+4x2-2x+5的實(shí)根。的實(shí)根。說明:說明:1. 用牛頓迭代方法求方程用牛頓迭代方法求方程f(x)=0的根的近似解的根的近似解: xk+1=xk-f(xk)/f (xk), k=0, 1, 2. 當(dāng)修正量當(dāng)修正量dk=f(xk)/f(xk) 的絕對(duì)值小于某個(gè)的絕對(duì)值小于某個(gè)很小數(shù)很小數(shù)時(shí),時(shí),xk+

45、1就作為方程的近似解。就作為方程的近似解。3. 下面的程序取迭代初值為下面的程序取迭代初值為-2, = 1.0e-6。61#include #include /* 引用數(shù)學(xué)函數(shù)引用數(shù)學(xué)函數(shù) */#define Epsilon 1.0e-6void main() double x, d; x = -2.0; do d = (3.0*x+4.0)*x-2.0)*x+5.0)/ (9.0*x+8.0)*x-2.0); /* f(x)/f(x) */ x = x-d; while (fabs(d) Epsilon); /* 未滿足精度要求循環(huán)未滿足精度要求循環(huán) */ printf(The root i

46、s %.6fn, x);【例例3.15】求方程求方程f(x)=3x3+4x2-2x+5的源程序的源程序結(jié)果為:結(jié)果為: The root is -2.05331962do-while語(yǔ)句語(yǔ)句 例例【例例3.16】查找一個(gè)最小整數(shù),要求滿足以下條件:查找一個(gè)最小整數(shù),要求滿足以下條件: 被被3除余除余2,被,被5除余除余3,被,被7除余除余4。#include void main() int i = 2; do i+; while (! (i%3 = 2 & i%5 = 3 & i%7 = 4); printf(被被3除余除余2,被,被5除余除余3,被,被7除余除余4的最小數(shù)是的最小數(shù)是: %d

47、n, i);結(jié)果為:結(jié)果為:53 63【例例3.16】 提高運(yùn)行效率提高運(yùn)行效率 采用分階段的辦采用分階段的辦法,先讓變量在保法,先讓變量在保證滿足條件被證滿足條件被3除余除余2情況下,尋找被情況下,尋找被5除余除余3的解;接著在的解;接著在保證被保證被3除余除余2和被和被5除余除余3的條件下,尋的條件下,尋找被找被7除余除余4的解,的解,這樣做能簡(jiǎn)化循環(huán)這樣做能簡(jiǎn)化循環(huán)條件,并能加快找條件,并能加快找解的速度。解的速度。#include void main() int i = 2; /* 初值初值i被被3除余除余2 */ do i += 3; /* 保證保證i被被3除余除余2 */ whil

48、e(i % 5 != 3);/* 保證保證i被被3除余除余2, 并被并被5除余除余3 */ while(i % 7 != 4) i += 15; /* 3*5 */ printf(被被3除余除余2,被,被5除余除余3, 被被7除余除余4的最小數(shù)是的最小數(shù)是: %dn, i);643.4.3 for語(yǔ)句語(yǔ)句執(zhí)行過程:執(zhí)行過程:(1) 計(jì)算表達(dá)式計(jì)算表達(dá)式1(2) 當(dāng)表達(dá)式當(dāng)表達(dá)式2的值為非的值為非0,轉(zhuǎn)步驟,轉(zhuǎn)步驟(3); 當(dāng)表達(dá)式當(dāng)表達(dá)式2的值為的值為0,結(jié)束循環(huán),結(jié)束循環(huán)(3) 執(zhí)行循環(huán)體語(yǔ)句執(zhí)行循環(huán)體語(yǔ)句(4) 計(jì)算表達(dá)式計(jì)算表達(dá)式3(5) 轉(zhuǎn)向步驟轉(zhuǎn)向步驟(2)。循環(huán)體循環(huán)體v一般形式:

49、一般形式: for(expr1 ; expr2 ; expr3) 循環(huán)體語(yǔ)句;循環(huán)體語(yǔ)句;65for 語(yǔ)句語(yǔ)句執(zhí)行流程執(zhí)行流程 v執(zhí)行流程:執(zhí)行流程:expr2循環(huán)體循環(huán)體假假(0)(0)真真( (非非0)0)forexpr1expr366vforfor語(yǔ)句一般應(yīng)用形式語(yǔ)句一般應(yīng)用形式:for(for(循環(huán)變量賦初值循環(huán)變量賦初值;循環(huán)條件循環(huán)條件;循環(huán)變量增值循環(huán)變量增值) ) 循環(huán)體語(yǔ)句;循環(huán)體語(yǔ)句; & 說明:說明: forfor語(yǔ)句中語(yǔ)句中expr1, expr2 ,expr3 expr1, expr2 ,expr3 類型類型任意且都可省略,但分號(hào)任意且都可省略,但分號(hào);不可省不可省

50、無(wú)限循環(huán)無(wú)限循環(huán): for( : for( ;) )67for 語(yǔ)句語(yǔ)句說明說明1. for語(yǔ)句的一般形式中,表達(dá)式語(yǔ)句的一般形式中,表達(dá)式1、表達(dá)式、表達(dá)式2 和表達(dá)式和表達(dá)式3都可以省略。都可以省略。表達(dá)式表達(dá)式1省略:省略:表示沒有賦初值部分,或在表示沒有賦初值部分,或在for語(yǔ)句語(yǔ)句前已為有關(guān)變量賦了初值。前已為有關(guān)變量賦了初值。例:例: 求求 s = 1 + 2 + + 100 s = 0; i = 1; for( ; i = 100; i+) s += i;68表達(dá)式表達(dá)式2省略:省略:表示循環(huán)條件永遠(yuǎn)為真,可能循環(huán)表示循環(huán)條件永遠(yuǎn)為真,可能循環(huán)體內(nèi)有控制轉(zhuǎn)移語(yǔ)句轉(zhuǎn)出體內(nèi)有控制轉(zhuǎn)移

51、語(yǔ)句轉(zhuǎn)出for語(yǔ)句。語(yǔ)句。例:例: for(s = 0, i = 1; ; i+) s += i; if(i = 100) break; 表達(dá)式表達(dá)式3省略:省略:表示沒有修正部分,對(duì)變量的修正表示沒有修正部分,對(duì)變量的修正已在循環(huán)體內(nèi)一起完成。已在循環(huán)體內(nèi)一起完成。 for(s = 0, i = 1; i = 100;) s += i+;for 語(yǔ)句說明語(yǔ)句說明(續(xù))(續(xù))69 不管表達(dá)式不管表達(dá)式1、表達(dá)式、表達(dá)式2和表達(dá)式和表達(dá)式3省略情省略情況如何,其中兩個(gè)分號(hào)都不能省略。況如何,其中兩個(gè)分號(hào)都不能省略。如果三個(gè)表達(dá)式都省略,用以下形式表示:如果三個(gè)表達(dá)式都省略,用以下形式表示: fo

52、r( ; ; ) 語(yǔ)句語(yǔ)句2.2. 表達(dá)式表達(dá)式1、表達(dá)式、表達(dá)式2和表達(dá)式和表達(dá)式3都可包含逗都可包含逗號(hào)運(yùn)算符,由多個(gè)子表達(dá)式組成。號(hào)運(yùn)算符,由多個(gè)子表達(dá)式組成。例:例: for(s=0,i=1;i=100;i+) s +=i;for 語(yǔ)句說明語(yǔ)句說明(續(xù))(續(xù))70對(duì)于對(duì)于 s = 1 + 2 + + 100 的計(jì)算的計(jì)算下面都是合理的下面都是合理的for語(yǔ)句描述。語(yǔ)句描述。 for(s=0,i=1; i=100; s+=i, i+); for(s=0,i=1; s+=i,i100; i+); for(s=0,i=0; i100; +i, s+=i); for(s=0,i=1; i=10

53、0; s+=i+);for 語(yǔ)句說明語(yǔ)句說明(續(xù))(續(xù))71 歸納總結(jié)歸納總結(jié)& while 、dowhile和和for循環(huán)結(jié)構(gòu)中的循環(huán)結(jié)構(gòu)中的“循環(huán)循環(huán)體體” 都只能是一條語(yǔ)句!如果需要使用多條都只能是一條語(yǔ)句!如果需要使用多條語(yǔ)句來完成的循環(huán)體的功能,則應(yīng)使這些語(yǔ)語(yǔ)句來完成的循環(huán)體的功能,則應(yīng)使這些語(yǔ)句組成一條復(fù)合語(yǔ)句!句組成一條復(fù)合語(yǔ)句!72答案答案:v1=5,v2=273習(xí)習(xí) 題題求下列循環(huán)體 的執(zhí)行次數(shù)for (int i=0,j=3;i=j+1;i+=2,j-)printf(“%d”,i);答案:兩次兩次74 課堂練習(xí)課堂練習(xí) (for 語(yǔ)句)語(yǔ)句)選擇題:選擇題:共兩題共兩題1、

54、若有、若有int x;且有下面程序片段,則輸出結(jié)果是且有下面程序片段,則輸出結(jié)果是 _。 for (x=3;x6;x+) printf(x%2)? *%d:#%dn,x);A.*3 B. #3 C. #3 D. *3#4 #4 *4 *4#5 *5 *5 #5 答案:答案:D75 課堂練習(xí)課堂練習(xí) (for 語(yǔ)句)語(yǔ)句)2、有以下程序、有以下程序:void main( ) int x,I;for(I=1;I=50;I+)x=I;if(+x%2=0) if(x%3=0) if(x%7=0) printf(“%d”,I);輸出結(jié)果是輸出結(jié)果是_A. 28 B. 27 C. 42 D. 41答案:答

55、案:D76輔助控制語(yǔ)句輔助控制語(yǔ)句 1 1、breakbreak語(yǔ)句語(yǔ)句 功能:在循環(huán)語(yǔ)句和功能:在循環(huán)語(yǔ)句和switch語(yǔ)句中語(yǔ)句中,終止并跳出終止并跳出循環(huán)體或開關(guān)體循環(huán)體或開關(guān)體 說明:說明:break只能只能終止并跳出最近一層的結(jié)構(gòu)終止并跳出最近一層的結(jié)構(gòu)break不能用于循環(huán)語(yǔ)句和不能用于循環(huán)語(yǔ)句和switch語(yǔ)句之外語(yǔ)句之外的任何其它語(yǔ)句之中的任何其它語(yǔ)句之中77語(yǔ)句的應(yīng)用流程圖(語(yǔ)句的應(yīng)用流程圖(1)exprbreak;假假(0)真真(非非0)whiledobreak;.expr假假(0)真真(非非0)while78語(yǔ)句的應(yīng)用流程圖語(yǔ)句的應(yīng)用流程圖expr2break;.假假(0

56、)真真(非非0)forexpr1expr3語(yǔ)句組語(yǔ)句組1break;switchexpr語(yǔ)句組語(yǔ)句組2break;語(yǔ)句組語(yǔ)句組nbreak;語(yǔ)句組語(yǔ)句組break;.const 1const 2const ndefaultcase 79 功能:結(jié)束本次循環(huán),跳過循環(huán)體中尚未執(zhí)行功能:結(jié)束本次循環(huán),跳過循環(huán)體中尚未執(zhí)行 的語(yǔ)句,進(jìn)行下一次是否執(zhí)行循環(huán)體的判斷的語(yǔ)句,進(jìn)行下一次是否執(zhí)行循環(huán)體的判斷僅用于循環(huán)語(yǔ)句中僅用于循環(huán)語(yǔ)句中80expr2continue;.假假(0)真真(非非0)forexpr1expr3continue語(yǔ)句的應(yīng)用流程圖(語(yǔ)句的應(yīng)用流程圖(1)81expr continue;

57、假假(0)真真(非非0)whilecontinue語(yǔ)句的應(yīng)用流程圖(語(yǔ)句的應(yīng)用流程圖(2)真真(非非0)docontinue;.expr假假(0)while82語(yǔ)句中語(yǔ)句中 break和和continue的對(duì)比的對(duì)比expr2break;.假假(0)真真(非非0)forexpr1expr3expr2continue;.假假(0)真真(非非0)forexpr1expr383C+語(yǔ)言的跳轉(zhuǎn)語(yǔ)句中,對(duì)于語(yǔ)言的跳轉(zhuǎn)語(yǔ)句中,對(duì)于break和和continue說法正確的是說法正確的是( ).A) break語(yǔ)句只使用于循環(huán)體中語(yǔ)句只使用于循環(huán)體中B) continue語(yǔ)句只應(yīng)用于循環(huán)體中語(yǔ)句只應(yīng)用于循環(huán)體

58、中C) break是無(wú)條件跳轉(zhuǎn)語(yǔ)句,是無(wú)條件跳轉(zhuǎn)語(yǔ)句,continue不是不是D) break和和continue的跳轉(zhuǎn)范圍不夠明確,的跳轉(zhuǎn)范圍不夠明確,容易產(chǎn)生問題容易產(chǎn)生問題 課堂練習(xí)課堂練習(xí) (break和和continue語(yǔ)句)語(yǔ)句)答案:答案:B84循環(huán)的嵌套循環(huán)的嵌套 循環(huán)的嵌套:一個(gè)循環(huán)體內(nèi)又包含另一個(gè)完整的循環(huán)結(jié)構(gòu)循環(huán)的嵌套:一個(gè)循環(huán)體內(nèi)又包含另一個(gè)完整的循環(huán)結(jié)構(gòu) 三種循環(huán)可互相嵌套三種循環(huán)可互相嵌套, ,層數(shù)不限層數(shù)不限 外層循環(huán)可包含兩個(gè)以上內(nèi)循環(huán)外層循環(huán)可包含兩個(gè)以上內(nèi)循環(huán), ,但不能相互交叉但不能相互交叉 嵌套循環(huán)的幾種常見形式:嵌套循環(huán)的幾種常見形式:(1) whil

59、e( ) while( ) . (2) do do while( ); . while( );85 嵌套循環(huán)的常見形式舉例嵌套循環(huán)的常見形式舉例 (4) for( ; ;) do while(); while() . 內(nèi)循環(huán)內(nèi)循環(huán)外循環(huán)外循環(huán)內(nèi)循環(huán)內(nèi)循環(huán)(3) while() do while( ); . 86 循環(huán)嵌套中的跳轉(zhuǎn)問題循環(huán)嵌套中的跳轉(zhuǎn)問題 禁止:禁止:l從外層跳入內(nèi)層從外層跳入內(nèi)層l跳入同層的另一循環(huán)中跳入同層的另一循環(huán)中l(wèi)向上跳轉(zhuǎn)向上跳轉(zhuǎn)87 課堂練習(xí)課堂練習(xí) (綜合題(綜合題1 )選擇題:選擇題:共兩題共兩題1、有以下程序、有以下程序# includevoid main()

60、/循環(huán)的嵌套循環(huán)的嵌套 int I,j; for(j=10;j12;j+)for(I=9;Ij) printf(%d,j);輸出結(jié)果為輸出結(jié)果為_A. 91011 B. 9910 C. 1011 D. 101011答案:答案:B88 課堂練習(xí)課堂練習(xí) (綜合題(綜合題2)2、有以下程序、有以下程序# includevoid main() int a,b; for(a=1, b=1; a10) break; if (b%3=1) b+=3; continue; printf(%d,b); printf(%dn,a); 輸出結(jié)果為輸出結(jié)果為_A) 4710135 B) 4710136 C) 5 D

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論