C語言程序設(shè)計框圖_第1頁
C語言程序設(shè)計框圖_第2頁
C語言程序設(shè)計框圖_第3頁
C語言程序設(shè)計框圖_第4頁
C語言程序設(shè)計框圖_第5頁
已閱讀5頁,還剩81頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

C語言程序設(shè)計框圖C語言程序設(shè)計框圖全文共86頁,當(dāng)前為第1頁。目錄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語句

返回總目錄C語言程序設(shè)計框圖全文共86頁,當(dāng)前為第2頁?!窕疽螅?/p>

1)熟悉C語言的程序結(jié)構(gòu)框圖;

2)熟悉C語言的二分支結(jié)構(gòu)、多分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu);

3)熟練掌握結(jié)構(gòu)化程序設(shè)計方法。●學(xué)習(xí)重點:

1)流程圖、N-S圖、循環(huán)結(jié)構(gòu);

2)結(jié)構(gòu)化程序設(shè)計方法。

C語言程序設(shè)計框圖全文共86頁,當(dāng)前為第3頁。3.1程序結(jié)構(gòu)框圖3.1.1

自然語言描述

程序設(shè)計的關(guān)鍵是算法。算法是實際問題求解步驟的描述。有了正確有效的算法,就可以用任何一種計算機(jī)語言編寫程序,解決各種問題。算法可采用自然語言、流程圖或N-S圖等進(jìn)行描述。自然語言描述:用人們?nèi)粘K褂玫恼Z言(如英語、漢語)進(jìn)行算法的描述。

返回目錄C語言程序設(shè)計框圖全文共86頁,當(dāng)前為第4頁。3.1程序結(jié)構(gòu)框圖3.1.1

自然語言描述

