第五章 基本語(yǔ)句.ppt_第1頁(yè)
第五章 基本語(yǔ)句.ppt_第2頁(yè)
第五章 基本語(yǔ)句.ppt_第3頁(yè)
第五章 基本語(yǔ)句.ppt_第4頁(yè)
第五章 基本語(yǔ)句.ppt_第5頁(yè)
已閱讀5頁(yè),還剩102頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第五章 基本語(yǔ)句,前面已介紹了順序結(jié)構(gòu),本章介紹選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。 C語(yǔ)言中,基本語(yǔ)句包括下列語(yǔ)句: (1)賦值語(yǔ)句 (2)條件語(yǔ)句 (3)循環(huán)語(yǔ)句 (4)轉(zhuǎn)移語(yǔ)句 (5)函數(shù)語(yǔ)句,5.1 賦值語(yǔ)句,5.1.1 簡(jiǎn)單賦值語(yǔ)句,運(yùn)算符加上“=”,語(yǔ)句格式:r=v;,5.1.2 特殊賦值語(yǔ)句,5.1.3 連續(xù)賦值語(yǔ)句,例5.2 從鍵盤(pán)輸入一個(gè)任意的小寫(xiě)字母,將其轉(zhuǎn)換成大寫(xiě)字母輸出。,main() char ch,chep; int bu; printf(“please input a little letter:”); scanf(“%c”, ,5.2 條件語(yǔ)句和分支選擇結(jié)構(gòu),C語(yǔ)言中有三類選擇

2、語(yǔ)句:,(1) 條件語(yǔ)句(if語(yǔ)句),(2) 條件賦值語(yǔ)句,(3) 開(kāi)關(guān)語(yǔ)句(switch語(yǔ)句),5.2.1 條件語(yǔ)句(if語(yǔ)句),1、 if的三種形式,功能: 當(dāng)表達(dá)式值非0時(shí), 執(zhí)行語(yǔ)句A,否則不執(zhí)行語(yǔ)句A.,例如: if (xy) printf( %d, x);,形式1 if(表達(dá)式) 語(yǔ)句A,其流程圖:,例5.5 計(jì)算y=|x|,絕對(duì)值計(jì)算公式如下:,main() float x; printf(“please input x:”) ; scanf(“%f”,可將其改為:,形式2 if(表達(dá)式) 語(yǔ)句A else 語(yǔ)句B,功能: 表達(dá)式為非0,執(zhí)行語(yǔ)句A 表達(dá)式為0,執(zhí)行語(yǔ)句B,例:

3、if(xy) printf(%d, x); else printf(%d, y);,例5.6 用鍵盤(pán)輸入3個(gè)數(shù)(a、b、c),確定其中最大值。,設(shè)max為a、b中最大者, 公式如下:,main() float a,b,max; printf(“please input a,b,c:”) ; scanf(“%f%f%f”,再令max為max和c中最大者,此時(shí)公式如下:,假設(shè)a就是三個(gè)數(shù)的最大者,并且始終讓a中存放三個(gè)數(shù)中的最大者,計(jì)算過(guò)程如下:,先找a、b中真正大者,并存于a中,公式如下:,main() float a,b,c; printf(“please input a,b,c:”) ; s

4、canf(“%f%f%f”,再找a和c中的大者并存于a中,此時(shí)公式如下:,形式3 if(表達(dá)式1) 語(yǔ)句1,else if (表達(dá)式2) 語(yǔ)句2,else if (表達(dá)式3) 語(yǔ)句3, ,else if(表達(dá)式n) 語(yǔ)句n,else 語(yǔ)句n+1,流程:,表達(dá)1,表達(dá)2,表達(dá)3,表達(dá)n,語(yǔ)句1,語(yǔ)句2,語(yǔ)句3,語(yǔ)句n,語(yǔ)句n+1,語(yǔ)句1, 0,= 0,= 0, 0, 0, 0,如: if (3) printf(o.k); if (a),1. 表達(dá)式可以是邏輯、關(guān)系,甚至是算術(shù)表達(dá)式。,2. 上述形式中的語(yǔ)句必須以分號(hào)結(jié)束,3. 上述形式中的語(yǔ)句可以是由 括起來(lái)的復(fù)合語(yǔ)句。此時(shí),在 外可以不用分號(hào)

5、.,注意的問(wèn)題:,main ( ) float a, b, t; scanf(%f, %f, ,補(bǔ)充例1 輸入兩個(gè)實(shí)數(shù),按代數(shù)值由大到小次序輸出這兩個(gè)數(shù)。,3.2 , 3.60 3.60 , 3.20,運(yùn)行情況如下:,例5.7 輸入三個(gè)數(shù),按從大到小順序輸出。,main ( ) float a, b, c,t; scanf(%f,%f,%f, ,if (bc) t=b; b=c; c=t; printf(%5.2f, %5.2f, %5.2f, a, b, c); ,運(yùn)行情況如下:,3,7,1 7.00, 3.00, 1.00,5.2.2 條件賦值語(yǔ)句,格式如下:,例5.9 用條件賦值語(yǔ)句編寫(xiě)

6、程序,找三個(gè)數(shù)中最大者。,main ( ) float a, b, c,max; printf(“please input a,b,c:”); scanf(%f,%f,%f, ,5.2.3 if語(yǔ)句的嵌套,if (表達(dá)式1),內(nèi)嵌if,else,內(nèi)嵌if,注意: else總是與它上面的最近的未配對(duì)的if 配對(duì).,一般形式,在上述形式的if語(yǔ)句中, 又可以是if語(yǔ)句稱為嵌套。,if (表達(dá)式2) 語(yǔ)句1,if (表達(dá)式3) 語(yǔ)句3,else 語(yǔ)句2,else 語(yǔ)句4,例: if ( ),if ( ) 語(yǔ)句2 else 語(yǔ)句3,if ( ) if ( ) 語(yǔ)句1 else ,所以:必要時(shí)加 .,i

7、f ( ) 語(yǔ)句1 else,補(bǔ)充例2 有一函數(shù),y=,1 (x0),編一程序,輸入一個(gè)x值,輸出y值。,有以下幾種寫(xiě)法,請(qǐng)判斷哪些是正確的?,程序1: main ( ) int x, y; scanf(d, ,if (x0) y= 1; else if (x= =0) y=0; else y=1; printf (x=%d, y=%dn, x, y); ,程序2:將上面程序的if語(yǔ)句改為: if (x=0) if (x0) y=1; else y=0; else y= 1;,程序3: 將上述if語(yǔ)句改為: y= 1; if (x! =0) if (x0) y=1; else y=0;,程序4

8、: y=0; if (x=0) if (x0) y=1; else y= 1;,5.2.3 switch語(yǔ)句,1、語(yǔ)句形式:,switch (表達(dá)式) case 常量1: 語(yǔ)句1; case 常量2: 語(yǔ)句2; case 常量3: 語(yǔ)句3; . case 常量n: 語(yǔ)句n; default : 語(yǔ)句n+1; ,根據(jù)表達(dá)式的不同值,選擇不同的程序分支,又稱開(kāi)關(guān)語(yǔ)句。,數(shù)值型 或 字符型,常量表達(dá)式的值必須互不相同,否則執(zhí)行時(shí)將出現(xiàn)矛盾,即同一個(gè)開(kāi)關(guān)值,將對(duì)應(yīng)多種執(zhí)行方案。,2、語(yǔ)句執(zhí)行流程:,指語(yǔ)句的最后一條是否為break,簡(jiǎn)單語(yǔ)句或復(fù)合語(yǔ)句,case語(yǔ)句出 現(xiàn)的次序并 不影響執(zhí)行 結(jié)果。,例

9、3:假設(shè)用0、1、2.6分別表示星期日、星期一.星期六?,F(xiàn)輸入一個(gè)數(shù)字,輸出對(duì)應(yīng)的星期幾的英文單詞。如果輸入3,輸出“Wednesday”。,#include stdio.h void main() int n; scanf(%d, ,程序運(yùn)行情況如下: 3 Wednesday Thursday Friday Saturday error,在“switch”語(yǔ)句中,“case 常量表達(dá)式”只相當(dāng)于一個(gè)語(yǔ)句標(biāo)號(hào),表達(dá)式的值和某標(biāo)號(hào)相等則轉(zhuǎn)向該標(biāo)號(hào)執(zhí)行,但不能在執(zhí)行完該標(biāo)號(hào)的語(yǔ)句后自動(dòng)跳出整個(gè)switch 語(yǔ)句,因此會(huì)繼續(xù)執(zhí)行所有后面語(yǔ)句的情況。,為此,語(yǔ)言提供了一種break語(yǔ)句,其功能是可以跳

10、出它所在的switch語(yǔ)句。,將上面的例3修改如下:,#include stdio.h void main() int n; scanf(%d, ,程序運(yùn)行情況如下: 3 Wednesday,3、說(shuō)明,多個(gè)case語(yǔ)句可以共用一組執(zhí)行語(yǔ)句。,switch(grade) case A: case B: case C:printf(grade=60n);break; default:printf(grade60); ,各case和default子句的先后順序可以變動(dòng),而不會(huì)影響程序執(zhí)行結(jié)果。,default語(yǔ)句可以省略不用。,case和default與其后面的常量表達(dá)式間至少有一個(gè)空格。,swit

11、ch語(yǔ)句可以嵌套,break語(yǔ)句只跳出它所在的switch語(yǔ)句。,如 case B:,例4 企業(yè)發(fā)放的獎(jiǎng)金根據(jù)利潤(rùn)提成。從鍵盤(pán)輸入當(dāng)月利潤(rùn),求應(yīng)發(fā)放獎(jiǎng)金總數(shù)?,利潤(rùn)x x=10 10x20 20x40 40x60 60x100 100x,(int )x/10,常量 0,1 1,2 2,3,4 4,5,6 6,7,8,9,10 10以上,用這種方法轉(zhuǎn)換后,n出現(xiàn)了在不同區(qū)域有重復(fù)數(shù)字的情況。解決的方法有很多,其中一種是可以采用當(dāng)x為10的整數(shù)倍時(shí),將計(jì)算出的n值減1。,使用switch解題的關(guān)鍵,通過(guò)分析找到表達(dá)式,將問(wèn)題分成幾種情況。,#include stdio.h void main()

12、float x,y; int n; scanf(%f, ,程序如下:,程序舉例,例1 寫(xiě)一程序,輸入年號(hào),判斷是否為閏年。,1. 算法: 根據(jù)閏年的判斷條件, 當(dāng)年號(hào)能被4整除但不能被100整除時(shí),它為閏年。, 當(dāng)年號(hào)能被100整除又能被400整除時(shí),它為閏年。,設(shè)用變量year表示年號(hào),leap為待置值變量,當(dāng)year為閏年:leap1, 否則leap0.,2. 流程圖,leap%400=0,leap1,leap=0,打印非閏年,打印是閏年,結(jié)束,leap,yes,No,yes,No,A,3. 程序:,main ( ) int year, leap; scanf(%d, else leap=

13、0;,else leap=1; else leap=0; if (leap) printf(%d is, year); else printf(%d is not, year); printf (a leap yearn); ,運(yùn)行情況如下:,2000 2000 is a leap year,1989 1989 is not a leap year,上述條件也可用一個(gè)邏輯表達(dá)式表示: if ( ( year%4=0),例2 給一個(gè)不多于4位的正整數(shù),求出它是幾位數(shù),逆序打印出各位數(shù)字。,#include stdio.h void main() int x,a,b,c,d; /*a,b,c,d代

14、表千位、百位、十位、個(gè)位*/ scanf(%d, ,例3 任意輸入三個(gè)數(shù),判斷能否構(gòu)成三角形?若能構(gòu)成三角形,是等邊三角形、等腰三角形還是其它三角形?,#include stdio.h void main() float a,b,c; scanf(%f,%f,%f, ,課堂練習(xí),1.main() 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: a+;b+; printf(“a=%d,b=%dn”,a,b); ,結(jié)果: a

15、=2,b=1,2.程序填空: 以下程序判斷輸入的整數(shù)能否被3或7整除. main() int x,f=0; scanf( “%d”, ,在C語(yǔ)言中可以用以下語(yǔ)句來(lái)實(shí)現(xiàn)循環(huán): 1. 用goto語(yǔ)句和if語(yǔ)句構(gòu)成循環(huán); 2. 用while語(yǔ)句; 3. 用do-while語(yǔ)句; 4. 用for語(yǔ)句。,循環(huán):就是在給定的條件成立時(shí)反復(fù)執(zhí)行某一程 序段,被反復(fù)執(zhí)行的程序段稱為循環(huán)體。,5.3 循環(huán)語(yǔ)句,S=1+2+3+100,0,S,1,2,100,S+1,S,S+2,S,S+100,S,作100次加法,S+i,S,累加器,計(jì)數(shù)器,1、語(yǔ)句形式: goto 語(yǔ)句標(biāo)號(hào);,例如: goto label; l

16、abel: .,語(yǔ)句標(biāo)號(hào)用標(biāo)識(shí)符表示,它的定名規(guī)則與變量名相同。,5.3.1 goto語(yǔ)句及與if語(yǔ)句構(gòu)成循環(huán),2、語(yǔ)句執(zhí)行流程: 在程序執(zhí)行過(guò)程中,如果遇到goto語(yǔ)句,則程序執(zhí)行流程無(wú)條件地轉(zhuǎn)向語(yǔ)句標(biāo)號(hào)后的語(yǔ)句繼續(xù)執(zhí)行。,3、說(shuō)明,語(yǔ)句標(biāo)號(hào)僅僅對(duì)goto 語(yǔ)句有效,對(duì)其它語(yǔ)句不影響。,同一個(gè)程序中,不允許有同名標(biāo)號(hào)。,goto語(yǔ)句通常與條件語(yǔ)句配合使用。可用來(lái)實(shí)現(xiàn)條件轉(zhuǎn)移、構(gòu)成循環(huán)、跳出循環(huán)體等功能,main ( ) int i, sum=0; i=1; loop: if (i=100) sum=sum+i; i+; goto loop; printf(%d, sum); ,運(yùn)行結(jié)果如下:

17、 5050,例: 求,main ( ) int sum=0, i=1; loop: sum=sum+i; i + +; if (i=100) goto loop; printf (sum=%d , sum); ,本例相當(dāng)于當(dāng)型循環(huán),若改為直到型:,5.3.2 while語(yǔ)句,真(非零),循環(huán)體,假(零),1、while 語(yǔ)句的形式: while (表達(dá)式) 循環(huán)體;,2 、 while 語(yǔ)句 常稱為“當(dāng)型”循環(huán)語(yǔ)句。,3、說(shuō)明:,先判斷表達(dá)式,后執(zhí)行語(yǔ)句。,表達(dá)式同if語(yǔ)句后的表達(dá)式一樣,可以是任何類型的表達(dá)式。,循環(huán)體多于一句時(shí),用一對(duì) 括起。,while循環(huán)結(jié)構(gòu)常用于循環(huán)次數(shù)不固定,根據(jù)是

18、否滿足某個(gè)條件決定循環(huán)與否的情況。,i=1; s =0; while (i=100) s=s+i; i+; printf(“n1+2+3+100=%d”,s);,循環(huán)變量的初始化 (循環(huán)先導(dǎo)語(yǔ)句),累加器的初始化,循環(huán)控制條件,累加,修改循環(huán)變量,循環(huán)語(yǔ)句的三要素,循環(huán)次數(shù)不固定的循環(huán)語(yǔ)句,例5.18 計(jì)算,當(dāng)s最接近且不大于10000為止。,main ( ) int i, s; s=i=0; while(s+i*i=10000) s=s+i*i; i+; printf(%d, s); ,運(yùn)行結(jié)果如下: 9455,輾轉(zhuǎn)相除法的自然語(yǔ)言表述: 不斷地用除數(shù)作為被除數(shù),余數(shù)作為除數(shù)再求余數(shù),直到余

19、數(shù)為0,此時(shí)除數(shù)即為所求最大公約數(shù)。,例5.19 利用輾轉(zhuǎn)相除法計(jì)算兩個(gè)數(shù)的最 大公約數(shù)。,main ( ) int m,n,r; printf(please input two data:); scanf(%d%d, ,運(yùn)行結(jié)果如下: please input two data:34 12 The max common facter is:2,#include stdio.h void main() int x; scanf(%d,【補(bǔ)充 例1】輸入一系列整數(shù),判斷其正負(fù)號(hào),當(dāng)輸入0時(shí),結(jié)束循環(huán)。,輸入數(shù)據(jù),為第一次判斷做準(zhǔn)備,while(x!=0),判斷是否結(jié)束, if(x0) print

20、f( + ); else printf( - ); scanf(%d, ,判斷正負(fù)號(hào),修改循環(huán)變量的值,#include stdio.h void main() char ch;int num=0; ch=getchar();,【補(bǔ)充 例2】 統(tǒng)計(jì)從鍵盤(pán)輸入的一行字符的個(gè)數(shù)(以回車鍵作為輸入結(jié)束標(biāo)記)。,while(ch!=n),判斷是否輸入結(jié)束,num+; ch=getchar(); ,printf(num=%dn,num); ,注意,表達(dá)式在判斷前,必須要有明確的值。,循環(huán)體中一般有改變條件表達(dá)式的語(yǔ)句。,while (表達(dá)式)后面沒(méi)有分號(hào)。,5.3.3 do-while語(yǔ)句,1、 do-

21、while的形式: do 循環(huán)體; while (表達(dá)式);,2、 do-while語(yǔ)句 常稱為“直到型”循環(huán)語(yǔ)句。,真(非零),循環(huán)體,假(零),main ( ) int i, sum=0; i=1; do sum=sum+i; i+; while (i=100); printf(%d,sum); ,例:用do-while語(yǔ)句求,3、說(shuō)明:,先執(zhí)行語(yǔ)句,后判斷表達(dá)式。,第一次條件為真時(shí),while,do-while等價(jià);第一次條件為假時(shí),二者不同。,計(jì)算公式為:,例5.21 輸入若干個(gè)正整數(shù),求其和,直到所輸 入數(shù)大于10為止(該數(shù)不在求和之列)。,用while語(yǔ)句編寫(xiě)的程序如下:,main

22、 ( ) int x, s=0; printf(“please input first integer:); scanf(“%d“, ,用do-while語(yǔ)句編寫(xiě)的程序如下:,main ( ) int x, s=0; printf(“please input first integer:); scanf(“%d“, ,注意,在if、while語(yǔ)句中,表達(dá)式后面都沒(méi)有分號(hào),而在do-while語(yǔ)句的表達(dá)式后面則必須加分號(hào)。,do-while和while語(yǔ)句相互替換時(shí),要注意修改循環(huán)控制條件 。,5.3.4 for語(yǔ)句,1、for的形式: for (初始表達(dá)式1;條件表達(dá)式2;循環(huán)表達(dá)式3) 循環(huán)

23、體 ;,表達(dá)式1:用于循環(huán)開(kāi)始前為循環(huán)變量設(shè)置初始值。,表達(dá)式2:控制循環(huán)執(zhí)行的條件,決定循環(huán)次數(shù)。,表達(dá)式3:循環(huán)控制變量修改表達(dá)式。,循環(huán)體語(yǔ)句: 被重復(fù)執(zhí)行的語(yǔ)句。,表達(dá)式3,計(jì)算表達(dá)式1,循環(huán)體,零,非零,for的下一條語(yǔ)句,2、執(zhí)行過(guò)程,for(i=1;i=100;i+) sum=sum+i;,例如:,它相當(dāng)于以下語(yǔ)句: i=1; while (i=100) sum=sum+i; i+; ,表達(dá)式1;,while(表達(dá)式2),表達(dá)式3;,3、 說(shuō)明,三個(gè)表達(dá)式都可以是逗號(hào)表達(dá)式。,三個(gè)表達(dá)式都是任選項(xiàng),都可以省略,但要注意省略表達(dá)式后,分號(hào)間隔符不能省略。,4. for語(yǔ)句中表達(dá)式省

24、略的形式,(1)for語(yǔ)句一般形式中的“表達(dá)式1”可以省略;此時(shí)應(yīng)在for語(yǔ)句之前給循環(huán)變量賦初值 如: sum=0;i=1; for ( ; i=100;i+) sum=sum+i;,(2)表達(dá)式2省略,即不判斷循環(huán)條件,循環(huán)無(wú)終止地進(jìn)行下去; 如: for(sum=0,i=1;i+) if(i100) break; sum=sum+i; ,(3)表達(dá)式3也可以省略,但此時(shí)應(yīng)保證循環(huán)能正常結(jié)束如: for(sum=0,i=1;i=100;) sum=sum+i; i+; ,(4) 可以省略表達(dá)式1和表達(dá)式3,只有表達(dá)式2,如: i=1; sum=0; for (;i=100;) sum=su

25、m+i; i+; ,i=1;sum=0; while (i=100) sum=sum+i; i+; ,相當(dāng)于,while (1) 循環(huán)體; 即不設(shè)初值,不判斷條件,循環(huán)變量不增值。無(wú)終止地執(zhí)行循環(huán)體。,(5)三個(gè)表達(dá)式都可省略,如 for ( ; ; ) 循環(huán)體;,如: sum=0,i=1; for(;) if(i100) break; sum=sum+i; i+; ,相當(dāng)于,(6)循環(huán)體為空語(yǔ)句 對(duì)for語(yǔ)句,循環(huán)體為空語(yǔ)句的一般形式為: for (表達(dá)式1;表達(dá)式2;表達(dá)式3) ; 如:for(sum=0,i=1;i=100;sum+=i, i+) ;,表達(dá)式2可以是關(guān)系表達(dá)式,也可以是數(shù)

26、值表達(dá)式或字符表達(dá)式。只要值0.即執(zhí)行循環(huán)體. for (i=0; (c=getchar( )!=n; i+=c);,(1)在進(jìn)入累加前先給累加器賦初值(一般為0); (2)用循環(huán)語(yǔ)句實(shí)現(xiàn)累加; for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量改變規(guī)律) (3)循環(huán)體語(yǔ)句的設(shè)計(jì)。 累加器當(dāng)前值=累加器原值+循環(huán)變量當(dāng)前值 ;,典型例題分析,例: 求累加和1+2+3+1000,基本方法:,屬于“累加器”類型問(wèn)題。,累加器賦初值,求偶數(shù)和 2+4+6+100,參考程序:,void main() long int k,s;,s=0;,for(k=1;k=1000;k+) s=s+k;,printf( s=

27、%ld ,s); ,累加,思考,(1)給累乘器賦初值,一般為1; (2)用循環(huán)語(yǔ)句實(shí)現(xiàn)累乘; for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量改變規(guī)律) (3)循環(huán)體設(shè)計(jì)。 累乘器當(dāng)前值=累乘器原值*循環(huán)變量當(dāng)前值;,例: 求累乘積。 如:123.100,基本方法:,屬于“累乘器”類型問(wèn)題。,累乘器賦初值,求n!=1 2 3 n,參考程序:,void main() double s=1;,int k;,for(k=1;k=100;k+) s=s*k;,printf( s=%lf ,s); ,累乘,思考,1.break語(yǔ)句,(1) 語(yǔ)句形式: break;,(2)作用: 1.結(jié)束break所在的 sw

28、itch語(yǔ)句。 2.結(jié)束當(dāng)前循環(huán),跳出break所在的循 環(huán)結(jié)構(gòu)。,5.3.5 break語(yǔ)句和continue語(yǔ)句,【例】 求300以內(nèi)能被17整除的最大的數(shù)。,#include stdio.h void main() int x,k; for(x=300;x=1;x-) if(x%17=0) break; printf(x=%dn,x); ,(1)語(yǔ)句形式: continue;,(2)語(yǔ)句作用: 結(jié)束本次循環(huán)。,2、continue 語(yǔ)句,(3)語(yǔ)句執(zhí)行流程: continue語(yǔ)句可以結(jié)束本次循環(huán),即不再執(zhí)行循環(huán)體中continue 語(yǔ)句之后的語(yǔ)句,轉(zhuǎn)入下一次循環(huán)條件的判斷與執(zhí)行。,【例】

29、 求300以內(nèi)能被17整除的所有整數(shù)。,#include stdio.h void main() int x,k; for(x=1;x=300;x+) if(x%17!=0) continue; printf(%dt,x); ,while(條件) 語(yǔ)句A; break; 語(yǔ)句 B; ,真,語(yǔ)句B,條件,語(yǔ)句A,break,假,結(jié)束循環(huán),4、break語(yǔ)句與continue語(yǔ)句的區(qū)別,至此位置,while(條件) 語(yǔ)句A; continue; 語(yǔ)句 B; ,真,語(yǔ)句B,條件,語(yǔ)句A,continue,假,結(jié)束循環(huán),至此位置,#include stdio.h void main() int a,

30、b; for(a=1,b=1; a=10) break; if(b%3=1) b+=3; continue; printf(%dn,a); ,【例5】 分析以下程序的運(yùn)行結(jié)果。,程序運(yùn)行結(jié)果: 4,在循環(huán)體語(yǔ)句中又包含有另一個(gè)完整的循環(huán)結(jié)構(gòu)的形式,稱為循環(huán)的嵌套。如果內(nèi)循環(huán)體中又有嵌套的循環(huán)語(yǔ)句,則構(gòu)成多重循環(huán)。,5.3.6 循環(huán)的嵌套,嵌套在循環(huán)體內(nèi)的循環(huán)體稱為內(nèi)循環(huán),外面的循環(huán)稱為外循環(huán)。,while 、do-while、for三種循環(huán)都可以互相嵌套。,循環(huán)語(yǔ)句之間的關(guān)系,真,真,外循環(huán)初始條件,內(nèi)循環(huán)初始條件,內(nèi)循環(huán)體,外循環(huán)條件,假,內(nèi)循環(huán)條件,假,內(nèi)循環(huán)循環(huán)條件,外循環(huán)循環(huán)條件,循環(huán)

31、結(jié)束,二重循環(huán)嵌套結(jié)構(gòu)執(zhí)行流程,例:輸出圖形:,* * * *,編程分析:,采用雙重循環(huán),一行一行輸出。,每一行輸出步驟:一般3步。 1)光標(biāo)定位,3)每輸完一行光標(biāo)換行(n),2)輸出圖形。 例如本題:共4行,若行號(hào)用k表示,則每一行有2*k-1個(gè)*號(hào)。,#include stdio.h void main() int k1,k2; for(k1=1;k1=4;k1+) putchar(t); for(k2=1;k2=k1;k2+) putchar(b);,for(k2=1;k2=k1*2-1;k2+) putchar(*);,putchar(n);, ,定位(還可以用空格的方法),輸出,幾

32、種循環(huán)的比較,1. 對(duì)于同一問(wèn)題, 四種循環(huán)可相互替代。但不提倡用goto.,2. for循環(huán)功能強(qiáng)于while, dowhile.但若不是明顯地給出循環(huán)變量初終值(或修改條件),則應(yīng)用while 或do while.以增強(qiáng)程序的結(jié)構(gòu)化和可讀性。,3. 要防止無(wú)限循環(huán)死循環(huán)。,4. 循環(huán)過(guò)程中,為了結(jié)束本次循環(huán)或跳出整個(gè)循環(huán)。分別要用到continue和break語(yǔ)句。,5.3.7 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)舉例,【例5-1】 求,#include stdio.h void main() float s=0,f1=2,f2=1,f=1,t,n; /*累加器賦初值*/ for(n=1;n=10;n+) s

33、=s+f*f1/f2; /*累加器當(dāng)前值=累加器原來(lái)的值+新的要加的數(shù)據(jù)*/ f=f*(-1);t=f2;f2=f1;f1=f1+t; /*為求下一個(gè)要加的數(shù)據(jù)做準(zhǔn)備*/ printf(“s=%fn”,s);必考 我的弱點(diǎn) ,【例5-2】輸入任意一個(gè)整數(shù),將其逆序輸出,例如輸入1234,輸出4321我的弱點(diǎn)。,include stdio.h void main() long y,n; scanf(%ld, ,【例5-3】求Fibonacci數(shù)例: 1, 1, 2, 3, 5, 8, 前40個(gè)數(shù)。,程序要點(diǎn):, 每輸出4個(gè)數(shù)時(shí)換行。, f1=f1+f2; f2=f1+f2; 交替的結(jié)果正好為一序列,規(guī)律: F1=1, F2=1 Fn=Fn 1 + Fn 2 (n2),程序如下:,main ( ) long int f1, f2; int i; f1=1; f2=

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論