版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
會(huì)計(jì)學(xué)1C語(yǔ)言程序設(shè)計(jì)框圖目錄3.1程序結(jié)構(gòu)框圖
3.2二分支結(jié)構(gòu)
3.3多分支結(jié)構(gòu)
3.6習(xí)題三
3.4循環(huán)結(jié)構(gòu)
3.5
break與continue語(yǔ)句
返回總目錄第1頁(yè)/共86頁(yè)●基本要求:
1)熟悉C語(yǔ)言的程序結(jié)構(gòu)框圖;
2)熟悉C語(yǔ)言的二分支結(jié)構(gòu)、多分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu);
3)熟練掌握結(jié)構(gòu)化程序設(shè)計(jì)方法?!駥W(xué)習(xí)重點(diǎn):
1)流程圖、N-S圖、循環(huán)結(jié)構(gòu);
2)結(jié)構(gòu)化程序設(shè)計(jì)方法。
第2頁(yè)/共86頁(yè)3.1程序結(jié)構(gòu)框圖3.1.1
自然語(yǔ)言描述
程序設(shè)計(jì)的關(guān)鍵是算法。算法是實(shí)際問(wèn)題求解步驟的描述。有了正確有效的算法,就可以用任何一種計(jì)算機(jī)語(yǔ)言編寫程序,解決各種問(wèn)題。算法可采用自然語(yǔ)言、流程圖或N-S圖等進(jìn)行描述。自然語(yǔ)言描述:用人們?nèi)粘K褂玫恼Z(yǔ)言(如英語(yǔ)、漢語(yǔ))進(jìn)行算法的描述。
返回目錄第3頁(yè)/共86頁(yè)3.1程序結(jié)構(gòu)框圖3.1.1
自然語(yǔ)言描述
例3.2求s=1+2+3+…+100之和。解題思路要將1~100累加到s變量上去,如果采用先初始化變量s=0,然后用語(yǔ)句序列s=s+1;s=s+2;…則要重復(fù)寫100個(gè)加法賦值語(yǔ)句,很顯然,這種算法不可取。改用下述算法。算法步驟:(1)設(shè)s=0,n=0;(2)變量n值加1,即n=n+1;(3)將n加到變量s中,即s=s+n;(4)如果n值小于100,返回去執(zhí)行第2步。否則執(zhí)行第5步;(5)輸出s變量的值。第4頁(yè)/共86頁(yè)3.1程序結(jié)構(gòu)框圖3.1.2
流程圖
流程圖是一種傳統(tǒng)的算法描述方法,它用幾種不同的幾何圖來(lái)代表不同性質(zhì)的操作;用流程線來(lái)指示算法的執(zhí)行方向.用流程圖表示的算法簡(jiǎn)單直觀,容易轉(zhuǎn)化成相應(yīng)的語(yǔ)言程序。第5頁(yè)/共86頁(yè)3.1程序結(jié)構(gòu)框圖3.1.2
流程圖
表示算法的開始或結(jié)束;表示數(shù)據(jù)的輸入和輸出;在實(shí)際中輸入輸出也常用矩形框表示。用來(lái)對(duì)給定的條件進(jìn)行判斷,根據(jù)條件成立與否來(lái)決定其后的操作,它有一個(gè)入口和兩個(gè)出口;用來(lái)表示一般的數(shù)據(jù)處理;表示算法執(zhí)行流程;用來(lái)鏈接畫在不同地點(diǎn)的流程圖。常用流程圖符號(hào)第6頁(yè)/共86頁(yè)3.1程序結(jié)構(gòu)框圖3.1.2
流程圖
例3.4將例3.2中的算法用流程圖表示,如下圖所示。第7頁(yè)/共86頁(yè)3.1程序結(jié)構(gòu)框圖3.1.3
N-S圖
N-S圖是程序算法的另一種圖形表示,它是由美國(guó)人I.Nassi和B.Shneiderman共同提出來(lái)的,其依據(jù)是:因?yàn)槿魏嗡惴ǘ际怯身樞蚪Y(jié)構(gòu)、分支(選擇)結(jié)構(gòu)、循環(huán)結(jié)構(gòu)這三種結(jié)構(gòu)所組成,所以可以不需要各結(jié)構(gòu)之間的流程線,全部算法寫在一個(gè)矩形框內(nèi),矩形框內(nèi)由順序、選擇、循環(huán)三種結(jié)構(gòu)組成。第8頁(yè)/共86頁(yè)3.1程序結(jié)構(gòu)框圖3.1.3
N-S圖
3種基本結(jié)構(gòu)的N-S圖順序結(jié)構(gòu):它是按照語(yǔ)句出現(xiàn)的先后順序依次執(zhí)行的。如上圖所示,先執(zhí)行A模塊,再執(zhí)行B模塊。
分支結(jié)構(gòu):它是根據(jù)給定條件進(jìn)行判斷,選擇其中的一個(gè)分支執(zhí)行。如上圖所示,P表示條件,當(dāng)P成立時(shí)執(zhí)行分支A模塊,否則執(zhí)行分支B模塊。當(dāng)型循環(huán):當(dāng)條件滿足時(shí),重復(fù)執(zhí)行某一操作。如上圖所示,當(dāng)條件P為“真”時(shí),反復(fù)執(zhí)行A模塊操作,直到P為“假”時(shí)才終止循環(huán),繼續(xù)執(zhí)行循環(huán)后面的語(yǔ)句。直到型循環(huán):它是先執(zhí)行循環(huán)體操作,再判斷條件,如果條件滿足,則繼續(xù)執(zhí)行循環(huán)體操作,直到條件不滿足時(shí),才退出循環(huán)。如上圖所示,首先執(zhí)行A模塊操作,然后再判斷給定的條件P是否成立,如果成立,反復(fù)執(zhí)行A模塊操作,直到條件P不成立。第9頁(yè)/共86頁(yè)3.1程序結(jié)構(gòu)框圖3.1.3
N-S圖
例3.6將例3.2中的算法用N-S圖表示,如下圖所示。第10頁(yè)/共86頁(yè)3.1程序結(jié)構(gòu)框圖3.1.4
結(jié)構(gòu)化程序設(shè)計(jì)
結(jié)構(gòu)化程序設(shè)計(jì)的基本思想是:任何程序都由順序結(jié)構(gòu)、分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)這三種基本結(jié)構(gòu)組成。結(jié)構(gòu)化程序:由3種基本結(jié)構(gòu)經(jīng)過(guò)反復(fù)組合、嵌套構(gòu)成的程序。結(jié)構(gòu)化程序設(shè)計(jì)方法:自頂向下,逐步細(xì)化模塊化設(shè)計(jì)結(jié)構(gòu)化編碼第11頁(yè)/共86頁(yè)3.1程序結(jié)構(gòu)框圖3.1.4
結(jié)構(gòu)化程序設(shè)計(jì)
結(jié)構(gòu)化程序設(shè)計(jì)具有以下特點(diǎn):一個(gè)程序單元由順序、分支、循環(huán)這3種基本結(jié)構(gòu)組成。3種基本結(jié)構(gòu)經(jīng)過(guò)反復(fù)嵌套,可以表示任何復(fù)雜的算法。一個(gè)大的程序由若干個(gè)不同功能的小模塊組成。每個(gè)小模塊只有一個(gè)入口和一個(gè)出口。程序中不能有無(wú)窮循環(huán)(死循環(huán))。程序中不能有在任何條件下都執(zhí)行不到的語(yǔ)句(死語(yǔ)句)。用結(jié)構(gòu)化思想設(shè)計(jì)出來(lái)的計(jì)算機(jī)程序,具有清晰的模塊界面,因此,在書寫程序時(shí),我們應(yīng)根據(jù)邏輯結(jié)構(gòu)和層次深度的不同,采用縮進(jìn)對(duì)齊的方式,將程序模塊寫在不同的位置,這樣可以提高程序的可讀性,有助于調(diào)試程序,找出程序的邏輯錯(cuò)誤。第12頁(yè)/共86頁(yè)3.1程序結(jié)構(gòu)框圖3.1.5
結(jié)構(gòu)化程序的語(yǔ)句
表達(dá)式語(yǔ)句:由“表達(dá)式+分號(hào)”構(gòu)成。如賦值語(yǔ)句、函數(shù)調(diào)用語(yǔ)句??照Z(yǔ)句:只由一個(gè)分號(hào)構(gòu)成??照Z(yǔ)句執(zhí)行不產(chǎn)生任何動(dòng)作,常用于循環(huán)體中??刂普Z(yǔ)句:完成一定的程序流程控制功能。如if-else,switch-case,for,while,do-while,break,continue,goto,return。復(fù)合語(yǔ)句:由一對(duì)大括號(hào)括起來(lái)的一條或多條語(yǔ)句。被括起來(lái)的語(yǔ)句可以是這4類的任何一類語(yǔ)句,常用于函數(shù)體或循環(huán)體。
第13頁(yè)/共86頁(yè)3.2二分支結(jié)構(gòu)3.2.1
二分支if語(yǔ)句
基本形式:if(表達(dá)式)
語(yǔ)句1;else
語(yǔ)句2;例如:if(x>y)printf(“max=%d”,x);elseprintf(“max=%d”,y);表達(dá)式語(yǔ)句2假(0)真(非0)語(yǔ)句1
返回目錄第14頁(yè)/共86頁(yè)3.2二分支結(jié)構(gòu)3.2.1
二分支if語(yǔ)句
例3.7求兩個(gè)整數(shù)x、y中較大的數(shù),并賦給變量max。解題思路x、y值由輸入函數(shù)輸入,根據(jù)其大小判斷,大的賦給max變量。其N-S圖如圖3.8所示,可以編寫如下程序。#include
<stdio.h>main(){ intx,y,max; printf("Inputx,y="); scanf("%d,%d",&x,&y); if(x>y) max=x; else max=y; printf("Max=%d\n",max);}
第15頁(yè)/共86頁(yè)3.2二分支結(jié)構(gòu)3.2.2
不平衡if語(yǔ)句
基本形式:if(表達(dá)式)
語(yǔ)句;例如:if(x>y)printf(“max=%d”,x);表達(dá)式語(yǔ)句假(0)真(非0)第16頁(yè)/共86頁(yè)3.2二分支結(jié)構(gòu)3.2.2
不平衡if語(yǔ)句
例3.8
設(shè)計(jì)一個(gè)程序,從鍵盤輸入3個(gè)整數(shù),按由小到大的順序輸出。解題思路三個(gè)整數(shù)x、y、z,兩兩比較,始終保持x的值最小,z的值最大,不滿足此條件,則其值進(jìn)行交換。基N-S圖如圖3.10所示,可以編寫出程序如下:#include
<stdio.h>main(){intx,y,z,temp;printf("Inputx,y,z=");scanf("%d,%d,%d",&x,&y,&z);if(x>y){temp=x;x=y;y=temp;}if(x>z){temp=x;x=z;z=temp;}if(y>z){temp=y;y=z;z=temp;}printf("%d,%d,%d\n",x,y,z);}第17頁(yè)/共86頁(yè)3.2二分支結(jié)構(gòu)3.2.3
if語(yǔ)句的嵌套
if(expr1)if(expr2)statement1elsestatement2elseif(expr3)statement3elsestatement4內(nèi)嵌if內(nèi)嵌ifif(expr1)if(expr2)statement1elsestatement2內(nèi)嵌ifif(expr1)if(expr2)statement1elsestatement3
內(nèi)嵌ifif(expr1)statement1elseif(expr3)statement3elsestatement4內(nèi)嵌if●嵌套的一般形式第18頁(yè)/共86頁(yè)3.2二分支結(jié)構(gòu)3.2.3
if語(yǔ)句的嵌套
例3.11計(jì)算分段函數(shù)的值:第19頁(yè)/共86頁(yè)3.2二分支結(jié)構(gòu)3.2.3
if語(yǔ)句的嵌套
#include<stdio.h>#include<math.h>main(){ floatx,y; scanf("%f",&x); if(x<0) y=x; elseif(x<=1)y=exp(x); elseif(x<10)y=log10(x); elsey=sin(x);
printf("Y=%6.2f\n",y);}例3.11計(jì)算分段函數(shù)的值:第20頁(yè)/共86頁(yè)if~else配對(duì)原則:缺省{}時(shí),else總是和它上面離它最近的未配對(duì)的if配對(duì)if(……)if(……)if(……)else…...else…...else…...3.2二分支結(jié)構(gòu)3.2.3
if語(yǔ)句的嵌套
通過(guò)“if語(yǔ)句的嵌套”可實(shí)現(xiàn)“多分支結(jié)構(gòu)”第21頁(yè)/共86頁(yè)3.2二分支結(jié)構(gòu)3.2.3
if語(yǔ)句的嵌套
示例:
if(a==b)if(b==c)printf(“a==b==c”);elseprintf(“a!=b”);修改:if(a==b){if(b==c)printf(“a==b==c”);}elseprintf(“a!=b”);實(shí)現(xiàn)if~else正確配對(duì)方法:加{}第22頁(yè)/共86頁(yè)3.3多分支結(jié)構(gòu)3.3.1
多分支switch語(yǔ)句
if語(yǔ)句的嵌套實(shí)現(xiàn)多分支:
如果分支較多,則嵌套的if語(yǔ)句層數(shù)就越多,程序不但冗長(zhǎng)而且理解也比較困難。因此,C語(yǔ)言又提供了一種專門用于處理多分支結(jié)構(gòu)的條件選擇語(yǔ)句,稱為switch語(yǔ)句,又稱開關(guān)語(yǔ)句。
返回目錄第23頁(yè)/共86頁(yè)3.3多分支結(jié)構(gòu)3.3.1
多分支switch語(yǔ)句
switch語(yǔ)句(開關(guān)語(yǔ)句)一般形式:switch(表達(dá)式){case常量表達(dá)式1:語(yǔ)句組1;break;case常量表達(dá)式2:語(yǔ)句組2;break;
…….case常量表達(dá)式n:語(yǔ)句組n;break;[default:語(yǔ)句組n+1;[break;]]}第24頁(yè)/共86頁(yè)3.3多分支結(jié)構(gòu)3.3.1
多分支switch語(yǔ)句
switch語(yǔ)句(開關(guān)語(yǔ)句)執(zhí)行過(guò)程:switch表達(dá)式語(yǔ)句組1語(yǔ)句組2語(yǔ)句組n語(yǔ)句組n+1...defaultcase常量表達(dá)式1case常量表達(dá)式2case常量表達(dá)式n第25頁(yè)/共86頁(yè)說(shuō)明:
switch后面的表達(dá)式的值類型可以是整型、字符型或枚舉型。當(dāng)表達(dá)式的值與某個(gè)case中的常量表達(dá)式的值相等時(shí),就執(zhí)行相應(yīng)的case后的語(yǔ)句序列,直到遇到break語(yǔ)句或到達(dá)switch結(jié)構(gòu)末尾。多個(gè)連續(xù)的case語(yǔ)句可以共用一個(gè)語(yǔ)句序列。
case后的不同常量表達(dá)式的值不能相等。
break的作用是改變程序在switch結(jié)構(gòu)中的執(zhí)行流程,將程序流程跳出switch語(yǔ)句,轉(zhuǎn)到switch語(yǔ)句后的下一條語(yǔ)句去執(zhí)行。
switch語(yǔ)句中允許嵌套switch語(yǔ)句。
3.3多分支結(jié)構(gòu)3.3.1
多分支switch語(yǔ)句
第26頁(yè)/共86頁(yè)例3.14
從鍵盤輸入一學(xué)生成績(jī),判斷學(xué)生成績(jī)等級(jí)。如果成績(jī)?cè)?0~100分,等級(jí)為“A”,成績(jī)?cè)?0~89分,等級(jí)為“B”,成績(jī)?cè)?0~79分,等級(jí)為“C”,成績(jī)?cè)?0~69分,等級(jí)為“D”,成績(jī)小于60分,等級(jí)為“E”。main(){
intscore;chargrade;
printf(“Inputstudent’sscore:”);
scanf(“%d”,&score);
switch(score/10){case10:
case9:grade=’A’;break;
case8:grade=’B’;break;
case7:grade=’C’;break;
case6:grade=’D’;break;default:grade=’E’;
}printf(“Thestudent’sgradeis%c\n”,grade);}3.3多分支結(jié)構(gòu)3.3.1
多分支switch語(yǔ)句
表達(dá)式score/10的值為10和9時(shí)共用相同的語(yǔ)句序列。
第27頁(yè)/共86頁(yè)3.3多分支結(jié)構(gòu)3.3.2
多分支結(jié)構(gòu)綜合舉例
例3.15計(jì)算分段函數(shù)的值:
下面使用4種不同的方法實(shí)現(xiàn)該程序,以展現(xiàn)C語(yǔ)言多分支結(jié)構(gòu)的風(fēng)格。
第28頁(yè)/共86頁(yè)3.3多分支結(jié)構(gòu)3.3.2
多分支結(jié)構(gòu)綜合舉例
(1)使用不嵌套的if語(yǔ)句編程:#include<stdio.h>main(){ floatx,y;
scanf(“%f”,&x);
if(x<0) y=0;
if(0<=x&&x<10) y=x;
if(10<=x&&x<20) y=10;
if(20<=x&&x<40)
y=0.5*x+20;
if(x>=40)
y=40+x; printf(“y=%5.2f\n”,y);}第29頁(yè)/共86頁(yè)3.3多分支結(jié)構(gòu)3.3.2
多分支結(jié)構(gòu)綜合舉例
(2)使用嵌套的if語(yǔ)句編程:#include<stdio.h>main(){ floatx,y;
scanf(“%f”,&x);
if(x>=0) { if(x>=10) { if(x>=20) { if(x>=40) y=40+x;
else y=0.5*x+20;
} else y=10;
} else y=x;
} else y=0; printf(“y=%5.2f\n”,y);}第30頁(yè)/共86頁(yè)3.3多分支結(jié)構(gòu)3.3.2
多分支結(jié)構(gòu)綜合舉例
(3)使用if~else形式編程:#include<stdio.h>main(){ floatx,y; scanf(“%f”,&x); if(x<0)y=0;
elseif(x<10)y=x;
elseif(x<20) y=10;
elseif(x<40)y=0.5*x+20;
elsey=40+x; printf(“y=%5.2f\n”,y);}第31頁(yè)/共86頁(yè)3.3多分支結(jié)構(gòu)3.3.2
多分支結(jié)構(gòu)綜合舉例
(4)使用switch語(yǔ)句編程:#include<stdio.h>main(){floatx,y;intz;scanf(“%f”,&x);
z=(int)(x/10);if(x<0)z=-1;
switch(z){case–1:y=0;
break;
case0:y=x;
break;
case1:y=10;
break;
case2:
case3:y=0.5*x+20;break;
default:y=40+x;
}printf(“y=%5.2f\n”,y);}第32頁(yè)/共86頁(yè)
返回目錄3.4循環(huán)結(jié)構(gòu)3.4.0
引例
例3.16求s=1+2+3+…+100之和。解題思路設(shè)變量s存儲(chǔ)累加和,其初值為0,變量n作為循環(huán)變量,其值由1變化到100,將n的每一個(gè)值累加到s變量,則可以實(shí)現(xiàn)上述算法。(利用目前所學(xué)知識(shí)能編寫如下程序)
#include<stdio.h>
main()
{ ints=0,n=0;
n=n+1;
s=s+n;
n=n+1;
s=s+n;
…
printf(“s=%d\n”,s);
}在上例中,n=n+1;和s=s+n;兩語(yǔ)句會(huì)在程序中反復(fù)出現(xiàn)100次,使程序變得很長(zhǎng)。為解決這一問(wèn)題,C語(yǔ)言引入了循環(huán)結(jié)構(gòu)。C語(yǔ)言中實(shí)現(xiàn)循環(huán)結(jié)構(gòu)的語(yǔ)句有for語(yǔ)句、while語(yǔ)句和do~while語(yǔ)句。第33頁(yè)/共86頁(yè)3.4循環(huán)結(jié)構(gòu)3.4.1
for語(yǔ)句
for語(yǔ)句的一般形式
for(表達(dá)式1;表達(dá)式2;表達(dá)式3)循環(huán)體; 例如:
for(s=0,n=1;n<=100;n++) s=s+n;第34頁(yè)/共86頁(yè)for語(yǔ)句的執(zhí)行過(guò)程(1)計(jì)算表達(dá)式1;(2)計(jì)算表達(dá)式2,若其值為非0,則執(zhí)行第3步;若為0,則轉(zhuǎn)向第6步執(zhí)行;(3)執(zhí)行循環(huán)體;(4)計(jì)算表達(dá)式3;(5)跳轉(zhuǎn)到第2步繼續(xù)執(zhí)行;(6)終止循環(huán),執(zhí)行for語(yǔ)句后的下一條語(yǔ)句。3.4循環(huán)結(jié)構(gòu)3.4.1
for語(yǔ)句
第35頁(yè)/共86頁(yè)例3.17例3.16用for語(yǔ)句實(shí)現(xiàn),程序如下:#include<stdio.h>main(){ ints,n; for(s=0,n=1;n<=100;n++) s=s+n; printf(“s=%d\n”,s);}3.4循環(huán)結(jié)構(gòu)3.4.1
for語(yǔ)句
第36頁(yè)/共86頁(yè)for語(yǔ)句的說(shuō)明3.4循環(huán)結(jié)構(gòu)(1)在for語(yǔ)句中,若表達(dá)式1缺省,則必須將表達(dá)式1作為語(yǔ)句安排在for語(yǔ)句之前。
例3.17例3.16用for語(yǔ)句實(shí)現(xiàn),可以編寫如下程序:#include<stdio.h>main(){ ints,n; s=0;n=1; for(;n<=100;n++) s=s+n; printf(“s=%d\n”,s);}3.4.1
for語(yǔ)句
第37頁(yè)/共86頁(yè)for語(yǔ)句的說(shuō)明3.4循環(huán)結(jié)構(gòu)(2)在for語(yǔ)句中,若表達(dá)式2缺省,則系統(tǒng)默認(rèn)循環(huán)控制條件為真(非0值),此時(shí),如果不在循環(huán)體中加其它語(yǔ)句進(jìn)行控制,循環(huán)將無(wú)限制進(jìn)行下去,即出現(xiàn)死循環(huán)。例3.17例3.16用for語(yǔ)句實(shí)現(xiàn),可以編寫如下程序:#include<stdio.h>main(){ ints,n;
for(s=0,n=1;;n++) { if(n>100)break; s=s+n; } printf(“s=%d\n”,s);}3.4.1
for語(yǔ)句
第38頁(yè)/共86頁(yè)for語(yǔ)句的說(shuō)明3.4循環(huán)結(jié)構(gòu)(3)在for語(yǔ)句中,若表達(dá)式3缺省,可將它的語(yǔ)句放在循環(huán)體的最后。例3.17例3.16用for語(yǔ)句實(shí)現(xiàn),可以編寫如下程序:#include<stdio.h>main(){ ints,n;
for(s=0,n=1;n<=100;) { s=s+n; n++; } printf(“s=%d\n”,s);}3.4.1
for語(yǔ)句
第39頁(yè)/共86頁(yè)for語(yǔ)句的說(shuō)明3.4循環(huán)結(jié)構(gòu)(4)在for語(yǔ)句中三個(gè)表達(dá)式都可以缺省,但其中的兩個(gè)分號(hào)不可省。例3.17例3.16用for語(yǔ)句實(shí)現(xiàn),可以編寫如下程序:#include<stdio.h>main(){ ints=0,n=1; for(;;) { s=s+n; n=n+1; if(n>100)break; }
printf(“s=%d\n”,s);}3.4.1
for語(yǔ)句
第40頁(yè)/共86頁(yè)for語(yǔ)句的說(shuō)明3.4循環(huán)結(jié)構(gòu)(5)循環(huán)體可以為空語(yǔ)句,但必須有分號(hào)(即循環(huán)為空語(yǔ)句)例3.17例3.16用for語(yǔ)句實(shí)現(xiàn),可以編寫如下程序:#include<stdio.h>main(){ ints,n; for(s=0,n=1;n<=100;s=s+n,n++)
; printf(“s=%d\n”,s);}3.4.1
for語(yǔ)句
第41頁(yè)/共86頁(yè)思考與練習(xí):
例3.16用for語(yǔ)句實(shí)現(xiàn),相應(yīng)的程序在前面已經(jīng)例舉了多種方法,請(qǐng)同學(xué)們?cè)囉闷渌赡艿姆椒ň帉懗绦?。另外,?.16還可以用while語(yǔ)句、do-while語(yǔ)句、if+goto等方法實(shí)現(xiàn)。這說(shuō)明,對(duì)于某個(gè)實(shí)際的編程問(wèn)題,可以編寫出很多種程序來(lái)解決同一問(wèn)題。所以,對(duì)我們初學(xué)者來(lái)說(shuō),關(guān)鍵是要多學(xué)習(xí)、勤練習(xí),熟則能生巧,到時(shí),編寫起程序來(lái)就游刃有余了!
加油吧!!3.4循環(huán)結(jié)構(gòu)3.4.1
for語(yǔ)句
第42頁(yè)/共86頁(yè)3.4循環(huán)結(jié)構(gòu)3.4.2
while語(yǔ)句
while語(yǔ)句的一般形式
while(表達(dá)式)循環(huán)體; 例如:
intn,s; n=1; s=0; while(n<=100) { s=s+n; n++; }第43頁(yè)/共86頁(yè)3.4循環(huán)結(jié)構(gòu)3.4.2
while語(yǔ)句
while語(yǔ)句的執(zhí)行過(guò)程首先計(jì)算和判斷表達(dá)式的值,如果表達(dá)式的值為“真”(非0),則執(zhí)行循環(huán)體,然后程序轉(zhuǎn)回去再計(jì)算和判斷表達(dá)式的值,直到表達(dá)式的值為“假”(0),終止while循環(huán),繼續(xù)執(zhí)行while語(yǔ)句后的下一語(yǔ)句。第44頁(yè)/共86頁(yè)3.4循環(huán)結(jié)構(gòu)3.4.2
while語(yǔ)句
示例例3.16用while語(yǔ)句實(shí)現(xiàn),可以編寫如下程序:#include<stdio.h>main(){ ints,n; s=0;n=1; while(n<=100) { s=s+n; n++; } printf(“s=%d\n”,s);}第45頁(yè)/共86頁(yè)3.4循環(huán)結(jié)構(gòu)3.4.3
do-while語(yǔ)句
do-while語(yǔ)句的一般形式
do {循環(huán)體;
}while(表達(dá)式) 例如:
intn=1,s=0; do { s=s+n; n++; }while(n<=100);第46頁(yè)/共86頁(yè)3.4循環(huán)結(jié)構(gòu)3.4.3
do-while語(yǔ)句
do-while語(yǔ)句的執(zhí)行過(guò)程
do-while語(yǔ)句的作用是無(wú)條件地先執(zhí)行循環(huán)體一次(無(wú)論表達(dá)式的值是否為0或非0),所以又稱為“直到型循環(huán)”。循環(huán)體執(zhí)行一次后,計(jì)算和判斷表達(dá)式的值,若表達(dá)式的值為“真”(非0),則程序轉(zhuǎn)回去反復(fù)執(zhí)行循環(huán)體,直到表達(dá)式的值為“假”(0),終止do-while語(yǔ)句,繼續(xù)執(zhí)行do-while語(yǔ)句后的下一條語(yǔ)句。第47頁(yè)/共86頁(yè)3.4循環(huán)結(jié)構(gòu)3.4.3
do-while語(yǔ)句
示例例3.16用do-while語(yǔ)句實(shí)現(xiàn),可以編寫如下程序:#include<stdio.h>main(){ ints,n; s=0;n=1; do { s=s+n; n++; }while(n<=100); printf(“s=%d\n”,s);}第48頁(yè)/共86頁(yè)3.4循環(huán)結(jié)構(gòu)3.4.4循環(huán)嵌套
循環(huán)嵌套:指一個(gè)循環(huán)完全包含在另一個(gè)循環(huán)的循環(huán)體中。while循環(huán)、do-while循環(huán)和for循環(huán)都可以互相嵌套。二重循環(huán)的執(zhí)行過(guò)程是外循環(huán)執(zhí)行一次,內(nèi)循環(huán)執(zhí)行一遍,直至內(nèi)循環(huán)結(jié)束后,才能再進(jìn)行一次外循環(huán),如此反復(fù),直到外循環(huán)結(jié)束。內(nèi)、外循環(huán)控制變量一般不能相同.第49頁(yè)/共86頁(yè)示例下面是for語(yǔ)句的二重循環(huán)嵌套程序,試分析其功能:#include<stdio.h>main(){ inti,j; for(i=1;i<=9;i++) { for(j=1;j<=i;j++) printf(“%d*%d=%d\t”,i,j,i*j); printf(“\n”); }}3.4循環(huán)結(jié)構(gòu)3.4.4循環(huán)嵌套
第50頁(yè)/共86頁(yè)3.4循環(huán)結(jié)構(gòu)3.4.4循環(huán)嵌套
上例二重循環(huán)嵌套程序的執(zhí)行結(jié)果如下:第51頁(yè)/共86頁(yè)3.5.1
break語(yǔ)句
break語(yǔ)句的一般形式
break;break語(yǔ)句經(jīng)常放在循環(huán)語(yǔ)句的循環(huán)體中,且通常和if語(yǔ)句一起使用。作用:在滿足一定條件時(shí),提前退出本層循環(huán)(不管循環(huán)控制條件是否成立),使程序流程轉(zhuǎn)向該循環(huán)結(jié)構(gòu)后的下一條語(yǔ)句執(zhí)行。3.5
break、continue及goto語(yǔ)句
返回目錄第52頁(yè)/共86頁(yè)3.5.1
break語(yǔ)句
break語(yǔ)句的示例例3.28求s=1+2+3+…+100之和。程序如下:#include<stdio.h>main(){ ints=0,n=1;
while(1) { s=s+n;
n++; if(n>100)break; } printf(“s=%d\n”,s);}在程序中,while循環(huán)的循環(huán)條件為1,是一死循環(huán),退出該循環(huán)的辦法是在循環(huán)體中加一條件和break語(yǔ)句,滿足n>100時(shí),即退出循環(huán)。3.5
break、continue及goto語(yǔ)句第53頁(yè)/共86頁(yè)3.5.2
continue語(yǔ)句
continue語(yǔ)句的一般形式
continue;continue語(yǔ)句經(jīng)常放在循環(huán)語(yǔ)句的循環(huán)體中。作用:是結(jié)束本次循環(huán),即跳過(guò)循環(huán)體中某些還沒(méi)有被執(zhí)行的語(yǔ)句,開始新的一次循環(huán)。與break比較:continue僅結(jié)束本次循環(huán),而break是結(jié)束整個(gè)循環(huán)語(yǔ)句的執(zhí)行。3.5
break、continue及goto語(yǔ)句第54頁(yè)/共86頁(yè)3.5.2
continue語(yǔ)句
continue語(yǔ)句的示例例3.30
從鍵盤輸入10個(gè)不為0的整數(shù),統(tǒng)計(jì)其中負(fù)數(shù)的個(gè)數(shù),并求所有正數(shù)的平均值。解題思路程序中count用于統(tǒng)計(jì)負(fù)數(shù)個(gè)數(shù),avg在循環(huán)結(jié)構(gòu)中用于統(tǒng)計(jì)正數(shù)和,循環(huán)結(jié)束后用于計(jì)算平均值.#include<stdio.h>main(){intn,count=0,x;
floatavg=0;
for(n=0;n<10;n++)
{scanf(“%d”,&x);
if(x>0){avg=avg+x;continue;}count++;
}if(count!=10)avg/=10-count;
printf(“Count=%d,average=%f\n”,count,avg);}3.5
break、continue及goto語(yǔ)句第55頁(yè)/共86頁(yè)3.5
break、continue及goto語(yǔ)句3.5.3
goto語(yǔ)句
goto語(yǔ)句的一般形式
goto語(yǔ)句標(biāo)號(hào);作用:使程序的流程無(wú)條件轉(zhuǎn)移到相應(yīng)語(yǔ)句標(biāo)號(hào)處。goto語(yǔ)句一般和if語(yǔ)句一起使用,構(gòu)成循環(huán)。語(yǔ)句標(biāo)號(hào)是對(duì)語(yǔ)句的標(biāo)識(shí),應(yīng)是合法的標(biāo)識(shí)符,即只能由字母、數(shù)字和下劃線組成,且第一字符必須是字母或下劃線。注意:不能用一個(gè)整數(shù)作為語(yǔ)句標(biāo)號(hào)。goto語(yǔ)句是非結(jié)構(gòu)化語(yǔ)句,大量使用會(huì)造成程序流向混亂,可讀性差,因此結(jié)構(gòu)化程序設(shè)計(jì)一般不用goto語(yǔ)句.第56頁(yè)/共86頁(yè)3.5
break、continue及goto語(yǔ)句3.5.3
goto語(yǔ)句
goto語(yǔ)句的示例構(gòu)造當(dāng)型循環(huán)(先判斷循環(huán)控制條件),程序如下:#include<stdio.h>main(){ intn=1,s=0;
loop:if(n<=100){s=s+n;n++;gotoloop;}printf(“s=%d\n”,s);}例3.31求s=1+2+3+…+100之和。構(gòu)造直到型循環(huán)(先執(zhí)行循環(huán)體1次,后判斷循環(huán)體控制條件),程序如下:#include<stdio.h>main(){intn=1,s=0;
loop:s=s+n;n++;if(n<=100)gotoloop;printf(“s=%d\n”,s);}第57頁(yè)/共86頁(yè)3.6習(xí)題三●單項(xiàng)選擇題
結(jié)構(gòu)化程序模塊不具有的特征是____.
A)只有一個(gè)入口和一個(gè)出口
B)要盡量多使用goto語(yǔ)句
C)一般有順序、選擇和循環(huán)三種基本結(jié)構(gòu)
D)程序中不能有死循環(huán)C語(yǔ)言中,邏輯“真”等價(jià)于____.
A)整數(shù)1 B)整數(shù)0
C)非0數(shù) D)TRUE3)以下4條語(yǔ)句中,有語(yǔ)法錯(cuò)誤的是____.
A)if(a>b)m=a;
B)if(a<b)m=b;
C)if((a=b)>=0)m=a;
D)if((a=b;)>=0)m=a;BCD
返回目錄第58頁(yè)/共86頁(yè)3.6習(xí)題三●單項(xiàng)選擇題
4)若i,j均為整型變量,則以下循環(huán)____. for(i=0,j=2;j=1;i++,j--) printf("%5d,%d\n",i,j);
A)循環(huán)體只執(zhí)行一次 B)循環(huán)體執(zhí)行二次
C)是無(wú)限循環(huán) D)循環(huán)條件不合法5)以下程序段,執(zhí)行結(jié)果為____. a=1; do {a=a*a; }while(!a);A)循環(huán)體只執(zhí)行一次 B)循環(huán)體執(zhí)行二次
C)是無(wú)限循環(huán) D)循環(huán)條件不合法CA第59頁(yè)/共86頁(yè)3.6習(xí)題三●單項(xiàng)選擇題
6)C語(yǔ)言中while與do-while語(yǔ)句的主要區(qū)別是____.
A)do-while的循環(huán)體至少無(wú)條件執(zhí)行一次
B)do-while允許從外部跳到循環(huán)體內(nèi)
C)while的循環(huán)體至少無(wú)條件執(zhí)行一次
D)while的循環(huán)控制條件比do-while的嚴(yán)格7)語(yǔ)句while(!a);中條件等價(jià)于____.
A)a!=0
B)~a
C)a==1
D)a==0AD第60頁(yè)/共86頁(yè)3.6習(xí)題三●單項(xiàng)選擇題
8)以下程序的運(yùn)行結(jié)果為____.#include<stdio.h>main(){ inti=1,sum=0; while(i<=100) sum+=i; i++; printf("1+2+3+...+99+100=%d",sum);}A)5050 B)1
C)0
D)程序陷入死循環(huán)D第61頁(yè)/共86頁(yè)3.6習(xí)題三●單項(xiàng)選擇題
9)以下程序的運(yùn)行結(jié)果為____.#include<stdio.h>main(){ intsum,pad;
sum=pad=5; pad=sum++; pad++; ++pad; printf("%d\n",pad);}A)7 B)6
C)5
D)4A第62頁(yè)/共86頁(yè)3.6習(xí)題三●單項(xiàng)選擇題
10)以下程序的運(yùn)行結(jié)果為____.#include<stdio.h>main(){ inta=2,b=10;
printf("a=%%d,b=%%d\n",a,b);}A)a=%2,b=%10 B)a=2,b=10C)a=%%d,b=%%d D)a=%d,b=%dD第63頁(yè)/共86頁(yè)3.6習(xí)題三●單項(xiàng)選擇題
11)為了避免嵌套的if-else語(yǔ)句的二義性,C語(yǔ)言規(guī)定else總是____.
A)與縮排位置相同的if組成配對(duì)關(guān)系
B)與在其之前未配對(duì)的if組成配對(duì)關(guān)系
C)與在其之前未配對(duì)的最近的if組成配對(duì)關(guān)系
D)與同一行上的if組成配對(duì)關(guān)系12)對(duì)于for(表達(dá)式1;;表達(dá)式3)可理解為____.
A)for(表達(dá)式1;0;表達(dá)式3)
B)for(表達(dá)式1;1;表達(dá)式3)
C)for(表達(dá)式1;表達(dá)式1;表達(dá)式3)
D)for(表達(dá)式1;表達(dá)式3;表達(dá)式3)CB第64頁(yè)/共86頁(yè)3.6習(xí)題三●程序填空題
1.下面程序的功能是計(jì)算n!。#include<stdio.h>main(){ inti,n; longp; printf("Pleaseinputanumber:\n"); scanf("%d",&n); p=_____________; for(i=2;i<=n;i++) ________________; printf("n!=%ld",p);}1p=p*i;或p*=i;第65頁(yè)/共86頁(yè)3.6習(xí)題三●程序填空題
2.下面程序的功能是:從鍵盤上輸入若干學(xué)生的成績(jī),統(tǒng)計(jì)并輸出最高和最低成績(jī),當(dāng)輸入負(fù)數(shù)時(shí)結(jié)束輸入。#include<stdio.h>main(){floatscore,max,min;printf("Pleaseinputonescore:\n");scanf("%d",&score);max=min=score;while(_____________){if(score>max)max=score;if(______________)min=score;printf("Pleaseinputanotherscore:\n");scanf("%d",&score);}printf("\nThemaxscoreis%f\nTheminscoreis%f",max,min);}score>=0score<min第66頁(yè)/共86頁(yè)3.6習(xí)題三●程序填空題
3.下面程序的功能是:計(jì)算y=的值。要求從鍵盤上輸入x的值,精度控制在0.00001內(nèi)。#include<stdio.h>#include<math.h>main(){floatx,y=0,fz=-1,fm=-1,temp=1;printf("Pleaseinputthevalueofx:\n");scanf("%f",&x);while(_____________){fz=___________;fm=fm+2;temp=fz/fm;y+=temp;}printf("\ny=%f",y);}abs(temp)>0.00001-fz*x第67頁(yè)/共86頁(yè)3.6習(xí)題三●程序填空題
4.下面的程序完成兩個(gè)數(shù)的四則運(yùn)算。用戶輸入一個(gè)實(shí)現(xiàn)兩個(gè)數(shù)的四則運(yùn)算的表達(dá)式,程序采用switch語(yǔ)句對(duì)其運(yùn)算進(jìn)行判定后執(zhí)行相應(yīng)的運(yùn)算并給出結(jié)果。#include<stdio.h>main(){ floatx,y; charop; printf("PleaseinputExpression:"); scanf("%f%c%f",&x,&op,&y); ___________ { case'+': printf("%g%c%g=%g\n",___________); ___________;switch(op)x,op,y,x+ybreak第68頁(yè)/共86頁(yè)3.6習(xí)題三●程序填空題
case'-': printf("%g%c%g=%g\n",x,op,y,x-y); break; case'*': printf("%g%c%g=%g\n",x,op,y,x*y); break; case'/': if(___________________________) printf("DivisionError!\n"); else printf("%g%c%g=%g\n",x,op,y,x/y); break; default:printf("ExpressionError!\n"); }}(y>=-1e-6)&&(y<=1e-6)第69頁(yè)/共86頁(yè)3.6習(xí)題三●程序填空題
case'-': printf("%g%c%g=%g\n",x,op,y,x-y); break; case'*': printf("%g%c%g=%g\n",x,op,y,x*y); break; case'/': if(___________________________) printf("DivisionError!\n"); else printf("%g%c%g=%g\n",x,op,y,x/y); break; default:printf("ExpressionError!\n"); }}(y>=-1e-6)&&(y<=1e-6)此處填y==0.0不妥原因:無(wú)論是float還是double類型的變量,都有精度限制。所以一定要避免將浮點(diǎn)變量用“==”或“!=”與數(shù)字比較,應(yīng)該設(shè)法轉(zhuǎn)化成“>=”或“<=”形式。假設(shè)浮點(diǎn)變量的名字為y,應(yīng)當(dāng)將
if(y==0.0) //隱含錯(cuò)誤的比較轉(zhuǎn)化為:if((y>=-EPSINON)&&(y<=EPSINON))其中EPSINON是允許的誤差(即精度)。
第70頁(yè)/共86頁(yè)3.6習(xí)題三●編程題
1.給出三角形的三邊a、b、c,求三角形的面積。(應(yīng)先判斷a、b、c三邊是否能構(gòu)成一個(gè)三角形)。#include<stdio.h>#include<math.h>main(){
floata,b,c,area,p;
scanf("%f,%f,%f",&a,&b,&c);
p=(a+b+c)/2;
if(a+b>c&&a+c>b&&b+c>a)
{
area=sqrt(p*(p-a)*(p-b)*(p-c));
printf("Area=%6.2f\n",area);
}
elseprintf("Error\n");}第71頁(yè)/共86頁(yè)3.6習(xí)題三●編程題
2.輸入四個(gè)整數(shù),要求將它們按由小到大的順序輸出。#include<stdio.h>main(){
inta,b,c,d,t;
scanf("%d,%d,%d,%d",&a,&b,&c,&d);
if(a>b) {t=a;a=b;b=t;}
if(a>c) {t=a;a=c;c=t;}
if(a>d) {t=a;a=d;d=t;}
if(b>c) {t=b;b=c;c=t;}
if(b>d) {t=b;b=d;d=t;}
if(c>d) {t=c;c=d;d=t;}
printf("%d,%d,%d,%d\n",a,b,c,d);}第72頁(yè)/共86頁(yè)3.某幼兒園只收2至6歲的小孩,2~3歲編入小班,4歲編入中班,5~6歲編入大班,編制程序?qū)崿F(xiàn)每輸入一個(gè)年齡,輸出該編入什么班。3.6習(xí)題三●編程題
#include<stdio.h>main(){
intage;
scanf("%d",&age);
switch(age)
{
case2:
case3:printf("Smallclass\n");break;
case4:printf("Middleclass\n");break;
case5:
case6:printf("Largeclass\n");break;
default:printf("Error\n");
}}第73頁(yè)/共86頁(yè)3.6習(xí)題三●編程題
4.輸入一元二次方程的三個(gè)系數(shù)a、b、c,求出該方程所有可能的根。#include<stdio.h>#include<math.h>main(){floata,b,c,d,x1,x2;
scanf("%f,%f,%f",&a,&b,&c);
d=b*b-4*a*c;
if(fabs(a)<=1e-6)
if(fabs(b)<=1e-6)
if(fabs(c)<=1e-6)
printf("Theequation’srootisinnumerable\n.");
else
printf("None\n");
else
printf("Theequation’srootis%f\n",-c/b);
else if(fabs(d)<=1e-6)printf("x1=x2=%f\n",-b/(2*a));第74頁(yè)/共86頁(yè)
else
if(d>1e-6)
{x1=(-b+sqrt(d))/(2*a);
x2=(-b-sqrt(d))/(2*a);
printf("Theequation’srootis");
printf("x1=%f,x2=%f\n",x1,x2);
}
else
{
x1=-b/(2*a);
x2=sqrt(-d)/(2*a);
printf("Theequation’srootis%f+I%f\n",x1,x2);
printf("Theequation’srootis%f-I%f\n",x1,x2);
}}3.6習(xí)題三●編程題
4.輸入一元二次方程的三個(gè)系數(shù)a、b、c,求出該方程所有可能的根。第75頁(yè)/共86頁(yè)3.6習(xí)題三●編程題
5.編程求s=1-1/2+1/3-1/4+…-1/100。#include<stdio.h>main(){ intn,flag=1; floats=0; for(n=1;n<=100;n++) { s=s+1.0*flag/n; flag=-flag; } printf("%f\n",s);}第76頁(yè)/共86頁(yè)3.6習(xí)題三●編程題
6.編程求1!+2!+3!+…+10!之和。#include<stdio.h>main(){
longints=0,p=1;
intn;
for(
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 吸入劑護(hù)理科普
- 養(yǎng)老院老人健康信息管理規(guī)范制度
- 聽(tīng)診胎心音技術(shù)
- 老年終末期認(rèn)知功能評(píng)估的時(shí)效性優(yōu)化方案
- 老年終末期尿失禁的護(hù)理干預(yù)方案循證框架
- 中藥酒(酊)劑工崗前安全實(shí)踐考核試卷含答案
- 水解蒸餾工持續(xù)改進(jìn)考核試卷含答案
- 老年糖尿病合并高血壓的綜合管理策略-1
- 名著介紹教學(xué)課件
- 黃酒釀造工崗前技巧考核試卷含答案
- 云南省玉溪市2025-2026學(xué)年八年級(jí)上學(xué)期1月期末物理試題(原卷版+解析版)
- 2026年哈爾濱通河縣第一批公益性崗位招聘62人考試參考試題及答案解析
- 六年級(jí)寒假家長(zhǎng)會(huì)課件
- 就業(yè)協(xié)議書解約函模板
- 物流鐵路專用線工程節(jié)能評(píng)估報(bào)告
- DL-T976-2017帶電作業(yè)工具、裝置和設(shè)備預(yù)防性試驗(yàn)規(guī)程
- 建筑材料進(jìn)場(chǎng)報(bào)告
- YY/T 1543-2017鼻氧管
- YS/T 903.1-2013銦廢料化學(xué)分析方法第1部分:銦量的測(cè)定EDTA滴定法
- GB/T 9414.9-2017維修性第9部分:維修和維修保障
- GB/T 21781-2008化學(xué)品的熔點(diǎn)及熔融范圍試驗(yàn)方法毛細(xì)管法
評(píng)論
0/150
提交評(píng)論