模塊2-結(jié)構(gòu)化程序設(shè)計_第1頁
模塊2-結(jié)構(gòu)化程序設(shè)計_第2頁
模塊2-結(jié)構(gòu)化程序設(shè)計_第3頁
模塊2-結(jié)構(gòu)化程序設(shè)計_第4頁
模塊2-結(jié)構(gòu)化程序設(shè)計_第5頁
已閱讀5頁,還剩233頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

C語言程序設(shè)計任務(wù)式教程(微課版)

VisualC++1計算機(jī)工程學(xué)院模塊2結(jié)構(gòu)化程序設(shè)計任務(wù)1順序結(jié)構(gòu)程序設(shè)計和程序的基本結(jié)構(gòu)任務(wù)2選擇結(jié)構(gòu)程序設(shè)計任務(wù)3循環(huán)結(jié)構(gòu)程序設(shè)計

2計算機(jī)工程學(xué)院

任務(wù)1順序結(jié)構(gòu)程序設(shè)計和程序的基本結(jié)構(gòu)

學(xué)習(xí)目標(biāo)

掌握程序設(shè)計的三種基本結(jié)構(gòu),掌握流程圖的繪制方法。3計算機(jī)工程學(xué)院案例1計算課程總評成績1.問題描述已知某學(xué)生課程A的平時成績、實驗成績和期末考試成績,求該課程的總評成績。其中平時、實驗和期末成績分別占20%、30%和50%。2.1.1案例講解

4計算機(jī)工程學(xué)院2.編寫程序

(1)定義整型變量score1、score2和score3分別存放課程A的平時成績、實驗成績和期末考試成績;定義實型變量total存放總評成績;(2)輸入score1、score2和score3的值;(3)根據(jù)比例計算總評成績:

total=score1*0.2+score2*0.3+score3*0.5;(4)輸出總評成績total。

5計算機(jī)工程學(xué)院3.編寫源程序

/*EX2_1.cpp*/#include"stdio.h"voidmain(){intscore1,score2,score3;floattotal;printf("請輸入成績:");scanf("%d%d%d",&score1,&score2,&score3);

total=score1*0.2+score2*0.3+score3*0.5;

printf("總評成績是%.1f\n",total);}6計算機(jī)工程學(xué)院4.運行結(jié)果7圖2-1案例1運行結(jié)果計算機(jī)工程學(xué)院5.歸納分析案例1程序的執(zhí)行過程是按照源程序中語句的書寫順序逐條執(zhí)行的,這樣的程序結(jié)構(gòu)稱為順序結(jié)構(gòu)。模塊1中的程序均屬于順序結(jié)構(gòu)。順序結(jié)構(gòu)在程序自上而下執(zhí)行時,程序中的每一條語句都要執(zhí)行一次,并且只執(zhí)行一次,以這樣固定的處理方式只能解決一些簡單的任務(wù)。但實際應(yīng)用中,往往會出現(xiàn)一些特別的要求,比如根據(jù)某個條件來決定下面該進(jìn)行什么操作,或根據(jù)某個要求不斷地重復(fù)執(zhí)行若干動作,這就需要控制程序的執(zhí)行順序。

8計算機(jī)工程學(xué)院

2.1.2基礎(chǔ)理論

1.三種基本控制結(jié)構(gòu)

程序中語句的執(zhí)行順序是由程序設(shè)計語言中的控制結(jié)構(gòu)規(guī)定的??刂平Y(jié)構(gòu)有順序結(jié)構(gòu)、選擇結(jié)構(gòu)及循環(huán)結(jié)構(gòu)三種基本結(jié)構(gòu)。

順序結(jié)構(gòu)是最簡單的結(jié)構(gòu)。

選擇結(jié)構(gòu)又稱為分支結(jié)構(gòu),當(dāng)程序執(zhí)行時,計算機(jī)按一定的條件選擇下一步要執(zhí)行的操作。例如:輸入三角形的三條邊計算面積時,要判斷三條邊是否能構(gòu)成三角形,若能則計算面積,否則要告訴用戶輸入錯誤。

9計算機(jī)工程學(xué)院循環(huán)結(jié)構(gòu)又稱為重復(fù)結(jié)構(gòu),它是程序中需要按某一條件反復(fù)執(zhí)行一定的操作而采用的控制結(jié)構(gòu)。例如,從鍵盤上輸入20個整數(shù),求其累加和。三種結(jié)構(gòu)之間可以是平行關(guān)系,也可以相互嵌套,結(jié)構(gòu)之間通過復(fù)合可以形成復(fù)雜的結(jié)構(gòu)。已經(jīng)證明,由以上三種基本結(jié)構(gòu)順序組成的程序結(jié)構(gòu),可以解決任何復(fù)雜的問題。由三種基本結(jié)構(gòu)構(gòu)成的程序稱為結(jié)構(gòu)化程序。2.程序流程圖10計算機(jī)工程學(xué)院在對一個復(fù)雜問題求解時,程序的結(jié)構(gòu)比較復(fù)雜,所以在程序設(shè)計階段為了表示程序的操作順序往往先畫出程序流程圖,這樣有助于最終寫出完整正確的程序。下面介紹流程圖的有關(guān)概念。流程圖是用規(guī)定的圖形、連線和文字說明表示問題求解步驟(算法)的一組圖形,具有直觀、形象、易于理解等優(yōu)點。流程圖使用的圖形符號見表2-1。流程圖中的每一個框表示一段程序(包括一個或多個語句)的功能,各框內(nèi)必須寫明

11計算機(jī)工程學(xué)院要做的操作,說明要簡單明確,不能含糊不清。如在框內(nèi)只寫“計算”,但卻不寫出計算什么,就不容易讓人明白。一般來說,用得最多的是矩形框和菱形框。矩形框表示處理,不進(jìn)行比較和判斷,只有一個入口和一個出口;菱形框表示進(jìn)行檢查判別,有一個入口,兩個出口,即比較后形成兩個分支,在兩個出口處必須注明哪一個分支是對應(yīng)滿足條件的,哪個分支是對應(yīng)不滿足條件的。

12計算機(jī)工程學(xué)院表2-1流程圖圖形符號13計算機(jī)工程學(xué)院前面介紹的三種基本結(jié)構(gòu)的流程圖可分別用圖2-2、圖2-3和圖2-4表示。其中循環(huán)結(jié)構(gòu)有兩種形式:當(dāng)型(圖2-4(a))和直到型(圖2-4(b))。

