C語(yǔ)言程序設(shè)計(jì)課件-第3章結(jié)構(gòu)化程序設(shè)計(jì)的三種基本結(jié)構(gòu)_第1頁(yè)
C語(yǔ)言程序設(shè)計(jì)課件-第3章結(jié)構(gòu)化程序設(shè)計(jì)的三種基本結(jié)構(gòu)_第2頁(yè)
C語(yǔ)言程序設(shè)計(jì)課件-第3章結(jié)構(gòu)化程序設(shè)計(jì)的三種基本結(jié)構(gòu)_第3頁(yè)
C語(yǔ)言程序設(shè)計(jì)課件-第3章結(jié)構(gòu)化程序設(shè)計(jì)的三種基本結(jié)構(gòu)_第4頁(yè)
C語(yǔ)言程序設(shè)計(jì)課件-第3章結(jié)構(gòu)化程序設(shè)計(jì)的三種基本結(jié)構(gòu)_第5頁(yè)
已閱讀5頁(yè),還剩91頁(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)介

第3章結(jié)構(gòu)化程序設(shè)計(jì)的三種基本結(jié)構(gòu)

結(jié)構(gòu)化程序設(shè)計(jì)共有以下3種基本結(jié)構(gòu):

順序結(jié)構(gòu)

分支結(jié)構(gòu)(選擇結(jié)構(gòu))

循環(huán)結(jié)構(gòu),

(1)順序結(jié)構(gòu),如圖3.1(a)所示,該結(jié)構(gòu)先執(zhí)行A,再執(zhí)行B,兩者是順序執(zhí)行的關(guān)系

ABN-S結(jié)構(gòu)圖AB流程圖(2)分支結(jié)構(gòu),也叫選擇結(jié)構(gòu),如圖3.1(b)所示,該結(jié)構(gòu)先判斷條件是否成立,當(dāng)條件成立時(shí)執(zhí)行A,否則執(zhí)行B。該結(jié)構(gòu)只能執(zhí)行A或B其中之一AB假條件

流程圖真條件真假ABN-S結(jié)構(gòu)圖條件A真假流程圖當(dāng)條件為真AN-S結(jié)構(gòu)圖(3)循環(huán)結(jié)構(gòu),該結(jié)構(gòu)有兩種形式。

①當(dāng)型循環(huán),當(dāng)條件成立時(shí),反復(fù)執(zhí)行A操作,直到條件為“假”時(shí)才停止循環(huán)。②直到型循環(huán),先執(zhí)行A操作,再判斷條件是否為“真”,若條件為“假”,再執(zhí)行A,如此反復(fù),直到條件為“真”為止。

流程圖N-S結(jié)構(gòu)圖條件真假A直到條件為真A3.1順序結(jié)構(gòu)程序設(shè)計(jì)

3.1.1賦值語(yǔ)句賦值是把一個(gè)運(yùn)算表達(dá)式的值賦給變量。1.格式簡(jiǎn)單賦值是把一個(gè)運(yùn)算表達(dá)式的值賦給一個(gè)變量,一般的形式為:變量=<運(yùn)算表達(dá)式>2.功能賦值語(yǔ)句的功能是將運(yùn)算表達(dá)式的值賦給左邊的變量。3.說(shuō)明:(1)以上形式也被稱為賦值表達(dá)式,“=”是運(yùn)算符,稱為賦值號(hào);(2)賦值號(hào)與數(shù)學(xué)中的等于號(hào)“=”完全不一樣,并非相等的意思。故可以有如下的賦值語(yǔ)句:s=s+1;x=x+s;d=d-1;(3)賦值號(hào)左邊必須是變量,右邊可以是常量、變量或表達(dá)式。 y=4;x=y;p=p+4;(4)一個(gè)運(yùn)算表達(dá)式中可以出現(xiàn)多個(gè)賦值號(hào),運(yùn)算順序是從右到左。x=y=k=6;執(zhí)行時(shí),先執(zhí)行k=6,然后把它的結(jié)果賦值給y,再把y的賦值表達(dá)式的結(jié)果6賦x。(5)在程序中需要對(duì)一些變量預(yù)先設(shè)置初值,下面幾個(gè)語(yǔ)句可以給變量賦初值,例如:

inta=4;

floatx=3.14;

charc=’A’;

也可以對(duì)幾個(gè)變量賦同一個(gè)初值,例如:

inta=4,b=4,c=4;

也可以只對(duì)部分變量賦初值,例如:

inta=4,b,c;【例3.1】算術(shù)賦值運(yùn)算符的使用。#include<stdio.h>voidmain(){inta,b,c,d;a=6;b=2;c=3;d=11;a-=b;b+=c;d+=a;printf("a=%d\tb=%d\tc=%d\td=%d\n",a,b,c,d);a*=b;d/=c;c%=b;b+=a;printf("a=%d\tb=%d\tc=%d\td=%d\n",a,b,c,d);}3.1.2標(biāo)準(zhǔn)輸入/輸出語(yǔ)句及使用1.標(biāo)準(zhǔn)格式輸入函數(shù)scanf()(1)一般格式:

scanf("<格式控制串>",參數(shù)表);

其中,函數(shù)的參數(shù)分為格式控制串和參數(shù)表兩部分,中間用逗號(hào)分隔①格式控制串部分是加上雙引號(hào)的一個(gè)字符串,可以用一般字符作為匹配符,也可以用格式說(shuō)明符。②格式控制串由下列形式組成:%<修飾符><格式說(shuō)明符>其中,“%”是格式標(biāo)識(shí)符,格式說(shuō)明符用來(lái)表示輸入的格式,scanf函數(shù)常用的格式說(shuō)明符如表3.2所示。格式說(shuō)明符功能說(shuō)明d表示輸入帶符號(hào)的十進(jìn)制整數(shù)o表示輸入無(wú)符號(hào)八進(jìn)制整數(shù)x表示輸入十六進(jìn)制無(wú)符號(hào)整數(shù)c表示輸入單個(gè)字符s表示輸入多個(gè)字符,即一個(gè)字符串f表示輸入實(shí)數(shù),可以用小數(shù)形式輸入表3.2scanf函數(shù)常用的格式說(shuō)明符表3.2scanf函數(shù)常用的修飾符修飾字符功能說(shuō)明字母l表示輸入長(zhǎng)整型整數(shù),可加在格式說(shuō)明符d、o、x前面字母h表示輸入短整型整數(shù),可加在格式說(shuō)明符d、o、x前面域?qū)挘ㄕ麛?shù))表示指定輸入數(shù)據(jù)所占寬度(列數(shù))*表示本輸入項(xiàng)在讀入后不賦給相應(yīng)的變量③參數(shù)表部分是由一個(gè)或多個(gè)參數(shù)組成的,每個(gè)參數(shù)要求是一個(gè)地址值,多個(gè)參數(shù)之間用逗號(hào)分隔,參數(shù)的個(gè)數(shù)和類型要與格式控制串中的格式說(shuō)明符的個(gè)數(shù)和類型一致。例如:scanf(“%d%c%f”,&a,&b,&c)三個(gè)格式說(shuō)明 符,分別對(duì)應(yīng)三個(gè)參數(shù)a,b,c。(2)功能該函數(shù)的功能是用來(lái)從標(biāo)準(zhǔn)輸入設(shè)備(鍵盤)上接收輸入的數(shù)值,按照所指定的格式給函數(shù)的參數(shù)賦值。(3)必要的說(shuō)明①scanf函數(shù)中的“格式控制串”后面必須是變量的地址,而 不應(yīng)是變量名。 例如:m和n是整形變量,則:

