版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第二章第二章 C程序的基本結(jié)構(gòu)程序的基本結(jié)構(gòu)2/72第二章第二章 C程序的基本結(jié)構(gòu)程序的基本結(jié)構(gòu)n2.1 分支結(jié)構(gòu)分支結(jié)構(gòu)n2.2 關(guān)系運算和邏輯運算關(guān)系運算和邏輯運算n2.3 循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)n2.4 break和和continue語句語句n2.5 goto語句語句n2.6 經(jīng)典算法舉例經(jīng)典算法舉例3/722.1 分支結(jié)構(gòu)分支結(jié)構(gòu)n為什么需要分支結(jié)構(gòu)為什么需要分支結(jié)構(gòu)順序結(jié)構(gòu)只能解決一些簡單的問題,遇到需要順序結(jié)構(gòu)只能解決一些簡單的問題,遇到需要進(jìn)行進(jìn)行條件判斷條件判斷的問題,就必須采用分支結(jié)構(gòu)來的問題,就必須采用分支結(jié)構(gòu)來處理。處理。n例:例:q請輸出請輸出2個數(shù)中的較大的數(shù)個數(shù)中的較大的
2、數(shù)q 請編程求解分段函數(shù)請編程求解分段函數(shù):-1 x0y =4/722.1.1 單分支結(jié)構(gòu)單分支結(jié)構(gòu)n語法形式語法形式 if (表達(dá)式表達(dá)式) 語句語句;n執(zhí)行過程執(zhí)行過程q先計算表達(dá)式的值,若為真先計算表達(dá)式的值,若為真(非非0值值),則執(zhí)行其后,則執(zhí)行其后的語句;若值為的語句;若值為0,則繼續(xù)向下執(zhí)行其他語句,則繼續(xù)向下執(zhí)行其他語句q注意注意:語句可以是一條,也可以是多條:語句可以是一條,也可以是多條P真真A表達(dá)式表達(dá)式語句語句真真( (非非0)0)假假(0)(0)5/72n例例1、輸入一個字符,并輸出。其中有一個條、輸入一個字符,并輸出。其中有一個條件是如果該字符是小寫的英文字母,則需把
3、它件是如果該字符是小寫的英文字母,則需把它轉(zhuǎn)換成大寫字母再輸出。轉(zhuǎn)換成大寫字母再輸出。#include void main()char ch;ch = getchar();if (ch=a & ch=z)ch -= 32;putchar(ch);如果條件滿足后還如果條件滿足后還想再輸出該字母的想再輸出該字母的前導(dǎo)字符和后繼字前導(dǎo)字符和后繼字符怎么做?符怎么做?EG201.C6/72#include void main( ) int a, b, t; printf(“ input a, b: ”); scanf(“%d%d”, &a,&b); if (ab) t=a; a
4、=b; b=t; printf(“%d,%dn”, a, b);輸入輸入a , bt=aab?輸出輸出a , b真真假假 a=bb=tn例例2:輸入:輸入2個整數(shù),按由小到大的順序輸出個整數(shù),按由小到大的順序輸出EG202.C7/72n例例3、輸入三個整數(shù),把最大的輸出。、輸入三個整數(shù),把最大的輸出。#include void main( ) int a, b, c, max; printf(“ input a, b, c: ”); scanf(“%d%d%d”,&a, &b, &c); max = a; if (maxb) max = b; if (maxb?ab真真
5、假假ac?ac真真假假bc?bc真真假假n作業(yè):輸入作業(yè):輸入3個整數(shù),按由小到大的順序輸出個整數(shù),按由小到大的順序輸出9/722.1.2 雙分支結(jié)構(gòu)雙分支結(jié)構(gòu)n語法形式語法形式 if (表達(dá)式表達(dá)式) 語句語句1; else 語句語句2;n執(zhí)行過程執(zhí)行過程q先計算表達(dá)式的值,若為真先計算表達(dá)式的值,若為真(非非0值值),執(zhí)行,執(zhí)行if后的語后的語句句1;若為假;若為假(值為值為0),執(zhí)行,執(zhí)行else后的語句后的語句2P真真語句語句1語句語句2假假表達(dá)式表達(dá)式語句語句2 2真真( (非非0)0)假假(0)(0)語句語句1 110/72#include void main( ) int x,
6、y; printf(“ input x, y: ”); scanf(“%d%d”, &x, &y); if (x=y) printf(“max=%dn”, x); else printf(“max=%dn”, y); 輸入輸入x , yx=y?真真假假輸出輸出x輸出輸出yn例例4、輸入、輸入2個整數(shù),請輸出其中的較大的數(shù)個整數(shù),請輸出其中的較大的數(shù)EG204.C11/72#include void main( ) int x, y; printf(“ input x: ”); scanf(“%d”, &x); if (x=0) y=0; else y=x*x+1; pr
7、intf(“y=%dn”, y); 0 X=00 X0+1 X0Y=例例5、編程求解函數(shù):、編程求解函數(shù):EG205.C12/722.1.3 多分支結(jié)構(gòu)多分支結(jié)構(gòu)n語法形式語法形式if (表達(dá)式表達(dá)式1) 語句語句1;else if (表達(dá)式表達(dá)式2) 語句語句2;else if (表達(dá)式表達(dá)式3) 語句語句3;else if (表達(dá)式表達(dá)式n) 語句語句n;else 語句語句n+1;n執(zhí)行過程執(zhí)行過程q按順序求各表達(dá)式的值。按順序求各表達(dá)式的值。如果某一表達(dá)式的值為如果某一表達(dá)式的值為真(非真(非0),那么執(zhí)行),那么執(zhí)行其后相應(yīng)的語句,執(zhí)行其后相應(yīng)的語句,執(zhí)行完后整個完后整個if語句結(jié)束,
8、語句結(jié)束,其余語句則不被執(zhí)行;其余語句則不被執(zhí)行;如果沒有一個表達(dá)式的如果沒有一個表達(dá)式的值為真,那么執(zhí)行最后值為真,那么執(zhí)行最后的的else語句。語句。最后的最后的else部分可有可無。部分可有可無。13/72n例例6、編程求解函數(shù)、編程求解函數(shù):-e-e2x+12x+1+3 x+3 x-2-22x-1 -2x32x-1 -2x3Y=3log3log1010(3x) x(3x) x3 3#include #includevoid main( ) double x,y; printf(Input x:); scanf(%lf,&x); if (x=-2 & x3)可以嗎?可以嗎
9、?EG206.C14/722.1.4 if語句的嵌套語句的嵌套n概念:指概念:指if語句的語句的if塊或塊或else塊中,又包含一塊中,又包含一個個if語句語句(可以是各種形式的可以是各種形式的)n作用:對復(fù)雜條件進(jìn)行判斷,實現(xiàn)多分支選擇作用:對復(fù)雜條件進(jìn)行判斷,實現(xiàn)多分支選擇n形式:多種多樣形式:多種多樣1. if (表達(dá)式表達(dá)式1) if (表達(dá)式表達(dá)式2) 語句語句2. if (表達(dá)式表達(dá)式1) 語句語句1 else if (表達(dá)式表達(dá)式2) 語句語句23. if (表達(dá)式表達(dá)式1) 語句語句1 else if (表達(dá)式表達(dá)式2) 語句語句2 else 語句語句34. if (表達(dá)式表達(dá)
10、式1) if (表達(dá)式表達(dá)式2) 語句語句1 else 語句語句2二義性?二義性?15/72n規(guī)定:規(guī)定:else總是與它前面最近的且未曾配對的總是與它前面最近的且未曾配對的if配對。配對。(1) if (表達(dá)式表達(dá)式1) if (表達(dá)式表達(dá)式2) 語句語句1; else 語句語句2; (2) if (表達(dá)式表達(dá)式1) if (表達(dá)式表達(dá)式2) 語句語句1; else 語句語句2; n對第對第4種形式可以有兩種理解方式種形式可以有兩種理解方式:要想實現(xiàn)這種方要想實現(xiàn)這種方式應(yīng)該怎么做式應(yīng)該怎么做 if (表達(dá)式表達(dá)式1) if (表達(dá)式表達(dá)式2) 語句語句1; else 語句語句2; 16/7
11、2n例例 編程求解函數(shù):編程求解函數(shù):-1 0 1(x0)y=程序程序1:if (x=0) if (x0) y=1; else y=0;else y=-1;程序程序3:y=-1;if (x!=0) if (x0) y=1; else y=0;改正程序改正程序3:y=-1;if (x!=0) if (x0) y=1; else y=0;17/72n關(guān)于關(guān)于ifif語句的說明:語句的說明:q表達(dá)式一般為關(guān)系表達(dá)式或邏輯表達(dá)式。但在表達(dá)式一般為關(guān)系表達(dá)式或邏輯表達(dá)式。但在C C語言中語言中它也它也可以是任意的數(shù)值表達(dá)式可以是任意的數(shù)值表達(dá)式。q表達(dá)式后面不能有任何標(biāo)點符號表達(dá)式后面不能有任何標(biāo)點符號
12、!每個語句都要以每個語句都要以“;”結(jié)束結(jié)束。qelseelse只能與只能與ifif配對使用配對使用。僅。僅elseelse本身不能單獨作為一個本身不能單獨作為一個語句使用。語句使用。if(3)if(3) n=1; n=1;if (a)if (a) printf(%d printf(%d, a);, a);if(n=3-3)if(n=3-3) x=1; x=1;elseelse x=-1; x=-1;if(x5);if(x5); y=x; y=x;elseelse y=2 y=2* *x-1;x-1;if(x5)if(x5) ; ; y=x; y=x;elseelse y=2 y=2* *x-
13、1;x-1;將出現(xiàn)語法錯誤將出現(xiàn)語法錯誤18/72n關(guān)于關(guān)于ifif語句的說明語句的說明( (續(xù)續(xù)) ):qif后的語句可以是一個語句也可以是若干個語句,這時后的語句可以是一個語句也可以是若干個語句,這時要用花括號括起來構(gòu)成要用花括號括起來構(gòu)成復(fù)合語句復(fù)合語句。q注:復(fù)合語句的花括號后注:復(fù)合語句的花括號后不能再寫分號不能再寫分號,復(fù)合語句在語,復(fù)合語句在語法上是一個整體,相當(dāng)于一個語句。法上是一個整體,相當(dāng)于一個語句。例:例: if (ab) t=a; a=b; b=t; 19/722.1.5 條件運算符條件運算符n條件運算符:條件運算符: ? : (C中唯一的三目運算符中唯一的三目運算符)
14、n優(yōu)先級:僅高于賦值運算符優(yōu)先級:僅高于賦值運算符n結(jié)合性:右結(jié)合結(jié)合性:右結(jié)合n條件表達(dá)式的形式:條件表達(dá)式的形式:表達(dá)式表達(dá)式1 ? 表達(dá)式表達(dá)式2 : 表達(dá)式表達(dá)式3n執(zhí)行過程執(zhí)行過程q首先求表達(dá)式首先求表達(dá)式1的值,若為真(非的值,若為真(非0),則求表達(dá)式),則求表達(dá)式2的值,且整個表達(dá)式的值為表達(dá)式的值,且整個表達(dá)式的值為表達(dá)式2的值;若表達(dá)的值;若表達(dá)式式1為假(為假(0),則求表達(dá)式),則求表達(dá)式3的值,且整個表達(dá)式的值,且整個表達(dá)式的值為表達(dá)式的值為表達(dá)式3的值。的值。20/72n說明說明q條件表達(dá)式不能完全取代條件表達(dá)式不能完全取代if語句,只有在語句,只有在if語句中內(nèi)語
15、句中內(nèi)嵌語句為賦值語句、且兩個分支都給同一個變量賦嵌語句為賦值語句、且兩個分支都給同一個變量賦值時才能代替值時才能代替if語句。語句。q條件表達(dá)式中,表達(dá)式條件表達(dá)式中,表達(dá)式1、表達(dá)式、表達(dá)式2和表達(dá)式和表達(dá)式3的類的類型可以不同。若表達(dá)式型可以不同。若表達(dá)式2和表達(dá)式和表達(dá)式3類型不同,則整類型不同,則整個條件表達(dá)式的值應(yīng)為二者中較高的類型。個條件表達(dá)式的值應(yīng)為二者中較高的類型。例:例:x= ab? a:b+1;x= (ab)? a:(b+1);ab? a : cd? c : dab? a : (cd? c : d)if (ab) max=a;else max=b;max = ab ? a
16、 : b;x = 21 ? 1 : 1.5x = 21 ? 1 : 1.5值為值為1.01.0 x = 1 ? a : 10 x = 1 ? a : 10 值為值為979721/72n例例7、輸入一個字符,如果是大寫字母,轉(zhuǎn)換、輸入一個字符,如果是大寫字母,轉(zhuǎn)換為小寫,如果不是則不轉(zhuǎn)換。輸出最后得到的為小寫,如果不是則不轉(zhuǎn)換。輸出最后得到的字符。字符。#includevoid main( ) char ch; scanf(%c, &ch); ch= (ch=A&ch=Z) ? (ch+32) : ch; printf(“%cn, ch);EG207.C22/722.1.6 sw
17、itch語句語句n請將輸入的百分制成績,轉(zhuǎn)換成五分制成績輸請將輸入的百分制成績,轉(zhuǎn)換成五分制成績輸出,轉(zhuǎn)換標(biāo)準(zhǔn)如下:出,轉(zhuǎn)換標(biāo)準(zhǔn)如下:grade = A 90 s 100B 80 s 90C 70 s 80D 60 s 70E 0 s 60n對于這種類型的問題,需要討論的情況比較多,對于這種類型的問題,需要討論的情況比較多,如果用如果用if嵌套的層次會比較多,程序可讀性不嵌套的層次會比較多,程序可讀性不好,這時通常會使用多分支選擇語句好,這時通常會使用多分支選擇語句switch。23/72n語法格式語法格式switch ( 表達(dá)式表達(dá)式 ) case 常量表達(dá)式常量表達(dá)式1 : 語句語句1;
18、case 常量表達(dá)式常量表達(dá)式2 : 語句語句2; : : : case 常量表達(dá)式常量表達(dá)式n : 語句語句n; default : 語句語句n+1; n執(zhí)行過程執(zhí)行過程q先計算表達(dá)式的值,測試該值是否與某常量表達(dá)式的值相同先計算表達(dá)式的值,測試該值是否與某常量表達(dá)式的值相同q若有相同者,流程轉(zhuǎn)向其后面的語句執(zhí)行若有相同者,流程轉(zhuǎn)向其后面的語句執(zhí)行q若無,再看有沒有若無,再看有沒有default部分:若有部分:若有default,則執(zhí)行其后面的語句;,則執(zhí)行其后面的語句;若無若無default,則,則switch語句什么也不做,流程轉(zhuǎn)向其后繼語句。語句什么也不做,流程轉(zhuǎn)向其后繼語句。24/7
19、2n例例8:#include void main() int k;scanf(“%d”, &k);switch(k)case 1: printf(“Executing case 1!n”);case 2: printf(“Executing case 2!n”);case 3: printf(“Executing case 3!n”);default: printf(“Executing default!n”);if (k=1) printf(“Executing case 1!n”); else if (k=2) printf(“Executing case 2!n”); else
20、if (k=3) printf(“Executing case 3!n”); else printf(“Executing default!n”); 25/72#include void main() int k;scanf(“%d”, &k);switch(k)case 1: printf(“Executing case 1!n”); break;case 2: printf(“Executing case 2!n”); break;case 3: printf(“Executing case 3!n”); break;default: printf(“Executing defau
21、lt!n”); break;EG208.C26/72n說明說明qswitch后的表達(dá)式一般多為后的表達(dá)式一般多為整型或字符型整型或字符型表達(dá)式表達(dá)式q各個各個case后常量表達(dá)式的值必須互不相同后常量表達(dá)式的值必須互不相同q各個各個case和和default的出現(xiàn)次序不影響執(zhí)行結(jié)果的出現(xiàn)次序不影響執(zhí)行結(jié)果;qcase后的語句為復(fù)合語句時可省略花括號后的語句為復(fù)合語句時可省略花括號 qcase后常量表達(dá)式只起語句標(biāo)號的作用,每個后常量表達(dá)式只起語句標(biāo)號的作用,每個case之后通常都有一個之后通常都有一個break,使流程跳出,使流程跳出switch語句語句q多個多個case可以共用一組執(zhí)行語句可
22、以共用一組執(zhí)行語句qswitch語句可以嵌套,但有多層語句可以嵌套,但有多層switch語句時,語句時,break只能退出本層的只能退出本層的switch語句體語句體case 6 : case 7 : printf(Resetn); break;但不能寫成:但不能寫成:case 6,7: .27/72#includevoid main( ) int grade; printf(“input grade:”); scanf(“%d”, &grade); switch(grade/10) case 10: case 9: printf(“grade is An”); break; case
23、 8: printf(“grade is Bn”); break; case 7: printf(“grade is Cn”); break; case 6: printf(“grade is Dn”); break; default: printf(“grade is En”); grade = A 90 s 100B 80 s 90C 70 s 80D 60 s 70E 0 s 60EG209.C例例9、將輸入的百分制成績,轉(zhuǎn)換成五分制成績輸出、將輸入的百分制成績,轉(zhuǎn)換成五分制成績輸出28/722.2 關(guān)系運算和邏輯運算關(guān)系運算和邏輯運算n關(guān)系運算符:關(guān)系運算符: 、=、 x+3; a =
24、 ? (2) a = y !=1 = x;a = ?1029/72n例:例: ca+b 等價于等價于 c(a+b) ab=c 等價于等價于 (ab)=c a=bc 等價于等價于 a=(bc 等價于等價于 a=(bc) n注意注意:q字符數(shù)據(jù)按其字符數(shù)據(jù)按其ASCII碼值進(jìn)行比較,碼值進(jìn)行比較,abq避免避免2個實數(shù)作個實數(shù)作 = 或或 != 的比較的比較q允許寫成允許寫成3x= -1 & x=a & ch=a & ch=A & chb)&(n=cd) c = (ab) & m+; d = (ab) | +n;m=0,n=1m=1,n=1m=1,n
25、=134/722.3 循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)n請編程求解以下請編程求解以下2個問題:個問題:q請在屏幕上輸出請在屏幕上輸出10行星號,每行星號由行星號,每行星號由8個個*組成。組成。q請輸出請輸出110這十個整數(shù)這十個整數(shù)。#includevoid main( ) printf(*n); printf(*n); printf(*n);#includevoid main( ) printf(“%d ”, 1); printf(“%d ”, 2); printf(“%d ”, 10);使每個語句形式上保持一樣,使每個語句形式上保持一樣,改為:改為:int i = 1;printf(“%d ”, i);
26、i+;printf(“%d ”, i); i+; printf(“%d ”, i); i+;35/72nC語言有三種循環(huán)語句:語言有三種循環(huán)語句:qwhile語句:當(dāng)型循環(huán)語句:當(dāng)型循環(huán)qdowhile語句:直到型循環(huán)語句:直到型循環(huán)qfor語句:功能強大,經(jīng)常使用語句:功能強大,經(jīng)常使用nwhile循環(huán)循環(huán)語法形式:語法形式:while(表達(dá)式表達(dá)式) 語句;語句;執(zhí)行過程:見圖執(zhí)行過程:見圖真真(非非0)表達(dá)式成立嗎表達(dá)式成立嗎?語句語句假假(0)36/72n用循環(huán)怎么實現(xiàn)上述兩個程序?用循環(huán)怎么實現(xiàn)上述兩個程序?#includevoid main( ) int i;i = 1; whil
27、e(i=10)printf(*n);i+;#includevoid main( ) printf(*n); printf(*n); printf(*n);37/72#includevoid main( ) int i;i = 1;while(i=10)printf(“%d ”, i);i+;#includevoid main( ) printf(“%d“, 1); printf(“%d“, 2); printf(“%d“, 10);如果輸出如果輸出1100呢?呢?怎么改?怎么改?38/72n使用使用while語句要注意:語句要注意:q表達(dá)式中使用的循環(huán)控制表達(dá)式中使用的循環(huán)控制變量必須賦初值變
28、量必須賦初值 q表達(dá)式必須用表達(dá)式必須用( ) 括起來括起來q循環(huán)體為多條語句時循環(huán)體為多條語句時, 必必須用須用 把它們括起來把它們括起來q循環(huán)體中必須有使循環(huán)趨循環(huán)體中必須有使循環(huán)趨向結(jié)束的語句向結(jié)束的語句 #includevoid main( ) int i;i = 1; while(i=10)printf(*n);i+;39/72n例例10、求、求123100的和。的和。#include void main ( ) int i , sum; sum=0; i=1; while ( i=100 ) sum=sum+i ; i+; printf(“sum=%dn”, sum);變量變量i
29、i一方面用來一方面用來控制循環(huán)次數(shù)控制循環(huán)次數(shù), , 同同時又作為求和運算時又作為求和運算中的一個運算對象中的一個運算對象n計算計算1+2+3+n(n為為任意正整數(shù))和。任意正整數(shù))和。n計算計算1+3+5+n(n為為奇數(shù))的和。奇數(shù))的和。EG210.C40/72n例例11、求某個班英語成績的平均分,該班學(xué)生人、求某個班英語成績的平均分,該班學(xué)生人數(shù)和每個學(xué)生的成績由鍵盤輸入。數(shù)和每個學(xué)生的成績由鍵盤輸入。#include void main ( ) int i , n ; float s , sum , ave ; sum=0; i=1; scanf(“%d”, &n); whil
30、e (i=n) scanf(“%f ”, &s); sum=sum+s ; i+ ; ave=sum/n ; printf(“ave=%6.2fn”, ave);EG211.C41/72ndo-while循環(huán)循環(huán)q語法形式:語法形式:do語句語句;while(表達(dá)式表達(dá)式);q執(zhí)行過程:見圖。執(zhí)行過程:見圖。q注意事項:同注意事項:同while語句語句表達(dá)式表達(dá)式0(假假)非非0(真真)42/72#include void main ( ) int i , sum; sum=0; i=1; do sum=sum+i; i+; while (i=100) ; printf(“sum=%d
31、n”, sum);EG212.Cn例例12、用、用do-while語句實現(xiàn)求語句實現(xiàn)求1100 的和。的和。43/72nwhile循環(huán)和循環(huán)和do-while循環(huán)的比較循環(huán)的比較 while do-whilewhile do-while(1)(1)先判斷條件再執(zhí)行循環(huán)體先判斷條件再執(zhí)行循環(huán)體 (1)(1)先執(zhí)行循環(huán)體再判斷條件先執(zhí)行循環(huán)體再判斷條件(2)(2)循環(huán)體可能一次也不執(zhí)行循環(huán)體可能一次也不執(zhí)行 (2)(2)至少執(zhí)行一次循環(huán)體至少執(zhí)行一次循環(huán)體void main( ) int sum=0 , i ; scanf(“%d”, &i ); while (i=10) sum=sum+
32、i ; i+ ; printf(”%dn”,sum);void main( ) int sum=0 , i ; scanf(“%d”, &i ); do sum=sum+i ; i+ ; while (i=10) ; printf(”%dn”,sum);假設(shè)輸入假設(shè)輸入i的值為的值為11,則輸出則輸出sum=?44/72nfor循環(huán)循環(huán)q語法形式語法形式 for(表達(dá)式表達(dá)式1; 表達(dá)式表達(dá)式2; 表達(dá)式表達(dá)式3)語句語句;q執(zhí)行過程執(zhí)行過程(1) 計算表達(dá)式計算表達(dá)式1 (只執(zhí)行一只執(zhí)行一次次)(2) 計算表達(dá)式計算表達(dá)式2,若值為真,若值為真則執(zhí)行循環(huán)體,再執(zhí)行第則執(zhí)行循環(huán)體,再執(zhí)
33、行第(3)步;若值為假則結(jié)束步;若值為假則結(jié)束循環(huán)循環(huán)(3) 計算表達(dá)式計算表達(dá)式3,再重復(fù)執(zhí),再重復(fù)執(zhí)行第行第(2)步步計算表達(dá)式計算表達(dá)式1循環(huán)體語句循環(huán)體語句表達(dá)式表達(dá)式3表達(dá)式表達(dá)式2假(假(0)真(非真(非0)45/72說明:說明:、for語句的表達(dá)式可以缺省,但語句的表達(dá)式可以缺省,但兩個分號不能缺省兩個分號不能缺??;、若在、若在for語句之前已經(jīng)對循環(huán)控制變量賦初值,則表達(dá)式語句之前已經(jīng)對循環(huán)控制變量賦初值,則表達(dá)式1可以缺??;可以缺省;i=1;for ( ; i=100; i+) sum=sum+i;for (i=1; i100) break; sum=sum+i; 46/72
34、、表達(dá)式、表達(dá)式3也可以缺省,但應(yīng)設(shè)法修改也可以缺省,但應(yīng)設(shè)法修改循環(huán)控制變量,保證程序正常結(jié)束循環(huán)控制變量,保證程序正常結(jié)束for (i=1; i=100; ) sum=sum+i; i+; 、可以同時省略表達(dá)式、可以同時省略表達(dá)式1和表達(dá)式和表達(dá)式3,即只給循環(huán)條件。,即只給循環(huán)條件。i=0;for ( ; i=100; ) sum=sum+i; i+; 此時,等同于此時,等同于while語句。語句。、3個表達(dá)式都可以省略,如:個表達(dá)式都可以省略,如:for ( ; ; ) 循環(huán)體;循環(huán)體;while (1) 循環(huán)體;循環(huán)體;將無終止的執(zhí)行循環(huán)。從語法上講是正確的,但一般沒將無終止的執(zhí)行循
35、環(huán)。從語法上講是正確的,但一般沒有實際意義。有實際意義。47/72、for語句中的表達(dá)式語句中的表達(dá)式1和表達(dá)式和表達(dá)式3可以由可以由一個或多個賦值表一個或多個賦值表達(dá)式達(dá)式組成,當(dāng)為多個表達(dá)式時,各表達(dá)式之間要用逗號運算組成,當(dāng)為多個表達(dá)式時,各表達(dá)式之間要用逗號運算符(即符(即組成逗號表達(dá)式組成逗號表達(dá)式)。)。for (sum=0, i=1; i=100; i+) sum=sum+i;for (i=0, j=100; i=j; i+, j-) k=i+j;printf(i=%d,j=%d,k=%dn,i, j, k);48/72while和和forwhile(表達(dá)式表達(dá)式) 語句;語句;
36、for(exp1; exp2; exp3)語句語句;真真(非非0)表達(dá)式表達(dá)式語句語句假假(0)計算計算exp1語句語句exp3exp2假假(0)真真(非非0)exp1;while(exp2) 語句語句;exp3;49/72sum=0; i=1;while(i=100 ) sum=sum+i ; i+ ; sum=0; for ( i=1 ; i=100 ; i+) sum=sum+i;例、將例、將1 1100100求和的求和的whilewhile循環(huán)轉(zhuǎn)換為用循環(huán)轉(zhuǎn)換為用forfor循環(huán)實循環(huán)實現(xiàn)現(xiàn)50/72例例13、求正整數(shù)、求正整數(shù)n n的階乘的階乘n!n!,n n由鍵盤輸入。由鍵盤輸入。
37、#include void main( ) int n, i ; long fact; printf(“input n:”); scanf(“%d”, &n); fact=1; for ( i=1 ; i=n ; i+ ) fact=fact*i; printf(“%ldn”, fact);EG213.C51/72n循環(huán)的嵌套循環(huán)的嵌套一個循環(huán)體內(nèi)又包含另一個一個循環(huán)體內(nèi)又包含另一個完整的完整的循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu),稱為,稱為循環(huán)循環(huán)嵌套嵌套。內(nèi)層的循環(huán)中還可以嵌套循環(huán),構(gòu)成。內(nèi)層的循環(huán)中還可以嵌套循環(huán),構(gòu)成多重循環(huán)多重循環(huán)。while ( ) while ( ) for ( ; ; )
38、for ( ; ; ) do do while ( ); while ( );while ( ) for ( ; ; ) for ( ; ; ) do while( ); while ( ) do while( ); 52/72例例14、輸出如圖所示的矩形:輸出如圖所示的矩形:* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *#include void main( ) printf(*n); printf(*n); printf(*n); printf(*n);#include void main(
39、 ) int i=1, j ; while (i=4) j=1; while ( j=5 ) putchar(*); j+; putchar(n); i+; 內(nèi)外層循環(huán)的控內(nèi)外層循環(huán)的控制變量不能重名制變量不能重名EG214_1.C53/72#include main( ) int i , j ; i=1; while (i=4) for (j=1; j=5;j+) putchar(*); putchar(n); i+; #include main( ) int i , j ; for ( i=1; i=4; i+) for (j=1; j=5; j+) putchar(*); putchar
40、(n); 例、上述程序用例、上述程序用forfor實現(xiàn)。實現(xiàn)。* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *EG214_3.CEG214_2.C54/72qC C語言中的三種循環(huán)結(jié)構(gòu),一般情況下可以相互代替語言中的三種循環(huán)結(jié)構(gòu),一般情況下可以相互代替q用用whilewhile和和do-whiledo-while時,循環(huán)變量的初始化應(yīng)在時,循環(huán)變量的初始化應(yīng)在whilewhile和和do-whiledo-while之前完成;而之前完成;而forfor語句一般在語句一般在表達(dá)式表達(dá)式1 1中實中實現(xiàn)
41、循環(huán)變量的初始化現(xiàn)循環(huán)變量的初始化q當(dāng)當(dāng)循環(huán)次數(shù)及控制條件循環(huán)次數(shù)及控制條件要要在程序運行過程中確定在程序運行過程中確定時,時,選用選用while或或do-while語句;語句;q在在初值、增量及控制條件明顯初值、增量及控制條件明顯,或,或循環(huán)次數(shù)已經(jīng)給定循環(huán)次數(shù)已經(jīng)給定的情況下,選用的情況下,選用for語句;語句;q在循環(huán)的執(zhí)行過程中,應(yīng)在循環(huán)的執(zhí)行過程中,應(yīng)不斷的改變循環(huán)控制表達(dá)式不斷的改變循環(huán)控制表達(dá)式的值的值,以便逐步形成使它為,以便逐步形成使它為0 0的條件,否則將可能出的條件,否則將可能出現(xiàn)死循環(huán)現(xiàn)死循環(huán)幾種循環(huán)的比較:幾種循環(huán)的比較:55/72幾種循環(huán)的比較:幾種循環(huán)的比較:q三
42、種循環(huán)可以相互嵌套,形成多重循環(huán),外循環(huán)可以三種循環(huán)可以相互嵌套,形成多重循環(huán),外循環(huán)可以包含多個或多重內(nèi)循環(huán),包含多個或多重內(nèi)循環(huán),循環(huán)之間可以并列但不能相循環(huán)之間可以并列但不能相交交,并列的循環(huán)控制變量可以同名,但嵌套的循環(huán)控并列的循環(huán)控制變量可以同名,但嵌套的循環(huán)控制變量不能同名制變量不能同名q不允許不允許用其它的控制語句用其它的控制語句把程序流程從循環(huán)體外轉(zhuǎn)入把程序流程從循環(huán)體外轉(zhuǎn)入循環(huán)體內(nèi)循環(huán)體內(nèi),但必要時可以用,但必要時可以用breakbreak、gotogoto等語句把流等語句把流程從循環(huán)體內(nèi)轉(zhuǎn)到循環(huán)體外。程從循環(huán)體內(nèi)轉(zhuǎn)到循環(huán)體外。56/72nbreakbreak語句語句q格式:
43、格式: break;q功能:中止當(dāng)前功能:中止當(dāng)前循環(huán)循環(huán)語句或語句或switchswitch語句的執(zhí)行語句的執(zhí)行q說明:說明: n若是多重循環(huán),若是多重循環(huán),breakbreak只能使流程跳出離只能使流程跳出離breakbreak最近的一層;最近的一層;nbreakbreak只用于只用于switchswitch語句和循環(huán)語句。語句和循環(huán)語句。2.4 break語句和語句和continue語句語句57/72例例15、計算、計算 r=1r=1到到 r=10r=10時的圓面積,直到面積時的圓面積,直到面積大于大于100100為止為止#include void main( ) float area;
44、 int r; for (r =1; r 100) break; printf(%6.2fn, area); 輸出結(jié)果輸出結(jié)果: : 3.14 3.14 12.56 12.56 28.26 28.26 50.24 50.24 78.50 78.50while ( ) break; .EG215.C58/72ncontinuecontinue語句語句q格式:格式: continue;q功能:功能:提前結(jié)束本次循環(huán)體的執(zhí)行提前結(jié)束本次循環(huán)體的執(zhí)行(不再執(zhí)行循環(huán)體(不再執(zhí)行循環(huán)體中中continuecontinue后面的語句),后面的語句),接著進(jìn)行下一次是否執(zhí)行接著進(jìn)行下一次是否執(zhí)行循環(huán)的判定循環(huán)
45、的判定q說明:說明:ncontinuecontinue語句只能用于語句只能用于循環(huán)語句循環(huán)語句中,它是一種具有中,它是一種具有特殊功能的轉(zhuǎn)移語句;特殊功能的轉(zhuǎn)移語句;ncontinuecontinue與與breakbreak不同:不同:continuecontinue語句只結(jié)束本次循語句只結(jié)束本次循環(huán)環(huán),而不是終止整個循環(huán)的執(zhí)行;而,而不是終止整個循環(huán)的執(zhí)行;而breakbreak語句則結(jié)語句則結(jié)束整個循環(huán)束整個循環(huán),不再判斷循環(huán)條件是否成立。,不再判斷循環(huán)條件是否成立。59/72例例16、輸入、輸入30個字符,統(tǒng)計其中數(shù)字字符的個數(shù)。個字符,統(tǒng)計其中數(shù)字字符的個數(shù)。 #include voi
46、d main( ) int i, sum=0; char ch; for (i=1; i=30; i+) ch=getchar( ); if ( ch9 ) continue; sum+; printf(%dn, sum);while ( ) continue; .EG216.C60/72例例17、把、把1010到到2020之間能被之間能被3 3整除的數(shù)輸出整除的數(shù)輸出#include void main( ) int n; for (n=10; n=20; n+) if (n%3 != 0) continue; printf(%d , n); 12 15 1812 15 18EG217.C6
47、1/72判斷判斷m m是否是素數(shù)可以讓是否是素數(shù)可以讓m m被被2 2、3 3、4 4 去除,若去除,若 能被其中的任何一個整數(shù)整除,則證明不是素數(shù);相反,能被其中的任何一個整數(shù)整除,則證明不是素數(shù);相反,若不能被其中的任何一個整數(shù)整除,則證明是素數(shù)。若不能被其中的任何一個整數(shù)整除,則證明是素數(shù)。m例例18、輸入一個大于、輸入一個大于3的正整數(shù),判斷該數(shù)是否的正整數(shù),判斷該數(shù)是否為素數(shù)為素數(shù)62/72#include #include void main( ) int m , i , k ; scanf (%d , &m ); k = sqrt ( m+1 ) ; for ( i=2;
48、 i = k ; i+) if ( m % i =0) break; if ( ) printf ( %d is a prime numbern , m ) ; else printf ( %d is not a prime numbern , m ) ;i = k+1EG218_1.C63/72例、如果要打印例、如果要打印3 3100100之間的全部素數(shù),怎么做?之間的全部素數(shù),怎么做?for (m=3; m=100; m+=2)k=sqrt(m);for (i=2; i=k; i+) if (m%i=0) break;if (i= k+1) printf(%-5d,m);EG218_2.C
49、64/72ngotogoto語句語句qgotogoto語句是一種使程序的流程無條件轉(zhuǎn)移的語句語句是一種使程序的流程無條件轉(zhuǎn)移的語句n一般形式為:一般形式為:gotogoto 語句標(biāo)號;語句標(biāo)號;q語句標(biāo)號是由用戶自行定義的標(biāo)識符(由字母、數(shù)字、語句標(biāo)號是由用戶自行定義的標(biāo)識符(由字母、數(shù)字、下劃線組成,且第一個字符必須為字母或下劃線),下劃線組成,且第一個字符必須為字母或下劃線),不能用整數(shù)來做標(biāo)號。不能用整數(shù)來做標(biāo)號。 例如:例如:gotogoto label_1; goto label_1; goto 123; 123;qgotogoto 語句的功能是無條件地跳轉(zhuǎn)到語句標(biāo)號所指定的語句的功
50、能是無條件地跳轉(zhuǎn)到語句標(biāo)號所指定的本函數(shù)內(nèi)的那條語句。本函數(shù)內(nèi)的那條語句。2.5 goto語句語句65/72例例19、用、用ifif語句和語句和gotogoto語句構(gòu)成循環(huán),求語句構(gòu)成循環(huán),求1 1100100的和的和#include void main()int i, sum;i=1; sum=0;loop: if (i=100) sum=sum+i; i+; goto loop; printf (“sum=%dn”, sum);EG219.C66/72例例20、輸出、輸出*組成的直角三角形組成的直角三角形 *#include void main( ) int i , j ; for( i=
51、1; i=4; i+) for (j=1; ; j+) putchar(*); putchar(n); 特點特點: : 第第i i行有行有i i個星號個星號2.6 經(jīng)典算法舉例經(jīng)典算法舉例EG220.Cj=i67/72例例21、 求求Fibonacci數(shù)列數(shù)列1 , 1 , 2 , 3 , 5 , 8 , 的前的前20個數(shù)個數(shù) #include void main( ) int i , f1 , f2 , f3; f1=f2=1; printf(“%8d%8d”, f1 , f2); for ( i=3 ; i=20 ; i+ ) f3=f1+f2; f1=f2; f2=f3; printf(
52、“%8d”, f3); if ( i%4=0) putchar(n); 分析數(shù)列的規(guī)律分析數(shù)列的規(guī)律: 從第從第3個數(shù)開始,每個數(shù)個數(shù)開始,每個數(shù)是其前兩個數(shù)之和是其前兩個數(shù)之和輸出結(jié)果輸出結(jié)果: 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765EG221.C68/72例例22、猴子吃桃問題:猴子第一天摘下若干個桃子,當(dāng)即吃、猴子吃桃問題:猴子第一天摘下若干個桃子,當(dāng)即吃了一半,還不過癮,又多吃了一個,第二天早上又將剩下了一半,還不過癮,又多吃了一個,第二天早上又將剩下的桃子吃掉一半,又多吃了一個。以后每天早上
53、都吃了前的桃子吃掉一半,又多吃了一個。以后每天早上都吃了前一天剩下的一半零一個。到第一天剩下的一半零一個。到第1010天早上想再吃時,只剩下天早上想再吃時,只剩下一個桃子了。求第一天共摘了多少桃子一個桃子了。求第一天共摘了多少桃子? ?q分析分析: : 假設(shè)第假設(shè)第1 1天摘了天摘了x1x1個桃子,第個桃子,第1 1天吃了天吃了x1/2+1x1/2+1個,個,則剩了則剩了x1/2-1x1/2-1個個, , 如果用如果用x2x2表示剩下的桃子數(shù)表示剩下的桃子數(shù)( (即即x1/2-x1/2-1=x2)1=x2),則,則x1=(x2+1)x1=(x2+1)* *2 2。已知第。已知第1010天只有一個桃子,可天只有一個桃子,可以通過這個公式
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度生態(tài)園區(qū)場地租賃合同標(biāo)準(zhǔn)范本6篇
- 二零二五年新能源發(fā)電設(shè)施建設(shè)泥工勞務(wù)合同3篇
- 二零二五版海上貨物運輸合同適用范圍與船舶代理服務(wù)合同3篇
- 二零二五年度環(huán)境安全檢測技術(shù)服務(wù)合同2篇
- 二零二五年度防火門銷售、推廣及市場拓展合同3篇
- 二零二五版智慧城市基礎(chǔ)設(shè)施建設(shè)項目施工合同6篇
- 二零二五版新材料研發(fā)中心與實驗員勞務(wù)合同2篇
- 二零二五年度游戲運營合同3篇
- 二零二五版醫(yī)療器械貼牌研發(fā)及銷售合同3篇
- 二零二五版304不銹鋼建筑結(jié)構(gòu)材料采購合同2篇
- 品質(zhì)經(jīng)理工作總結(jié)
- 供電搶修述職報告
- 集成電路設(shè)計工藝節(jié)點演進(jìn)趨勢
- 新型電力系統(tǒng)簡介演示
- 特種設(shè)備行業(yè)團(tuán)隊建設(shè)工作方案
- 眼內(nèi)炎患者護(hù)理查房課件
- 肯德基經(jīng)營策略分析報告總結(jié)
- 買賣合同簽訂和履行風(fēng)險控制
- 中央空調(diào)現(xiàn)場施工技術(shù)總結(jié)(附圖)
- 水質(zhì)-濁度的測定原始記錄
- 數(shù)字美的智慧工業(yè)白皮書-2023.09
評論
0/150
提交評論