圖2-4循環(huán)結(jié)構(gòu)14計算機(jī)工程學(xué)院3.語句在模塊1中,我們已經(jīng)了解了C語言程序的基本構(gòu)成。其中語句是程序的主要部分。C語句一般可分為:表達(dá)式語句、控制語句、復(fù)合語句和空語句。

(1)表達(dá)式語句表達(dá)式語句由一個表達(dá)式加上分號構(gòu)成,一般格式為:

表達(dá)式;最常用的表達(dá)式語句是賦值表達(dá)式語句,例如:total=score1*0.2+score2*0.3+score*0.5;15計算機(jī)工程學(xué)院

在C語言中,任何一個合法的C語言表達(dá)式后面加上一個分號就成了一個語句,例如:

m=a+b

是表達(dá)式,不是語句

i++;

是語句,作用是使i加1

x+y;

也是語句,作用是完成x+y的操作,它是合法的,但并不把結(jié)果賦給變量,所以沒有實際意義。

案例1中出現(xiàn)的以下語句:

printf("請輸入成績:");scanf("%d%d%d",&score1,&score2,&score3);16計算機(jī)工程學(xué)院稱為函數(shù)調(diào)用語句,是由一次函數(shù)調(diào)用加上一個分號構(gòu)成。函數(shù)調(diào)用語句也屬于表達(dá)式語句。

(2)控制語句控制語句是用于控制程序執(zhí)行流程的。C語言中有以下九種控制語句,它們是:

(1)if()~else~ 條件語句(2)switch 多分支選擇語句(3)for()~ 循環(huán)語句(4)while()~ 循環(huán)語句17計算機(jī)工程學(xué)院

(5)do~while() 循環(huán)語句(6)continue 結(jié)束本次循環(huán)語句(7)break 中止執(zhí)行switch或循環(huán)語句(8)goto 轉(zhuǎn)向語句(9)return 函數(shù)返回語句其中語句(1)和(2)用于實現(xiàn)程序的選擇結(jié)構(gòu),語句(3)~(5)用于實現(xiàn)程序的循環(huán)結(jié)構(gòu)。(3)復(fù)合語句18計算機(jī)工程學(xué)院

復(fù)合語句是用一對花括號括起來的一組語句,又稱塊語言。一般格式為:

{

語句1

語句2

······

語句n}

在以后的案例程序中將會經(jīng)常使用到復(fù)合語句。

19計算機(jī)工程學(xué)院

(4)空語句

空語句是僅有一個分號的語句,格式為:;空語句被執(zhí)行時實際上什么也不做。但在后面的案例程序中我們將會看到它的特殊用途。20計算機(jī)工程學(xué)院2.1.3技能訓(xùn)練

【實驗2.1.1】編寫程序,求一個三位正整數(shù)的各位數(shù)字之和。例如756的各位數(shù)字之和為7+5+6=18.【指導(dǎo)】(1)問題分析首先要正確分離出三位正整數(shù)的個位數(shù)、十位數(shù)和百位數(shù):百位數(shù)可用對100整除的方法求得,如756/100=7;十位數(shù)用對100求余的結(jié)果再對10整除求得,如756%100/10=5;個位數(shù)用對10求余求得,如756%10=6。21計算機(jī)工程學(xué)院(2)求解步驟定義變量num存放三位正整數(shù);變量n1、n2和n3分別存放個位數(shù)、十位數(shù)和百位數(shù);變量sum

存放和;分離正整數(shù)num;求和;輸出結(jié)果。(3)編寫源程序22計算機(jī)工程學(xué)院

/*EX2_2.cpp*/

#include"stdio.h"voidmain(){intnum,n1,n2,n3,sum;printf("請輸入一個三位正整數(shù):");scanf("%d",&num);n1=num%10;/*分離個位數(shù)*/n2=num%100/10;/*分離十位數(shù)*/n3=num/100;/*分離百位數(shù)*/sum=n1+n2+n3;printf("%d+%d+%d=%d\n",n1,n2,n3,sum);}23計算機(jī)工程學(xué)院(4)運行結(jié)果圖2-5實驗2-1運行結(jié)果24計算機(jī)工程學(xué)院【實驗2.1.2】用流程圖表示求解下述問題的程序流程。(1)問題描述根據(jù)人體的身高和體重因素,可以按以下“體重指數(shù)”對人的肥胖程度進(jìn)行劃分:體重指數(shù)t=體重w/(身高h(yuǎn))2

(w單位為kg,h單位為m)當(dāng)t<18時,為低體重;當(dāng)t介于18和25之間時,為正常體重;當(dāng)t介于25和27之間時,為超體重;當(dāng)t>27時,為肥胖。25計算機(jī)工程學(xué)院

(2)問題分析該問題需要采用選擇結(jié)構(gòu)來實現(xiàn)。具體步驟如下:輸入體重w和身高h(yuǎn);計算體重指數(shù)t;根據(jù)體重指數(shù)t判斷體型。(3)流程圖26計算機(jī)工程學(xué)院圖2-6實驗2-2流程圖

開始定義w,h,t輸入w,h計算tt<18t<25t<27肥胖偏胖正常偏低結(jié)束YNYYNN27計算機(jī)工程學(xué)院【實驗2.1.3】用流程圖表示輸入10個整數(shù),輸出其中最大數(shù)的求解步驟。

(1)問題分析該問題采用循環(huán)結(jié)構(gòu)實現(xiàn)反復(fù)輸入數(shù)據(jù)和比較數(shù)據(jù),數(shù)據(jù)的比較則用選擇結(jié)構(gòu)完成。具體步驟如下:設(shè)變量a存放輸入的數(shù)據(jù),變量max存放最大數(shù);輸入第一數(shù)a,并將它設(shè)為最大值(默認(rèn)為最大),即max=a;28計算機(jī)工程學(xué)院依次讀入數(shù)據(jù),與max比較,若比max大,則用當(dāng)前數(shù)代替max中的值,如此循環(huán)9次;輸出最大數(shù)。(2)流程圖29計算機(jī)工程學(xué)院圖2-7實驗2-3流程圖NNYYi=1i<=9a>maxmax=a開始結(jié)束i=i+1輸入a輸出max輸入amax=a30計算機(jī)工程學(xué)院

2.1.4拓展與練習(xí)

【練習(xí)1】編寫程序求解一元二次方程ax2+bx+c=0的根(假定方程有實根)。編程要求:

(1)畫出流程圖;(2)從鍵盤輸入系數(shù)a、b、c,輸入前要有如下提示:“請輸入系數(shù)”;(3)以“x1=...”和“x2=...”的格式輸出方程的根。