scanf(“%d%d”,m,n);是錯(cuò)誤的,應(yīng)將“m,n”改為“&m,&n”。②如果在“格式控制串”中除了格式標(biāo)識(shí)符、修飾符和格式說(shuō)明符以外還有其他字符,則應(yīng)在輸入數(shù)據(jù)時(shí)輸入與這些字符相同的字符。例如:

scanf("%d,%d",&m,&n);

輸入時(shí)兩個(gè)整數(shù)之間應(yīng)加入“,”:234,123↙

因?yàn)椋趕canf函數(shù)中的“格式控制串”中使用了逗號(hào)分隔,所以必須在234后面加一個(gè)逗號(hào)。③從鍵盤輸入的數(shù)據(jù)類型和個(gè)數(shù)必須與參數(shù)表中的數(shù)據(jù)類型和個(gè)數(shù)相匹配。例如:

scanf(“%d,%d”,&m,&n);

輸入數(shù)據(jù)時(shí)的形式:

234,10.5↙(錯(cuò)誤,因?yàn)閿?shù)據(jù)類型不匹配)

234,105,123↙(錯(cuò)誤,因?yàn)閿?shù)據(jù)個(gè)數(shù)不匹配)

234,123↙(正確)

④可以指定輸入數(shù)據(jù)所占的列數(shù),系統(tǒng)自動(dòng)按指定列數(shù)截取數(shù)據(jù)。例如:

scanf("%3d%3d",&m,&n

);

輸入234123256↙

系統(tǒng)自動(dòng)將234賦給變量m,將123賦給變量n。⑤“%”后面的“*”附加說(shuō)明符,用來(lái)表示跳過(guò)它相應(yīng)的數(shù)據(jù)。例如:

scanf("%3d%*3d%3d",&m,&n);

如果輸入如下的數(shù)據(jù):

23411796↙

系統(tǒng)將234賦給變量m,將96賦給變量n,中間的數(shù)據(jù)117被跳過(guò)不賦給任何變量。在使用一批現(xiàn)成數(shù)據(jù)時(shí),有時(shí)不需要其中的某些數(shù)據(jù),可以使用該方法將其“跳過(guò)”。

⑥從鍵盤輸入的數(shù)據(jù)先放在緩沖區(qū)內(nèi),當(dāng)用戶按了回車鍵后系統(tǒng)將緩沖區(qū)中的數(shù)據(jù)取出來(lái)按scanf

()的格式進(jìn)行處理。若緩沖區(qū)中還剩有數(shù)據(jù),將會(huì)對(duì)后邊的scanf()函數(shù)有影響。2.標(biāo)準(zhǔn)格式輸出函數(shù)printf()(1)一般格式:

printf("<格式控制串>",參數(shù)表);printf()函數(shù)的參數(shù)在形式上與scanf()函數(shù)的參數(shù)相同,格式也為:格式控制串和參數(shù)表,中間用逗號(hào)分隔。但是實(shí)際上的具體含義是不相同的。①格式控制串部分是加上雙引號(hào)("")的一個(gè)字符串,它包括:可打印的一般字符、不可打印的特殊字符(轉(zhuǎn)義字符)和格式說(shuō)明符三個(gè)部分。②可打印的一般字符指的是可直接從輸出設(shè)備打印出來(lái)的字符,即“原樣照打”,例如:printf("max=%d",x);中的“max=”就是可打印的一般字符。③不可打印的特殊字符指的是該字符不能直接從輸出設(shè)備輸出,也稱為“轉(zhuǎn)義字符”,轉(zhuǎn)義字符用轉(zhuǎn)義序列來(lái)表示。所謂轉(zhuǎn)義序列是用來(lái)表示字符的一種方法,即用該字符的ASCII值表示,具體的格式為:\字母。其中:

“\”表示轉(zhuǎn)義字符序列的標(biāo)識(shí)符,表示后面的字符是轉(zhuǎn)義字符,即是不可打印的字符;

“字母”表示不可打印的轉(zhuǎn)義字符,用來(lái)使輸出設(shè)備輸出某一種格式,c語(yǔ)言中的常用轉(zhuǎn)義字符如表3.4所示。

表3.3c語(yǔ)言中的常用轉(zhuǎn)義字符表

轉(zhuǎn)義序列功能說(shuō)明\n換行\(zhòng)t橫向跳格(即跳到下一個(gè)輸出區(qū))\v豎向跳格\b退格\r回車(不換行,回到本行的最左端)\f走紙換頁(yè)\a鳴鈴④格式說(shuō)明符由下列形式組成:%<修飾符><格式說(shuō)明符>其中,“%”是格式標(biāo)識(shí)符,格式說(shuō)明符是用來(lái)表示輸出的格式,printf函數(shù)常用的格式說(shuō)明符如表3.5所示。表3.4printf函數(shù)常用格式說(shuō)明符格式說(shuō)明符功能說(shuō)明d表示輸出帶符號(hào)的十進(jìn)制整數(shù)(正數(shù)不輸出符號(hào))c表示輸出單個(gè)字符s表示輸出多個(gè)字符,即一個(gè)字符串f表示以小數(shù)形式輸出實(shí)數(shù),默認(rèn)輸出6位小數(shù)⑤修飾符作為附加格式說(shuō)明符,在printf函數(shù)中常用的修飾符如表3.6所示。表3.5printf函數(shù)常用修飾符修飾符功能說(shuō)明字母l表示輸入長(zhǎng)整型整數(shù),可加在格式說(shuō)明符d、o、x前面m表示輸出數(shù)據(jù)的最小寬度m.n表示輸出總寬度占m列,其中小數(shù)位占n位-表示輸出的數(shù)字或字符在輸出區(qū)域內(nèi)向左靠⑥如果是0個(gè)參數(shù)時(shí),即該函數(shù)中只有格式控制串部分,沒(méi)有參數(shù)表部分,二者之間的逗號(hào)可以省略。這時(shí)格式控制串部分是一個(gè)普通的字符串,該字符串將原樣顯示在屏幕上,常常用來(lái)作為提示信息或字符串的輸出。例如:

printf("請(qǐng)輸入您的成績(jī)");scanf("%d",&score);其中輸出函數(shù)printf()只原樣顯示一個(gè)普通的字符串,用來(lái)提示用戶輸入的數(shù)據(jù)是“成績(jī)”。⑦如果是多個(gè)參數(shù)時(shí),參數(shù)之間必須必須用逗號(hào)分隔,每個(gè)參數(shù)要求是一個(gè)表達(dá)式(單獨(dú)一個(gè)變量是表達(dá)式的特殊情況),參數(shù)的個(gè)數(shù)和類型要與格式控制串中的格式說(shuō)明符的個(gè)數(shù)和類型相匹配。(2)功能printf()函數(shù)的功能是從標(biāo)準(zhǔn)輸出設(shè)備(顯示器或打印機(jī))上,按照所指定的格式輸出表達(dá)式的值。由于該函數(shù)主要用來(lái)輸出數(shù)據(jù),因此,使用頻率比較高,幾乎所有程序都要用它把計(jì)算結(jié)果顯示到屏幕上,否則無(wú)法知道計(jì)算的結(jié)果是否正確。3.1.3單個(gè)字符輸入/輸出函數(shù)語(yǔ)句及使用1.單個(gè)字符輸入函數(shù)getchar()(1)一般格式

getchar();

getchar()函數(shù)沒(méi)有參數(shù)。(2)功能從標(biāo)準(zhǔn)輸入設(shè)備(一般是用戶終端)上讀入一個(gè)字符,函數(shù)的值就是從輸入設(shè)備上得到的字符。(3)說(shuō)明:①?gòu)妮斎朐O(shè)備讀入的一個(gè)字符可以直接賦給一個(gè)變量?!纠?.2】從輸入設(shè)備讀入字符后輸出該字符。#include<stdio.h>voidmain(){ charc; c=getchar(); printf("%c",c);}運(yùn)行結(jié)果如下:如果用戶輸入:g↙(輸入字符g,再按回車鍵,字符送到內(nèi)存,字符變量c的值為g)則輸出為:g(輸出字符變量c的值為g)如果用戶輸入:8↙(字符變量c的值為8)則輸出為:8②getchar()函數(shù)只能接收一個(gè)字符。上例3.2中,如果用戶輸入:school↙則輸出:s如果用戶輸入:789999↙則輸出:7雖然,用戶在輸入時(shí)可以輸入多個(gè)字符,但getchar()函數(shù)只能接收一個(gè)字符,并把接收的一個(gè)字符賦給字符變量。③getchar()函數(shù)接收的一個(gè)字符,可以賦給一個(gè)字符變量,也可以不賦給任何一個(gè)變量,作為表達(dá)式的一部分。如在上例3.2中,輸出函數(shù)參數(shù)可以用getchar()替換。printf("%c",getchar());2.單個(gè)字符輸出函數(shù)putchar()(1)一般格式

putchar(c);(c是函數(shù)的參數(shù))(2)功能從標(biāo)準(zhǔn)輸出設(shè)備(一般是用戶終端)上輸出 一個(gè)字符,函數(shù)的值就是字符變量c的值。(3)說(shuō)明:①?gòu)妮敵鲈O(shè)備輸出一個(gè)字符變量的值?!纠?.3】用putchar()函數(shù)輸出字符變量。#include<stdio.h>voidmain(){charo,p,q;o=’O’;p=’K’;q=’!’;putchar(o);putchar(p);putchar(q);}運(yùn)行結(jié)果:OK!②putchar()函數(shù)也可以輸出控制字符。例如:putchar(‘\n’),輸出一個(gè)換行符。【例3.4】用putchar()函數(shù)輸出控制字符。#include<stdio.h>voidmain(){charo,p,q;o=’O’;p=’K’;q=’!’;putchar(o);putchar(‘\n’);putchar(p);putchar(‘\n’);putchar(q);}運(yùn)行結(jié)果:OK!③putchar()函數(shù)一般與getchar()函數(shù)一起使用?!纠?.5】putchar()與getchar()一起使用#include<stdio.h>voidmain(){charc;c=getchar();putchar(c);}運(yùn)行結(jié)果:如果從鍵盤輸入:g↙則輸出:g如果從鍵盤輸入:5↙則輸出:5【例3.7】根據(jù)指定數(shù)據(jù)所占的列數(shù)讀入數(shù)據(jù)。#include<stdio.h>voidmain(){inta;floatb,c;printf("請(qǐng)輸入數(shù)據(jù)");/*提示用戶輸入數(shù)據(jù)*/scanf("%2d%3f%4f",&a,&b,&c);/*分別指定a,b,c的列寬*/printf("a=%d,b=%f,c=%7.2f",a,b,c);}運(yùn)行結(jié)果:請(qǐng)輸入數(shù)據(jù):12345678912345a=12,b=345.000000,c=6789.00由于“%2d”只要求讀入2個(gè)數(shù)字字符,因此,把12賦給變量a,“%3f”要求讀入3個(gè)數(shù)字字符,把345賦給變量b,輸出時(shí)沒(méi)有規(guī)定輸出的列寬,固默認(rèn)輸出6位小數(shù),又按“%4f”讀入6789賦給變量c,輸出時(shí)規(guī)定了總列寬為7,小數(shù)位數(shù)占2位,所以輸出6789.00。

3.1.4順序結(jié)構(gòu)程序設(shè)計(jì)舉例【例3.6】原樣輸出字符。要求輸入兩門課程的成績(jī),輸出總分。main(){inta,b;printf(“請(qǐng)輸入兩門課程的成績(jī)\n”);/*原樣輸出字符,字符輸 出后換行*/scanf("%d%d,&a,&b");printf("您的第一門成績(jī)=%d\n第二門成績(jī)=%d\n",a,b);/*您的第一門成績(jī)=第二門成績(jī)=原樣輸出*/printf("您的總分=%d\n",a+b);}運(yùn)行結(jié)果:請(qǐng)輸入兩門課程的成績(jī)7889↙您的第一門成績(jī)=78第二門成績(jī)=89您的總分=167【例3.7】字符數(shù)據(jù)與整形數(shù)據(jù)可以互相賦值。#include<stdio.h>voidmain(){intp;charc;p=’a’;c=97;printf("%c,%d\n",c,c);printf("%c,%d\n",p,p);}運(yùn)行結(jié)果:a,97a,97

從以上程序運(yùn)行的結(jié)果可以看出,字符數(shù)據(jù)可以以字符的形式輸出,也可以以整數(shù)形式輸出。同樣整形數(shù)據(jù)也可以以字符的形式輸出。即字符數(shù)據(jù)與整形數(shù)據(jù)可以互相賦值。【例3.8】輸入三個(gè)整數(shù)a,b,c,求它們的平均值。并按如下形式輸出:averageof**,**and**is**.**#include<stdio.h>voidmain(){inta,b,c;floatave;

printf("Inputa,b,c:");