例3.2求s=1+2+3+…+100之和。解題思路要將1~100累加到s變量上去,如果采用先初始化變量s=0,然后用語句序列s=s+1;s=s+2;…則要重復(fù)寫100個加法賦值語句,很顯然,這種算法不可取。改用下述算法。算法步驟:(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變量的值。C語言程序設(shè)計框圖全文共86頁,當(dāng)前為第5頁。3.1程序結(jié)構(gòu)框圖3.1.2

流程圖

流程圖是一種傳統(tǒng)的算法描述方法,它用幾種不同的幾何圖來代表不同性質(zhì)的操作;用流程線來指示算法的執(zhí)行方向.用流程圖表示的算法簡單直觀,容易轉(zhuǎn)化成相應(yīng)的語言程序。C語言程序設(shè)計框圖全文共86頁,當(dāng)前為第6頁。3.1程序結(jié)構(gòu)框圖3.1.2

流程圖

表示算法的開始或結(jié)束;表示數(shù)據(jù)的輸入和輸出;在實際中輸入輸出也常用矩形框表示。用來對給定的條件進(jìn)行判斷,根據(jù)條件成立與否來決定其后的操作,它有一個入口和兩個出口;用來表示一般的數(shù)據(jù)處理;表示算法執(zhí)行流程;用來鏈接畫在不同地點的流程圖。常用流程圖符號C語言程序設(shè)計框圖全文共86頁,當(dāng)前為第7頁。3.1程序結(jié)構(gòu)框圖3.1.2

流程圖

例3.4將例3.2中的算法用流程圖表示,如下圖所示。C語言程序設(shè)計框圖全文共86頁,當(dāng)前為第8頁。3.1程序結(jié)構(gòu)框圖3.1.3

N-S圖

N-S圖是程序算法的另一種圖形表示,它是由美國人I.Nassi和B.Shneiderman共同提出來的,其依據(jù)是:因為任何算法都是由順序結(jié)構(gòu)、分支(選擇)結(jié)構(gòu)、循環(huán)結(jié)構(gòu)這三種結(jié)構(gòu)所組成,所以可以不需要各結(jié)構(gòu)之間的流程線,全部算法寫在一個矩形框內(nèi),矩形框內(nèi)由順序、選擇、循環(huán)三種結(jié)構(gòu)組成。C語言程序設(shè)計框圖全文共86頁,當(dāng)前為第9頁。3.1程序結(jié)構(gòu)框圖3.1.3

N-S圖

3種基本結(jié)構(gòu)的N-S圖順序結(jié)構(gòu):它是按照語句出現(xiàn)的先后順序依次執(zhí)行的。如上圖所示,先執(zhí)行A模塊,再執(zhí)行B模塊。

分支結(jié)構(gòu):它是根據(jù)給定條件進(jìn)行判斷,選擇其中的一個分支執(zhí)行。如上圖所示,P表示條件,當(dāng)P成立時執(zhí)行分支A模塊,否則執(zhí)行分支B模塊。當(dāng)型循環(huán):當(dāng)條件滿足時,重復(fù)執(zhí)行某一操作。如上圖所示,當(dāng)條件P為“真”時,反復(fù)執(zhí)行A模塊操作,直到P為“假”時才終止循環(huán),繼續(xù)執(zhí)行循環(huán)后面的語句。直到型循環(huán):它是先執(zhí)行循環(huán)體操作,再判斷條件,如果條件滿足,則繼續(xù)執(zhí)行循環(huán)體操作,直到條件不滿足時,才退出循環(huán)。如上圖所示,首先執(zhí)行A模塊操作,然后再判斷給定的條件P是否成立,如果成立,反復(fù)執(zhí)行A模塊操作,直到條件P不成立。C語言程序設(shè)計框圖全文共86頁,當(dāng)前為第10頁。3.1程序結(jié)構(gòu)框圖3.1.3

N-S圖

例3.6將例3.2中的算法用N-S圖表示,如下圖所示。C語言程序設(shè)計框圖全文共86頁,當(dāng)前為第11頁。3.1程序結(jié)構(gòu)框圖3.1.4

結(jié)構(gòu)化程序設(shè)計

結(jié)構(gòu)化程序設(shè)計的基本思想是:任何程序都由順序結(jié)構(gòu)、分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)這三種基本結(jié)構(gòu)組成。結(jié)構(gòu)化程序:由3種基本結(jié)構(gòu)經(jīng)過反復(fù)組合、嵌套構(gòu)成的程序。結(jié)構(gòu)化程序設(shè)計方法:自頂向下,逐步細(xì)化模塊化設(shè)計結(jié)構(gòu)化編碼C語言程序設(shè)計框圖全文共86頁,當(dāng)前為第12頁。3.1程序結(jié)構(gòu)框圖3.1.4

結(jié)構(gòu)化程序設(shè)計

結(jié)構(gòu)化程序設(shè)計具有以下特點:一個程序單元由順序、分支、循環(huán)這3種基本結(jié)構(gòu)組成。3種基本結(jié)構(gòu)經(jīng)過反復(fù)嵌套,可以表示任何復(fù)雜的算法。一個大的程序由若干個不同功能的小模塊組成。每個小模塊只有一個入口和一個出口。程序中不能有無窮循環(huán)(死循環(huán))。程序中不能有在任何條件下都執(zhí)行不到的語句(死語句)。用結(jié)構(gòu)化思想設(shè)計出來的計算機(jī)程序,具有清晰的模塊界面,因此,在書寫程序時,我們應(yīng)根據(jù)邏輯結(jié)構(gòu)和層次深度的不同,采用縮進(jìn)對齊的方式,將程序模塊寫在不同的位置,這樣可以提高程序的可讀性,有助于調(diào)試程序,找出程序的邏輯錯誤。C語言程序設(shè)計框圖全文共86頁,當(dāng)前為第13頁。3.1程序結(jié)構(gòu)框圖3.1.5

結(jié)構(gòu)化程序的語句

表達(dá)式語句:由“表達(dá)式+分號”構(gòu)成。如賦值語句、函數(shù)調(diào)用語句。空語句:只由一個分號構(gòu)成??照Z句執(zhí)行不產(chǎn)生任何動作,常用于循環(huán)體中??刂普Z句:完成一定的程序流程控制功能。如if-else,switch-case,for,while,do-while,break,continue,goto,return。復(fù)合語句:由一對大括號括起來的一條或多條語句。被括起來的語句可以是這4類的任何一類語句,常用于函數(shù)體或循環(huán)體。

