版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、結(jié)構(gòu)化程序設(shè)計(PartI)課件結(jié)構(gòu)化程序設(shè)計(PartI)課件提要順序結(jié)構(gòu)選擇結(jié)構(gòu)循環(huán)結(jié)構(gòu)2程序設(shè)計-2005年秋提要順序結(jié)構(gòu)4程序設(shè)計-2005年秋語句分類C語言的語句可分兩類簡單語句結(jié)構(gòu)語句簡單語句:表達(dá)式語句、空語句和控制轉(zhuǎn)移語句結(jié)構(gòu)語句:實現(xiàn)對成分語句的順序、選擇和循環(huán)等控制3程序設(shè)計-2005年秋語句分類C語言的語句可分兩類5程序設(shè)計-2005年秋什么是順序結(jié)構(gòu)?順序結(jié)構(gòu)描述一個計算操作序列,表示從序列的第一個計算開始,順序執(zhí)行序列中的每個計算,直至計算操作序列的最后一個計算操作在C程序中,順序執(zhí)行的語句序列,用花括號括住,就構(gòu)成C語言的復(fù)合語句在邏輯上,復(fù)合語句是單個語句,常用作
2、其它結(jié)構(gòu)的成分語句4程序設(shè)計-2005年秋什么是順序結(jié)構(gòu)?順序結(jié)構(gòu)描述一個計算操作序列,表示從序列的第例子為交換變量x、y的值,可表示為以下順序執(zhí)行的三個計算:temp = x; /* 將x的值保護(hù)到變量temp */x = y; /* 變量x置y值 */y = temp; /* 變量y置temp的值 */若把交換變量x、y的值作為一個不可分割的整體來考慮,應(yīng)把它們寫成復(fù)合語句: /* 本復(fù)合語句要求外面為它定義temp變量 */ temp = x ; x = y ; y = temp ; 5程序設(shè)計-2005年秋例子為交換變量x、y的值,可表示為以下順序執(zhí)行的三個計算:7關(guān)于復(fù)合語句在構(gòu)造復(fù)
3、合語句時,為完成復(fù)合語句要做的工作,可能需要臨時工作變量。如前例中的temp變量在C語言的復(fù)合語句中,在語句序列之前可以插入變量定義,引入只有復(fù)合語句內(nèi)的語句可使用的臨時變量。如上面的例子改寫成以下形式,從邏輯上,它的獨立性更強,它不再要求外面為它定義專用變量 int temp ; /* 定義自己專用的臨時變量 */ temp = x ; x = y ; y = temp ;在很多場合,復(fù)合語句內(nèi)會包含其它結(jié)構(gòu)6程序設(shè)計-2005年秋關(guān)于復(fù)合語句在構(gòu)造復(fù)合語句時,為完成復(fù)合語句要做的工作,可能選擇結(jié)構(gòu)與if語句選擇結(jié)構(gòu)可分為兩路選擇結(jié)構(gòu)和多路選擇結(jié)構(gòu)if語句是一種選擇結(jié)構(gòu),它根據(jù)給定的作為選擇
4、條件的表達(dá)式值為非0或為0兩種情況,從兩個供選擇的成分語句中自動選取一個成分語句執(zhí)行if語句用于描述按條件作兩路選擇的程序結(jié)構(gòu)7程序設(shè)計-2005年秋選擇結(jié)構(gòu)與if語句選擇結(jié)構(gòu)可分為兩路選擇結(jié)構(gòu)和多路選擇結(jié)構(gòu)9if語句if語句的一般形式為 if ( 表達(dá)式 ) 語句1 else 語句2if語句的執(zhí)行過程是計算表達(dá)式的值測試表達(dá)式的值并選擇執(zhí)行語句。若表達(dá)式的值非0,則執(zhí)行語句1,并結(jié)束if語句;否則執(zhí)行語句2,并結(jié)束if語句8程序設(shè)計-2005年秋if語句if語句的一般形式為10程序設(shè)計-2005年秋if語句(續(xù))無論條件表達(dá)式的值為何值,只能執(zhí)行語句1或語句2中的一個當(dāng)if語句中的else后
5、的語句2為空語句時,可簡寫成: if ( 表達(dá)式 ) 語句這種形式的if語句的執(zhí)行過程是計算表達(dá)式的值測試表達(dá)式的值。若表達(dá)式的值非0,則執(zhí)行它的成分語句,并結(jié)束if語句。否則立即結(jié)束if語句9程序設(shè)計-2005年秋if語句(續(xù))無論條件表達(dá)式的值為何值,只能執(zhí)行語句1或語句例子if (a b) printf(MAX = %fn, a); else printf(MAX = %fn, b);if(a != 0 & x/a 0.5) printf(”a != 0 & x/a 0.5n”);if (x+y) printf(”x + y != 0n”);if (!x) printf(“x = 0n”
6、);if (ch = A & ch = Z) ch = ch + a A;if ( a b) 12程序設(shè)計-2005年秋if語句(續(xù))if語句中的語句、語句1和語句2可以是任何語句當(dāng)它們中的某一個需用語句序列描述時,必須將這語句序列寫成復(fù)合語句當(dāng)它們中的某一個又是if語句時,就呈現(xiàn)嵌套的if語句形式11程序設(shè)計-2005年秋if語句(續(xù))if語句中的語句、語句1和語句2可以是任何語句例子已知三角形的三條邊長a、b、c,求三角形面積if ( a + b c & b + c a & c + a b ) float s ; /* 必須構(gòu)成復(fù)合語句 */ s = ( a + b + c ) / 2.0
7、 ; area = sqrt(s*(s-a)*(s-b)*(s-c); else area = 0.0 ;12程序設(shè)計-2005年秋例子已知三角形的三條邊長a、b、c,求三角形面積if ( a例子 if (score = 90) /* 按得分輸出適當(dāng)信息 */ printf(Excellent.n) ; else if( score 60 ) /* 嵌套的if語句 */ printf(Dismal.n) ; else printf(Typical.n);13程序設(shè)計-2005年秋例子 15程序設(shè)計-2005年秋if語句(續(xù))因if語句中供選擇的語句也可以又是if語句,這時,if語句呈嵌套的結(jié)構(gòu)
8、形式,應(yīng)注意else與if的對應(yīng)關(guān)系if ( 表達(dá)式1 ) if ( 表達(dá)式1 ) if ( 表達(dá)式2 ) if ( 表達(dá)式2 ) 語句1 語句1 else else 語句2 語句214程序設(shè)計-2005年秋if語句(續(xù))因if語句中供選擇的語句也可以又是if語句,這if語句(續(xù))C語言約定:else總是與它前面最接近的if對應(yīng)if(表達(dá)式1)/* 將分支語句變成一個復(fù)合語句 */ if (表達(dá)式2) 語句1 else 語句2if (表達(dá)式1) if (表達(dá)式2) 語句1 else ; /* 這里有1個空語句 */else 語句215程序設(shè)計-2005年秋if語句(續(xù))C語言約定:else總是
9、與它前面最接近的if對if語句(續(xù))為了正確書寫if語句,需要說明以下幾點若if語句中的語句、語句1、語句2是一個簡單語句,則這些簡單語句之后會有一個分號,這是C語言對這些簡單語句的要求若if語句中的語句、語句1、語句2要用語句序列(即為順序結(jié)構(gòu))來實現(xiàn),則必須將它們改寫成復(fù)合語句,即邏輯上把它們變成一個語句在if語句中,每個else總要與它前面的if對應(yīng),不可出現(xiàn)沒有對應(yīng)if的else16程序設(shè)計-2005年秋if語句(續(xù))為了正確書寫if語句,需要說明以下幾點18程例子輸入三個整數(shù),輸出其中的最大數(shù)#include void main() int a, b, c, max; printf(
10、輸入三個整數(shù)n); scanf(%d%d%d, &a, &b, &c); max = a; if (max b) max = b; if (max c) max = c; printf(最大數(shù)是 %dn, max);17程序設(shè)計-2005年秋例子輸入三個整數(shù),輸出其中的最大數(shù)#include st輸入三個整數(shù),按值從大到小的順序輸出它們例子X Y ZX1=Max(X,Y) Y1=Min(X, Y) Z1=Z輸入:X2=Max(X1,Z1) Y2=Y1 Z2=Min(X1, Z1)X3=X2 Y3=Min(Y2, Z2) Z3=Min(Y2,Z2)第一步:第二步:第三步:#include voi
11、d main() int x, y, z, temp; printf(Enter x, y, z.n); scanf(%d%d%d, &x, &y, &z); if (x y) temp = x; x = y; y = temp; if (x z) temp = x; x = z; z = temp; if (y z) temp = y; y = z; z = temp; printf(%dt%dt%dn, x, y, z);18程序設(shè)計-2005年秋輸入三個整數(shù),按值從大到小的順序輸出它們例子X #include void main( ) int x, y, z, *big = &x, *m
12、id = &y, *sma = &z, *temp; printf(輸入x,y,z.n); scanf(%d%d%d,big,mid,sma); if (*big*mid) temp = big; big = mid; mid = temp; if (*big*sma) temp = big; big = sma; sma = temp; if (*mid*sma) temp = mid; mid = sma; sma = temp; printf(%dt%dt%dn, x, y, z); printf(%dt%dt%dn, *big, *mid, *sma); 19程序設(shè)計-2005年秋#i
13、nclude 21程序設(shè)計-20求一元二次方程的根 設(shè)一元二次方程為ax2+bx+c=0,方程系數(shù)a、b和c從鍵盤輸入。對任意的系數(shù)a、b、c,有以下幾種情況需要考慮:a0。方程有兩個根a=0,b0。方程退化為一次方程b*x+c=0。方程有根 -c/ba=0,b=0。方程或為同義反復(fù)(c=0),或矛盾(c0)。由以上分析得到以下程序結(jié)構(gòu): (1) 輸入方程系數(shù)a, b, c; if (a != 0.0) (2)求兩個根; else if (b != 0.0) (3) 輸出方程根 -c/b; else if (c = 0) (4)輸出方程同義反復(fù)字樣; else (5)輸出方程矛盾字樣;20程序
14、設(shè)計-2005年秋求一元二次方程的根22程序設(shè)計-2005年秋用C代碼描述其中計算步驟 (1)、(3)、(4)、(5)是簡單的事情。對于計算步驟(2),由代數(shù)知識,方程根椐判別式 =b*b-4*a*c大于等于0或小于0,分別有兩個實根或復(fù)根: root1,2 = ( - b )/2a , 0;或 root1,2 = ( - b -i)/2a , 4*a*c時,有一個根就非常接近零。數(shù)值計算中,兩個非常接近的數(shù)執(zhí)行減法求出的值的精度很低。為此先求出一個絕對值大的根root1。然后,利用根與系數(shù)的關(guān)系 root2 = c/(a*root1)求出root221程序設(shè)計-2005年秋用C代碼描述其中計
15、算步驟 (1)、(3)、(4)、(5)是簡#include #include /* 使用數(shù)學(xué)庫函數(shù) */void main() double a, b, c, delta, re, im, root1, root2; printf(輸入方程系數(shù)a,b,cn); scanf(%lf%lf%lf, &a, &b, &c); if (a != 0.0) /* 有兩個根 */ delta = b*b-4.0*a*c; re = -b/(2.0*a); im = sqrt(fabs(delta)/(2.0*a); if (delta = 0.0)/* 兩個實根, 先求絕對值大的根*/ root1 = r
16、e + (b 0.0 ? im : -im); root2 = c/(a*root1); printf(“兩實根是: %7.5f, %7.5fn, root1, root2); 22程序設(shè)計-2005年秋#include 24程序設(shè)計-200 else /* delta 0.0 */ printf(兩復(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(方程同義反復(fù).n); e
17、lse printf(“方程矛盾。n”); 23程序設(shè)計-2005年秋 else /* delta 0.0 */ 2switch語句C語言提供switch語句用于描述多路選擇情況,其形式是:switch(表達(dá)式) case 常量表達(dá)式1: 語句序列1 ; case 常量表達(dá)式2: 語句序列2 ; . case 常量表達(dá)式n: 語句序列n ; default : 語句序列n+1 ; 24程序設(shè)計-2005年秋switch語句C語言提供switch語句用于描述多路選擇情switch語句(續(xù))switch語句的執(zhí)行過程先計算表達(dá)式值,以該值與各常量比較,如果表達(dá)式的值等于某個常量,switch語句就
18、從該常量后的語句序列開始執(zhí)行,如沒有執(zhí)行轉(zhuǎn)出該switch語句的語句(如break語句),自動進(jìn)入下一個常量后的語句序列繼續(xù)執(zhí)行?;驁?zhí)行完最后一個語句序列,或執(zhí)行了轉(zhuǎn)出該switch語句的語句,就結(jié)束switch語句執(zhí)行如果沒有相匹配的常量,就從以default為情況前綴的語句序列開始執(zhí)行。如果也沒有default情況前綴,則立即結(jié)束switch語句25程序設(shè)計-2005年秋switch語句(續(xù))switch語句的執(zhí)行過程27程序設(shè)switch語句(續(xù))在C中,“case常量表達(dá)式”只是起語句序列入口位置的作用在執(zhí)行switch語句時,根據(jù)switch后的表達(dá)式值找到與該值匹配的入口位置,就從
19、此入口處開始執(zhí)行,只要未遇到轉(zhuǎn)出該switch語句的break語句或goto語句,就一直向下執(zhí)行,也不再理會與經(jīng)過的別的case后的常量值不匹配的情況26程序設(shè)計-2005年秋switch語句(續(xù))在C中,“case常量表達(dá)式”只是起語switch語句(續(xù))對switch語句需說明以下幾點switch后面括號內(nèi)的表達(dá)式只限于是整型表達(dá)式或字符型表達(dá)式或枚舉型表達(dá)式case后的常量表達(dá)式稱為情況前綴,要求所有常量表達(dá)式的值互不相同,并與switch后面括號內(nèi)的表達(dá)式值的類型相一致語句序列由任意條合法的C構(gòu)成,也可以沒有語句情況前綴default可以缺省,但至多出現(xiàn)一次,習(xí)慣總是將它寫在全部情況前
20、綴之后,如有必要也可寫在某case之前27程序設(shè)計-2005年秋switch語句(續(xù))對switch語句需說明以下幾點29例子 char choice; printf(Enter choice !(A, B, C, .n); scanf(%c, &choice); switch (choice) case A : printf( A chosen!n); break; case B : printf( B chosen!n); break; case C : printf( C chosen!n); break; default : printf(default chosen!n); char
21、 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 : printf(default chosen!n); 28程序設(shè)計-2005年秋例子 char choice; char choice;30例子int w_con; /* 天氣情況變量定義 */printf(天氣如何? 1:晴天, 2:多云
22、, 3:下雨 );scanf(%d,&w_con);switch (w_con) case 1 : printf(上街購物!n); break; case 2 : printf(去游泳!n); break; case 3 : printf(在家看電視!n);break; default: printf(錯誤選擇!n); 29程序設(shè)計-2005年秋例子int w_con; /* 天氣情況變量定義 */31例子按照考試成績的等級打印出百分制分?jǐn)?shù)switch(grade) caseaprintf(85100n);break; casebprintf(7084n); break; casecprint
23、f(6069n); break; caseDprintf(60n); break; defaultprintf(errorn);30程序設(shè)計-2005年秋例子按照考試成績的等級打印出百分制分?jǐn)?shù)switch(grad例子由于switch語句的表達(dá)式不允許是實型的,當(dāng)應(yīng)用于實型值選擇情況時,通常需作以下處理:將實表達(dá)式乘上一個適當(dāng)?shù)谋壤蜃?,將實表達(dá)式的值映照到一個較小的范圍上,然后再將它轉(zhuǎn)換到整型教材上的例子,用(income-1)/200轉(zhuǎn)換31程序設(shè)計-2005年秋例子由于switch語句的表達(dá)式不允許是實型的,當(dāng)應(yīng)用于實型switch (int)(income-1.0)/200.0) ca
24、se 0: case 1: case 2: tax = income*0.15; break; case 3: case 4: tax = income*0.19-24; break; case 5: case 6: tax = income*0.23-64; break; case 7: case 8: tax = income*0.28-134; break; case 9: tax = income*0.35-260; break; default: tax = income*0.43-420;(0,600(600,1000(1000,1400(1400,1800(1800,2000(2
25、000,+32程序設(shè)計-2005年秋switch (int)(income-1.0)/200循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)主要由一個稱為循環(huán)條件的表達(dá)式和一個稱為循環(huán)體的要循環(huán)執(zhí)行的語句組成C語言提供描述三種不同的循環(huán)結(jié)構(gòu)的語句while語句do_while語句for語句33程序設(shè)計-2005年秋循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)主要由一個稱為循環(huán)條件的表達(dá)式和一個稱為循環(huán)while語句while語句用來描述while型循環(huán)結(jié)構(gòu)while語句的一般形式為: while (表達(dá)式) 語句; or 復(fù)合語句;34程序設(shè)計-2005年秋while語句while語句用來描述while型循環(huán)結(jié)構(gòu)36while語句while語句的執(zhí)行過
26、程是(1)計算while之后的表達(dá)式的值(2)測試表達(dá)式的值,當(dāng)值為非0時,轉(zhuǎn)步驟(3);如值為0,則結(jié)束while語句(3)執(zhí)行while語句的循環(huán)體,并轉(zhuǎn)步驟(1)35程序設(shè)計-2005年秋while語句while語句的執(zhí)行過程是37程序設(shè)計-2 while造句入口 while (表達(dá)式) 非0 0 語句 while語句出口 while語句執(zhí)行過程示意圖 while語句36程序設(shè)計-2005年秋while語句38程序設(shè)計-2005年秋例子求s = 1 + 2 + 3 + + 100 s = 0; i = 1; while (i = 100) s += i; i+; s = 0; i = 0
27、; while (i 100) s += +i;37程序設(shè)計-2005年秋例子求s = 1 + 2 + 3 + + 100 s =如用以下代碼實現(xiàn)跳過輸入的空白類字符: while(c = getchar()= |c=n|c=t) ; 代碼說明當(dāng)循環(huán)體為空時,用空語句代替為使while語句的執(zhí)行能正常結(jié)束,控制循環(huán)條件的變量應(yīng)在循環(huán)體內(nèi)被更新,使表達(dá)式的值會變?yōu)? 有時,很難寫出循環(huán)條件,可用1代之,而在循環(huán)體中有當(dāng)條件滿足時,執(zhí)行break語句,跳出循環(huán)。如: while (1) . if (表達(dá)式) break; . while語句38程序設(shè)計-2005年秋如用以下代碼實現(xiàn)跳過輸入的空白類
28、字符:while語句40程例子問題:輸入學(xué)生成績,求平均成績。約定當(dāng)輸入負(fù)數(shù)時,表示輸入結(jié)束方法:采用成績逐個輸入、累計總分和計數(shù)學(xué)生人數(shù)的方法,直到輸入成績是負(fù)數(shù)時循環(huán)結(jié)束,然后求出平均成績,并輸出39程序設(shè)計-2005年秋例子問題:輸入學(xué)生成績,求平均成績。約定當(dāng)輸入負(fù)數(shù)時,表示輸#include void main() int sum, count, mark; sum = 0; count = 0; while (1) /* 循環(huán)條件永遠(yuǎn)為真 */ printf(輸入成績(小于0結(jié)束)n); scanf(%d, &mark); if (mark 0) break; /* 跳出while
29、循環(huán) */ sum += mark; count+; if(count) printf(平均成績?yōu)?%.2fn, (float)sum)/count); else printf(沒有數(shù)據(jù)輸入.n);40程序設(shè)計-2005年秋#include 42程序設(shè)計-2例子: 統(tǒng)計輸入字符行中,空白類字符、數(shù)字符和其它字符的個數(shù)。#include void main() int c, nwhite, nother, ndigit; nwhite=nother=ndigit=0; printf(“輸入字符行n”); while (c = getchar() != n) switch ( c ) case 0
30、: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: ndigit+; break; case : case t: nwhite+; break; default: nother+; break; printf(”digit = %dtwhite space = %dtother = %dn”, ndigit, nwhite, nother);41程序設(shè)計-2005年秋例子: 統(tǒng)計輸入字符行中,空白類字符、數(shù)字符和其它字符的個數(shù)例子問題:為使電文保密,往往按一定規(guī)律將其轉(zhuǎn)換成密碼,收報人再按約定的規(guī)律
31、將其譯回原文42程序設(shè)計-2005年秋例子問題:為使電文保密,往往按一定規(guī)律將其轉(zhuǎn)換成密碼,收報人#include main() char c; while(c=getchar()!=n) if(c=a & c=a & cZ & cz) c=c-26; printf(%c,c); 43程序設(shè)計-2005年秋#include 45程序設(shè)計-200do-while語句do-while語句的一般形式為 do 語句 while (表達(dá)式);do-while語句的執(zhí)行過程是(1)執(zhí)行do-while語句的循環(huán)體(2)求while之后的表達(dá)式的值(3)測試表達(dá)式的值,當(dāng)值為非0時,轉(zhuǎn)步驟(1)(從而構(gòu)成循
32、環(huán));如值為0,則結(jié)束while語句分號是do-while語句的結(jié)束符決不能省略!循環(huán)體44程序設(shè)計-2005年秋do-while語句do-while語句的一般形式為分號是d do-while造句入口 do 語句 while (表達(dá)式) 非0 0 do-while語句出口 do-while語句執(zhí)行過程示意圖 45程序設(shè)計-2005年秋47程序設(shè)計-2005年秋例子求 s = 1 + 2 + 3 + + 100s = 0; i = 1;do s += i; i+ ; while (i = 100); s = 0; i = 1; do s += i+; while (i = 100);46程序設(shè)計
33、-2005年秋例子求 s = 1 + 2 + 3 + + 100s =do-while語句(續(xù))與while語句一樣,當(dāng)循環(huán)體由多個語句組成時,必須把它們書寫成復(fù)合語句while語句與用do-while語句的區(qū)別是在于執(zhí)行循環(huán)時,對循環(huán)條件表達(dá)式的求值和測試的時間不同while語句對循環(huán)條件表達(dá)式求值和測試在執(zhí)行循環(huán)體之前,而do-while語句對循環(huán)條件的表達(dá)式求值和測試在執(zhí)行循環(huán)體之后47程序設(shè)計-2005年秋do-while語句(續(xù))與while語句一樣,當(dāng)循環(huán)體由多do-while語句(續(xù))對于do-while語句,它的循環(huán)體至少被執(zhí)行一次,而while 語句的循環(huán)體在循環(huán)條件表達(dá)式值
34、一開始就為0的情況下,就一次也未被執(zhí)行如能保證while語句中的循環(huán)條件表達(dá)式在第一次求值總是非0,則把該循環(huán)條件移至循環(huán)體執(zhí)行之后求值和測試,能起同樣的控制作用。在這種情況下,while語句就能改寫成do-while語句48程序設(shè)計-2005年秋do-while語句(續(xù))對于do-while語句,它的循環(huán)例子問題:求方程f(x)=3x3+4x2-2x+5的實根方法:用牛頓迭代方法求方程f(x)=0的根的近似解:xk+1=xk-f(xk)/f(xk), k=0,1,當(dāng)修正量dk=f(xk)/f(xk) 的絕對值小于某個很小數(shù)時,xk+1就作為方程的近似解49程序設(shè)計-2005年秋例子問題:求方
35、程f(x)=3x3+4x2-2x+5的實根51#include #include /* 引用數(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); x = x-d; while (fabs(d) Epsilon); printf(The root is %.6fn, x);50程序設(shè)計-2005年秋#include 52程序設(shè)計-200例子問題:尋找一個最小整數(shù),要求該整數(shù)滿足以下條件被3除余2,被5除余3,被7除余4
36、求解方法若采用變量從初值2開始,循環(huán)執(zhí)行變量的值增長1和測試該變量是否不滿足問題要求的條件,直至變量的值滿足條件結(jié)束51程序設(shè)計-2005年秋例子問題:尋找一個最小整數(shù),要求該整數(shù)滿足以下條件53程序#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ù)是%dn, i);52程序設(shè)計-2005年秋#include 54程序設(shè)計-2如采用分階段的辦法,先讓變量在保證滿足條件被3除余2情況下,尋找被5除余3的解;接著在保證被3除余2和被5除余3的條
37、件下,尋找被7除余4的解,這樣做能簡化循環(huán)條件,并能加快找解的速度。#include void main() int i = 2; /* 初值i被3除余2 */ do i += 3; while (i % 5 != 3); while (i % 7 != 4) i += 15; printf(“被3除余2,5除余3,7除余4的最小數(shù)是%dnn,i);保證i被3除余2保證i被3除余2并被5除余353程序設(shè)計-2005年秋保證i被3除余2保證i被3除余2并被5除余355程序設(shè)計for語句for語句的一般形式為 for(表達(dá)式1;表達(dá)式2;表達(dá)式3) 語句其中,語句是for語句的循環(huán)體,for語句執(zhí)
38、行過程:(1) 計算表達(dá)式1;(2) 計算表達(dá)式2的值,并測試其值為0或非0。若值為非0,轉(zhuǎn)步驟(3);否則結(jié)束for語句;(3) 執(zhí)行循環(huán)體;(4) 計算表達(dá)式3;(5) 轉(zhuǎn)向步驟(2)。54程序設(shè)計-2005年秋for語句for語句的一般形式為56程序設(shè)計-2005年 for語句入口 for(表達(dá)式1; 表達(dá)式2; 表達(dá)式3) 0 非0 語句 for語句出口 for語句的執(zhí)行流程圖55程序設(shè)計-2005年秋57程序設(shè)計-2005年秋for語句 vs. While語句for語句的一般形式也可等價地用以下形式的while語句來表達(dá): 表達(dá)式1; while (表達(dá)式2) 語句 表達(dá)式3; fo
39、r語句的表達(dá)式1的作用是對控制循環(huán)的有關(guān)變量賦初值;表達(dá)式2是控制循環(huán)的條件;表達(dá)式3用于修正有關(guān)變量;語句是循環(huán)體for語句按各部分的功能,可以形象地寫成以下形式: for(初值表達(dá)式 ; 控制循環(huán)條件表達(dá)式 ; 修正變量表達(dá)式) 完成循環(huán)計算語句56程序設(shè)計-2005年秋for語句 vs. While語句for語句的一般形式也可等例子求s = 1 + 2 + 3 + + 100用for語句可以寫成: for(s = 0, i = 1; i = 100; i+) s += i;57程序設(shè)計-2005年秋例子求s = 1 + 2 + 3 + + 100 forfor語句(續(xù))使用for語句時,
40、需注意的幾種情況:for語句的一般形式中,表達(dá)式1、表達(dá)式2和表達(dá)式3都可以省略如表達(dá)式1省略,表示該for語句沒有賦初值部分,或前面的程序段已為有關(guān)變量賦了初值,或確實沒有特別的初值;如表達(dá)式2省略,表示循環(huán)條件永遠(yuǎn)為真,可能循環(huán)體內(nèi)有控制轉(zhuǎn)移語句轉(zhuǎn)出for語句;表達(dá)式3省略,表示沒有修正部分,對變量的修正已在循環(huán)體內(nèi)一起完成。58程序設(shè)計-2005年秋for語句(續(xù))使用for語句時,需注意的幾種情況:60程例子 s = 0; i = 1; for( ; i = 100; i+) s +=i; for(s = 0, i = 1; ; i+) s += i; if(i = 100) brea
41、k; for(s = 0, i = 1; i = 100;) s += i+;59程序設(shè)計-2005年秋例子 s = 0; i = 1; for(s = 0, for語句(續(xù))不管表達(dá)式1、表達(dá)式2和表達(dá)式3省略情況如何,其中兩個分號都不能省略。對于三個表達(dá)式都省略情況for語句呈以下形式: for( ; ; ) 語句表達(dá)式1、表達(dá)式2和表達(dá)式3都可包含逗號運算符由多個表達(dá)式組成。如上面的例子中,表達(dá)式1為s=0,i=1。對于s = 1+2+3+100的計算,下面都是合理的for語句描述for(s = 0, i = 1; i = 100; s += i, i+);for(s = 0, i =
42、1; s += i, i 100; i+);for(s = 0, i = 0; i 100; +i, s += i);60程序設(shè)計-2005年秋for語句(續(xù))不管表達(dá)式1、表達(dá)式2和表達(dá)式3省略情況如何例子問題:編制一個程序, 實現(xiàn)輸入n個整數(shù), 輸出其中的最大數(shù),并指出其是第幾個數(shù)61程序設(shè)計-2005年秋例子問題:編制一個程序, 實現(xiàn)輸入n個整數(shù), 輸出其中的最大#include void main() int n, i, max, x, index; printf(輸入 n!n); scanf(%d, &n); for(i = 1; i max) /* 輸入了一個更大的數(shù) */ max
43、 = x; index = i; printf(最大數(shù)是 %d,它是第 %d 個數(shù)。nn, max, index);62程序設(shè)計-2005年秋#include 64程序設(shè)計-200三種循環(huán)語句while語句、do_while語句和for語句對應(yīng)于三種不同的構(gòu)造循環(huán)計算的思路當(dāng)某條件成立時循環(huán)執(zhí)行某個計算,直至條件不成立結(jié)束循環(huán)while循環(huán)執(zhí)行某個計算,直至條件不成立時結(jié)束循環(huán)do-while某個(或某些)變量從初值開始,順序變化,對其中的每一個(或組)值,當(dāng)條件成立時,循環(huán)執(zhí)行某計算,直至條件不成立結(jié)束循環(huán)for(;)63程序設(shè)計-2005年秋三種循環(huán)語句while語句、do_while語句
44、和for語句循環(huán)語句比較:例子求和式: p = 1-1/3+1/5-1/7+要求程序按公式逐項累計求和,直到某項的絕對值小于0.000001時結(jié)束記公式中項的分母為d,d的初值為1.0;引入存儲當(dāng)前項值的變量t用三種循環(huán)實現(xiàn)代碼64程序設(shè)計-2005年秋循環(huán)語句比較:例子求和式:66程序設(shè)計-2005年秋while以當(dāng)前項t的絕對值不小于0.000001時循環(huán)求和,并修正變量d和t,有代碼: p = 0.0; d = 1.0; t = 1.0; while (fabs(t) = 1.0e-6) p += t; d += 2.0; t = (d-1)%4)? 1.0/d : 1.0/d; 65程
45、序設(shè)計-2005年秋while以當(dāng)前項t的絕對值不小于0.000001時循環(huán)求和do-while循環(huán)求和,并修正變量d和t,直至新的t的絕對值小于0.000001時結(jié)束,有代碼: p = 0.0; d = 1.0; t = 1.0; do p += t; d += 2.0; t = (d-1)%4)? 1.0/d : 1.0/d; while (fabs(t) = 1.0e-6);66程序設(shè)計-2005年秋do-while循環(huán)求和,并修正變量d和t,直至新的t的絕對for(;)從變量d為1.0、t為1.0開始,當(dāng)t的絕對值不小于0.000001時循環(huán)求和,每次循環(huán)后相應(yīng)地修正變量d和t,有代碼
46、:for( p = 0.0, d = 1.0, t = 1.0; fabs(t) = 1.0e-6; d += 2.0, t = (d-1)%4)? 1.0/d : 1.0/d) p += t;67程序設(shè)計-2005年秋for(;)從變量d為1.0、t為1.0開始,當(dāng)t的絕對值循環(huán)語句比較(續(xù))三種循環(huán)語句在代碼編寫時有一些差別while語句和for語句循環(huán)條件表達(dá)式求值和測試在前,執(zhí)行循環(huán)體在后。極端情況,循環(huán)體可能一次也沒有執(zhí)行。do_while語句執(zhí)行循環(huán)體在前,循環(huán)條件表達(dá)式的求值和測試在后,因此,循環(huán)體至少執(zhí)行一次do_while語句的最后要接上一個分號,這是其句法的要求。while語句和for語句如果循環(huán)體是一個表達(dá)式語句,最后也會以分號結(jié)束,但這個分號是該表達(dá)式語句的要求while語句或do_while語句,通常在它們之前會有賦值語句給有關(guān)變量賦初值,在循環(huán)體中有對有關(guān)變量值的修正而for語句的賦初值部分應(yīng)出現(xiàn)在表達(dá)式1中,變量修正出現(xiàn)在表達(dá)式3中。所以for語句更加靈活,應(yīng)用也最多。68程序設(shè)計-2005年秋循環(huán)語句比較(續(xù))三種循環(huán)語句在代碼編寫時有一些差別70程Break和continue前面,break語句可用于使流程
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣東外語外貿(mào)大學(xué)《營養(yǎng)生理學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東司法警官職業(yè)學(xué)院《別墅建筑設(shè)計》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東生態(tài)工程職業(yè)學(xué)院《西方經(jīng)濟學(xué)(下)》2023-2024學(xué)年第一學(xué)期期末試卷
- 七年級上冊《6.2.1直線、射線、線段》課件與作業(yè)
- 廣東南華工商職業(yè)學(xué)院《色彩靜物及人物頭像》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東梅州職業(yè)技術(shù)學(xué)院《計算機創(chuàng)客訓(xùn)練》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東茂名健康職業(yè)學(xué)院《半導(dǎo)體器件原理》2023-2024學(xué)年第一學(xué)期期末試卷
- 一年級數(shù)學(xué)計算題專項練習(xí)1000題匯編
- 2024八年級地理上冊第三章自然資源-我們生存和發(fā)展的物質(zhì)基礎(chǔ)學(xué)情評估晉教版
- 【2021屆備考】2020全國名校物理試題分類解析匯編(11月第二期)A4-豎直上拋運動
- Unit 1 You and Me Section A 1a~Pronunciation說課稿-2024-2025學(xué)年人教版英語七年級上冊
- 2024年托管裝修責(zé)任協(xié)議
- 補牙講課課件
- 電動車著火應(yīng)急預(yù)案
- 國家自然科學(xué)基金申請書模板三篇
- 系統(tǒng)運行維護(hù)方案
- 外貿(mào)企業(yè)海外市場開拓計劃書
- (醫(yī)學(xué)課件)護(hù)理人文關(guān)懷
- 數(shù)據(jù)采集服務(wù)委托合同
- DB11T 1833-2021 建筑工程施工安全操作規(guī)程
- 河長制工作總結(jié)報告5篇河長制年度工作總結(jié)
評論
0/150
提交評論