scanf("%d,%d,%d",&a,&b,&c);

ave=(a+b+c)/3.0;

printf("averageof%2d,%2dand%2dis%\n\n",a,b,c,ave);

}程序執(zhí)行輸出結(jié)果如下Inputa,b,c:45,98,63averageof45,98and63is68.67Inputa,b,c:245,636,972averageof245,636and972is617.67【例3.9】分別轉(zhuǎn)換攝氏溫度-10oC、0oC、15oC、34oC為華氏溫度。攝氏溫度與華氏溫度滿足下列關(guān)系式:C=(5/9)(F-32)#include<stdio.h>voidmain(){intc;floatf;

printf("Inputc:");

scanf("%d",&c);

f=9/5.0*c+32.0;

printf("F=%f\n",f);

}

程序執(zhí)行輸出結(jié)果如下:Inputc:-10F=14.000000Inputc:0F=32.000000Inputc:15F=59.000000Inputc:34F=93.199997【例3.10】輸入三角形的3個(gè)邊長(zhǎng)A、B、C,求三角形的面積。公式為:area=sqrt(S(S-A)(S-B)(S-C)),其中,S=(A+B+C)/2

#include"math.h"#include<stdio.h>voidmain(){inta,b,c;floats,area;

printf("Inputa,b,c:");

scanf("%d,%d,%d",&a,&b,&c);

s=(a+b+c)/2.0;

area=sqrt(s*(s-a)*(s-b)*(s-c));

printf("Area=%f\n\n",area);

}程序執(zhí)行輸出結(jié)果如下:Inputa,b,c:12,13,14Area=72.307938表3.2scanf函數(shù)常用的修飾符表3.2scanf函數(shù)常用的修飾符

3.2分支結(jié)構(gòu)程序設(shè)計(jì)

在實(shí)際問(wèn)題中常常需要進(jìn)行判斷,如判斷數(shù)值的正負(fù)、成績(jī)的高低等,然后根據(jù)判斷的結(jié)果來(lái)決定相應(yīng)的處理方法。分支結(jié)構(gòu)就是用來(lái)解決這類問(wèn)題的。分支結(jié)構(gòu)也叫做選擇結(jié)構(gòu)。問(wèn)題分析:分支結(jié)構(gòu)程序的設(shè)計(jì)要考慮兩個(gè)方面的問(wèn)題①判斷條件

判斷條件是分支結(jié)構(gòu)設(shè)計(jì)的關(guān)鍵。它只有兩種結(jié)果:條件成立和條件不成立,并由此決定程序流程的走向。判斷條件通常是關(guān)系表達(dá)式或邏輯表達(dá)式。

②實(shí)現(xiàn)分支結(jié)構(gòu)的控制語(yǔ)句

輸入整數(shù)結(jié)束輸出YES輸出NOX%7==0?開(kāi)始例:輸入一整數(shù),判斷其是否是7的倍數(shù),如果是,輸出YES;否則輸出NO。格式2.復(fù)合IF語(yǔ)句if(<條件表達(dá)式>){<語(yǔ)句1>;<語(yǔ)句2>;::<語(yǔ)句n>;}格式1.簡(jiǎn)單IF語(yǔ)句If(<條件表達(dá)式>)<語(yǔ)句>;3.2.1if語(yǔ)句

if語(yǔ)句根據(jù)不同的條件,執(zhí)行不同的程序流程,進(jìn)行不同的處理。常見(jiàn)的選擇結(jié)構(gòu)有二分支和多分支兩種形式。1.二分支選擇結(jié)構(gòu)(2)功能:

當(dāng)執(zhí)行if語(yǔ)句時(shí),首先判斷<條件表達(dá)式>的邏輯值,當(dāng)邏輯值為“真”時(shí),執(zhí)行if子句(表達(dá)式后面的語(yǔ)句);當(dāng)該邏輯值為“假”時(shí),不執(zhí)行if子句,接著執(zhí)行if語(yǔ)句后面的語(yǔ)句。假條件表達(dá)式if子語(yǔ)真if語(yǔ)句后面的語(yǔ)句(3)說(shuō)明:①<條件表達(dá)式>可以是各種表達(dá)式,但必須符合C語(yǔ)言中的規(guī)定,表達(dá)式的值必須是邏輯值“真”或“假”;②if子句可以是一個(gè)語(yǔ)句,也可以是復(fù)合語(yǔ)句,復(fù)合語(yǔ)句即用一對(duì)花括號(hào)括起來(lái)的若干個(gè)語(yǔ)句;③C語(yǔ)言以“分號(hào)”作為語(yǔ)句的結(jié)束,因此,if是條件語(yǔ)句的開(kāi)始,分號(hào)“;”是條件語(yǔ)句的結(jié)束。【例3.11】根據(jù)輸入的學(xué)生成績(jī)處理:成績(jī)及格則輸出“Passed”(及格);否則,不做任何輸出。

#include<stdio.h>

main()

{floatscore;

printf("\nEnterascore:");

scanf("%f",&score);/*輸入學(xué)生成績(jī)*/

if(score>=60.0)

printf("\nPassed");/*如果成績(jī)及格,則輸出“Passed”*/

}

運(yùn)行結(jié)果:【例3.12】編寫程序,根據(jù)輸入的x值,輸出y的值。

-xx<0

y=0x=0

xx>0

#include<stdio.h>

voidmain()

{intx,y;

printf("inputx:");

scanf("%d",&x);/*輸入x的值*/

if(x<0)y=-x;

if(x==0)y=0;

if(x>0)y=x;

printf("x=%dy=%d",x,y);/*輸出x、y的值*/

}

2)if

else語(yǔ)句

if

else語(yǔ)句可以根據(jù)條件的“真”(非0)或“假”(0),執(zhí)行不同的操作。

(1)格式:條件表達(dá)式

if(<條件表達(dá)式>)<語(yǔ)句1>;

Else語(yǔ)句2;

其中,語(yǔ)句1稱為if子句,語(yǔ)句2稱為else子句。

(2)功能

if

else語(yǔ)句執(zhí)行時(shí),先判斷條件表達(dá)式的值,若結(jié)果為“真”(非0),則執(zhí)行if子句(語(yǔ)句1),否則執(zhí)行else子句(語(yǔ)句2),然后執(zhí)行if語(yǔ)句后面的語(yǔ)句?!纠?.13】將例3.11改為:如果成績(jī)及格,輸出“Passed”;否則輸出“Failed”。

#include<stdio.h>

voidmain()

{floatscore;

printf("\nEnterascore:");

scanf("%f",&score);

if(score>=60.0)

printf("\nPassed");

elseprintf("\nFailed");

}

運(yùn)行結(jié)果如下:2.利用if語(yǔ)句實(shí)現(xiàn)多分支結(jié)構(gòu)--嵌套的if語(yǔ)句