C語言程序設(shè)計框圖全文共86頁,當(dāng)前為第14頁。3.2二分支結(jié)構(gòu)3.2.1

二分支if語句

基本形式:if(表達(dá)式)

語句1;else

語句2;例如:if(x>y)printf(“max=%d”,x);elseprintf(“max=%d”,y);表達(dá)式語句2假(0)真(非0)語句1

返回目錄C語言程序設(shè)計框圖全文共86頁,當(dāng)前為第15頁。3.2二分支結(jié)構(gòu)3.2.1

二分支if語句

例3.7求兩個整數(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);}

C語言程序設(shè)計框圖全文共86頁,當(dāng)前為第16頁。3.2二分支結(jié)構(gòu)3.2.2

不平衡if語句

基本形式:if(表達(dá)式)

語句;例如:if(x>y)printf(“max=%d”,x);表達(dá)式語句假(0)真(非0)C語言程序設(shè)計框圖全文共86頁,當(dāng)前為第17頁。3.2二分支結(jié)構(gòu)3.2.2

不平衡if語句

例3.8

設(shè)計一個程序,從鍵盤輸入3個整數(shù),按由小到大的順序輸出。解題思路三個整數(shù)x、y、z,兩兩比較,始終保持x的值最小,z的值最大,不滿足此條件,則其值進(jì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);}C語言程序設(shè)計框圖全文共86頁,當(dāng)前為第18頁。3.2二分支結(jié)構(gòu)3.2.3

if語句的嵌套

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●嵌套的一般形式C語言程序設(shè)計框圖全文共86頁,當(dāng)前為第19頁。3.2二分支結(jié)構(gòu)3.2.3

if語句的嵌套

例3.11計算分段函數(shù)的值:C語言程序設(shè)計框圖全文共86頁,當(dāng)前為第20頁。3.2二分支結(jié)構(gòu)3.2.3

if語句的嵌套

#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計算分段函數(shù)的值:C語言程序設(shè)計框圖全文共86頁,當(dāng)前為第21頁。if~else配對原則:缺省{}時,else總是和它上面離它最近的未配對的if配對if(……)if(……)if(……)else…...else…...else…...3.2二分支結(jié)構(gòu)3.2.3

if語句的嵌套

通過“if語句的嵌套”可實現(xiàn)“多分支結(jié)構(gòu)”C語言程序設(shè)計框圖全文共86頁,當(dāng)前為第22頁。3.2二分支結(jié)構(gòu)3.2.3

if語句的嵌套

示例:

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”);實現(xiàn)if~else正確配對方法:加{}C語言程序設(shè)計框圖全文共86頁,當(dāng)前為第23頁。3.3多分支結(jié)構(gòu)3.3.1

多分支switch語句

if語句的嵌套實現(xiàn)多分支:

如果分支較多,則嵌套的if語句層數(shù)就越多,程序不但冗長而且理解也比較困難。因此,C語言又提供了一種專門用于處理多分支結(jié)構(gòu)的條件選擇語句,稱為switch語句,又稱開關(guān)語句。

返回目錄C語言程序設(shè)計框圖全文共86頁,當(dāng)前為第24頁。3.3多分支結(jié)構(gòu)3.3.1

多分支switch語句

switch語句(開關(guān)語句)一般形式:switch(表達(dá)式){case常量表達(dá)式1:語句組1;break;case常量表達(dá)式2:語句組2;break;

…….case常量表達(dá)式n:語句組n;break;[default:語句組n+1;[break;]]}C語言程序設(shè)計框圖全文共86頁,當(dāng)前為第25頁。3.3多分支結(jié)構(gòu)3.3.1

多分支switch語句

switch語句(開關(guān)語句)執(zhí)行過程:switch表達(dá)式語句組1語句組2語句組n語句組n+1...defaultcase常量表達(dá)式1case常量表達(dá)式2case常量表達(dá)式nC語言程序設(shè)計框圖全文共86頁,當(dāng)前為第26頁。說明:

switch后面的表達(dá)式的值類型可以是整型、字符型或枚舉型。當(dāng)表達(dá)式的值與某個case中的常量表達(dá)式的值相等時,就執(zhí)行相應(yīng)的case后的語句序列,直到遇到break語句或到達(dá)switch結(jié)構(gòu)末尾。多個連續(xù)的case語句可以共用一個語句序列。

case后的不同常量表達(dá)式的值不能相等。

break的作用是改變程序在switch結(jié)構(gòu)中的執(zhí)行流程,將程序流程跳出switch語句,轉(zhuǎn)到switch語句后的下一條語句去執(zhí)行。

switch語句中允許嵌套switch語句。

3.3多分支結(jié)構(gòu)3.3.1

多分支switch語句

C語言程序設(shè)計框圖全文共86頁,當(dāng)前為第27頁。例3.14

從鍵盤輸入一學(xué)生成績,判斷學(xué)生成績等級。如果成績在90~100分,等級為“A”,成績在80~89分,等級為“B”,成績在70~79分,等級為“C”,成績在60~69分,等級為“D”,成績小于60分,等級為“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語句

表達(dá)式score/10的值為10和9時共用相同的語句序列。

C語言程序設(shè)計框圖全文共86頁,當(dāng)前為第28頁。3.3多分支結(jié)構(gòu)3.3.2

多分支結(jié)構(gòu)綜合舉例

例3.15計算分段函數(shù)的值:

下面使用4種不同的方法實現(xiàn)該程序,以展現(xiàn)C語言多分支結(jié)構(gòu)的風(fēng)格。

C語言程序設(shè)計框圖全文共86頁,當(dāng)前為第29頁。3.3多分支結(jié)構(gòu)3.3.2

多分支結(jié)構(gòu)綜合舉例

(1)使用不嵌套的if語句編程:#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);}C語言程序設(shè)計框圖全文共86頁,當(dāng)前為第30頁。3.3多分支結(jié)構(gòu)3.3.2

多分支結(jié)構(gòu)綜合舉例

(2)使用嵌套的if語句編程:#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);}C語言程序設(shè)計框圖全文共86頁,當(dāng)前為第31頁。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);}C語言程序設(shè)計框圖全文共86頁,當(dāng)前為第32頁。3.3多分支結(jié)構(gòu)3.3.2

多分支結(jié)構(gòu)綜合舉例

(4)使用switch語句編程:#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);}C語言程序設(shè)計框圖全文共86頁,當(dāng)前為第33頁。

返回目錄3.4循環(huán)結(jié)構(gòu)3.4.0

引例

例3.16求s=1+2+3+…+100之和。解題思路設(shè)變量s存儲累加和,其初值為0,變量n作為循環(huán)變量,其值由1變化到100,將n的每一個值累加到s變量,則可以實現(xiàn)上述算法。(利用目前所學(xué)知識能編寫如下程序)

#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;兩語句會在程序中反復(fù)出現(xiàn)100次,使程序變得很長。為解決這一問題,C語言引入了循環(huán)結(jié)構(gòu)。C語言中實現(xiàn)循環(huán)結(jié)構(gòu)的語句有for語句、while語句和do~while語句。C語言程序設(shè)計框圖全文共86頁,當(dāng)前為第34頁。3.4循環(huán)結(jié)構(gòu)3.4.1

for語句

for語句的一般形式

for(表達(dá)式1;表達(dá)式2;表達(dá)式3)循環(huán)體; 例如:

for(s=0,n=1;n<=100;n++) s=s+n;C語言程序設(shè)計框圖全文共86頁,當(dāng)前為第35頁。for語句的執(zhí)行過程(1)計算表達(dá)式1;(2)計算表達(dá)式2,若其值為非0,則執(zhí)行第3步;若為0,則轉(zhuǎn)向第6步執(zhí)行;(3)執(zhí)行循環(huán)體;(4)計算表達(dá)式3;(5)跳轉(zhuǎn)到第2步繼續(xù)執(zhí)行;(6)終止循環(huán),執(zhí)行for語句后的下一條語句。3.4循環(huán)結(jié)構(gòu)3.4.1