31計算機(jī)工程學(xué)院【練習(xí)2】用流程圖表示判斷一個數(shù)能否同時被3和5整除?!揪毩?xí)3】從鍵盤輸入20學(xué)生的成績,統(tǒng)計合格和不合格學(xué)生的人數(shù)。成績大于等于60為合格,否則為不合格。用流程圖表示求解步驟。32計算機(jī)工程學(xué)院

2.1.5編程規(guī)范與常見錯誤

1.編程規(guī)范(1)表達(dá)式比較復(fù)雜時,可以在運算符的兩邊各加一個空格,使源程序更加清晰。例如:

total=score1*0.2+score2*0.3+score3*0.5;

age>=20&&sex==’M’。(2)輸入數(shù)據(jù)前要加提示信息。例如:

intnum;printf("請輸入一個三位正整數(shù):");

scanf("%d",&num);

33計算機(jī)工程學(xué)院

避免這樣的書寫習(xí)慣:

intnum;

scanf("%d",&num);。(3)輸出結(jié)果要有文字說明。例如:

total=score1*0.2+score2*0.3+score3*0.5;

printf("總評成績是%.1f\n",total);

不要只輸出一個值,例如:

printf("%.1f\n",total);。34計算機(jī)工程學(xué)院2.常見錯誤(1)表達(dá)式漏括號。例如計算x=,寫成x=-b/2*a。源程序能通過編譯,但運行結(jié)果會出錯。正確的寫法是x=-b/(2*a),或x=-b/2/a。(2)語句漏分號。這是初學(xué)者上機(jī)時遇到的最多問題。例如程序中有以下語句:

sum=num1+num2;ave=sum/2.0;編譯時會出現(xiàn)出錯提示:syntaxerror:

missing';'beforeidentifier'ave'。表示由于前一語句漏分號引起語法錯誤。35計算機(jī)工程學(xué)院一、算法1、算法的概念:為解決某一個問題而采取的方法和步驟。補(bǔ)充:

算法及其表示2、算法的五大特性:⑴有窮性:有限步驟內(nèi)結(jié)束⑵確定性:不能產(chǎn)生歧義⑶可行性⑷0個或多個輸入:從外界獲取必要信息⑸1個或多個輸出:算法必須有結(jié)果①計算出5??;②輸入一個正整數(shù)n,然后判斷n是否為素數(shù);③計算任意兩個整數(shù)的最大公約數(shù)。示例程序=算法+數(shù)據(jù)結(jié)構(gòu)將成績優(yōu)秀的學(xué)生名單打印計算機(jī)工程學(xué)院運算符的優(yōu)先級別及結(jié)合性【例3-1】c>a+b等價于c>(a+b);關(guān)系運算符的優(yōu)先級低于算術(shù)運算符a>b==c等價于(a>b)==c;“>”優(yōu)先級高于“==”a==b<c等價于a==(b<c);“<”優(yōu)先級高于“==”a=b>c 等價于a=(b>c);關(guān)系運算符的優(yōu)先級高于賦值運算符計算機(jī)工程學(xué)院二、算法的表示1、自然語言:易懂但不直觀2、流程圖:自然圖形3、N-S圖:矩形框4、偽代碼:介于自然語言和計算機(jī)語言之間的文字和符號【示例】求a,b的最大值max。自然語言:如果a的值比b的值大,把a(bǔ)的值賦給max;否則,把b的值賦給max。符號形狀名稱圓角矩形起止框平行四邊形輸入、輸出框矩形處理框菱形判斷框帶箭頭的(折)線段流程線a>ba=>maxb=>maxYN流程圖【例2-1】⑴用偽代碼方式表示算法“打印出x的絕對值”;⑵用偽代碼方式表示算法“求5!”;⑵開始置t的值為1置i的值為2當(dāng)<=5時t=t×ii=i﹢1輸出t結(jié)束N-S圖a>ba=>maxb=>max成立不成立⑴開始若x為正數(shù)打印x的值否則打印-x的值結(jié)束計算機(jī)工程學(xué)院

典型實例【例】求一元二次方程ax2+bx+c=0的兩個不同的實數(shù)根,要求:a、b、c三個系數(shù)從鍵盤輸入,保證a≠0且b2-4ac>0。分析:由高中數(shù)學(xué)可知,當(dāng)判別式?=b2-4ac>0時,方程有兩個不相等的實數(shù)根,并可用求根公式表示。令p=-b/2a,q=sqrt(?)/2a,兩個根分別為:x1=p+q,x2=p-q。因此,程序中要用到系統(tǒng)提供的平方根函數(shù)sqrt(),需要將該函數(shù)所在的頭文件math.h包含到程序中。定義變量disc,x1,x2,p,qp+q=>x1b*b-4*a*c=>discsqrt(disc)/(2*a)=>q-b/(2*a)=>pp-q=>x2輸出x1,x2計算機(jī)工程學(xué)院

2.1.6貫通案例之一

1.問題描述學(xué)生成績管理系統(tǒng)可以分為八個主要的模塊,包括加載文件模塊、增加學(xué)生成績模塊、顯示學(xué)生成績模塊、刪除學(xué)生成績模塊、修改學(xué)生成績模塊、查詢學(xué)生成績模塊、學(xué)生成績排序模塊和保存文件模塊。2.系統(tǒng)模塊結(jié)構(gòu)40計算機(jī)工程學(xué)院圖2-8功能模塊結(jié)構(gòu)圖41計算機(jī)工程學(xué)院3.編寫程序?qū)崿F(xiàn)系統(tǒng)主菜單的顯示

/*EX2_3.cpp*/#include"stdio.h"voidmain(){printf("#=========================#\n");printf(“#學(xué)生成績管理系統(tǒng)#\n");printf("#--------------------------------------------#\n");printf("#copyright@2009-10-1#\n");printf("#=========================#\n");printf(“#1.加載文件#\n");printf(“#2.增加學(xué)生成績#\n");42計算機(jī)工程學(xué)院