嵌套的if語(yǔ)句是指在if語(yǔ)句的if子句或else子句中又包含一個(gè)或多個(gè)if語(yǔ)句。嵌套的目的是為了解決多路分支處理問(wèn)題。

可以將,也可以將if語(yǔ)句嵌在else子句中,例如:

①if語(yǔ)句嵌在if子句中

if(<條件表達(dá)式1>)

if(<條件表達(dá)式2>)語(yǔ)句1;

else語(yǔ)句2;

else語(yǔ)句3;

其流程圖如圖所示,可見(jiàn)屬于雙分支選擇結(jié)構(gòu)。表達(dá)式1表達(dá)式2語(yǔ)句1語(yǔ)句2語(yǔ)句3真真假假else子句中內(nèi)嵌if語(yǔ)句

if(<條件表達(dá)式1>)

if(<條件表達(dá)式2>)語(yǔ)句1;

elseif(<條件表達(dá)式3>)語(yǔ)句2;

else語(yǔ)句3;

其流程圖如圖所示,因此屬于單分支選擇結(jié)構(gòu)。表達(dá)式2表達(dá)式3表達(dá)式1語(yǔ)句3語(yǔ)句2語(yǔ)句1真真真假假假

③在實(shí)際應(yīng)用中,由于問(wèn)題的復(fù)雜性,有時(shí)不易理解哪一個(gè)else與哪一個(gè)if配對(duì),因此嵌套的if語(yǔ)句容易出錯(cuò),建議初學(xué)者采用下面的一種較為規(guī)范、容易掌握的嵌套的if語(yǔ)句的結(jié)構(gòu)形式。表達(dá)式1語(yǔ)句n+1表達(dá)式2表達(dá)式n語(yǔ)句1語(yǔ)句2語(yǔ)句n假假假真真真……

if(<表達(dá)式1>)語(yǔ)句1;elseif(<表達(dá)式2>)語(yǔ)句2;

elseif(<表達(dá)式3>)語(yǔ)句3;……elseif(<表達(dá)式n>)語(yǔ)句n;

else

語(yǔ)句n+1;【例3.15】根據(jù)學(xué)生成績(jī)落入的不同分?jǐn)?shù)段(4種),輸出不同的評(píng)語(yǔ)。這是一個(gè)具有四路分支的問(wèn)題.

#include<stdio.h>

voidmain()

{intscore;

printf(“\nEnterascore:”);

scanf(“%d”,&score);

if(score>=90)printf(“\nVerygood”);

elseif(score>=80)printf(“\nGood”);

else

if(score>=60)printf(“\nPassed”);

elseprintf(“\nFailed”);

}

注意:

從最內(nèi)層開(kāi)始,else總是與它上面最近的尚未曾配對(duì)if配對(duì)。3.2.2switch語(yǔ)句(開(kāi)關(guān)語(yǔ)句)

雖然可以用if-else語(yǔ)句實(shí)現(xiàn)多分支結(jié)構(gòu),但是switch語(yǔ)句能夠更方便地直接實(shí)現(xiàn)多分支選擇結(jié)構(gòu)。

1.格式:

switch(<表達(dá)式>)

{

case<常量表達(dá)式1>:<程序段1>;

case<常量表達(dá)式2>:<程序段2>;

case<常量表達(dá)式n>:<程序段n>;

default:<程序段n+1>;

}2.switch語(yǔ)句的執(zhí)行過(guò)程為:

先計(jì)算switch后面的表達(dá)式的值;然后將該值與case關(guān)鍵字后面的<常量表達(dá)式>的值進(jìn)行比較。第一次,先與<常量表達(dá)式1>的值進(jìn)行比較,如果相等,則從<程序段1>開(kāi)始執(zhí)行,依次執(zhí)行<程序段1>,<程序段2>,……<程序段n+1>。如果與<常量表達(dá)式1>的值不相等,則與<常量表達(dá)式2>的值進(jìn)行比較,如果相等,則從<程序段2>開(kāi)始執(zhí)行直到<程序段n+1>。如果不相等,則與<常量表達(dá)式3>的值進(jìn)行較,……依次類推;如果<表達(dá)式>的值與所有<常量表達(dá)式>的值都不相等時(shí),則執(zhí)行default后面的<程序段n+1>。【例3.16】switch語(yǔ)句的應(yīng)用。

#include<stdio.h>

voidmain()

{

inta,b;

printf("pleaseinputa,b:");

scanf("%d%d",&a,&b);

switch(a+b)

{

case1:printf("%d\t",1);

case2:printf("%d\t",2);

case3:printf("%d\t",3);

case4:printf("%d\t",4);

case5:printf("%d\t",5);

default:printf("%d\n",888);

}

}

運(yùn)行結(jié)果如下:3.注意事項(xiàng):

(1)整個(gè)switch語(yǔ)句必須用一對(duì)花括號(hào)“{}”括起來(lái);

(2)switch后面刮號(hào)內(nèi)的表達(dá)式,允許為任何類型;

(3)每個(gè)case后面的常量表達(dá)式的值必須互不相同。

(4)<程序段>可以由0個(gè)、1個(gè)或多個(gè)語(yǔ)句組成,如果需要在執(zhí)行完某一個(gè)<程序段>后使流程跳出switch結(jié)構(gòu),可以在該<程序段>后面加上一個(gè)break語(yǔ)句。流程遇到break語(yǔ)句后,系統(tǒng)將強(qiáng)制退出switch語(yǔ)句,執(zhí)行switch語(yǔ)句的下一條語(yǔ)句。

(5)在switch語(yǔ)句中,良好的程序設(shè)計(jì)習(xí)慣是,在每個(gè)switch語(yǔ)句中,寫上一條default

選項(xiàng),以便集中處理例外條件。如果沒(méi)有該選擇項(xiàng),當(dāng)<表達(dá)式>的值與所有<常量表達(dá)式>的值都不相等時(shí),就什么也不執(zhí)行。

(6)多個(gè)case可共有一組執(zhí)行語(yǔ)句?!纠?.17】對(duì)例3.16改進(jìn),在

switch語(yǔ)句中使用break語(yǔ)句。

#include<stdio.h>

voidmain()

{

inta,b;

printf("pleaseinputa,b:");

scanf("%d%d",&a,&b);

switch(a+b)

{

case1:printf("%d\t",1);

case2:printf("%d\t",2);break;

case3:printf("%d\t",3);

case4:printf("%d\t",4);

case5:printf("%d\t",5);

default:printf("%d\n",888);

}

}

【例3.18】用switch語(yǔ)句實(shí)現(xiàn)例3.15。

#include<stdio.h>

voidmain()