for語句

C語言程序設(shè)計框圖全文共86頁,當(dāng)前為第36頁。例3.17例3.16用for語句實現(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語句

C語言程序設(shè)計框圖全文共86頁,當(dāng)前為第37頁。for語句的說明3.4循環(huán)結(jié)構(gòu)(1)在for語句中,若表達(dá)式1缺省,則必須將表達(dá)式1作為語句安排在for語句之前。

例3.17例3.16用for語句實現(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語句

C語言程序設(shè)計框圖全文共86頁,當(dāng)前為第38頁。for語句的說明3.4循環(huán)結(jié)構(gòu)(2)在for語句中,若表達(dá)式2缺省,則系統(tǒng)默認(rèn)循環(huán)控制條件為真(非0值),此時,如果不在循環(huán)體中加其它語句進(jìn)行控制,循環(huán)將無限制進(jìn)行下去,即出現(xiàn)死循環(huán)。例3.17例3.16用for語句實現(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語句

C語言程序設(shè)計框圖全文共86頁,當(dāng)前為第39頁。for語句的說明3.4循環(huán)結(jié)構(gòu)(3)在for語句中,若表達(dá)式3缺省,可將它的語句放在循環(huán)體的最后。例3.17例3.16用for語句實現(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語句

C語言程序設(shè)計框圖全文共86頁,當(dāng)前為第40頁。if(a+2*b+5*c==10)max=y;else y=0.(1)計算表達(dá)式1;for(i=2;i<=n;i++)#include<stdio.構(gòu)造當(dāng)型循環(huán)(先判斷循環(huán)控制條件),程序如下:break;else y=x;{a=n/100;表達(dá)式score/10的值為10和9時共用相同的語句序列。如100可分解為3和97、或為11和89、或為17和83等,但我們只取第一種分解即可。A)for(表達(dá)式1;0;表達(dá)式3)每個小模塊只有一個入口和一個出口。算法是實際問題求解步驟的描述。如上圖所示,當(dāng)條件P為“真”時,反復(fù)執(zhí)行A模塊操作,直到P為“假”時才終止循環(huán),繼續(xù)執(zhí)行循環(huán)后面的語句。算法是實際問題求解步驟的描述。返回目錄{printf("%d,%d,%d\n",a,b,c);表達(dá)式語句:由“表達(dá)式+分號”構(gòu)成。for語句的說明3.4循環(huán)結(jié)構(gòu)(4)在for語句中三個表達(dá)式都可以缺省,但其中的兩個分號不可省。例3.17例3.16用for語句實現(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語句

C語言程序設(shè)計框圖全文共86頁,當(dāng)前為第41頁。for語句的說明3.4循環(huán)結(jié)構(gòu)(5)循環(huán)體可以為空語句,但必須有分號(即循環(huán)為空語句)例3.17例3.16用for語句實現(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語句

C語言程序設(shè)計框圖全文共86頁,當(dāng)前為第42頁。思考與練習(xí):

例3.16用for語句實現(xiàn),相應(yīng)的程序在前面已經(jīng)例舉了多種方法,請同學(xué)們試用其他可能的方法編寫程序。另外,例3.16還可以用while語句、do-while語句、if+goto等方法實現(xiàn)。這說明,對于某個實際的編程問題,可以編寫出很多種程序來解決同一問題。所以,對我們初學(xué)者來說,關(guān)鍵是要多學(xué)習(xí)、勤練習(xí),熟則能生巧,到時,編寫起程序來就游刃有余了!

加油吧!!3.4循環(huán)結(jié)構(gòu)3.4.1

for語句

C語言程序設(shè)計框圖全文共86頁,當(dāng)前為第43頁。3.4循環(huán)結(jié)構(gòu)3.4.2

while語句

while語句的一般形式

while(表達(dá)式)循環(huán)體; 例如:

intn,s; n=1; s=0; while(n<=100) { s=s+n; n++; }C語言程序設(shè)計框圖全文共86頁,當(dāng)前為第44頁。3.4循環(huán)結(jié)構(gòu)3.4.2

while語句

while語句的執(zhí)行過程首先計算和判斷表達(dá)式的值,如果表達(dá)式的值為“真”(非0),則執(zhí)行循環(huán)體,然后程序轉(zhuǎn)回去再計算和判斷表達(dá)式的值,直到表達(dá)式的值為“假”(0),終止while循環(huán),繼續(xù)執(zhí)行while語句后的下一語句。C語言程序設(shè)計框圖全文共86頁,當(dāng)前為第45頁。3.4循環(huán)結(jié)構(gòu)3.4.2

while語句

示例例3.16用while語句實現(xiàn),可以編寫如下程序:#include<stdio.h>main(){ ints,n; s=0;n=1; while(n<=100) { s=s+n; n++; } printf(“s=%d\n”,s);}C語言程序設(shè)計框圖全文共86頁,當(dāng)前為第46頁。3.4循環(huán)結(jié)構(gòu)3.4.3

do-while語句

do-while語句的一般形式

do {循環(huán)體;

}while(表達(dá)式) 例如:

intn=1,s=0; do { s=s+n; n++; }while(n<=100);C語言程序設(shè)計框圖全文共86頁,當(dāng)前為第47頁。3.4循環(huán)結(jié)構(gòu)3.4.3

do-while語句

do-while語句的執(zhí)行過程

do-while語句的作用是無條件地先執(zhí)行循環(huán)體一次(無論表達(dá)式的值是否為0或非0),所以又稱為“直到型循環(huán)”。循環(huán)體執(zhí)行一次后,計算和判斷表達(dá)式的值,若表達(dá)式的值為“真”(非0),則程序轉(zhuǎn)回去反復(fù)執(zhí)行循環(huán)體,直到表達(dá)式的值為“假”(0),終止do-while語句,繼續(xù)執(zhí)行do-while語句后的下一條語句。C語言程序設(shè)計框圖全文共86頁,當(dāng)前為第48頁。3.4循環(huán)結(jié)構(gòu)3.4.3

do-while語句

示例例3.16用do-while語句實現(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);}C語言程序設(shè)計框圖全文共86頁,當(dāng)前為第49頁。3.4循環(huán)結(jié)構(gòu)3.4.4循環(huán)嵌套

循環(huán)嵌套:指一個循環(huán)完全包含在另一個循環(huán)的循環(huán)體中。while循環(huán)、do-while循環(huán)和for循環(huán)都可以互相嵌套。二重循環(huán)的執(zhí)行過程是外循環(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)控制變量一般不能相同.C語言程序設(shè)計框圖全文共86頁,當(dāng)前為第50頁。示例下面是for語句的二重循環(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)嵌套

C語言程序設(shè)計框圖全文共86頁,當(dāng)前為第51頁。3.4循環(huán)結(jié)構(gòu)3.4.4循環(huán)嵌套

上例二重循環(huán)嵌套程序的執(zhí)行結(jié)果如下:C語言程序設(shè)計框圖全文共86頁,當(dāng)前為第52頁。3.5.1

break語句

break語句的一般形式

break;break語句經(jīng)常放在循環(huán)語句的循環(huán)體中,且通常和if語句一起使用。作用:在滿足一定條件時,提前退出本層循環(huán)(不管循環(huán)控制條件是否成立),使程序流程轉(zhuǎn)向該循環(huán)結(jié)構(gòu)后的下一條語句執(zhí)行。3.5

break、continue及goto語句

返回目錄C語言程序設(shè)計框圖全文共86頁,當(dāng)前為第53頁。3.5.1

break語句

break語句的示例例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語句,滿足n>100時,即退出循環(huán)。3.5

break、continue及goto語句C語言程序設(shè)計框圖全文共86頁,當(dāng)前為第54頁。3.5.2

continue語句

continue語句的一般形式

continue;continue語句經(jīng)常放在循環(huán)語句的循環(huán)體中。作用:是結(jié)束本次循環(huán),即跳過循環(huán)體中某些還沒有被執(zhí)行的語句,開始新的一次循環(huán)。與break比較:continue僅結(jié)束本次循環(huán),而break是結(jié)束整個循環(huán)語句的執(zhí)行。3.5

break、continue及goto語句C語言程序設(shè)計框圖全文共86頁,當(dāng)前為第55頁。3.5.2

continue語句

continue語句的示例例3.30

從鍵盤輸入10個不為0的整數(shù),統(tǒng)計其中負(fù)數(shù)的個數(shù),并求所有正數(shù)的平均值。解題思路程序中count用于統(tǒng)計負(fù)數(shù)個數(shù),avg在循環(huán)結(jié)構(gòu)中用于統(tǒng)計正數(shù)和,循環(huán)結(jié)束后用于計算平均值.#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語句C語言程序設(shè)計框圖全文共86頁,當(dāng)前為第56頁。3.5

break、continue及goto語句3.5.3

goto語句

goto語句的一般形式

goto語句標(biāo)號;作用:使程序的流程無條件轉(zhuǎn)移到相應(yīng)語句標(biāo)號處。goto語句一般和if語句一起使用,構(gòu)成循環(huán)。語句標(biāo)號是對語句的標(biāo)識,應(yīng)是合法的標(biāo)識符,即只能由字母、數(shù)字和下劃線組成,且第一字符必須是字母或下劃線。注意:不能用一個整數(shù)作為語句標(biāo)號。goto語句是非結(jié)構(gòu)化語句,大量使用會造成程序流向混亂,可讀性差,因此結(jié)構(gòu)化程序設(shè)計一般不用goto語句.C語言程序設(shè)計框圖全文共86頁,當(dāng)前為第57頁。3.5

break、continue及goto語句3.5.3

goto語句

goto語句的示例構(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);}C語言程序設(shè)計框圖全文共86頁,當(dāng)前為第58頁。3.6習(xí)題三●單項選擇題

結(jié)構(gòu)化程序模塊不具有的特征是____.

A)只有一個入口和一個出口

B)要盡量多使用goto語句

C)一般有順序、選擇和循環(huán)三種基本結(jié)構(gòu)

