




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、c c語言程序設(shè)計語言程序設(shè)計 第第3 3章章 結(jié)構(gòu)化程序設(shè)計結(jié)構(gòu)化程序設(shè)計 c programmingwhilewhile語句語句 二分支語句二分支語句else ifelse if語句語句 本章主要內(nèi)容提示本章主要內(nèi)容提示嵌套的嵌套的if else語句語句switchswitch語句語句 順序語句順序語句 do whiledo while語句語句 forfor語句語句 循環(huán)嵌套循環(huán)嵌套 轉(zhuǎn)移控制語句轉(zhuǎn)移控制語句 c programming 本章學(xué)習(xí)目標(biāo)本章學(xué)習(xí)目標(biāo)知識目標(biāo)知識目標(biāo) 掌握順序結(jié)構(gòu)、選擇結(jié)構(gòu)和掌握順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)的三種結(jié)構(gòu)設(shè)計循環(huán)結(jié)構(gòu)的三種結(jié)構(gòu)設(shè)計 熟練掌握熟練掌握i
2、fif、else-ifelse-if、switchswitch、breakbreak、forfor、whilewhile、do-whiledo-while和和continue continue 語句的語句的使用使用 掌握多分支選擇結(jié)構(gòu)和循環(huán)掌握多分支選擇結(jié)構(gòu)和循環(huán)的多重嵌套語句的使用的多重嵌套語句的使用能力目標(biāo)能力目標(biāo) 具備解決實(shí)際問題的算法具備解決實(shí)際問題的算法設(shè)計能力設(shè)計能力 掌握應(yīng)用多分支結(jié)構(gòu)和多掌握應(yīng)用多分支結(jié)構(gòu)和多重嵌套結(jié)構(gòu)完成程序的設(shè)重嵌套結(jié)構(gòu)完成程序的設(shè)計計 【學(xué)習(xí)提示學(xué)習(xí)提示】本章是本章是c c語言的基礎(chǔ)知識,是其它程序設(shè)計語言通用的內(nèi)容,語言的基礎(chǔ)知識,是其它程序設(shè)計語言通用
3、的內(nèi)容,需要大家勤奮學(xué)習(xí),所有的案例都需要理解掌握,學(xué)習(xí)方法可以先以理解記需要大家勤奮學(xué)習(xí),所有的案例都需要理解掌握,學(xué)習(xí)方法可以先以理解記憶為主,在自己不知道該如何寫程序的情況下,背原有的算法,記思路,把憶為主,在自己不知道該如何寫程序的情況下,背原有的算法,記思路,把源程序默寫出來,最后分析提出是否能有其他解決方法。源程序默寫出來,最后分析提出是否能有其他解決方法。 c programming3.1 順序語句順序語句【例 3-1】計算銀行存款的本息,輸入存款金額,存期,和年利率,根據(jù)公式計算存款到期時的本息合計,輸出時保留兩位小數(shù)。yearratemoneysum)1 ( #include
4、 /*標(biāo)準(zhǔn)輸入輸出頭文件*/#include void main() /*定義main函數(shù),返回值為void無類型*/ int money,year;/*定義存放整數(shù)的存款金額money變量和年份year變量*/ double rate,sum;/*定義存放雙精度形式的銀行利率rate和本息合計sum*/ printf(“enter money:”); /*用printf函數(shù)提示輸入存款金額*/ scanf(“%d”,&money); /*調(diào)用scanf函數(shù)以整數(shù)形式讀入存款金額*/ printf(“enter year:”); scanf(“%d”,&year); print
5、f(“enter rate:”); scanf(“%lf”,&rate); /*調(diào)用scanf函數(shù)實(shí)現(xiàn)讀入雙精度形式的利率*/ sum=money*(pow(1+rate),year); /*pow()函數(shù)完成計算冪。*/ printf(“sum=%.2fn”,sum); /*輸出本息合計*/c programming3.1 順序語句順序語句 x = 0; i+; printf( ); 注意:注意:分號是語句終結(jié)符! 當(dāng)用一對花括號與把一組說明和語句括在一起構(gòu)成一個復(fù)合語句 【例3-2】 用*號輸出字母c的圖案。 #include stdio.h void main() printf(
6、hello c-world!n); printf( *n); printf( *n); printf( * n); printf( *n); c programming【例3-3】 編寫程序用于小商店賣糖售貨員算帳:奶糖每斤12.5元,水果糖每斤8.5元,巧克力每斤15.7元,要求輸入各類水果糖的重量,打印出應(yīng)付錢數(shù),再輸入顧客付款數(shù),打印應(yīng)找的錢數(shù)。3.1 順序語句順序語句#includevoid main()float msugar,fsugar,csugar,money,remain;printf(奶糖12.5元/斤,水果糖8.5元/斤,巧克力15.7元/斤n); printf(輸入奶糖
7、,水果糖,巧克力的重量,沒有的輸入0:n);scanf(%f,%f,%f,&msugar,&fsugar,&csugar); money=(int)(msugar*12.5+fsugar*8.5+csugar*15.7)*100+0.5)/100.0;printf(應(yīng)支付%.2f元,并請輸入顧客付款數(shù):n,money); scanf(%f,&remain); remain-=money; printf(應(yīng)找顧客%.2f元,實(shí)際支付%.2f元。,remain,money); c programming3.2 二分支if語句 【例3-4】解決由鍵盤輸入3個整數(shù),輸出
8、其中最大的值的問題。 #include void main(void ) int a,b,c,max; printf(“enter integer a,b, c:”); /*輸入a,b,c的數(shù)據(jù)提示*/ scanf(“%d,%d,%d”,&a,&b,&c); /*輸入數(shù)據(jù)存放到整形變量a,b,c中*/ if(ab) max=b; /*如果a=b,將a的值保存到max變量中*/ if(maxc) /*如果maxc,將c的值存放到max變量中,保證最后max中存放*/ max=c; /*的是三個數(shù)的最大值。*/ printf(“the maxinum value is %d
9、”,max); /*輸出max的值*/ c programming二分支二分支ifif語句語句兩種形式:語法形式一 if (表達(dá)式) 語句1語法形式二 if (表達(dá)式) 語句1 else 語句23.2 二分支if語句 else部分是任選的。在if語句執(zhí)行時,首先計算表達(dá)式的值,如果其值為真(即,如果表達(dá)式的值非0),那么就執(zhí)行語句1;如果其值為假(即,如果表達(dá)式的值為0),并且包含else部分,那么就執(zhí)行語句2。 由于if語句只是測試表達(dá)式的數(shù)值,故表達(dá)式可以采用比較簡捷的形式。最明顯的例子是用if (表達(dá)式) 代替if (表達(dá)式!= 0 )有時這樣既自然又清楚,但有時又顯得比較隱秘。 c p
10、rogramming【例3-5】試編程判斷輸入的正整數(shù)是否既是5又是7的整數(shù)倍。若是,則輸出yes;否則輸出no。 3.2 二分支if語句 #includevoid main() int x; printf(input x:); scanf(%d,&x); if(x%50&x%70) printf(yes); else printf(no); 【思考】if中條件表達(dá)式是否可以改成 !x%5&!x%7 ? c programming【例3-6】判斷輸入的某一年是否是閏年,符合閏年的條件是: 1 能被4整除,但不能被100整除 2 能被400整除 滿足以上條件之一都是閏年。
11、 3.2 二分支if語句 #includevoid main()int year;printf(“input year:n”);scanf(“%d”,&year);if(year%4=0&year%100!=0)|year%400=0) /*year滿足兩個條件之一的就是閏年*/ printf(“%d是閏年!”);else printf(“%d不是閏年!”); c programming3.3 else if語句 【 例 3 - 7 】 給 出 一 百 分 制 成 績 , 要 求 輸 出 等級a,b,c,d,e,90分以上為a,80-89分為b,70-79為c,60-69為d,
12、60分以下為e。思考:如何通過不合法數(shù)據(jù)測試,即如果是不合法的數(shù)據(jù),提示數(shù)據(jù)超出范圍!#include void main() int score; printf(“please input student score:”); scand(“%d”,&score); if(score90) printf(“the grade is a”); /*如果成績90分,輸出a*/ else if(score80) /*注意,else if中間留有空格!*/ printf(“the grade is b”); /*如果80成績70) printf(“the score is c”); /*如果7
13、0成績60) printf(“the score is d”); /*如果60成績=79分,輸出d*/ else printf(“the score is e”); /*如果成績=59分,輸出e*/c programming一般的語法格式: if(表達(dá)式1) 語句1 else if(表達(dá)式2) 語句2 else if(表達(dá)式3) 語句3 else if(表達(dá)式3) 語句n-1 這種嵌套的if語句構(gòu)成的序列是編寫多路判定的最一般的方法。各個表達(dá)式依次求值,一旦某個表達(dá)式為真,那么就執(zhí)行與之相關(guān)的語句,從而終止整個語句序列的執(zhí)行。 3.3 else if語句 c programming3.3 el
14、se if語句【例3-8】通過鍵盤輸入字符,判斷其為控制、數(shù)字、大寫字母、小寫字母和其他字母的哪一類。 #include stdio.h void main() char c; printf(enter a char:); cgetchar(); /*從鍵盤讀取輸入的一個字符,然后分類判斷 */ if(c0&ca&ca&cz) printf(nthe char is a lower char. n); else printf(nthe char is an other char. n); c programming【例3-9】已知銀行整存整取存款不同期限的月息利率分別為
15、:一年時,月息利率0.001875,二年時,利息率為0.002325,三年時,利息率是0.002775,五年時,利息率是0.003000,輸入存款的本金和年限,求到期時能從銀行得到的利息與本金的合計。(利息的計算公式為:利息本金月息利率12 存款年限。3.3 else if語句#include stdio.h void main() int year; float money,rate,total; /* money:本金 rate:月利率 total:本利合計 */ printf(enter money and year ?); scanf(%f%d,&money,&year
16、); /*輸入本金和存款年限*/ if(year=1) rate=0.001875; /*根據(jù)年限確定利率*/ else if(year=2) rate=0.002325; else if(year=3) rate=0.002775; else if(year=5) rate=0.003000; else rate=0.0; total=money+money*rate*12*year; /*計算到期的本利合計*/ printf(total= %.2fn,total); c programming3.4 嵌套的if else語句 【例3-10】計算分段函數(shù),輸入x的值,計算輸出y的值)0(1)
17、0(0)0(1xxxy#includevoid main() int x,y; printf(“enter x:”); scanf(“%d”,&x); 代換1 代換2 代換3 if(x0) y=-1; /*如果x0,則y=1*/ printf(“y=%d”, y); if(x=0) if(x0) y=1; else y=0;else y=-1;y=-1;if(x!=0) if(x0) y=1;else y=0; y=0; if(x=0) if(x0) y=1else y=-1; 【思考】運(yùn)行代碼,將花括號的代碼代換成代換1、代換2、代換3,結(jié)果如何c programming3.4 嵌套
18、的if else語句 如果if else語句內(nèi)嵌語句是另一條基本的if語句時,就形成了嵌套的if else語句,其一般形式為: if (表達(dá)式1) if(表達(dá)式2) 語句1 else 語句2 else if(表達(dá)式3) 語句3 else 語句4 經(jīng)驗(yàn)經(jīng)驗(yàn):else與最近的還無else匹配的if匹配!建議在if語句嵌套的情況下盡可能使用花括號! 【思考】代換3的源代碼改錯,實(shí)現(xiàn)程序要求。 c programming小結(jié)if語句l 1.在幾種形式的if語句中,if關(guān)鍵字之后均為表達(dá)式。 該表達(dá)式通常是邏輯表達(dá)式或關(guān)系表達(dá)式, 但也可以是其它表達(dá)式,如賦值表達(dá)式等,甚至也可以是一個變量。 例如:if
19、(a=5) 語句; if(b) 語句; 都是允許的。只要表達(dá)式的值為非0,即為“真”。 如在:if(a=5);中表達(dá)式是賦值表達(dá)式,其值等于賦給它的值,此例中永遠(yuǎn)為5(非0),所以其后的語句總是要執(zhí)行的,當(dāng)然這種情況在程序中不一定會出現(xiàn),但在語法上是合法的。又如,有程序段: if(a=b) printf(%d,a); else printf(a=0); 本語句的語義是,把b值賦予a,如為非0則輸出該值,否則輸出“a=0”字符串。 在if語句中,條件判斷表達(dá)式必須用括號括起來,在語句之后必須加分號。2.在if語句的三種形式中,所有的語句應(yīng)為單個語句,如果要想在滿足條件時執(zhí)行一組(多個)語句,則必
20、須把這一組語句用括起來組成一個復(fù)合語句。但要注意的是在之后不能再加分號。c programming3.5 switch實(shí)現(xiàn)多分支選擇 switch語句直接處理多分支語句。 【例3-11】設(shè)計一個程序,輸入某天是幾月幾日,要求算出這一天是本年的第幾天。要算出某天是當(dāng)年的第幾天,應(yīng)該將當(dāng)年中本月之前所有月的天數(shù)相加,再加上本月的天數(shù)。但這里有一個閏年問題,二月是一個特殊月,如該年是閏年,則二月有29天,否則,便是28天,所以,還必須給出年份,以2005.3.5為例,先判斷不是閏年,結(jié)果就是前兩個月的天數(shù)再加上5天,即65天。 #include void main() int y,m,d,s; pr
21、intf(n enter year-month-data:); scanf(%d-%d-%d,&y,&m,&d) ; switch(m) case 1: s=d; break; case 2: s=d+31; break; case 3: s=d+31+29; break; case 4: s=d+31+29+31; break; c programming case 5: /*m=5時,總天數(shù)就是輸入的日加1,2,3,4月的天數(shù)*/ s=d+31+29+31+30; break; case 6: /*m=6時,總天數(shù)就是輸入的日加1,2,3,4,5月天數(shù)*/ s=d+
22、31+29+31+30+31; break; case 7: /*m=7時,總天數(shù)就是輸入的日加1,2,3,4,5,6月的天數(shù)*/ s=d+31+29+31+30+31+30; break; case 8: /*m=8時,總天數(shù)就是輸入的日加1,2,3,4,5,6,7月的天數(shù)*/ s=d+31+29+31+30+31+30+31; break; case 9: s=d+31+29+31+30+31+30+31+31; break; case 10: s=d+31+29+31+30+31+30+31+31+30; break; case 11: s=d+31+29+31+30+31+30+31+
23、31+30+31; break; default: s=d+31+29+31+30+31+30+31+31+30+31+30; if(y%4=0&y%100!=0|y%400=0) s-=1; /*如果是閏年,在當(dāng)前的總天數(shù)減1*/ printf(n今天是今年的第%d天n,s);c programming switch語句詳解 switch語句是一種多路判定語句,它根據(jù)表達(dá)式是否與若干常量整數(shù)值中的某一個匹配來相應(yīng)地執(zhí)行有關(guān)的分支動作。語法格式:語法格式: switch ( 表達(dá)式) case 常量表達(dá)式: 語句序列 case 常量表達(dá)式: 語句序列 default: 語句序列 執(zhí)行過
24、程:執(zhí)行過程: 【說明】switch關(guān)鍵字后面的表達(dá)式,可以是任意合法的表達(dá)式,每個case關(guān)鍵字后面的常量表達(dá)式的類型,必須與switch關(guān)鍵字的類型一致;default分支是任選的,各個case分支及default分支的出現(xiàn)次序是任意的,default子句可以省略不用;在case后的各常量表達(dá)式的值不能相同,否則會出現(xiàn)錯誤?!咀⒁狻吭赾ase后,允許有多個語句,可以不用括起來。 c programming【例3-12】編寫簡單的計算器程序:根據(jù)用戶輸入的兩個操作數(shù)和運(yùn)算符,顯示計算結(jié)果。 (設(shè)運(yùn)算符包括,*,/。) #include stdio.h void main() float da
25、ta1,data2; /*定義兩個操作數(shù)變量 */ char op; /*定義操作符 */ printf(enter your expression:); scanf(%f%c%f,&data1,&op,&data2);/*輸入要計算的表達(dá)式 */ switch (op) /*根據(jù)操作符對data1、data2進(jìn)行相應(yīng)運(yùn)算 */ case : /*處理加法*/ printf(“%.2f%.2f%.2fn”,data1,data2,data1 data2); break; switch語句詳解 c programming case : /*處理減法 */ printf(%
26、.2f%.2f%.2fn,data1,data2,data1data2); break; case * : /*處理乘法 */ printf(%.2f*%.2f%.2fn,data1,data2,data1*data2); break; case /: /*處理除法 */ if (data20) /*若除數(shù)為0 */ printf(divisor is zero.n); else printf(%.2f/%.2f%.2fn,data1,data2,data1/data2); break; default: /*輸入其它運(yùn)算符 */ printf(unkwown operater. n); sw
27、itch語句詳解 c programming3.6 while循環(huán)結(jié)構(gòu) 循環(huán)程序?qū)崿F(xiàn)的要素: 1循環(huán)變量的初值、終止值(循環(huán)退出條件,循環(huán)在什么條件下不執(zhí)行),增值(循環(huán)變量的改變值,一般循環(huán)體內(nèi)完成) 2循環(huán)體,需要重復(fù)執(zhí)行的操作。 c programmingwhile循環(huán)結(jié)構(gòu)【例3-13】計算void main() int i,sum=0; /*設(shè)置初值變量*/ i=1; while(i=100)/*判斷循環(huán)條件是否成立,如果成立執(zhí)行循環(huán)體*/ sum+=i; /*將變量i累加到和上。*/ i+; /*循環(huán)變量加1操作*/ printf(“1+2+100=%dn”,sum); 1001nn
28、c programmingwhile語句詳解 while語句用來實(shí)現(xiàn)“當(dāng)型”循環(huán)結(jié)構(gòu)。語法格式: while (表達(dá)式) 循環(huán)體語句【說明】1.while語句特點(diǎn)是“先判斷,后執(zhí)行”,如果表達(dá)式的值非0時,執(zhí)行while語句中的內(nèi)嵌語句,執(zhí)行完循環(huán)體語句后再返回循環(huán)的開始部位,判斷表達(dá)式的值,決定是否執(zhí)行循環(huán),當(dāng)循環(huán)的條件為0時,退出循環(huán)。2.循環(huán)體語句如果是多條語句,采用復(fù)合語句的形式,即采用符號把語句包含進(jìn)來。 3.在循環(huán)體內(nèi)應(yīng)該包含改變循環(huán)條件表達(dá)式值的語句,否則會導(dǎo)致“死”循環(huán)。 c programmingwhile語句詳解【例3-14】輸入一行字符,分別統(tǒng)計出其中英文字母、空格、數(shù)字
29、和其他字母的個數(shù)。#include void main() char c; int letter0,space0,digit0,other0; printf(input a line letter:n); while(cgetchar()!n) if(ca &ca&c0&c9) /*判斷是否為數(shù)字*/ digit; else /*其他字符*/ other; printf( letter%d,space%d,digit%d,other%dn,letter,space,digit,other); 【思考】為什么用getchar函數(shù)可以實(shí)現(xiàn)一行字符的輸入并判斷?該函數(shù)的具體參
30、數(shù)使用辦法。 c programmingwhile語句詳解【例3-15】編寫程序計算并輸出下列級數(shù)和,直到某項(xiàng)的絕對值小于為止。#include #include /*fabs庫函數(shù)在math文件中定義*/void main()int k; /* 表示第k項(xiàng)*/double sum,d,f; sum=1.0;k=0;f=1.0; while(fabs(d)=1.0e-4) /*當(dāng)某一項(xiàng)的絕對值大于10-4退出循環(huán)*/ k+ ; f=-f ; /*符號變量取反*/ d=1.0/(k*(k+1); /*計算每一項(xiàng)*/ sum=sum+f*d; /*累加*/ printf(“sum=%lfn”,su
31、m);.) 1() 1(.3212111kksumkc programming3.7 do-while循環(huán)結(jié)構(gòu) 【例3-16】從鍵盤輸入一個正整數(shù),逆序輸出該整數(shù)。 #include void main() int number,nb; printf(please input a interger); scanf(%d,&number); /*輸入一個整數(shù)*/ if(number0) /*如果輸入的整數(shù)是負(fù)數(shù),改成正數(shù)*/ number=-number; do nb=number%10; /*取出個位數(shù)*/ number=number/10; /*原數(shù)去掉個位數(shù)*/ printf(%d
32、,nb); /*輸出個位數(shù)*/ while(number!=0); /*當(dāng)原數(shù)沒有全部依逆序取完,繼續(xù)循環(huán)*/ c programmingdo-whiledo-while語句詳解語句詳解do-while語句用來實(shí)現(xiàn)直到型循環(huán)結(jié)構(gòu)一般的語法: do 循環(huán)體語句 while(表達(dá)式);【注意】不要丟失while后面的分號!【說明】1do-while語句特點(diǎn)是“先執(zhí)行,后判斷”,先執(zhí)行一次指定的循環(huán)體,當(dāng)表達(dá)式的值為非0時,即為真時,返回繼續(xù)執(zhí)行循環(huán)體,否則當(dāng)表達(dá)式的值為0時,退出循環(huán)。因此,不論最初表達(dá)式的值是否為1都執(zhí)行一次循環(huán)體。2循環(huán)體語句如果是多條語句,采用復(fù)合語句的形式,即采用符號把語句
33、包含進(jìn)來。3在循環(huán)體內(nèi)應(yīng)該包含改變循環(huán)條件表達(dá)式值的語句,否則會導(dǎo)致“死”循環(huán)。 c programming【例3-17】用二分法求方程在(10,10)之間的根。 方程式曲線如圖3-12所示。 -10-8-6-4-20246810-2500-2000-1500-1000-5000500100015002000算法分析:逐步將包含有根的區(qū)間二分,通過判斷函數(shù)值的符號,逐步對半縮小有根區(qū)間,直到區(qū)間縮小到容許誤差范圍,然后取區(qū)間中點(diǎn)為根的近似值,具體算法描述如下: 1設(shè)初值x1=-10,x2=10,則f(x1)0,計算中點(diǎn)。2計算f(x0),如果足夠逼近0,即與0差值在很小的范圍內(nèi),則結(jié)果為x0,
34、否則判斷f(x0)與f(x1)和f(x2)哪一個異號。3如果f(x0)0,則區(qū)間縮短為-10,x0之間。 4對縮短后區(qū)間繼續(xù)取中值判斷。 c programming3.8 for 循環(huán)結(jié)構(gòu) 【例3-17】fabonacci數(shù)列: 1 1 2 3 5 8 13 21 34 #include void main() long int f1,f2; int i; f1=1;f2=1; /*定義f1,f2變量并初始化為1*/ for(i=1;i=10;i+) /*循環(huán)執(zhí)行10次,每次輸出2個數(shù)*/ printf(“%12ld %12ld”,f1,f2); if(i%2=0) printf(“n”);/
35、*當(dāng)i是偶數(shù)時換一次行,即每行輸出4個數(shù)*/ f1=f1+f2; f2=f2+f1; /*計算數(shù)列每項(xiàng)*/ c programmingforfor語句詳解語句詳解語法格式:語法格式:for(表達(dá)式1;表達(dá)式2;表達(dá)式3) 循環(huán)體語句for循環(huán)語句在功能上等價于下列的while循環(huán)語句:表達(dá)式1;while(表達(dá)式2) 循環(huán)體語句; 表達(dá)式3; c programmingforfor語句詳解語句詳解【說明】 (1)在for語句中,三個表達(dá)式中任何一個表達(dá)式都可以省略,但其中“;”不能省略;比如說對于求100個數(shù)的和: for(i=1;i=100;i+) sum+=i; i=1; for(;i=1
36、00;i+) sum+=i; i=1; i=1; i=1;for(;i=100;) while(i100) break;c programmingforfor語句詳解語句詳解 以上五種循環(huán)語句等價,可以看出三個表達(dá)式都可以省略,但是注意for中省略的表達(dá)式在其他位置以語句形式出現(xiàn),否則可能導(dǎo)致死循環(huán),比如說在中省略了表達(dá)式2,則在循環(huán)體內(nèi)加入判斷語句和break語句完成條件成立時退出循環(huán)體,否則就會導(dǎo)致死循環(huán)。常使用的for語句的形式: for(循環(huán)體變量賦初值;循環(huán)退出條件;循環(huán)變量增值);(2)循環(huán)體語句如果是多條語句,采用復(fù)合語句的形式,即采用符號把語句包含進(jìn)來;(3)表達(dá)式1除了設(shè)置循
37、環(huán)變量的初值,也可以設(shè)置其他表達(dá)式,而且可以是逗號表達(dá)式; 比如說:for(sum=0,i=1;i=100;i+) sum+=i;(4)表達(dá)式3可以是關(guān)系表達(dá)式,邏輯表達(dá)式,也可以是數(shù)字或字符,只要其值非0,就執(zhí)行循環(huán)體。c programmingforfor語句舉例語句舉例【例3-18】求100499之間的所有水仙花數(shù),即各位數(shù)字的立方和恰好等于該數(shù)本身的數(shù)。#include void main() int i,j,k,m; for(m100;m500;m) im/100; /* 取百位 */ jm/10i*10; /* 取十位 */ km%10; /* 取個位 */ if (mi*i*ij
38、*j*jk*k*k) /* 如滿足條件,則輸出 */ printf(%5d,m); c programming循環(huán)語句小結(jié) (1)三種語句都用來處理循環(huán)問題,可以互相代替。 (2)while和for語句是當(dāng)型循環(huán),do-while語句是直到型循環(huán)。所以在執(zhí)行do-while語句時要考慮到即使條件不滿足也會執(zhí)行一次循環(huán)體。 (3)實(shí)際情況中,循環(huán)次數(shù)能估計出來的一般采用for循環(huán)完成,否則采用while或do-while語句實(shí)現(xiàn)。 (4)while和do-while循環(huán)在while后面指定循環(huán)條件,循環(huán)體中應(yīng)包括使循環(huán)趨于結(jié)束的語句。 (5)用while和do-while循環(huán)時,循環(huán)變量初始化的
39、操作應(yīng)在while和do-while語句之前完成,而for語句在表達(dá)式1中實(shí)現(xiàn)循環(huán)變量的初始化。c programming3.9 循環(huán)嵌套 【例3-19】打印九九乘法表。 #includevoid main() int i,j; for(i=1;i10;i+) for(j=1;j10;j+) printf(%d*%d=%d ,i,j,i*j); printf(n); c programming多重循環(huán)語句 循環(huán)嵌套,是指一個循環(huán)體中完整包含了另一個循環(huán)結(jié)構(gòu),有成多重循環(huán)。在c語言中,允許循環(huán)結(jié)構(gòu)多重嵌套,并且while、do-while和for循環(huán)結(jié)構(gòu)都可以嵌套,此外在一個循環(huán)體內(nèi)可以包含各種
40、完整的選擇結(jié)構(gòu),在一個選擇結(jié)構(gòu)的某個獨(dú)立部分中,還可以包含完整的循環(huán)結(jié)構(gòu),但是不允許相互之間有交叉,即選擇或循環(huán)結(jié)構(gòu)的結(jié)束語句在另外一個循環(huán)或選擇結(jié)構(gòu)體內(nèi)。 【例3-20】古典算數(shù)問題,搬磚:已知要搬36塊磚,36人搬,男一人搬4塊磚,女一人搬3塊磚,兩個小孩合搬一塊磚,要求一次搬完,請問男、女、小孩各需多少人?算法分析:采用窮舉法完成,即假設(shè)男的人數(shù)為men,女的人數(shù)是women,小孩是children(必是偶數(shù)),則可得到如下方程式: 這個方程式的三個變量,兩個方程式,應(yīng)該解有多種。 36362/*3*4childrenwomenmenchildrenwomenmenc programmi
41、ng多重循環(huán)語句 方法一:#includevoid main() int men,women,children; for(men=0;men36;men+) /*遍歷所有的men人數(shù)*/ for(women=0;women36;women+) /*遍歷所有的women人數(shù)*/ for(children=0;children36;children+)/*遍歷所有的 children人數(shù)*/ if(men+women+children=36&4*men+3*women+children/2.0=36) printf(“men is %d,women is %d,children is %d
42、”,men,women,children); /*判斷兩個方程式是否成立,如果成立,則是所得結(jié)果*/ c programming多重循環(huán)語句方法二:#includevoid main() int men,women,children; for(men=0;men9;men+) for(women=0;women12;women+) children=36-men-women; if(4*men+3*women+children/2.0=36) printf(“men is %d,women is %d,children is %d”,men,women,children); c program
43、ming多重循環(huán)語句【小結(jié)】兩種代碼的執(zhí)行結(jié)果完全一致的,但是程序編碼不一樣,討論那種好?顯然,第二種好,因?yàn)檫x用兩重for循環(huán),循環(huán)執(zhí)行的次數(shù)是12*9=108次,而第一種源代碼循環(huán)執(zhí)行次數(shù)是36*36*36=46656次,前者執(zhí)行效率高,因此,實(shí)際編程時對于多重循環(huán)嵌套要考慮執(zhí)行效率?!舅伎肌吭趇f語句的括號中children/2.0,如果改為children/2可以嗎?說明原因。 c programming3.10 轉(zhuǎn)移控制語句 【例3-21】求100200之間的所有素數(shù),并輸出 #include#includevoid main() int i,m,k,n=0; /*設(shè)計n變量用于輸出
44、10個素數(shù)后換行*/ for(m=100;m200;m+) /循環(huán)控制在100-200之間取數(shù)*/ k=sqrt(m); /求m的二次方根*/ for(i=2;ik) /判斷內(nèi)層循環(huán)是否正常退出,如果是,則m是素數(shù)*/ printf(“%d”,m); n+; /統(tǒng)計共有n個素數(shù)*/ if(n%10= =0) /每10個素數(shù)換行*/ printf(“n”); 【思考】本題目大家可以先按照常規(guī)的素數(shù)判定方法解決,然后比較兩種算法的優(yōu)劣;同時,考慮if(ik)中條件是否能換成if(i= =k+1)? c programmingbreakbreak和和continuecontinue語句語句1break語句 退出語句,完成從當(dāng)前的switch結(jié)構(gòu)中退出,執(zhí)行switch
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 大寒節(jié)氣幼兒護(hù)理
- 傳統(tǒng)治療體系概述
- 智慧城市三維管網(wǎng)設(shè)計施工與質(zhì)量保障服務(wù)合同
- 核電站輔助崗位派遣服務(wù)及管理協(xié)議
- 生物有機(jī)肥生產(chǎn)技術(shù)許可與售后服務(wù)合同
- 文創(chuàng)園區(qū)產(chǎn)業(yè)孵化與委托經(jīng)營管理合同
- 游戲動漫IP授權(quán)與跨界合作開發(fā)合同
- 電池產(chǎn)品安全評估與理賠補(bǔ)充合同
- 伊利集團(tuán)年度培訓(xùn)體系總結(jié)
- 高效節(jié)能工業(yè)廢氣處理系統(tǒng)驗(yàn)收質(zhì)量標(biāo)準(zhǔn)協(xié)議
- 噴淋塔設(shè)計標(biāo)準(zhǔn)參考
- 國家課程設(shè)置標(biāo)準(zhǔn)課時
- 高支模板監(jiān)測記錄
- 涂裝工藝流程、PFMEA2018
- 《蘇泊爾盈利能力分析》8000字
- 車站信號自動控制教案-四線制道岔控制啟動電路
- 數(shù)字經(jīng)濟(jì)學(xué)導(dǎo)論-全套課件
- 委托書掛靠樣本
- 大學(xué)生職業(yè)發(fā)展與就業(yè)指導(dǎo)學(xué)習(xí)通課后章節(jié)答案期末考試題庫2023年
- 立體幾何中的空間距離問題
評論
0/150
提交評論