printf(“#3.顯示學(xué)生成績#\n");printf(“#4.刪除學(xué)生成績#\n");printf(“#5.修改學(xué)生成績#\n");printf(“#6.查詢學(xué)生成績#\n");printf(“#7.學(xué)生成績排序#\n");printf(“#8.保存文件#\n");printf(“#0.退出系統(tǒng)#\n");printf("#=============================#\n");}43計算機(jī)工程學(xué)院4.運行結(jié)果圖2-9系統(tǒng)主菜單界面

44計算機(jī)工程學(xué)院

任務(wù)2選擇結(jié)構(gòu)程序設(shè)計

學(xué)習(xí)目標(biāo)

掌握關(guān)系運算符、邏輯運算符,熟練掌握if…else的三種用法,領(lǐng)會switch與break語句的作用。45計算機(jī)工程學(xué)院

2.2.1案例講解

案例1出租車計費1.問題描述某市出租車3公里的起租價為10元,3公里以外,按1.8元/公里計費?,F(xiàn)編程輸入行車?yán)锍虜?shù),輸出應(yīng)付車費。2.編程分析(1)用實型變量km存放行車?yán)锍虜?shù),實型變量fee存放車費;(2)輸入行車?yán)锍虜?shù);(3)根據(jù)行車?yán)锍虜?shù)作出判斷,進(jìn)行不同的處理;46計算機(jī)工程學(xué)院(4)輸出車費。3.編寫源程序

/*EX2_4.cpp*/#include<stdio.h>voidmain(){floatkm,fee;printf("輸入行車?yán)锍虜?shù):");scanf("%f",&km);if(km<=3.0)47計算機(jī)工程學(xué)院

fee=10.0;else fee=10.0+(km-3.0)*1.8;printf("%.2f公里,請付¥%.2f\n",km,fee);}48計算機(jī)工程學(xué)院4.運行結(jié)果圖2-10案例1運行結(jié)果49計算機(jī)工程學(xué)院5.歸納分析

案例1需要根據(jù)行車?yán)锍虜?shù)作出選擇進(jìn)行不同的兩種計算。處理此類兩個分支問題時常使用if語句。if語句是用來判斷給定的條件是否滿足,根據(jù)判斷的結(jié)果(真或假)決定執(zhí)行某個分支的操作。

(1)if語句的一般形式

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

<語句1>else<語句2>50計算機(jī)工程學(xué)院

(2)執(zhí)行過程:計算<表達(dá)式>的值,若結(jié)果為“真”(非0),則執(zhí)行<語句1>,否則,執(zhí)行<語句2>。if-else構(gòu)成了一個兩路分支結(jié)構(gòu)。流程圖見圖2-11。

(3)注意if后面的<表達(dá)式>必須用圓括號括起來;if和else同屬于一個if語句,else不能作為語句單獨使用,必須與if配對使用。51計算機(jī)工程學(xué)院案例2計算三角形的面積1.問題描述

輸入三角形的三個邊長,判斷能否構(gòu)成三角形,若能則計算并輸出三角形的面積,否則輸出出錯信息。2.編程分析

(1)用實型變量a、b和c表示三角形的三條邊,實型變量area表示三角形的面積;(2)構(gòu)成三角形的條件是任意兩邊之和大于第三邊;52計算機(jī)工程學(xué)院

(3)如滿足構(gòu)成三角形的條件,計算并輸出三角形的面積;否則輸出出錯信息。計算三角形的面積使用海倫公式:

其中:

3.編寫源程序53計算機(jī)工程學(xué)院

/*EX2_5.cpp*/#include<stdio.h>#include<math.h>voidmain(){ floata,b,c; floatarea,s;/*s為中間變量,存放三角形的半周長*/ printf("Pleaseinputabc:");

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

if(a+b>c&&a+c>b&&b+c>a)/*判斷輸入的a,b,c能否構(gòu)成三角形*/54計算機(jī)工程學(xué)院

{ s=(a+b+c)/2.0; area=sqrt(s*(s-a)*(s-b)*(s-c)); printf("areais%f\n",area); } else printf("inputerrer\n");}55計算機(jī)工程學(xué)院4.運行結(jié)果圖2-12案例2三邊符合構(gòu)成三角形的運行結(jié)果56計算機(jī)工程學(xué)院圖2-13案例2三邊不符合構(gòu)成三角形的運行結(jié)果57計算機(jī)工程學(xué)院5.歸納分析當(dāng)輸入的三條邊符合構(gòu)成三角形條件時,進(jìn)行計算并輸出三角形的面積時需要三條語句完成,此時必須用一對花括號把它們括起來,即使用復(fù)合語句的形式。案例3數(shù)制轉(zhuǎn)換1.問題描述

58計算機(jī)工程學(xué)院輸入一個無符號整數(shù),然后按用戶輸入的進(jìn)制代號,分別以十進(jìn)制(代號d)、八進(jìn)制(代號o)和十六進(jìn)制(代號x)數(shù)的形式輸出。2.編程分析

(1)設(shè)變量ua存儲無符號整數(shù)、變量code表示進(jìn)制代號;(2)根據(jù)輸入的進(jìn)制代號輸出相應(yīng)的數(shù)據(jù)。流程圖如圖2-14所示。59計算機(jī)工程學(xué)院圖2-14案例3的流程圖60計算機(jī)工程學(xué)院3.編寫源程序

/*EX2_6.cpp*/#include<stdio.h>voidmain(){ intua; charcode; printf("請輸入無符號整數(shù)和進(jìn)制代號:"); scanf("%d%c",&ua,&code);61計算機(jī)工程學(xué)院

switch(code){ case'd':printf("十進(jìn)制數(shù):%d\n",ua);break;case'o':printf("八進(jìn)制數(shù):%o\n",ua);break;case'x':printf("十六進(jìn)制數(shù):%x\n",ua);break;default:printf("進(jìn)制代號錯誤!");}}62計算機(jī)工程學(xué)院4.運行結(jié)果

圖2-15案例3運行結(jié)果163計算機(jī)工程學(xué)院圖2-16案例3運行結(jié)果264計算機(jī)工程學(xué)院5.歸納分析案例3是一個多路分支問題,程序中使用了C語言提供的實現(xiàn)多路選擇的語句—switch語句。

(1)switch語句根據(jù)一個供進(jìn)行判斷的表達(dá)式的結(jié)果來執(zhí)行多個分支中的一個,其一般形式如下:switch(<表達(dá)式>){case<常量表達(dá)式1>:<語句序列1>case<常量表達(dá)式2>:<語句序列2>::65計算機(jī)工程學(xué)院case<常量表達(dá)式n>:<語句序列n>default:<語句序列n+1>

}其中,每個“case<常量表達(dá)式>:”稱為case子句,代表一個case分支的入口。因此每個case后面<常量表達(dá)式>的值必須互不相等。(2)switch語句的執(zhí)行過程先計算<表達(dá)式>的值,然后依次與每個case子句后面的<常量表達(dá)式>的值進(jìn)行比較,如果

