版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、會(huì)計(jì)學(xué)1c語(yǔ)言語(yǔ)言(yyn)的三種基本結(jié)構(gòu)的三種基本結(jié)構(gòu)第一頁(yè),共73頁(yè)。4.1 C4.1 C程序三種程序三種(sn (sn zhn)zhn)基本結(jié)構(gòu)基本結(jié)構(gòu) 從結(jié)構(gòu)化程序(chngx)設(shè)計(jì)角度出發(fā),程序(chngx)只有三種結(jié)構(gòu):順序順序(shnx)結(jié)構(gòu)結(jié)構(gòu)選擇結(jié)構(gòu)選擇結(jié)構(gòu)循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)第1頁(yè)/共73頁(yè)第二頁(yè),共73頁(yè)。1. 順序順序(shnx)結(jié)構(gòu)結(jié)構(gòu)表示(biosh)ABAB先執(zhí)行(zhxng)A, 再執(zhí)行(zhxng)B.第2頁(yè)/共73頁(yè)第三頁(yè),共73頁(yè)。2. 選擇選擇(xunz)結(jié)結(jié)構(gòu)構(gòu)表示(biosh)為ABPTFB TPFA存在某條件(tiojin)P, 若P為真,則執(zhí)行A,
2、否則執(zhí)行B。第3頁(yè)/共73頁(yè)第四頁(yè),共73頁(yè)。 另一種(y zhn)選擇結(jié)構(gòu)多分支結(jié)構(gòu).KK=K1A1A2AiAnK=K2K=Kn第4頁(yè)/共73頁(yè)第五頁(yè),共73頁(yè)。3. 循環(huán)循環(huán)(xnhun)結(jié)結(jié)構(gòu)構(gòu)表示(biosh)為PFTAAP為T(1) 當(dāng)型結(jié)構(gòu)(jigu) 當(dāng)P條件成立時(shí)(T),反復(fù)執(zhí)行A,直到P為“ 假”時(shí)才停止循環(huán).有兩種結(jié)構(gòu):當(dāng)型和直到型第5頁(yè)/共73頁(yè)第六頁(yè),共73頁(yè)。(2) 直到(zhdo)型APTFA直到P為F 先執(zhí)行A, 再判斷P,若為F,再執(zhí)行A,如此(rc)反復(fù),直到P為F. 已證明: 上述三種結(jié)構(gòu)(jigu)組成的程序可以解決全部的問題,所以任何一種高級(jí)語(yǔ)言都具備上
3、述三種結(jié)構(gòu)(jigu)。第6頁(yè)/共73頁(yè)第七頁(yè),共73頁(yè)。函數(shù)調(diào)用語(yǔ)句函數(shù)調(diào)用語(yǔ)句(yj):如: printf ();1. 表達(dá)式語(yǔ)句(yj)賦值語(yǔ)句賦值語(yǔ)句(yj): 如:如: i=i+1; i+; x+y;空語(yǔ)句空語(yǔ)句: 任何事情都不做。C程序語(yǔ)句可分為五大類: 如: ;4.2 C 4.2 C 語(yǔ)句語(yǔ)句第7頁(yè)/共73頁(yè)第八頁(yè),共73頁(yè)。2. 控制語(yǔ)句(yj)改變語(yǔ)句(yj)的執(zhí)行順序 if ( ) else (條件(tiojin) for ( ) (循環(huán)(xnhun) while ( ) (循環(huán)) do while (循環(huán)) switch (多分支選擇)( )表示條件, 表示語(yǔ)句第8頁(yè)/共
4、73頁(yè)第九頁(yè),共73頁(yè)。 continue (結(jié)束本次(bn c)循環(huán)) break (中止(zhngzh)整個(gè)循環(huán)) return ( 函數(shù)(hnsh)返回)3. 限定轉(zhuǎn)向(無(wú)條件轉(zhuǎn)向)語(yǔ)句5. 終止程序運(yùn)行語(yǔ)句4.無(wú)條件轉(zhuǎn)移語(yǔ)句goto exit第9頁(yè)/共73頁(yè)第十頁(yè),共73頁(yè)。6. 復(fù)合(fh)語(yǔ)句(語(yǔ)句體)用 括起來(lái)(q li)的一系列語(yǔ)句。 如: z=x+y; t=z/100; printf (%f, t); 第10頁(yè)/共73頁(yè)第十一頁(yè),共73頁(yè)。 一、一、if 語(yǔ)句的三種語(yǔ)句的三種(sn zhn)形式形式執(zhí)行(zhxng)過(guò)程: 當(dāng)表達(dá)式的值為“真”(非零)時(shí),執(zhí)行(zhxng)語(yǔ)
5、句,否則,不執(zhí)行(zhxng)語(yǔ)句。如如: if ( x y ) z = x;4.3 選擇結(jié)構(gòu)程序設(shè)計(jì)選擇結(jié)構(gòu)程序設(shè)計(jì)第11頁(yè)/共73頁(yè)第十二頁(yè),共73頁(yè)。執(zhí)行過(guò)程: 當(dāng)表達(dá)式的值為“真”(非零)時(shí),執(zhí)行語(yǔ)句(yj)1,否則,執(zhí)行語(yǔ)句(yj)2。如如: if (xy) z=x ; else z=y ;第12頁(yè)/共73頁(yè)第十三頁(yè),共73頁(yè)。如:if (grade=85) level=A; else if (grade=70) level=B; else if (grade=60) level=C; else level=D; 第13頁(yè)/共73頁(yè)第十四頁(yè),共73頁(yè)。 if后面的表達(dá)式一般后面的表達(dá)
6、式一般(ybn)為邏輯表達(dá)式或關(guān)系表為邏輯表達(dá)式或關(guān)系表 達(dá)式,也可以是任意數(shù)值類型表達(dá)式。達(dá)式,也可以是任意數(shù)值類型表達(dá)式。該語(yǔ)句(yj)是合法的:if(3) printf(“ok!”); if 語(yǔ)句中的語(yǔ)句中的“語(yǔ)句語(yǔ)句”為一個(gè)簡(jiǎn)單語(yǔ)句或復(fù)合語(yǔ)句。為一個(gè)簡(jiǎn)單語(yǔ)句或復(fù)合語(yǔ)句。 如:下面程序段是否有錯(cuò)?if (x=0) printf(“X is positive.”); x+;else printf(“X is negative.”);if (x=0) printf(“X is positive.”); x+;else printf(“X is negative.”);第14頁(yè)/共73頁(yè)第十五
7、頁(yè),共73頁(yè)。 在 if 語(yǔ)句中又包含一個(gè)或多個(gè)(du )if 語(yǔ)句稱為 if 語(yǔ)句的嵌套。一般(ybn)形式:if (條件1) if (條件2)語(yǔ)句1 else 語(yǔ)句2else if (條件3)語(yǔ)句3 else 語(yǔ)句4內(nèi)嵌if內(nèi)嵌if如:if(x0) if(y0) printf(x0,y0); else printf(“x0,y0) printf(“x0); else printf(“x=0, y6) if (n12) printf(“6n12”);else printf(“n6) if (n12) printf(“6n12”);else printf(“n=6”); 第16頁(yè)/共73頁(yè)第十
8、七頁(yè),共73頁(yè)。 -1 ;x0 main( ) int x,y; scanf(%d,&x); if(xb) t=a;a=b;b=t; if(ac) t=a;a=c;c=t; if(bc) t=b;b=c;c=t; printf(“%5.2f,%5.2f,%5.2f”,a,b,c);第18頁(yè)/共73頁(yè)第十九頁(yè),共73頁(yè)。程序程序2:將程序:將程序1的的if語(yǔ)句語(yǔ)句(yj)改為:改為: /*exp52.c*/#include main ( ) int x, y; scanf(“%d, &x); if (x=0) if (x0) y=1; else y=0; else y=-1; p
9、rintf (x=%d, y=%dn, x, y);程序程序(chngx)1: /*exp51.c*/#include main ( ) int x, y; scanf(“%d, &x); if (x0) y= -1; else if (x=0) y=0; else y=1; printf (x=%d, y=%dn, x, y);第19頁(yè)/共73頁(yè)第二十頁(yè),共73頁(yè)。程序程序4:將程序:將程序1的的if語(yǔ)句語(yǔ)句(yj)改為:改為:/*exp54.c*/#include main() int x,y; scanf(“%d,&x); y=0; if(x=0) if(x0) y=1;
10、 else y=-1; printf(x=%d,y=%dn,x,y); 程序程序(chngx)3:將程序:將程序(chngx)1的的if語(yǔ)句改為:語(yǔ)句改為:/*exp53.c*/#include main() int x,y; scanf(“%d,&x); y=-1; if(x!=0) if(x0) y=1; else y=0; printf(x=%d,y=%dn,x,y);第20頁(yè)/共73頁(yè)第二十一頁(yè),共73頁(yè)。1. 程序程序1 和程序和程序2 是正確的。是正確的。 它們它們(t men)代表的函數(shù)為代表的函數(shù)為:2. 程序程序3 和程序和程序4 是錯(cuò)誤的。是錯(cuò)誤的。 它們代表它們代
11、表(dibio)的函數(shù)為的函數(shù)為:y= 0 (x0)y=1 (x0)結(jié)結(jié)論論(jiln):第21頁(yè)/共73頁(yè)第二十二頁(yè),共73頁(yè)。用if或if/else或它們的嵌套也可使程序?qū)崿F(xiàn)多路分支(fnzh),但容易出現(xiàn)下面的問題: 可讀性差 破壞(phui)結(jié)構(gòu)解決問題的方法解決問題的方法:采用switch語(yǔ)句。第22頁(yè)/共73頁(yè)第二十三頁(yè),共73頁(yè)。 switch(變量) case 常量(chngling)表達(dá)式1: 語(yǔ)句體1 case 常量(chngling)表達(dá)式2: 語(yǔ)句體2 case 常量(chngling)表達(dá)式n: 語(yǔ)句體n default : 語(yǔ)句體(n+1) 一般一般(ybn)形式形
12、式:第23頁(yè)/共73頁(yè)第二十四頁(yè),共73頁(yè)。 根據(jù)表達(dá)式的取值, 判斷其與哪一個(gè)常量表達(dá)式相等。如=表達(dá)式i,則自語(yǔ)句i開始執(zhí)行(zhxng),直到語(yǔ)句n+1止。 若與所有常量表達(dá)式值不相等,則從default后的語(yǔ)句(yj)開始執(zhí)行。功能功能(gngnng):(gngnng):注:注:default 可有可無(wú)。第24頁(yè)/共73頁(yè)第二十五頁(yè),共73頁(yè)。例例: : 根據(jù)成績(jī)等級(jí)根據(jù)成績(jī)等級(jí)(dngj)(dngj)打印百分?jǐn)?shù)打印百分?jǐn)?shù)段段. .switch (grade) case A: printf (85100n);case B: printf (7084n);case C: printf (
13、6069n);case D: printf (60n);default: printf (errorn);第25頁(yè)/共73頁(yè)第二十六頁(yè),共73頁(yè)。程序程序(chngx)如下:如下:/*exp55.c*/#include main() char grade; scanf(%c,&grade); switch (grade) case A:printf(85-100n); case B:printf(70-84n); case C:printf(60-69n); case D:printf(60n); default:printf(Errorn); 第26頁(yè)/共73頁(yè)第二十七頁(yè),共73頁(yè)。
14、運(yùn)行運(yùn)行(ynxng)結(jié)結(jié)果為:果為:A 程序運(yùn)行結(jié)果程序運(yùn)行結(jié)果(ji gu)不在預(yù)料之中!不在預(yù)料之中!產(chǎn)生錯(cuò)誤的原因產(chǎn)生錯(cuò)誤的原因: 沒有沒有(mi yu)完全起到分支作完全起到分支作用。用。85-10070-8460-6960Error第27頁(yè)/共73頁(yè)第二十八頁(yè),共73頁(yè)。switch (表達(dá)式表達(dá)式) case 常表常表1: 語(yǔ)句語(yǔ)句(yj)1; break; case 常表常表2 : 語(yǔ)句語(yǔ)句(yj)2; break; case 常表常表n : 語(yǔ)句語(yǔ)句(yj)n; break; default: 語(yǔ)句語(yǔ)句(yj)n+1; 一般一般(ybn)形式為形式為:解決辦法解決辦法: 增加
15、增加(zngji)break語(yǔ)句語(yǔ)句, 使之跳出使之跳出switch結(jié)構(gòu)。結(jié)構(gòu)。第28頁(yè)/共73頁(yè)第二十九頁(yè),共73頁(yè)。修改修改(xigi)(xigi)程序?yàn)槌绦驗(yàn)? :/*exp56.c*/#include main() char grade; scanf(%c,&grade); switch (grade) case A:printf(85-100n);break; case B:printf(70-84n); break; case C:printf(60-69n); break; case D:printf(60n); break; case D: printf(60n); b
16、reak; 例如例如(lr):第31頁(yè)/共73頁(yè)第三十二頁(yè),共73頁(yè)。語(yǔ)言中可以用以下語(yǔ)句語(yǔ)言中可以用以下語(yǔ)句(yj)來(lái)實(shí)現(xiàn)循來(lái)實(shí)現(xiàn)循環(huán):環(huán): 用用goto語(yǔ)句語(yǔ)句(yj)和和 if 語(yǔ)句語(yǔ)句(yj)構(gòu)成循環(huán);構(gòu)成循環(huán); 用用while語(yǔ)句語(yǔ)句(yj); 用用do_while語(yǔ)句語(yǔ)句(yj); 用用for語(yǔ)句語(yǔ)句(yj)。 第32頁(yè)/共73頁(yè)第三十三頁(yè),共73頁(yè)。 goto 語(yǔ)句為無(wú)條件轉(zhuǎn)向語(yǔ)句,其作用為:使程序的執(zhí)行無(wú)條件地轉(zhuǎn)移(zhuny)到指定處。一般形式:一般形式: goto 語(yǔ)句標(biāo)號(hào); 如:如: goto label_1; goto 123;執(zhí)行過(guò)程:執(zhí)行過(guò)程:執(zhí)行語(yǔ)句時(shí),程序轉(zhuǎn)移到
17、以標(biāo)號(hào) 為前綴的語(yǔ)句處繼續(xù)執(zhí)行。如:如: p1: x+;p1: x+; . . . goto p1;第33頁(yè)/共73頁(yè)第三十四頁(yè),共73頁(yè)。說(shuō)明(shumng): C語(yǔ)言允許在任何語(yǔ)句前加一個(gè)語(yǔ)句標(biāo)號(hào),作為語(yǔ)言允許在任何語(yǔ)句前加一個(gè)語(yǔ)句標(biāo)號(hào),作為goto語(yǔ)句的目標(biāo)。給語(yǔ)句加標(biāo)號(hào)的形式:語(yǔ)句的目標(biāo)。給語(yǔ)句加標(biāo)號(hào)的形式: 語(yǔ)句標(biāo)號(hào):語(yǔ)句語(yǔ)句標(biāo)號(hào):語(yǔ)句 goto語(yǔ)句是一種語(yǔ)句是一種(y zhn)非結(jié)構(gòu)化語(yǔ)句,結(jié)構(gòu)化程序設(shè)計(jì)方法不提倡使用非結(jié)構(gòu)化語(yǔ)句,結(jié)構(gòu)化程序設(shè)計(jì)方法不提倡使用goto語(yǔ)句,因?yàn)闉E用語(yǔ)句,因?yàn)闉E用goto語(yǔ)句將使程序流程無(wú)規(guī)律,可讀性差。但也不是絕對(duì)禁止使用,只有在能夠大大提高程序效
18、率時(shí)才使用。語(yǔ)句將使程序流程無(wú)規(guī)律,可讀性差。但也不是絕對(duì)禁止使用,只有在能夠大大提高程序效率時(shí)才使用。且記:不要從循環(huán)且記:不要從循環(huán)(xnhun)體外跳到循環(huán)體外跳到循環(huán)(xnhun)體內(nèi)!體內(nèi)!第34頁(yè)/共73頁(yè)第三十五頁(yè),共73頁(yè)。例:計(jì)算例:計(jì)算10!并輸出!并輸出(shch)結(jié)果。結(jié)果。 main() int i=1, sum=1;loop: if (i=10) sum=sum*i; i+; goto loop; printf(“10!=%dn”,sum); 運(yùn)行(ynxng)結(jié)果:10!=24320本應(yīng)是:10!=3628800 main() int i=1; long sum=
19、1;loop: if (i=10) sum=sum*i; i+; goto loop; printf(“10!=%ldn”,sum); 第35頁(yè)/共73頁(yè)第三十六頁(yè),共73頁(yè)。 一般形式:一般形式: while (表達(dá)式表達(dá)式) 語(yǔ)句語(yǔ)句 執(zhí)行過(guò)程:執(zhí)行過(guò)程: 先計(jì)算表達(dá)式的值先計(jì)算表達(dá)式的值 ;若表達(dá)式的值為真若表達(dá)式的值為真(非非0) 時(shí)執(zhí)行循環(huán)體中的語(yǔ)句,時(shí)執(zhí)行循環(huán)體中的語(yǔ)句, 然后重復(fù)上面步驟。若然后重復(fù)上面步驟。若 表達(dá)式的值為假表達(dá)式的值為假(0) ,則,則 結(jié)束循環(huán)。結(jié)束循環(huán)。第36頁(yè)/共73頁(yè)第三十七頁(yè),共73頁(yè)。例:將上面例:將上面(shng min)計(jì)算計(jì)算10!并輸出結(jié)!
20、并輸出結(jié)果的程序用果的程序用 while語(yǔ)句寫出:語(yǔ)句寫出:main() int i=1; long int sum=1; while (i=10) sum=sum*i; i+; printf(“10!=%ldn”,sum); main() int i=1; long int sum=1;loop: if (i=10) sum=sum*i; i+; goto loop; printf(“10!=%ldn”,sum); 第37頁(yè)/共73頁(yè)第三十八頁(yè),共73頁(yè)。循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)(jigu)的術(shù)語(yǔ)的術(shù)語(yǔ) 1. 循環(huán)(xnhun)條件: 是循環(huán)(xnhun)結(jié)構(gòu)中的測(cè)試表達(dá)式。如:while(i=10
21、) 2. 循環(huán)體:是在每個(gè)循環(huán)周期均要執(zhí)行一次的語(yǔ) 句。語(yǔ)句可以是任何(rnh)語(yǔ)句,簡(jiǎn)單語(yǔ)、 復(fù)合語(yǔ)句、空語(yǔ)句均可以。如:上例while語(yǔ)句中用花括號(hào)括起來(lái)的復(fù)合語(yǔ)句。 3. 循環(huán)控制變量循環(huán)控制變量:是在循環(huán)條件中控制條件是真是在循環(huán)條件中控制條件是真 是假的變量。是假的變量。如:上例while語(yǔ)句中使用的變量 i 。第38頁(yè)/共73頁(yè)第三十九頁(yè),共73頁(yè)。注意:注意: 循環(huán)條件中的表達(dá)式一般是邏輯循環(huán)條件中的表達(dá)式一般是邏輯表達(dá)式和關(guān)系表達(dá)式,也可以是算數(shù)表表達(dá)式和關(guān)系表達(dá)式,也可以是算數(shù)表達(dá)式(非達(dá)式(非0為真,為真,0為假)。一般表達(dá)式為假)。一般表達(dá)式中應(yīng)含有循環(huán)控制變量。中應(yīng)含有
22、循環(huán)控制變量。 while (3)和和while (0)雖然從程序設(shè)計(jì)雖然從程序設(shè)計(jì)(chn x sh j)的角度上說(shuō)是不合理的,但是合的角度上說(shuō)是不合理的,但是合法的。法的。while (3) 語(yǔ)句 表示無(wú)限(wxin)循環(huán)while (0) 語(yǔ)句 表示不進(jìn)入循環(huán)體 要寫出一個(gè)正確的循環(huán)結(jié)構(gòu),對(duì)控制變量要做三方面(fngmin)工作:控制變量賦初值; 把控制變量寫入正確的循環(huán)條件;控制變量的更新、調(diào)整。第39頁(yè)/共73頁(yè)第四十頁(yè),共73頁(yè)。 一般形式:一般形式: do 語(yǔ)句語(yǔ)句 while(表達(dá)式);表達(dá)式);分號(hào)不能少 執(zhí)行過(guò)程:執(zhí)行過(guò)程:執(zhí)行循環(huán)體中的語(yǔ)句;執(zhí)行循環(huán)體中的語(yǔ)句;計(jì)算表達(dá)式
23、,測(cè)試循環(huán)計(jì)算表達(dá)式,測(cè)試循環(huán) 條件,為真條件,為真(非非0)則重復(fù)則重復(fù) 上面步驟,為假上面步驟,為假(0)結(jié)束循結(jié)束循 環(huán)。環(huán)。第40頁(yè)/共73頁(yè)第四十一頁(yè),共73頁(yè)。例:將上面計(jì)算例:將上面計(jì)算10!并輸出結(jié)果!并輸出結(jié)果(ji gu)的程序用的程序用 do-while語(yǔ)句寫出:語(yǔ)句寫出:main() int i=1; long int sum=1; while (i=10) sum=sum*i; i+; printf(“10!=%ldn”,sum); main() int i=1; long int sum=1; do sum=sum*i; i+; while (i=10); prin
24、tf(“10!=%ldn”,sum); 第41頁(yè)/共73頁(yè)第四十二頁(yè),共73頁(yè)。我們將我們將while和和do-while循環(huán)循環(huán)(xnhun)做一下做一下比較比較:main() int i; long sum=1; scanf(“%d”,&i); while (i=10) sum=sum*i; i+; printf(“%ldn”,sum); main() int i; long sum=1; scanf(“%d”,&i); do sum=sum*i; i+; while (i=10); printf(“%ldn”,sum); 輸入(shr):9輸出:90輸入(shr):11輸
25、出:1輸入:9輸出:90輸入:11輸出:11第42頁(yè)/共73頁(yè)第四十三頁(yè),共73頁(yè)。 比較上面兩個(gè)程序,雖然結(jié)構(gòu)是相同比較上面兩個(gè)程序,雖然結(jié)構(gòu)是相同(xin tn)的,在輸入值為有效值時(shí)結(jié)果相同的,在輸入值為有效值時(shí)結(jié)果相同(xin tn),但當(dāng)輸入無(wú)效值時(shí)輸出結(jié)果是不同的。為什么?,但當(dāng)輸入無(wú)效值時(shí)輸出結(jié)果是不同的。為什么? 而do-while語(yǔ)句不管開始的時(shí)候測(cè)試循環(huán)條件是真是假,循環(huán)體都要執(zhí)行一次,因?yàn)檠h(huán)體是先于測(cè)試條件執(zhí)行的。 while語(yǔ)句進(jìn)入循環(huán)體之前,測(cè)試循環(huán)條件,表達(dá)式必須為真,否則while循環(huán)不進(jìn)入循環(huán)體,即循環(huán)體可能一次也不執(zhí)行。while與與do-while的主要的
26、主要(zhyo)區(qū)別:區(qū)別:第43頁(yè)/共73頁(yè)第四十四頁(yè),共73頁(yè)。 一般形式:一般形式: for(表達(dá)式表達(dá)式1 ;表達(dá)式;表達(dá)式2 ;表達(dá)式;表達(dá)式3) 語(yǔ)句語(yǔ)句表達(dá)式1:一組初始化表達(dá)式。表達(dá)式2:循環(huán)控制條件(tiojin)。表達(dá)式3:在執(zhí)行完循環(huán)體語(yǔ)句之后執(zhí)行的表達(dá)式。 我們前面已經(jīng)說(shuō)明,要正確表達(dá)循環(huán)結(jié)構(gòu)(jigu)應(yīng)注意三方面的問題:控制變量的初始化,循環(huán)的條件和控制變量的更新。 for語(yǔ)句在書寫形式上正好體現(xiàn)了這種緊密的邏輯關(guān)系。不能省略不能省略不能省略不能省略第44頁(yè)/共73頁(yè)第四十五頁(yè),共73頁(yè)。執(zhí)行執(zhí)行(zhxng)過(guò)過(guò)程:程: 求出表達(dá)式求出表達(dá)式1的值,(若表達(dá)式的值
27、,(若表達(dá)式1是逗號(hào)表達(dá)式,則依次計(jì)算);是逗號(hào)表達(dá)式,則依次計(jì)算); 對(duì)對(duì)“表達(dá)式表達(dá)式2”進(jìn)行判斷,為假退出循環(huán),否則轉(zhuǎn);進(jìn)行判斷,為假退出循環(huán),否則轉(zhuǎn);執(zhí)行循環(huán)體中語(yǔ)句;執(zhí)行循環(huán)體中語(yǔ)句; 執(zhí)行執(zhí)行“表達(dá)式表達(dá)式3”,(若表達(dá)式,(若表達(dá)式3是逗號(hào)表達(dá)式,則依次計(jì)算)。是逗號(hào)表達(dá)式,則依次計(jì)算)。 轉(zhuǎn)向。轉(zhuǎn)向。 第45頁(yè)/共73頁(yè)第四十六頁(yè),共73頁(yè)。例:將上面例:將上面(shng min)計(jì)算計(jì)算10!的程序用!的程序用 for語(yǔ)句寫出:語(yǔ)句寫出:main() int i; long sum; for(i=1,sum=1; i=10; i+) sum=sum*i; printf(“10
28、!=%ldn”,sum); main() int i; long sum; for(i=1,sum=1; i=10; sum=sum*i, i+) ; printf(“10!=%ldn”,sum); 空語(yǔ)句第46頁(yè)/共73頁(yè)第四十七頁(yè),共73頁(yè)。說(shuō)明說(shuō)明(shumng):表達(dá)式1:用于進(jìn)入循環(huán)體之前(zhqin)給某些變量賦初值。 若省略,可在for語(yǔ)句前給變量賦初值。main() int i=1; long sum=1; for( ; i=10; i+) sum=sum*i; printf(“10!=%ldn”,sum); for 循環(huán)的三個(gè)表達(dá)式起著不同的循環(huán)的三個(gè)表達(dá)式起著不同的作用,作
29、用, 根據(jù)需要可以根據(jù)需要可以(ky)省略。省略。 第47頁(yè)/共73頁(yè)第四十八頁(yè),共73頁(yè)。表達(dá)式2:決定循環(huán)的條件,若省略(shngl),則為無(wú)限 循環(huán)。 如: for(i0; ;i+) 語(yǔ)句 for(; ;) 語(yǔ)句無(wú)限循環(huán)(死循環(huán))表達(dá)式3:用于循環(huán)一次后對(duì)某些變量(binling)進(jìn)行修改。 若省略,可在循環(huán)體內(nèi)對(duì)變量(binling)進(jìn)行修改。 main() int i; long sum=1; for(i=1 ; i=10 ; ) sum=sum*i; i+; printf(“10!=%ldn”,sum); 第48頁(yè)/共73頁(yè)第四十九頁(yè),共73頁(yè)。 for 語(yǔ)句最為靈活語(yǔ)句最為靈活(
30、ln hu),它完全可以代替的,它完全可以代替的while語(yǔ)句。語(yǔ)句。如:i=1; while(i=10) sum=sum*i; i+; 等效于for(i=1;i=10;i+) sum=sum*i; for語(yǔ)句功能很強(qiáng),其中表達(dá)式語(yǔ)句功能很強(qiáng),其中表達(dá)式1和表達(dá)式和表達(dá)式3可以是可以是逗號(hào)表達(dá)式,但為增強(qiáng)程序逗號(hào)表達(dá)式,但為增強(qiáng)程序(chngx)的可讀性,一的可讀性,一般不要把與循環(huán)無(wú)關(guān)的東西放到般不要把與循環(huán)無(wú)關(guān)的東西放到for語(yǔ)句中。語(yǔ)句中。如:sum=1; for(i=1 ; i=10 ; i+) sum=sum*i;for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增值)語(yǔ)句for語(yǔ)句最簡(jiǎn)單、
31、常用的形式如下:語(yǔ)句最簡(jiǎn)單、常用的形式如下:第49頁(yè)/共73頁(yè)第五十頁(yè),共73頁(yè)。三種循環(huán)語(yǔ)句共同的特點(diǎn)是:當(dāng)循環(huán)控制條件非零時(shí),執(zhí)行循環(huán)體語(yǔ)句,否則三種循環(huán)語(yǔ)句共同的特點(diǎn)是:當(dāng)循環(huán)控制條件非零時(shí),執(zhí)行循環(huán)體語(yǔ)句,否則(fuz)終止循環(huán)。終止循環(huán)。循環(huán)語(yǔ)句可以是任何循環(huán)語(yǔ)句可以是任何(rnh)語(yǔ)句,簡(jiǎn)單語(yǔ)句、復(fù)合語(yǔ)句、空語(yǔ)句均可以。語(yǔ)句,簡(jiǎn)單語(yǔ)句、復(fù)合語(yǔ)句、空語(yǔ)句均可以。while和for語(yǔ)句先判斷循環(huán)控制條件,do-while語(yǔ)句后判斷循環(huán)控制條件,所以,while和for語(yǔ)句的循環(huán)體可能一次也不執(zhí)行,而do-while語(yǔ)句的循環(huán)體至少也要執(zhí)行一次。在循環(huán)體內(nèi)或循環(huán)條件中必須有使循環(huán)趨于結(jié)束
32、的語(yǔ)句,否則會(huì)出現(xiàn)死循環(huán)等異常情況。第50頁(yè)/共73頁(yè)第五十一頁(yè),共73頁(yè)。三種循環(huán)可以處理同一問題,一般情況可以互相代替。但在實(shí)際應(yīng)用中,我們要根據(jù)具體情況來(lái)選用(xunyng)不同的循環(huán)語(yǔ)句。選用(xunyng)的一般原則如下: 如果循環(huán)如果循環(huán)(xnhun)次數(shù)在執(zhí)行循環(huán)次數(shù)在執(zhí)行循環(huán)(xnhun)體之前就已確定,一般用體之前就已確定,一般用for語(yǔ)句;如果循環(huán)語(yǔ)句;如果循環(huán)(xnhun)次數(shù)是根據(jù)循環(huán)次數(shù)是根據(jù)循環(huán)(xnhun)體的執(zhí)行情況確定的,一般用體的執(zhí)行情況確定的,一般用while語(yǔ)句或者語(yǔ)句或者do-while語(yǔ)句。語(yǔ)句。 (循環(huán)次數(shù)(csh)確定例)int i;long s
33、um=1;for(i=1;i=10;i+) sum=sum*i;(循環(huán)次數(shù)不確定例)char cdo c=getchar(); printf(“%c”,c); while(c!=q|c!=Q);第51頁(yè)/共73頁(yè)第五十二頁(yè),共73頁(yè)。當(dāng)循環(huán)體至少當(dāng)循環(huán)體至少(zhsho)執(zhí)行一次時(shí),用執(zhí)行一次時(shí),用do-while語(yǔ)句;反之,如果循環(huán)體可能一次也不執(zhí)行時(shí),用語(yǔ)句;反之,如果循環(huán)體可能一次也不執(zhí)行時(shí),用while語(yǔ)句。語(yǔ)句。 (循環(huán)體至少執(zhí)行一次)/*只有當(dāng)用戶(yngh)鍵入q或Q,才結(jié)束循環(huán)*/char cdo c=getchar(); printf(“%c”,c); while(c!=q|
34、c!=Q);(循環(huán)體可能一次不執(zhí)行)/*只有不是(b shi)q或Q的字符才被打印*/char c;c=getchar();while (c!=q|c!=Q); printf(“%c”,c); c=getchar(); 第52頁(yè)/共73頁(yè)第五十三頁(yè),共73頁(yè)。例:在屏幕例:在屏幕(pngm)上打印一個(gè)上打印一個(gè)8行行7列的星號(hào)矩陣。列的星號(hào)矩陣。 #include main() int i; for( i=0; i7; i+ ) printf(*); /*打印(d yn)第1行星號(hào)*/ printf(n); for( i=0; i7; i+ ) printf(*); /*打印(d yn)第2行
35、星號(hào)*/ printf(n); for( i=0; i7; i+ ) printf(“*”);/*打印(d yn)第8行星號(hào)*/第53頁(yè)/共73頁(yè)第五十四頁(yè),共73頁(yè)。什么什么(shn me)叫叫循環(huán)嵌套?循環(huán)嵌套? 一個(gè)循環(huán)(xnhun)的循環(huán)(xnhun)體中套有另一個(gè)循環(huán)(xnhun)叫循環(huán)(xnhun)嵌套。這種嵌套過(guò)程可以一直重復(fù)下去。 一個(gè)循環(huán)外面包圍一層循環(huán)稱為(chn wi)二重循環(huán)。一個(gè)循環(huán)外面包圍二層循環(huán)稱為(chn wi)三重循環(huán)。一個(gè)循環(huán)外面包圍多層循環(huán)稱為(chn wi)多重循環(huán)。 while、do-while、for可以互相嵌套自由組合。 第54頁(yè)/共73頁(yè)第五十五
36、頁(yè),共73頁(yè)。例:將上例(打印例:將上例(打印8行行7列的星號(hào)矩形)用二重循環(huán)列的星號(hào)矩形)用二重循環(huán)(xnhun)實(shí)現(xiàn)。實(shí)現(xiàn)。 #include main() int i , k; for( i=0; i8; i+ ) for( k=0; k7; k+ ) printf(*); printf(n); 第55頁(yè)/共73頁(yè)第五十六頁(yè),共73頁(yè)。一、break 語(yǔ)句(yj)一般形式:一般形式: break ;功能功能(gngnng):結(jié)束當(dāng)前的一層循環(huán)。:結(jié)束當(dāng)前的一層循環(huán)。 解釋:解釋:break 語(yǔ)句只能用于循環(huán)語(yǔ)句和語(yǔ)句只能用于循環(huán)語(yǔ)句和Switch語(yǔ)句。語(yǔ)句。第56頁(yè)/共73頁(yè)第五十七頁(yè),
37、共73頁(yè)。例:打印例:打印(d yn)半徑為半徑為110的圓的面積,如果面積超過(guò)的圓的面積,如果面積超過(guò)100,則不再打印,則不再打印(d yn)。 #include #define PI 3.14159main() int r; float area; for(r=1; r100.0) break; printf(area=%fn,area); printf(now, r=%dn,r); 第57頁(yè)/共73頁(yè)第五十八頁(yè),共73頁(yè)。注意:在嵌套循環(huán)中使用注意:在嵌套循環(huán)中使用break語(yǔ)句,它只語(yǔ)句,它只影響影響(yngxing)包含它的最內(nèi)層循環(huán),即包含它的最內(nèi)層循環(huán),即程序僅跳出包圍該程序僅
38、跳出包圍該break的那層循環(huán)。的那層循環(huán)。 例:編寫程序,輸出(shch)三角乘法表。 main( ) int i, j; for( i=1; i= 9; i+) for( j=1; ji ) break; printf(“%3d”, i*j ); printf(“n”); 運(yùn)行(ynxng)結(jié)果:1 2 4 3 6 9 4 8 12 165 10 15 20 256 12 18 24 30 367 14 21 28 35 42 498 16 24 32 40 48 56 649 18 27 36 45 54 63 72 81第58頁(yè)/共73頁(yè)第五十九頁(yè),共73頁(yè)。一般形式:一般形式: co
39、ntinue ;功能:結(jié)束循環(huán)體,進(jìn)入功能:結(jié)束循環(huán)體,進(jìn)入(jnr)下一個(gè)循環(huán)周期。下一個(gè)循環(huán)周期。 解釋:一旦執(zhí)行了解釋:一旦執(zhí)行了continue語(yǔ)句,程序就跳語(yǔ)句,程序就跳過(guò)循環(huán)體中位于該語(yǔ)句后的所有語(yǔ)句,過(guò)循環(huán)體中位于該語(yǔ)句后的所有語(yǔ)句, 提前結(jié)束本次提前結(jié)束本次(bn c)循環(huán)周期并開始下一個(gè)循環(huán)周期并開始下一個(gè) 循環(huán)周期。循環(huán)周期。二、continue語(yǔ)句(yj) 第59頁(yè)/共73頁(yè)第六十頁(yè),共73頁(yè)。例例6.6 用用/41-1/ 3+1/5-1/7+1/9 求求近似的值。近似的值。 直到直到(zhdo)最后一項(xiàng)的絕對(duì)值小于最后一項(xiàng)的絕對(duì)值小于10-6為止。為止。#include
40、 math.hmain() int s; float n , t , sum, pi; t=1; sum=0 ; n=1 ; s=1; while(fabs(t)=.000001) sum=sum+t; n=n+2; s= -s; t=s/n; pi=sum*4; printf(pi=%fn,pi);運(yùn)行(ynxng)結(jié)果:=3.141594第60頁(yè)/共73頁(yè)第六十一頁(yè),共73頁(yè)。第幾個(gè)月 小兔子對(duì)數(shù)(du sh) 中兔子對(duì)數(shù)(du sh) 老兔子對(duì)數(shù)(du sh) 總數(shù) 1 1 0 0 1 2 0 1 0 1 3 1 0 1 2 4 1 1 1 3 5 2 1 2 5. 例例6.7 斐波納契
41、數(shù)列斐波納契數(shù)列(shli):1,1,2,3,5,8第61頁(yè)/共73頁(yè)第六十二頁(yè),共73頁(yè)。例例6.7 求斐波納契數(shù)列求斐波納契數(shù)列(shli):1,1,2,3,5,8 的前的前20個(gè)數(shù)。個(gè)數(shù)。(該數(shù)列特點(diǎn):第(該數(shù)列特點(diǎn):第1、2兩個(gè)兩個(gè)(lin )數(shù)是數(shù)是1、1,從第,從第3個(gè)數(shù)個(gè)數(shù) 開始,該數(shù)是其前兩個(gè)開始,該數(shù)是其前兩個(gè)(lin )數(shù)之和。)數(shù)之和。)main() int f1=1, f2=1, i; for(i=1;i=10;i+) printf(%6d%6dn,f1,f2); f1=f1+f2; f2=f1+f2; 運(yùn)行(ynxng)結(jié)果: 1 1 2 3 5 8 13 21 34
42、 55 89 144 233 377 610 987 1597 2584 4181 6765 第62頁(yè)/共73頁(yè)第六十三頁(yè),共73頁(yè)。例例6.7 求斐波納契數(shù)列求斐波納契數(shù)列(shli):1,1,2,3,5,8 的前的前40個(gè)數(shù)。個(gè)數(shù)。main() long int f1=1, f2=1, i; for(i=1;i=20;i+) printf(%12ld %12ld,f1,f2); if(i%2= =0) printf(“n”); f1=f1+f2; f2=f1+f2; 運(yùn)行(ynxng)結(jié)果: 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 2584 4181 6765 第63頁(yè)/共73頁(yè)第六十四頁(yè),共73頁(yè)。例例6.8 判斷判斷M是否是否(sh fu)為素?cái)?shù)。為素?cái)?shù)。#includemain() int m, i ,k; scanf(%d,&m); k=sqrt(m); for(i=2; ik) printf(%d is a prime number.n,m); else printf(%d is not a prime number.n,m);素?cái)?shù)的定義素?cái)?shù)的定義(dngy):只能被:只能被1和它他本身整除的正和它他本身整除的正整數(shù)。整數(shù)。第64頁(yè)/共73頁(yè)第六十五頁(yè),共73頁(yè)。例例6.9 求出
溫馨提示
- 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ù)覽,若沒有圖紙預(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年加盟店鋪管理合同
- 2025年新型能源設(shè)備修理修配服務(wù)合同范本6篇
- 二零二五版城市更新改造拆遷安置房購(gòu)買服務(wù)協(xié)議6篇
- 二零二五年度房產(chǎn)貸款合同領(lǐng)取指南4篇
- 二零二五年度食品生產(chǎn)企業(yè)綠色食品采購(gòu)協(xié)議3篇
- 2025年度集裝箱碼頭信息化管理系統(tǒng)采購(gòu)合同4篇
- 二零二五版石油設(shè)備租賃與勘探開發(fā)合同2篇
- 2025年版項(xiàng)目部安全生產(chǎn)責(zé)任協(xié)議書執(zhí)行規(guī)范2篇
- 2025項(xiàng)目管理委托合同文本
- 2025年度智慧城市路燈節(jié)能改造工程合同范本4篇
- 2025年MEMS傳感器行業(yè)深度分析報(bào)告
- 《線控底盤技術(shù)》2024年課程標(biāo)準(zhǔn)(含課程思政設(shè)計(jì))
- 學(xué)校對(duì)口幫扶計(jì)劃
- 倉(cāng)庫(kù)倉(cāng)儲(chǔ)安全管理培訓(xùn)課件模板
- 風(fēng)力發(fā)電場(chǎng)運(yùn)行維護(hù)手冊(cè)
- 《3-6歲兒童學(xué)習(xí)與發(fā)展指南》專題培訓(xùn)
- 河道旅游開發(fā)合同
- 情人合同范例
- 建筑公司勞務(wù)合作協(xié)議書范本
- 安徽省合肥市2023-2024學(xué)年高一上學(xué)期物理期末試卷(含答案)
- 《基于杜邦分析法的公司盈利能力研究的國(guó)內(nèi)外文獻(xiàn)綜述》2700字
評(píng)論
0/150
提交評(píng)論