{intscore,mark;

printf("\nEnterscore:");

scanf("%d",&score);

mark=-1;

if(score>=0&&score<=100)

mark=score/10;

switch(mark)

{case10:

case9:printf("\nVerygood");break;/*成績(jī)≥90*/

case8:printf("\nGood");break;/*80≤成績(jī)<90*/

case7:

case6:printf("\nPassed");break;/*60≤成績(jī)<80*/

case5:

case4:

case3:

case2:

case1:

case0:printf("\nFailed");break;/*成績(jī)<60*/

default:printf("\nEntererror!");/*處理錯(cuò)誤的輸入*/

}

}3.2.3分支結(jié)構(gòu)程序設(shè)計(jì)實(shí)例

【例3.19】輸入兩個(gè)實(shí)數(shù),按數(shù)值由大到小次序輸出。

#include<stdio.h>

voidmain()

{floata,b,t;

scanf("%f,%f",&a,&b);

if(a<b){t=a;a=b;b=t;}

printf("%5.2f\t%5.2f\n",a,b);

}

運(yùn)行結(jié)果如下:【例3.20】編寫程序,根據(jù)輸入的x值,輸出y的值。

-xx<0

y=0x=0

xx>0

①用簡(jiǎn)單的if語(yǔ)句實(shí)現(xiàn):

#include<stdio.h>

voidmain()

{intx,y;

printf("\nEnterthex:");

scanf("%d",&x);

if(x>0)y=1;

if(x==0)y=0;

if(x<0)y=-1;

printf("\nx=%d,y=%d",x,y);

}②采用if子句內(nèi)嵌套的結(jié)構(gòu)。

#include<stdio.h>

voidmain()

{intx,y;

printf("\nEnterthex:");

scanf("%d",&x);

if(x<=0)

if(x==0)y=0;

elsey=

1;

elsey=1;

printf("\nx=%d,y=%d",x,y);

}③采用else子句內(nèi)嵌套的結(jié)構(gòu)。

#include<stdio.h>

voidmain()

{intx,y;

printf("\nEnterthex:");

scanf("%d",&x);

if(x<0)y=

1;

elseif(x>0)y=1;

elsey=0;

printf("\nx=%d,y=%d",x,y);

}

【例3.21】某商店售貨,按購(gòu)買貨物的款數(shù)多少分別給予不同的優(yōu)惠折扣:

購(gòu)貨不足250元的,沒(méi)有折扣;

購(gòu)貨滿250元,不足500元,折扣5%;

購(gòu)貨滿500元,不足1000元,折扣7.5%;

購(gòu)貨滿1000元,不足2000元,折扣10%;

購(gòu)貨滿2000元,折扣15%。

分析:用switch結(jié)構(gòu)實(shí)現(xiàn),設(shè)置mark標(biāo)記變量:mark=m/250,其中m為客戶購(gòu)物款,根據(jù)mark的值而確定相應(yīng)的折扣。#include<stdio.h>/*例3.21程序*/

voidmain()

{floatm,d,amount;

intmark;

printf("\nEnteryourmoneyforbuying:");

scanf("%f",&m);

mark=m/250;

switch(mark)

{case0:d=0;break;

case1:d=5;break;

case2:

case3:d=7.5;break;

case4:

case5:

case6:

case7:d=10;break;

default:d=15;

}

amount=m*(1-d/100);

printf("\namount=%6.2f",amount);

}【例3.22】將以英寸表示的長(zhǎng)度轉(zhuǎn)換為以厘米表示;或者反之。

問(wèn)題分析:已知:1英寸=2.54厘米。設(shè)置變量select用于選擇,select=1表示將英寸轉(zhuǎn)換為厘米,select=2表示將厘米轉(zhuǎn)換成英寸。

①用if語(yǔ)句實(shí)現(xiàn):

#include<stdio.h>

voidmain()

{intselect;

floatleng,r=2.54;

printf("\nPleasechoose(1:inchtocm,2:cmtoinch):");

scanf("%d",&select);

printf("Entertheleng:");

scanf("%f",&leng);

if(select==1)printf("\n%6.2finch=%6.2fcm",leng,leng*r);

elseif(select==2)printf("\n%6.2fcm=%6.2finch ",leng,leng/r);

}②用switch結(jié)構(gòu)實(shí)現(xiàn):

#include<stdio.h>

voidmain()

{intselect;

floatleng,r=2.54;

printf("\nPleasechoose(1:inchtocm,2:cmtoinch):");

scanf("%d",&select);

printf("Entertheleng:");

scanf("%f",&leng);

switch(select)

{case1:printf("\n%6.2finch=%6.2fcm",leng,leng*r);break;

case2:printf("\n%6.2fcm=%6.2finch",leng,leng/r);break;

default:printf("Entererror!)\n");

}

}3.3循環(huán)結(jié)構(gòu)程序設(shè)計(jì)

在程序設(shè)計(jì)中,經(jīng)常會(huì)遇到需要重復(fù)處理的內(nèi)容,這樣的功能由循環(huán)結(jié)構(gòu)來(lái)實(shí)現(xiàn)。

循環(huán)體一組被重復(fù)執(zhí)行的語(yǔ)句稱為循環(huán)體。

循環(huán)條件每執(zhí)行一次循環(huán)體后,都必須做出是繼續(xù) 還是停止循環(huán)的決定,這個(gè)決定所依據(jù)的 條件稱為循環(huán)條件。例,從鍵盤上輸入一個(gè)整數(shù)n,求n!。

問(wèn)題分析:

n!=1*2*3*……*(n-1)*n

為了便于編程實(shí)現(xiàn),用變量i表示當(dāng)前乘數(shù),初始值為1;s表示累乘積,初始值為1。每次讓s乘以i再存放到s中去,然后i的值增1,再繼續(xù)進(jìn)行下去,直至i的值增加到n+1停止。算法如圖3.9所示。

i=1

s=1

i<=n?i++s=s*i輸出n!

YN開(kāi)始結(jié)束輸入n

一般來(lái)講,循環(huán)結(jié)構(gòu)程序設(shè)計(jì)要考慮兩個(gè)方面的問(wèn)題:

①循環(huán)條件:循環(huán)條件是循環(huán)結(jié)構(gòu)設(shè)計(jì)的關(guān)鍵,它決定著循環(huán)體重復(fù)執(zhí)行的次數(shù)。循環(huán)條件常常由關(guān)系表達(dá)式或邏輯表達(dá)式來(lái)表示。

②循環(huán)體:循環(huán)體即是需要重復(fù)執(zhí)行的工作。它可以是一組順序結(jié)構(gòu)的語(yǔ)句,也可以是一組具有選擇結(jié)構(gòu)的語(yǔ)句,甚至還可以又是一組具有循環(huán)結(jié)構(gòu)的語(yǔ)句。

循環(huán)結(jié)構(gòu)程序設(shè)計(jì)就是要正確描述循環(huán)條件,并分析出問(wèn)題的規(guī)律性,利用C語(yǔ)言提供的循環(huán)控制語(yǔ)句來(lái)實(shí)現(xiàn)具體的功能。

3.3.1while循環(huán)