66計算機(jī)工程學(xué)院匹配成功,則執(zhí)行該case子句后面的<語句序列>,在執(zhí)行過程中,若遇到break語句,就跳出switch語句,否則就繼續(xù)執(zhí)行后面的<語句序列>,直到遇到break語句或執(zhí)行到switch語句的末尾(‘}’);若表達(dá)式的值不能與任何一個<常量表達(dá)式>匹配,則執(zhí)行default子句所對應(yīng)的語句。default子句是可選項,如果沒有該子句,則表示在所有匹配都失敗時,switch語句什么也不執(zhí)行。67計算機(jī)工程學(xué)院案例4字符類型判斷。1.問題描述

從鍵盤輸入一個字符,判斷是英文字母、數(shù)字字符還是其他字符。2.編程分析(1)輸入字符存放在變量ch中;(2)如果是英文字母,輸出“是英文字母”,轉(zhuǎn)(4);否則轉(zhuǎn)(3);(3)如果是數(shù)字字符,輸出“是數(shù)字字符”,否則輸出“是其他字符”;

68計算機(jī)工程學(xué)院(4)結(jié)束運行。

其中英文字母可以用表達(dá)式“ch>='A'&&ch<='Z'||ch>='a'&&ch<='z'”來判斷,而數(shù)字字符的判斷則用表達(dá)式“ch>='0'&&ch<='9'。流程圖見圖2-16所示。69計算機(jī)工程學(xué)院圖2-17案例4流程圖NNYY英文字符?開始輸入ch“其他字符”結(jié)束數(shù)字字符?“是數(shù)字”“是英文”①②③④⑤70計算機(jī)工程學(xué)院3.編寫源程序

/*EX2_7.cpp*/#include<stdio.h>voidmain(){charch;printf("請輸入一個字符:");scanf("%c",&ch);if(ch>='A'&&ch<='Z'||ch>='a'&&ch<='z')printf("%c是英文字母.\n",ch);

71計算機(jī)工程學(xué)院elseif(ch>='0'&&ch<='9')printf("%c是數(shù)字字符.\n",ch);elseprintf("%c是其他字符.\n",ch);}72計算機(jī)工程學(xué)院4.運行結(jié)果

圖2-18案例4運行結(jié)果173計算機(jī)工程學(xué)院圖2-19案例4運行結(jié)果274計算機(jī)工程學(xué)院5.歸納分析

本案例中,對給定問題要分三種情況進(jìn)行判斷。這就需要使用嵌套形式的if語句來實現(xiàn)。if語句的嵌套就是在一個if語句中又包含另一個if語句。

(1)if語句的一般嵌套形式

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

if(<表達(dá)式2>)<語句1>內(nèi)嵌if-else語句

else<語句2>else外層if-else語句

if(<表達(dá)式3>)<語句3>內(nèi)嵌if-else語句

else<語句4>75計算機(jī)工程學(xué)院上面的一般形式中是在if和else

中各自內(nèi)嵌一個if-else語句。(2)嵌套形式不具有固定的語句格式。本案例中使用的在外層if語句中的else的后面內(nèi)嵌一個if-else語句的形式。自上而下看流程圖2-16可知,當(dāng)ch是英文字母時,執(zhí)行路徑為①⑤;當(dāng)ch是數(shù)字文字符時,執(zhí)行路徑為②③⑤,ch是其他字符時,執(zhí)行路徑為②④⑤。76計算機(jī)工程學(xué)院2.2.2基礎(chǔ)理論1.if語句的缺省形式

如果if-else語句中else后面的<語句2>是空語句時,則if語句可簡化為:

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

<語句1>其執(zhí)行過程是:計算<表達(dá)式>的值,如果<表達(dá)式>的值“真”(非0),執(zhí)行<語句1>,否則什么也不做,轉(zhuǎn)去執(zhí)行if語句的后繼語句。流程圖見圖2-20。77計算機(jī)工程學(xué)院圖2-20流程圖假真求表達(dá)式語句1后繼語句78計算機(jī)工程學(xué)院用缺省形式的if語句重寫【案例1】。#include<stdio.h>voidmain(){floatkm,fee;printf("輸入行車?yán)锍虜?shù):");scanf("%f",&km); fee=10.0;if(km>3.0)fee=10.0+(km-3.0)*1.8;printf("%.2f公里,請付¥%.2f\n",km,fee);}79計算機(jī)工程學(xué)院程序中在if語句前加了一條語句fee=10.0;,當(dāng)輸入的行車?yán)锍虜?shù)小于3公里時,不再需要計算車費,所以可以采用缺省的if語句。2.if和else的配對規(guī)則使用if語句的嵌套形式時,如果if的數(shù)目和else的數(shù)目相同,它們的配對關(guān)系比較清楚。但由于存在if語句的缺省形式,會出現(xiàn)if與else的數(shù)目不一樣的情況,初學(xué)者往往會弄錯它們的配對關(guān)系。因此,必須正確理解C語言中if與else的配對規(guī)則。C語言規(guī)定:else與前面最接近它而又沒有和其它else配對的if配對。80計算機(jī)工程學(xué)院下面的程序是試圖判斷x是大于0的偶數(shù)還是小于等于零?,F(xiàn)分析一下程序在x分別取值為8、-5和5時的輸出結(jié)果。

#include<stdio.h>voidmain(){intx;printf("Enterx:");scanf("%d",&x);

81計算機(jī)工程學(xué)院if(x>0)

if(x%2==0)printf("x>0andxiseven.\n");elseprintf("x<=0.\n");}程序運行情況1:

Enterx:8

x>0andxiseven.程序運行情況2:

Enterx:-5

程序運行情況3:

Enterx:5

x<=0.82計算機(jī)工程學(xué)院從程序運行的三種情況來看:情況2、3的結(jié)果顯然是錯誤的。為什么呢?從書寫格式上看,編程者是試圖使else與第一個if組成if-else結(jié)構(gòu),即當(dāng)x<=0時執(zhí)行else后面的printf("x<=0.\n");語句。但是,根據(jù)if-else的配對原則,編譯系統(tǒng)實際上是把else與第二個if作為配對關(guān)系處理,程序運行情況3的結(jié)果就說明了這種配對關(guān)系。所以書寫格式并不能代替程序邏輯。為實現(xiàn)編者的意圖,必須加“{}”,來強(qiáng)制確定配對關(guān)系,即將第二個if語句用“{}”括起來,即:

83計算機(jī)工程學(xué)院