D)程序中不能有死循環(huán)C語言中,邏輯“真”等價于____.

A)整數(shù)1 B)整數(shù)0

C)非0數(shù) D)TRUE3)以下4條語句中,有語法錯誤的是____.

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

返回目錄C語言程序設(shè)計框圖全文共86頁,當(dāng)前為第59頁。3.6習(xí)題三●單項選擇題

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)是無限循環(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)是無限循環(huán) D)循環(huán)條件不合法CAC語言程序設(shè)計框圖全文共86頁,當(dāng)前為第60頁。3.6習(xí)題三●單項選擇題

6)C語言中while與do-while語句的主要區(qū)別是____.

A)do-while的循環(huán)體至少無條件執(zhí)行一次

B)do-while允許從外部跳到循環(huán)體內(nèi)

C)while的循環(huán)體至少無條件執(zhí)行一次

D)while的循環(huán)控制條件比do-while的嚴(yán)格7)語句while(!a);中條件等價于____.

A)a!=0

B)~a

C)a==1

D)a==0ADC語言程序設(shè)計框圖全文共86頁,當(dāng)前為第61頁。3.6習(xí)題三●單項選擇題

8)以下程序的運行結(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)DC語言程序設(shè)計框圖全文共86頁,當(dāng)前為第62頁。3.6習(xí)題三●單項選擇題

