




版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 地方課程課題申報(bào)書(shū)
- 亞馬遜購(gòu)買店鋪合同范本
- 動(dòng)漫授權(quán)協(xié)議合同范本
- mcn公司合伙合同范例
- 合同范本理解寫好
- 個(gè)人軟件銷售合同范本
- 合伙餐飲采購(gòu)合同范本
- 知識(shí)產(chǎn)權(quán)保護(hù)高地建設(shè)的實(shí)施計(jì)劃
- 推動(dòng)農(nóng)業(yè)新質(zhì)生產(chǎn)力發(fā)展路徑探索
- 民營(yíng)經(jīng)濟(jì)高質(zhì)量發(fā)展推動(dòng)力的關(guān)鍵措施
- 實(shí)驗(yàn)室在突發(fā)公共衛(wèi)生事件中的作用和任務(wù)(143)-行政管理
- 三人合伙餐飲合同范本
- 樹(shù)木栽培與養(yǎng)護(hù)合同樣本2025
- 人教PEP版(2024)三年級(jí)下冊(cè)英語(yǔ)Unit3 Learning better單元整體教學(xué)設(shè)計(jì)(共6課時(shí))
- 2025年河南林業(yè)職業(yè)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)完整版
- 地理-浙江省強(qiáng)基聯(lián)盟2025年2月高三年級(jí)聯(lián)考試題和答案
- 中華人民共和國(guó)建筑法
- 2024年濟(jì)南護(hù)理職業(yè)學(xué)院高職單招(英語(yǔ)/數(shù)學(xué)/語(yǔ)文)筆試歷年參考題庫(kù)含答案解析
- 2024年江蘇護(hù)理職業(yè)學(xué)院高職單招(英語(yǔ)/數(shù)學(xué)/語(yǔ)文)筆試歷年參考題庫(kù)含答案解析
- 執(zhí)業(yè)助理醫(yī)師報(bào)考執(zhí)業(yè)醫(yī)師執(zhí)業(yè)期考核證明【范本模板】
- 文獻(xiàn)檢索與畢業(yè)論文寫作PPT完整全套教學(xué)課件
評(píng)論
0/150
提交評(píng)論