if(x>0){if(x%2==0)printf("x>0andxiseven.\n");}elseprintf("x<=0.\n");3.正確使用switch語句84計算機(jī)工程學(xué)院在案例3中我們已經(jīng)使用了switch語句,但還應(yīng)注意以下問題:(1)switch后面表達(dá)式的類型,一般為整型、字符型和枚舉類型(枚舉類型將在后面模塊中介紹)。(2)case子句中<常量表達(dá)式>的類型應(yīng)該與switch后面<表達(dá)式>的類型相容,每個case子句中<常量表達(dá)式>的值必須互不相等,case和<常量表達(dá)式>之間要有空格,case后面的<常量表達(dá)式>之后有“:”,且所有case包含在“{}”里。

(3)一種情況處理完后,一般應(yīng)使程序的執(zhí)行流程跳出switch語句,則由break語句完成。如果沒有85計算機(jī)工程學(xué)院

break語句,將會在繼續(xù)執(zhí)行后面的語句,直到switch語句結(jié)尾。重寫【案例3】,觀察case子句中沒有break語句時程序的運行結(jié)果。

#include<stdio.h>voidmain()

{ intua; charcode; printf("請輸入無符號整數(shù)和進(jìn)制代號:")

86計算機(jī)工程學(xué)院

scanf("%d%c",&ua,&code); switch(code){ case'd':printf("十進(jìn)制數(shù):%d\n",ua);case'o':printf("八進(jìn)制數(shù):%o\n",ua);case'x':printf("十六進(jìn)制數(shù):%x\n",ua);default:printf("進(jìn)制代號錯誤!");}}運行情況如圖2-21所示。由此可見,case子句87計算機(jī)工程學(xué)院只是起一個標(biāo)號的作用,確定匹配的入口,然后從此處開始一直執(zhí)行下去,對后面的case子句的值不再進(jìn)行比較。所以,當(dāng)僅需執(zhí)行一個分支情況時,則在case子句后面的語句序列中必須包含一個break語句。圖2-21運行結(jié)果88計算機(jī)工程學(xué)院

(4)當(dāng)多種常量表達(dá)式代表同一種情況時,出現(xiàn)在前面的case子句可以無處理語句,即多個case子句共用一組處理語句。例如【案例3】中,如果用戶希望輸入進(jìn)制代號時對字母無大小寫要求,則可對【案例3】的源程序作如下修改。運行結(jié)果如圖2-22所示。89計算機(jī)工程學(xué)院圖2-22運行結(jié)果90計算機(jī)工程學(xué)院2.2.3技能訓(xùn)練【實驗2-4】輸入一個整數(shù)n,判斷n是否是一個能被23整除的三位奇數(shù)?!局笇?dǎo)】

(1)問題分析要對n作出正確的判斷,關(guān)鍵在于利用C語言的關(guān)系運算符和邏輯運算符,設(shè)計出正確、合理的表達(dá)式。根據(jù)題意,n應(yīng)滿足:取值范圍:-999~-100或者100~999;n能被23整除:用n%23==0判斷;n是奇數(shù):用n%2!=0判斷;91計算機(jī)工程學(xué)院把這些條件組合起來,可用一個復(fù)雜的邏輯表達(dá)式來表示:

(-999<=n&&n<=-100||100<=n&&n<=999)&&n%23==0&&n%2!=0。

(2)編寫源程序

/*EX2_8.cpp*/#include<stdio.h>main(){intn;

92計算機(jī)工程學(xué)院

printf("Entern:");scanf("%d",&n);if((-999<=n&&n<=-100||100<=n&&n<=999)&&n%23==0&&n%2!=0)printf("%disright.\n",n);elseprintf("%diswrong.\n",n);}

(3)上機(jī)運行程序并分析結(jié)果。

93計算機(jī)工程學(xué)院

(4)問題思考在上例中,如果將條件表達(dá)式設(shè)計為:

(-999<=n&&n<=-100||100<=n&&n<=999&&n%23==0&&n%2==1)能不能對三位負(fù)數(shù)作出正確的判斷?為什么?【實驗2-5】下列程序EX2_9.cpp的功能是計算并輸出下面分段函數(shù)值。但程序上機(jī)發(fā)現(xiàn)運行結(jié)果錯誤,見圖2-23。94計算機(jī)工程學(xué)院

/*EX2_9.cpp*/#include<stdio.h>voidmain(){

doublex,y;1/(x+2),-5≤x<0且x≠-21/(x+5),0≤x<51/(x+12),5≤x<100,其它y=95計算機(jī)工程學(xué)院

printf("inputx="); scanf("%f",&x); if((-5.0<=x<0.0)&&(x!=-2))

y=1.0/(x+2);elseif(5.0<x)

y=1.0/(x+5);elseif(x<10.0)

y=1.0/(x+12);elsey=0.0;printf("x=%e\ny=%e\n",x,y);}96計算機(jī)工程學(xué)院請理解程序執(zhí)行流程,通過調(diào)試修改程序中的錯誤。具體要求如下:

(1)不允許改變計算精度;(2)不允許改變原程序的結(jié)構(gòu),只能在語句和表達(dá)式內(nèi)部進(jìn)行修改;(3)設(shè)計x的值,測試程序的正確性。97計算機(jī)工程學(xué)院圖2-23程序EX2_9.cpp運行結(jié)果出錯98計算機(jī)工程學(xué)院【指導(dǎo)】程序EX2_9.cpp使用的是一種階梯形的嵌套結(jié)構(gòu),通過不斷在else子句中嵌套if語句來實現(xiàn)。這種結(jié)構(gòu)可以進(jìn)行多個條件(互相排斥的條件)的判斷,用來實現(xiàn)多路分支問題的處理:依次對各個條件進(jìn)行判斷,一旦某個條件滿足,就執(zhí)行該條件下的有關(guān)語句,其他部分將被跳過;若各個條件均不滿足,就執(zhí)行最后一個if-else語句中else后面的語句。如果沒有最后的else子句,就表示什么也不執(zhí)行。99計算機(jī)工程學(xué)院【實驗2-6】某商場在節(jié)日期間舉辦促銷活動,顧客可按購買商品的款數(shù)多少分別給予以下不同的優(yōu)惠折扣:購物不足250元的,沒有折扣,贈送小禮品;購物滿250元,不足500元的,折扣5%;購物滿500元,不足1000元的,折扣8%;購物滿1000元,不足2000元的,折扣10%;購物滿2000元及2000元以上,折扣15%。試用switch語句編寫程序,計算顧客的實際付款數(shù)。100計算機(jī)工程學(xué)院【指導(dǎo)】