9)以下程序的運行結(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)4AC語言程序設(shè)計框圖全文共86頁,當(dāng)前為第63頁。轉(zhuǎn)化為:if((y>=-EPSINON)&&(y<=EPSINON)){x1=(-b+sqrt(d))/(2*a);3if語句的嵌套2流程圖2流程圖8所示,可以編寫如下程序。default:printf("ExpressionError!\n");{ if(x>=10)結(jié)構(gòu)化程序模塊不具有的特征是____.printf(“y=%5.default:grade=’E’;printf("Pleaseinputanumber:\n");printf("Pleaseinputanotherscore:\n");與break比較:continue僅結(jié)束本次循環(huán),而break是結(jié)束整個循環(huán)語句的執(zhí)行。{intx,n,k,a,b,count=0;for(s=0,n=1;解題思路要將1~100累加到s變量上去,如果采用先初始化變量s=0,然后用語句序列s=s+1;1for語句表示數(shù)據(jù)的輸入和輸出;{ floatx,y;3.6習(xí)題三●單項選擇題

10)以下程序的運行結(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=%dDC語言程序設(shè)計框圖全文共86頁,當(dāng)前為第64頁。3.6習(xí)題三●單項選擇題

11)為了避免嵌套的if-else語句的二義性,C語言規(guī)定else總是____.

A)與縮排位置相同的if組成配對關(guān)系

B)與在其之前未配對的if組成配對關(guān)系

C)與在其之前未配對的最近的if組成配對關(guān)系

D)與同一行上的if組成配對關(guān)系12)對于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)CBC語言程序設(shè)計框圖全文共86頁,當(dāng)前為第65頁。3.6習(xí)題三●程序填空題