while語(yǔ)句用于構(gòu)成“當(dāng)型”循環(huán)結(jié)構(gòu)。

1.格式:

while(<條件表達(dá)式>)

循環(huán)體語(yǔ)句;

2.功能

首先計(jì)算條件表達(dá)式(循環(huán)條件)的值,若結(jié)果為“真”(非零),則執(zhí)行循環(huán)體語(yǔ)句;然后回頭再次計(jì)算表達(dá)式的值,重復(fù)上述過(guò)程,直到表達(dá)式的值為“假”(零)時(shí)結(jié)束循環(huán),流程控制轉(zhuǎn)到循環(huán)結(jié)構(gòu)的下一語(yǔ)句?!纠?.23】利用while語(yǔ)句編程實(shí)現(xiàn)n!。

#include<stdio.h>

voidmain()

{intn,i,s;

printf("\nEntern:");

scanf("%d",&n);

i=1;

s=1; /*給變量i、s賦初值*/

while(i<=n)/*循環(huán)繼續(xù)的條件*/

{s=s*i; /*進(jìn)行累乘求積*/

i++;/*乘數(shù)增值*/

}

printf("\n%d!=%d",n,s);/*輸出計(jì)算的結(jié)果*/

}3.使用while循環(huán)結(jié)構(gòu)應(yīng)注意以下幾點(diǎn):

while循環(huán)結(jié)構(gòu)的特點(diǎn)是“先判斷,后執(zhí)行”。如果條件表達(dá)式的值一開(kāi)始就為“假”,則循環(huán)體一次也不執(zhí)行。

②循環(huán)體中,如果包含一個(gè)以上的語(yǔ)句,則應(yīng)用花括號(hào)括起來(lái),以復(fù)合語(yǔ)句的形式出現(xiàn)。

③循環(huán)體內(nèi)一定要有改變循環(huán)繼續(xù)條件的語(yǔ)句,使得循環(huán)趨向于結(jié)束,否則循環(huán)將無(wú)休止地進(jìn)行下去,即形成“死循環(huán)”。如例3.23中的語(yǔ)句i++,使得循環(huán)控制變量i每循環(huán)一次增加1,則最終會(huì)達(dá)到或超過(guò)終值,結(jié)束循環(huán)。

④為使循環(huán)能夠正確開(kāi)始運(yùn)行,還要做好循環(huán)開(kāi)始前的準(zhǔn)備工作,如例3.23中的語(yǔ)句i=1;和s=1;分別給循環(huán)控制變量i和存放累乘積的變量s初始化。【例3.24】從鍵盤上輸入6個(gè)學(xué)生的成績(jī),對(duì)其進(jìn)行處理:如果成績(jī)及格,則輸出“Passed”;否則輸出“Failed”。#include<stdio.h>

voidmain()

{intn=1;/*循環(huán)控制變量賦初值*/

floatscore;

while(n<=6)/*循環(huán)繼續(xù)的條件*/

{printf("Enterascore:\n");

scanf("%f",&score);

if(score>=60.0)

printf("Passed\n");

elseprintf("Failed\n");

n++;/*循環(huán)控制變量增值*/

}

}3.3.2do-while循環(huán)

1.格式:

do

循環(huán)體語(yǔ)句;

while(<條件表達(dá)式>);

2.功能

首先執(zhí)行一次循環(huán)體語(yǔ)句,然后計(jì)算條件表達(dá)式(循環(huán)條件)的值。若結(jié)果為“真”(非零),則回頭再次執(zhí)行循環(huán)體,接著再計(jì)算表達(dá)式的值,如此重復(fù)下去,直到表達(dá)式的值為“假”(零)時(shí),循環(huán)結(jié)束,流程控制轉(zhuǎn)到循環(huán)結(jié)構(gòu)的下一語(yǔ)句。

循環(huán)體語(yǔ)句條件表達(dá)式假真

3.使用do-while循環(huán)結(jié)構(gòu)應(yīng)注意以下幾點(diǎn):

①和while循環(huán)類似:

當(dāng)do-while循環(huán)體包含一個(gè)以上的語(yǔ)句時(shí)應(yīng)該用花括號(hào) 括起來(lái),以復(fù)合語(yǔ)句形式出現(xiàn);

循環(huán)體內(nèi)也一定要有改變循環(huán)條件的語(yǔ)句,使循環(huán)趨向 于結(jié)束。

②下面的兩個(gè)程序可以明顯的看出while循環(huán)和do-while循環(huán) 的區(qū)別。#include<stdio.h>

main()

{inti,sum=0;

scanf("%d",&i);

do

{sum+=6;

i++;

}while(i<=3);

printf("Thesumis %d,i=%d\n",sum,i);

}#include<stdio.h>main(){inti,sum=0;scanf("%d",&i);while(i<=3){sum+=6;i++;}printf("Thesumis %d,i=%d\n",sum,i);}

2.功能:首先計(jì)算表達(dá)式1,然后計(jì)算表達(dá)式2的值,若結(jié)果為真(非零),則執(zhí)行循環(huán)體語(yǔ)句,然后進(jìn)行表達(dá)式3的運(yùn)算。然后回頭再次計(jì)算表達(dá)式2的值,若結(jié)果為“真”(非零),再執(zhí)行循環(huán)體語(yǔ)句,接著再進(jìn)行表達(dá)式3的運(yùn)算,然后再回頭,如此循環(huán)重復(fù)下去,直到計(jì)算表達(dá)式2的結(jié)果為“假”(零)時(shí),循環(huán)結(jié)束,流程控制轉(zhuǎn)到循環(huán)結(jié)構(gòu)的下一語(yǔ)句。3.3.3for循環(huán)

for語(yǔ)句是C語(yǔ)言提供的另一種應(yīng)用靈活、功能強(qiáng)大的構(gòu)成“當(dāng)型”循環(huán)結(jié)構(gòu)的循環(huán)語(yǔ)句。

1.格式:

for(<表達(dá)式1>;<表達(dá)式2>;<表達(dá)式3>)

<循環(huán)體語(yǔ)句>;

表達(dá)式1循環(huán)體語(yǔ)句表達(dá)式3假真表達(dá)式2【例3.26】用for循環(huán)結(jié)構(gòu)實(shí)現(xiàn)例3.23(求n!)。

#include<stdio.h>

voidmain()

{intn,i,s;

printf("\nEntern:");

scanf("%d",&n);

s=1;

for(i=1;i<=n;i++)

s=s*i;

printf("\n%d!=%d",n,s);

}

3.使用for循環(huán)結(jié)構(gòu)應(yīng)注意以下幾點(diǎn):

①for循環(huán)也具有“先判斷,后執(zhí)行”的特點(diǎn),相當(dāng)于while循環(huán):

②從語(yǔ)法上看,for的三個(gè)表達(dá)式,它們之間都以分號(hào)“;”隔開(kāi)。