(1)問題分析由于switch后面的表達(dá)式不具有對某個區(qū)間內(nèi)的值進(jìn)行判斷的作用,它的取值必須對應(yīng)于每個case子句的一個單值,所以如何設(shè)計表達(dá)式是關(guān)鍵。對于本題,假設(shè)購物款為payment,由于折扣點是以250的倍數(shù)變化的,所以可以把表達(dá)式設(shè)計為payment/250,即:

payment<250元時,對應(yīng)折扣點payment/250為0;

250≤payment<500元時,對應(yīng)折扣點payment/250取值1;101計算機(jī)工程學(xué)院

500≤payment<1000元時,對應(yīng)折扣點payment/250分別取值2、3;

1000≤payment<2000元時,對應(yīng)折扣點payment/250分別取值4、5、6、7;這樣就實現(xiàn)了把payment在一個區(qū)間內(nèi)的取值定位在若干個點上。(2)編寫程序

/*EX2_10.cpp*/#include<stdio.h>102計算機(jī)工程學(xué)院

voidmain(){floatpayment,discount,amount;/*discount:折扣點,amount:付款數(shù)*/inttemp;/*中間變量*/printf("請輸入你的購物款:"); scanf("%f",&payment); temp=(int)payment/250;/*計算折扣點*/switch(temp){103計算機(jī)工程學(xué)院

case0:discount=0;printf("你可獲得一件小禮品。\n");break; case1:discount=5.0;break; case2: case3:discount=7.0;break; case4: case5: case6: case7:discount=10.0;break;

104計算機(jī)工程學(xué)院

default:discount=15.0;break; }amount=payment*(1-discount/100);printf("請付款¥%.2f\n",amount);}(3)上機(jī)運行程序并驗證程序的正確性。(4)完善程序如果輸入的購物款不合法(如負(fù)數(shù)),程序應(yīng)輸出出錯信息;輸出結(jié)果包含以下信息:購物款、獲得的折扣和應(yīng)付款。105計算機(jī)工程學(xué)院

2.2.4拓展與練習(xí)

【練習(xí)1】編寫程序,輸入兩個學(xué)生的成績,按從高到低的次序輸出。編程要求:

(1)輸入兩個成績放入變量score1和變量score2中(2)將高分存入變量score1中,低分存入變量score2中;(3)依次輸出變量score1和score2的值。【練習(xí)2】根據(jù)任務(wù)1中【實驗2-2】的題目要求、解題步驟和流程圖,編寫程序。要求設(shè)計四106計算機(jī)工程學(xué)院

組不同的體重和身高的測試數(shù)據(jù),程序運行后能輸出正確的結(jié)果?!揪毩?xí)3】輸入一個學(xué)生的百分制成績,然后按此輸出等級:90~100為"優(yōu)秀",70~89為"良好",60~69為"及格",<60為"不及格"。編程要求:(1)用switch語句編寫程序;(2)要判斷百分制成績的合理性,對于不合理的成績應(yīng)輸出出錯信息;(3)輸出結(jié)果中應(yīng)包括百分制成績和對應(yīng)的等級。107計算機(jī)工程學(xué)院【練習(xí)4】編寫程序求解一元二次方程ax2+bx+c=0

的根。編程要求:

(1)畫出流程圖;(2)從鍵盤輸入系數(shù)a、b、c,輸入前要有如下提示:“請輸入系數(shù)”;(3)如果方程沒有實根,輸出信息“此方程無實數(shù)根”;如果有重根,以“x1=x2=...”的格式輸出方程的根;如果有兩個不同的根,以“x1=...”和“x2=...”的格式輸出方程的根。108計算機(jī)工程學(xué)院

【練習(xí)5】根據(jù)表2-2的工資、薪金所得適用稅率表計算月交稅金和月實際收入。表2-2工資、薪金所得適用稅率表級數(shù)

含稅級距

適用稅率

速算扣除數(shù)

1小于500元部分5%02大于等于500元—2000元部分10%253大于等于2000元—5000元部分15%1254大于5000元部分20%375109計算機(jī)工程學(xué)院計算方法:月應(yīng)納稅額=月應(yīng)納稅所得額×適用稅率-速算扣除數(shù)。其中,月應(yīng)納稅所得額=月工資收入-個稅起征數(shù);個稅起征數(shù)為1600元。編程要求:輸入月工資收入,計算并輸出月應(yīng)納稅額和月實際收入。110計算機(jī)工程學(xué)院2.2.5編程規(guī)范與常見錯誤1.編程規(guī)范(1)if

和switch關(guān)鍵詞與之后的表達(dá)式之間應(yīng)加1個空格。(2)在if-else語句中,if與else不應(yīng)在同一行,并上下對齊;后面的語句應(yīng)采用縮進(jìn)形式,如是復(fù)合語句,則一對花括號應(yīng)上下對齊??s進(jìn)格式能增加程序的可讀性。例如:

if(a+b>c&&a+c>b&&b+c>a) { s=(a+b+c)/2.0;111計算機(jī)工程學(xué)院

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

printf("areais%f\n",area); } else printf("inputerrer\n");2.常見錯誤

(1)在關(guān)鍵詞if

后面的表達(dá)式中將把賦值運算符“=”誤作比較運算符“==”使用。

例如下面的程序段中,輸入的b無論為何值,均輸出OK。因為這里的表達(dá)式是一個賦值表達(dá)式

b=a,并不是判斷b是否等于a。由于b的值為-1(非0),代表邏輯真,所以語句printf(”NO”);是不可能被執(zhí)行到的。112計算機(jī)工程學(xué)院

inta=-1,b;scanf(“%d”,&b);if(b=a)printf(”O(jiān)K”);else printf(”NO”);

總之,關(guān)鍵詞if后面的表達(dá)式只要是合法的C語言表達(dá)式,當(dāng)它的值為“非0”,即代表“真”,否則為假。113計算機(jī)工程學(xué)院

(2)復(fù)合語句忘了用花括號括起來。

例如在【案例2】的源程序中如漏了花括號如下示:

if(a+b>c&&a+c>b&&b+c>a) s=(a+b+c)/2.0; area=sqrt(s*(s-a)*(s-b)*(s-c)); printf("areais%f\n",area); else printf("inputerrer\n");114計算機(jī)工程學(xué)院程序在編譯時顯示出錯信息:“illegalelsewithoutmatchingif”。因為編譯系統(tǒng)將if語句理解為是缺省形式,這時else就沒有與之配對的if了。115計算機(jī)工程學(xué)院2.2.6貫通案例之二1.問題描述根據(jù)2.1.6貫通案例之一中的菜單,對菜單進(jìn)行編號,用switch語句實現(xiàn)菜單的選擇:

(1)當(dāng)用戶輸入2

時模擬實現(xiàn)增加學(xué)生成績的功能。(2)當(dāng)用戶輸入1~8中的其他數(shù)字時,顯示“本模塊正在建設(shè)中…….”(3)當(dāng)用戶輸入1~8以外的數(shù)字時,顯示適當(dāng)?shù)腻e誤提示。116計算機(jī)工程學(xué)院2.編寫程序

/*EX2_11.cpp*/#include"stdio.h"main(){char ch; longnum;intscore;printf("#=========================#\n");printf(“#學(xué)生成績管理系統(tǒng)#\n");printf("#--------------------------------------------#\n");printf("#copyright@2009-10-1#\n");printf("#=========================#\n");117計算機(jī)工程學(xué)院

printf(“#1.加載文件#\n");printf(“#2.增加學(xué)生成績#\n");printf(“#3.顯示學(xué)生成績#\n");printf(“#4.刪除學(xué)生成績#\n");printf(“#5.修改學(xué)生成績#\n");printf(“#6.查詢學(xué)生成績#\n");printf(“#7.學(xué)生成績排序#\n");printf(“#8.保存文件#\n");printf(“#0.退出系統(tǒng)#\n");printf("#==========================#\n");printf("請按0-8選擇菜單項:");scanf("%c",&ch);118計算機(jī)工程學(xué)院

switch(ch){

case'1':printf("進(jìn)入加載文件模塊.本模塊正在建設(shè)中…….\n");break;

case'2':printf("進(jìn)入增加學(xué)生成績模塊.\n");printf("請輸入學(xué)號和成績:");scanf("%ld%d",&num,&score);break;

case'3':printf("進(jìn)入顯示學(xué)生成績模塊.本模塊正在建設(shè)中…….\n");119計算機(jī)工程學(xué)院

break;case'4':printf("進(jìn)入刪除學(xué)生成績模塊.本模塊正在建設(shè)中…….\n"); break;case'5':printf("進(jìn)入修改學(xué)生成績模塊.本模塊正在建設(shè)中…….\n"); break;case'6':printf("進(jìn)入查詢學(xué)生成績模塊.本模塊正在建設(shè)中…….\n"); break;case'7':printf("進(jìn)入學(xué)生成績排序模塊.本模塊正在建設(shè)中…….\n"); break;120計算機(jī)工程學(xué)院

case'8':printf("進(jìn)入保存文件模塊.本模塊正在建設(shè)中…….\n"); break; case'0':printf("退出系統(tǒng).\n");exit(0);default:printf("輸入錯誤!"); break;} }3.運行結(jié)果121計算機(jī)工程學(xué)院圖2-24貫通案例運行結(jié)果1122計算機(jī)工程學(xué)院圖2-25貫通案例運行結(jié)果2123計算機(jī)工程學(xué)院

任務(wù)3循環(huán)結(jié)構(gòu)程序設(shè)計

學(xué)習(xí)目標(biāo)領(lǐng)會程序設(shè)計中構(gòu)成循環(huán)的方法,掌握for、while和do-while

語句的用法,了解break和continue

語句在循環(huán)語句中的作用。124計算機(jī)工程學(xué)院

2.3.1案例講解

案例1累加問題1.問題描述計算100以內(nèi)的奇數(shù)之和,即求1+3+5+…+97+99。2.編程分析(1)設(shè)變量sum存放累加和,初值置0;變量i存放需累加的當(dāng)前項,初值置1;

125計算機(jī)工程學(xué)院(2)當(dāng)i<100時,反復(fù)執(zhí)行當(dāng)前項i加到累加和sum中當(dāng)前項i+2(3)輸出累加和(4)結(jié)束流程圖見2-26。126計算機(jī)工程學(xué)院真假i<100sum+=i開始sum=0i=1輸出sum結(jié)束圖2-26案例1流程圖i=i+2127計算機(jī)工程學(xué)院3.編寫源程序

/*EX2_12.cpp*/#include<stdio.h>voidmain(){ inti,sum; sum=0;/*累加器清0*/ for(i=1;i<100;i+=2) sum+=i;printf(“1+3+5+…+97+99=%d\n”,sum);}128計算機(jī)工程學(xué)院4.運行結(jié)果圖2-27案例1運行結(jié)果129計算機(jī)工程學(xué)院5.歸納分析案例使用的是C語言提供的循環(huán)語句—for語句。

(1)for語句的語法形式

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

<語句>其中,for是關(guān)鍵字。注意,三個表達(dá)式之間必須用分號(;)隔開。

(2)for

語句的執(zhí)行流程①首先計算<表達(dá)式1>;130計算機(jī)工程學(xué)院②求<表達(dá)式2>的值,若其值為非零,執(zhí)行<語句>,然后轉(zhuǎn)③執(zhí)行,若<表達(dá)式2>的值為零,則結(jié)束for語句。③求解<表達(dá)式3>,轉(zhuǎn)②執(zhí)行。流程圖如圖2-28。131計算機(jī)工程學(xué)院計算表達(dá)式1表達(dá)式2計算表達(dá)式3執(zhí)行語句(循環(huán)體)真假圖2-28流程圖132計算機(jī)工程學(xué)院

(3)在程序EX2_12.cpp中,for循環(huán)的執(zhí)行過程是:先賦值i=1,然后判斷“i<100”是否成立,如果為真,執(zhí)行循環(huán)體“sum+=i;”,轉(zhuǎn)而執(zhí)行“i+=2”,再判斷“i<100”,如此反復(fù),直到“i>=100”為止。在此,變量i既是當(dāng)前項,也起到了控制循環(huán)次數(shù)的作用,所以i也稱為循環(huán)控制變量,它的值由表達(dá)式3來改變;sum起累加器的作用,共累加了50次。表2-3展示了i和sum在循環(huán)中的值的變化。133計算機(jī)工程學(xué)院表2-3循環(huán)中i和sum的變化案例2求平均分問題1.問題描述輸入若干個學(xué)生的C語言課程考試成績,計算這門課程的平均分,輸入負(fù)數(shù)時結(jié)束。i的值1357911…9799sum的值149162536…24032500134計算機(jī)工程學(xué)院2.編程分析在程序中需要設(shè)置以下變量:score存放輸入成績;累加器sum存放總成績;count統(tǒng)計人數(shù);ave

溫馨提示

  • 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

提交評論