1.下面程序的功能是計算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;C語言程序設(shè)計框圖全文共86頁,當(dāng)前為第66頁。3.6習(xí)題三●程序填空題

2.下面程序的功能是:從鍵盤上輸入若干學(xué)生的成績,統(tǒng)計并輸出最高和最低成績,當(dāng)輸入負(fù)數(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<minC語言程序設(shè)計框圖全文共86頁,當(dāng)前為第67頁。3.6習(xí)題三●程序填空題

3.下面程序的功能是:計算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*xC語言程序設(shè)計框圖全文共86頁,當(dāng)前為第68頁。3.6習(xí)題三●程序填空題

4.下面的程序完成兩個數(shù)的四則運算。用戶輸入一個實現(xiàn)兩個數(shù)的四則運算的表達(dá)式,程序采用switch語句對其運算進(jìn)行判定后執(zhí)行相應(yīng)的運算并給出結(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+ybreakC語言程序設(shè)計框圖全文共86頁,當(dāng)前為第69頁。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)C語言程序設(shè)計框圖全文共86頁,當(dāng)前為第70頁。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不妥原因:無論是float還是double類型的變量,都有精度限制。所以一定要避免將浮點變量用“==”或“!=”與數(shù)字比較,應(yīng)該設(shè)法轉(zhuǎn)化成“>=”或“<=”形式。假設(shè)浮點變量的名字為y,應(yīng)當(dāng)將

if(y==0.0) //隱含錯誤的比較轉(zhuǎn)化為:if((y>=-EPSINON)&&(y<=EPSINON))其中EPSINON是允許的誤差(即精度)。

C語言程序設(shè)計框圖全文共86頁,當(dāng)前為第71頁。3.6習(xí)題三●編程題

1.給出三角形的三邊a、b、c,求三角形的面積。(應(yīng)先判斷a、b、c三邊是否能構(gòu)成一個三角形)。#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");}C語言程序設(shè)計框圖全文共86頁,當(dāng)前為第72頁。3.6習(xí)題三●編程題

2.輸入四個整數(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);}C語言程序設(shè)計框圖全文共86頁,當(dāng)前為第73頁。3.某幼兒園只收2至6歲的小孩,2~3歲編入小班,4歲編入中班,5~6歲編入大班,編制程序?qū)崿F(xiàn)每輸入一個年齡,輸出該編入什么班。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");

}}C語言程序設(shè)計框圖全文共86頁,當(dāng)前為第74頁。3.6習(xí)題三●編程題

4.輸入一元二次方程的三個系數(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));C語言程序設(shè)計框圖全文共86頁,當(dāng)前為第75頁。

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.輸入一元二次方程的三個系數(shù)a、b、c,求出該方程所有可能的根。C語言程序設(shè)計框圖全文共86頁,當(dāng)前為第76頁。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);}C語言程序設(shè)計框圖全文共86頁,當(dāng)前為第77頁。3.6習(xí)題三●編程題

6.編程求1!+2!+3!+…

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論