●表達(dá)式1和表達(dá)式3常常是賦值表達(dá)式或函數(shù)調(diào)用,有時(shí)也可以是逗號(hào)表達(dá)式,一般用來(lái)實(shí)現(xiàn)對(duì)循環(huán)控制變量初始化和循環(huán)控制變量增(減)值。

●表達(dá)式2常常是關(guān)系表達(dá)式或邏輯表達(dá)式,但也可以是其它類型的表達(dá)式,它表示循環(huán)繼續(xù)的條件,只要其值為非零,就可執(zhí)行循環(huán)體,否則退出循環(huán)。

例如:

for(i=1,sum=0;i<=100;i++,i++)sum+=i;

其中,表達(dá)式1與表達(dá)式3都是逗號(hào)表達(dá)式。

③關(guān)鍵字for的三個(gè)表達(dá)式允許部分或全部省略,但其中的兩個(gè)分號(hào)不能省略,否則,系統(tǒng)將報(bào)錯(cuò)。需要注意:

●當(dāng)省略表達(dá)式1時(shí),在進(jìn)入for循環(huán)之前應(yīng)該有給循環(huán)控制變量賦初始值的語(yǔ)句;(即表達(dá)式1可以搬到for語(yǔ)句前面)

●當(dāng)省略表達(dá)式3時(shí),應(yīng)該在循環(huán)體內(nèi)有修改循環(huán)控制變量的值的語(yǔ)句,以保證循環(huán)能夠正常結(jié)束。

④如果循環(huán)體語(yǔ)句為一組語(yǔ)句,必須用花括號(hào)“{}”括起來(lái)。

⑤for循環(huán)結(jié)構(gòu)書(shū)寫形式靈活多樣,但是如果在三個(gè)表達(dá)式中過(guò)多的加入與循環(huán)控制無(wú)關(guān)的內(nèi)容,容易降低可讀性,因此,建議使用一種簡(jiǎn)單明了的for循環(huán)結(jié)構(gòu)形式:

for(循環(huán)控制變量賦初值;循環(huán)條件;循環(huán)控制變量增(減)值)

循環(huán)體語(yǔ)句;

【例3.27】輸入一批非零整數(shù),以0為結(jié)束符,輸出其中的最大值。

分析:先假定第一個(gè)數(shù)是最大值賦給變量max,以后每輸入一個(gè)數(shù)就和max比較,如果大于max,則把此值賦給max,使max保持迄今為止的最大值,直到輸入0結(jié)束,則變量max的值即為所求。

#include<stdio.h>

voidmain()

{intx,max;

printf("inputnumbers,lastoneis0:\n");/*輸出提示信息*/

scanf("%d",&x);

max=x;/*先將第一個(gè)數(shù)賦值給變量max*/

for(;x!=0;)

{scanf("%d",&x);

if(max<x)

max=x;/*輸入值比變量max的值大,用當(dāng)前值替換變量max的值*/

}

printf("max=%d\n",max);

}

3.3.4循環(huán)結(jié)構(gòu)的嵌套

循環(huán)的嵌套是指在一個(gè)循環(huán)體內(nèi)包含了另一個(gè)完整的循環(huán)結(jié)構(gòu)。

三種循環(huán)(while循環(huán)do-while循環(huán)和for循環(huán))不僅可以自身嵌套,而且還可以互相嵌套。

(1)while()(2)for(;;)

{{

……

while()do

{{

……

}}while();

……

}}

(3)while()(4)do

{{

……

for(;;)for(;;)

{{

……

}}

}}while();

【例3.28】編程輸出以下形式的乘法九九表。

1*1=11*2=21*3=31*4=41*5=51*6=61*7=71*8=81*9=9

2*1=22*2=42*3=62*4=82*5=102*6=122*7=142*8=162*9=18

……

9*1=99*2=189*3=279*4=369*5=459*6=549*7=639*8=729*9=81

問(wèn)題分析:首先觀察第一行乘法表的變化規(guī)律。被乘數(shù)為1保持不變,而乘數(shù)從1變化到9,每次增量為1,因此,構(gòu)造如下循環(huán)即可實(shí)現(xiàn)第一行乘法表的輸出:

for(j=1;j<=9;j++)

printf(“%1d*%1d=%4d”,1,j,1*j);

再觀察第二行乘法表的變化規(guī)律。與第一行唯一不同的是被乘數(shù)為2,而處理過(guò)程完全一樣,因此,只需將被乘數(shù)改為2,對(duì)上述循環(huán)再執(zhí)行一次即可。

同理,第三行、第四行……,只需讓被乘數(shù)從1變化到9,對(duì)上述循環(huán)執(zhí)行9次。因此在上述循環(huán)的外面再加上一個(gè)循環(huán),即構(gòu)成雙重循環(huán),就可得到所要求的乘法九九表。

#include<stdio.h>

voidmain()

{inti,j;

for(i=1;i<=9;i++)/*i為外循環(huán)控 制變量控制被乘數(shù)變化*/

{printf(“\n”);

for(j=1;j<=9;j++)/*j為內(nèi)循 環(huán)控制變量控制乘數(shù)變化*/

printf(“%1d*%1d=%2d”

,i,j,i*j);

}

}

#include<stdio.h>

voidmain()

{inti,j;

for(i=1;i<=9;i++)/*i為外循環(huán)控 制變量控制被乘數(shù)變化*/

{printf(“\n”);

for(j=1;j<=9;j++)/*j為內(nèi)循 環(huán)控制變量控制乘數(shù)變化*/

printf(“%1d*%1d=%2d”

,i,j,i*j);

}

}i=1i<=9?j=1j<=9?輸出i*ji++j++假真真假開(kāi)始結(jié)束【例3.29】某小組有5位學(xué)生,每位學(xué)生考4門課。要求分別統(tǒng)計(jì)出每位學(xué)生各門課的平均成績(jī)。

j++輸出averaver=sum/4.0sum=sum+scorefor(i=1;i<=4;i++)輸入成績(jī)scorej=1sum=0當(dāng)j<=5#include<stdio.h>

voidmain()

{inti,j,score,sum;

floataver;

j=1;

while(j<=5)/*j為外循環(huán)控制變量*/

{sum=0;

for(i=1;i<=4;i++)

{printf("EnterNO.%dthescore%d:",j,i);

scanf("%d",&score);/*輸入第j個(gè)學(xué)生第i門課程的成績(jī)*/

sum=sum+score;/*累計(jì)第j個(gè)學(xué)生的總成績(jī)*/

}

aver=sum/4.0;/*計(jì)算第j個(gè)學(xué)生的平均成績(jī)*/

printf("NO.%daver=%5.2f\n",j,aver);/*輸出第j個(gè)學(xué)生的平均成績(jī)*/

j++;

}

}

運(yùn)行結(jié)果運(yùn)行結(jié)果:1.break語(yǔ)句

break語(yǔ)

溫馨提示

  • 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)論