計(jì)算機(jī)軟件及應(yīng)用控制結(jié)構(gòu)和數(shù)據(jù)文件_第1頁
計(jì)算機(jī)軟件及應(yīng)用控制結(jié)構(gòu)和數(shù)據(jù)文件_第2頁
計(jì)算機(jī)軟件及應(yīng)用控制結(jié)構(gòu)和數(shù)據(jù)文件_第3頁
計(jì)算機(jī)軟件及應(yīng)用控制結(jié)構(gòu)和數(shù)據(jù)文件_第4頁
計(jì)算機(jī)軟件及應(yīng)用控制結(jié)構(gòu)和數(shù)據(jù)文件_第5頁
已閱讀5頁,還剩243頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

2024/8/29第3章控制結(jié)構(gòu)和數(shù)據(jù)文件1

——工作流程描述工作活動的流向順序,幫助管理者了解實(shí)際工作活動,消除工作過程中多余的工作環(huán)節(jié)、合并同類活動,使工作流程更為經(jīng)濟(jì)、合理和簡便,從而提高工作效率。2024/8/29第3章控制結(jié)構(gòu)和數(shù)據(jù)文件2本章概要順序、選擇和循環(huán)是結(jié)構(gòu)化程序的三大結(jié)構(gòu),體現(xiàn)了結(jié)構(gòu)化程序設(shè)計(jì)的特點(diǎn)。本章著重介紹選擇和循環(huán)結(jié)構(gòu)程序設(shè)計(jì)。重點(diǎn)、難點(diǎn)重點(diǎn):(1)分支語句和循環(huán)語句(3)選擇及循環(huán)結(jié)構(gòu)程序設(shè)計(jì)難點(diǎn):(1)多分支語句(2)循環(huán)嵌套2024/8/29第3章控制結(jié)構(gòu)和數(shù)據(jù)文件31、理解自頂向下和結(jié)構(gòu)化程序設(shè)計(jì)思想2、理解并能構(gòu)造關(guān)系表達(dá)式和邏輯表達(dá)式3、應(yīng)用選擇結(jié)構(gòu)解決問題,編制程序4、應(yīng)用循環(huán)結(jié)構(gòu)編制程序5、掌握幾種常用算法6、應(yīng)用結(jié)構(gòu)化程序設(shè)計(jì)方法解決實(shí)際問題7、理解并會簡單使用從信息文件中讀取數(shù)據(jù)和向信息文件中寫入數(shù)據(jù)的方法本章教學(xué)目標(biāo)2024/8/29第3章控制結(jié)構(gòu)和數(shù)據(jù)文件4關(guān)鍵詞語雙語化1.在for-語句里(infor-statement)2.在條件里(incondition)

3.默認(rèn)(default)4.關(guān)系運(yùn)算符(relationoperator)

5.循環(huán)機(jī)制(loopingmechanisms)6.if-else語句(if-elsestatement)2024/8/29第3章控制結(jié)構(gòu)和數(shù)據(jù)文件5本章內(nèi)容3.1

流程控制概念3.2

流程控制的條件設(shè)計(jì)3.3

選擇結(jié)構(gòu)程序設(shè)計(jì)3.4

軟件開發(fā)與項(xiàng)目案例設(shè)計(jì)

3.5

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

數(shù)據(jù)文件2024/8/29第3章控制結(jié)構(gòu)和數(shù)據(jù)文件6本章項(xiàng)目任務(wù)軟件界面的進(jìn)一步優(yōu)化和簡單數(shù)據(jù)輸入輸出功能的實(shí)現(xiàn)。2024/8/29第3章控制結(jié)構(gòu)和數(shù)據(jù)文件73.1流程控制概念實(shí)際工作流程:反映在完成工作的過程中,不同事件之間的因果和時間關(guān)系。工作過程進(jìn)行中僅有一個事件發(fā)生,則沒有控制意義。分析和描述工作流程常有五個步驟:目的分析:做什么?為什么做?有必要做?應(yīng)該做什么?地點(diǎn)分析:合并相關(guān)工作活動,在什么地方做某項(xiàng)活動?為何在該處做?可否在別處做?應(yīng)當(dāng)在何處做?順序分析:何時做某事?為何此時做?可否在其它時間做?應(yīng)當(dāng)何時做?人員分析:分析人員匹配的合理性,誰做?為何由此人做?可否用其他人做?應(yīng)當(dāng)由誰來做?方法分析:目的在于簡化操作,如何做?為何這樣做?可否用其他方法做?應(yīng)當(dāng)用什么方法來做?2024/8/29第3章控制結(jié)構(gòu)和數(shù)據(jù)文件8實(shí)際工作流程設(shè)計(jì)與控制對應(yīng)程序設(shè)計(jì)中的六步法程序流程控制(flowcontrol):反映程序語句執(zhí)行的流程順序。流程控制是程序設(shè)計(jì)的基本工作。常用三種不同的控制結(jié)構(gòu)構(gòu)造程序語句的執(zhí)行流程。順序選擇循環(huán)流程控制結(jié)構(gòu)主要講述:條件判斷循環(huán)控制轉(zhuǎn)移2024/8/29第3章控制結(jié)構(gòu)和數(shù)據(jù)文件93.2流程控制中的條件(Condition)設(shè)計(jì)3.2.1

關(guān)系運(yùn)算符與關(guān)系表達(dá)式3.2.2

邏輯運(yùn)算符和邏輯表達(dá)式3.2.3

控制條件的描述與表示

流程控制是程序的靈魂,流程控制中需要測試控制條件。選擇、循環(huán)程序結(jié)構(gòu)中常用“關(guān)系或邏輯運(yùn)算”表達(dá)式做條件控制條件是能夠計(jì)算出“真”或“假”的表達(dá)式,叫條件表達(dá)式條件表達(dá)式由關(guān)系運(yùn)算符、邏輯運(yùn)算符、其它運(yùn)算符和運(yùn)算對象構(gòu)成。2024/8/29第3章控制結(jié)構(gòu)和數(shù)據(jù)文件103.2.1關(guān)系運(yùn)算符與關(guān)系表達(dá)式

(TheOperatorandExpressionsofRelations)

程序中經(jīng)常需要比較兩個量的大小關(guān)系,以決定程序下一步的工作。比較兩個量的運(yùn)算符稱為關(guān)系運(yùn)算符由關(guān)系運(yùn)算符將操作數(shù)連起來的表達(dá)式稱為關(guān)系表達(dá)式。C語言提供了6個關(guān)系運(yùn)算符2024/8/29第3章控制結(jié)構(gòu)和數(shù)據(jù)文件11關(guān)系運(yùn)算符名稱案例含

義>大于x>y若x大于y,結(jié)果為真(1);否則結(jié)果為假(0)>=大于等于x>=y若x大于等于y,結(jié)果為真(1);否則結(jié)果為假(0)<小于x<y若x小于y,結(jié)果為真(1);否則結(jié)果為假(0)<=小于等于x<=y若x小于等于y,結(jié)果為真(1);否則結(jié)果為假(0)==等于X==y若x等于y,結(jié)果為真(1);否則結(jié)果為假(0)!=不等于x!=y若x不等于y,結(jié)果為真(1);否則結(jié)果為假(0)2024/8/29第3章控制結(jié)構(gòu)和數(shù)據(jù)文件12關(guān)系運(yùn)算符(Therelationaloperatorsare:)<、<=、>、>=(這四個運(yùn)算符優(yōu)先級是6級)、==、!=(優(yōu)先級7級)雙目運(yùn)算符;結(jié)合方向:自左向右優(yōu)先級(precedence):>,>=,<and<=:同一優(yōu)先級。Theyallhavethesameprecedence.==,!=:同一優(yōu)先級。比前四個低一級(Justbelowtheminprecedencearetheequalityoperators)總體來說,與其它運(yùn)算符的關(guān)系:Theprecedenceoftherelationaloperator:

算術(shù)運(yùn)算符>關(guān)系運(yùn)算符>賦值(=)>逗號運(yùn)算符(,)關(guān)系表達(dá)式的值為邏輯值,也稱布爾值。邏輯值只有兩個:指定關(guān)系式成立時,邏輯結(jié)果為真,以1表示;指定關(guān)系不成立時,邏輯結(jié)果為假,以0表示。例運(yùn)算符優(yōu)先級

c>a+b/*c>(a+b)*/a>b!=c/*(a>b)!=c*/a==b<c/*a==(b<c)*/a=b>c/*a=(b>c)*/例inta=3,b=2,c=1,d,f;a>b(a>b)==cb+c<ad=a>bf=a>b>c/*表達(dá)式值1*//*表達(dá)式值1*//*表達(dá)式值0*//*表達(dá)式值0*//*f=0*/2024/8/29第3章控制結(jié)構(gòu)和數(shù)據(jù)文件13例:

5>2>7>8在C中是允許的,值為0k==j==i+5;

根據(jù)運(yùn)算符的左結(jié)合性,先計(jì)算k==j,如果該式不成立,其值為0,再計(jì)算0==i+5,如果也不成立,則表達(dá)式值為0。

關(guān)系運(yùn)算的注意事項(xiàng):例‘a(chǎn)’>0結(jié)果為

‘A’>100結(jié)果為10例:#include<stdio.h>voidmain(){floatd=123.45; if(123.45==d)printf("1\n");elseprintf("0\n");}

(1)字符變量以對應(yīng)的ASCII碼參與運(yùn)算。(2)對于含多個關(guān)系運(yùn)算符的表達(dá)式,根據(jù)運(yùn)算符的左結(jié)合性計(jì)算.(3)注意“==”和“=”的區(qū)別。例:#include<stdio.h>#include<math.h>voidmain(){floatd=123.45; if(fabs(123.45-d)<1e-5)printf("1\n");elseprintf("0\n");}fabs()是數(shù)學(xué)庫函數(shù)。功能:求浮點(diǎn)數(shù)x的絕對值。原型為:externfloatfabs(floatx);

包含在math.h頭文件中(4)應(yīng)避免對實(shí)數(shù)作相等或不等的判斷例inti=1,j=7,a;a=i+(j%4!=0);

則a=2例:

inta=0,b=1;if(a=b)/*賦值,非比較*/printf(“aequaltob”);else

printf(“anotequaltob”);

數(shù)學(xué)概念:

|a-b|<ε其中,ε為很小的正數(shù),表示a和b之間的誤差??梢愿鶕?jù)要求進(jìn)行調(diào)節(jié),ε越小,a和b之間的差就越小。若該式成立,則認(rèn)為a與b之間誤差不超過ε,近似相等;否則認(rèn)為a和b不相等。2024/8/29第3章控制結(jié)構(gòu)和數(shù)據(jù)文件143.2.2邏輯運(yùn)算符與邏輯表達(dá)式

(TheOperatorandExpressionsofLogic)C語言中有3個邏輯運(yùn)算符:&&(邏輯與,并且)||(邏輯或,或者)!(邏輯非,取反)“!”為單目運(yùn)算符,“&&”和“||”為雙目運(yùn)算符。優(yōu)先級順序:!>&&>||“!”的優(yōu)先級高于算術(shù)運(yùn)算符,右結(jié)合性?!?&”和“||”的優(yōu)先級低于關(guān)系運(yùn)算符,左結(jié)合性。2024/8/29第3章控制結(jié)構(gòu)和數(shù)據(jù)文件15邏輯運(yùn)算結(jié)果也為邏輯值。例:若,a=4;b=5;則(1)!a(2)a&&b(3)a||b(4)!a||b(5)4&&0||2(6)5>3&&2||8<4-!0(7)‘c’&&‘d’值為1值為1值為1值為1值為0

//(5>3)&&2||(8<(4-(!0)))值為1值為12024/8/29第3章控制結(jié)構(gòu)和數(shù)據(jù)文件16例

a<=x&&x<=b

a>b&&x>ya==b||x==ya>b||!a

/*(a<=x)&&(x<=b)*//*(a>b)&&(x>y)*//*(a==b)||(x==y)*//*||*/(!a)(a>b)只提倡用關(guān)系運(yùn)算符和邏輯運(yùn)算符構(gòu)成的表達(dá)式表示邏輯值,不提倡使用賦值語句以及算術(shù)運(yùn)算符組成的表達(dá)式。2024/8/29第3章控制結(jié)構(gòu)和數(shù)據(jù)文件17短路特性:邏輯表達(dá)式求解時,并非所有的邏輯運(yùn)算符都被執(zhí)行,只是在必須執(zhí)行下一個邏輯運(yùn)算符才能求出表達(dá)式的解時,才執(zhí)行該運(yùn)算符例:

intx=3,y=0,z=6;!x&&(y+1)&&(z+=2)解答:

表達(dá)式!x的值為0,整個表達(dá)式即為假,則表達(dá)式y(tǒng)+1和z+=2不再計(jì)算。這樣z值沒有被修改。2024/8/29第3章控制結(jié)構(gòu)和數(shù)據(jù)文件18例:判斷變量a的值是否在12到30之間。數(shù)學(xué)表達(dá)式寫為:12<a<30

若把這樣的表達(dá)式放在程序里,編譯通過。但在運(yùn)行時會出問題。首先進(jìn)行12<a的判斷,無論結(jié)果為真(1)或假(0),1<30或0<30永遠(yuǎn)成立。由此看來這種寫法在程序中肯定是錯的。正確的寫法應(yīng)該是:(12<a)&&(a<30)/*如果變量a的值大于12并且小于30*/注意區(qū)分C語言的關(guān)系表達(dá)式與數(shù)學(xué)上的比較運(yùn)算表達(dá)式,并將數(shù)學(xué)上的比較運(yùn)算轉(zhuǎn)化為合法的C關(guān)系表達(dá)式。2024/8/29第3章控制結(jié)構(gòu)和數(shù)據(jù)文件19例如:x>1&&x<100

/*判斷x值是否介于1和100之間,或位于數(shù)軸中的開區(qū)間*/x>=1&&x<=100

/*判斷x值是否介于1和100之間,位于數(shù)軸中間的閉區(qū)間*/x<1||x>=100

/*判斷x值是否小于1或大于等于100,位于數(shù)軸的兩端*/x>=0||y>=0

/*判斷x和y值是否都大于等于0,或位于第一象限含數(shù)軸*/x+y>z&&x+z>y&&y+z>x

/*可用于判斷三個數(shù)是否滿足構(gòu)成三角形的條件*/ch>='A'&&ch<=’Z’

/*用于判斷變量ch是否為大寫字母*/。2024/8/29第3章控制結(jié)構(gòu)和數(shù)據(jù)文件203.2.3控制條件的描述與表示常見的控制條件有如下幾種形式:(1)關(guān)系表達(dá)式:例,a>ba==0a!=0等

expression!=0等價于expressionexpression==0等價于!expression(2)邏輯表達(dá)式:例,a>b&&c>d

等(3)算術(shù)表達(dá)式:例,a1等1、對于簡單的表示比較的條件,利用關(guān)系運(yùn)算符就可以輕松構(gòu)造。例如:表示“學(xué)生的語文成績在90分以上”這樣一個條件使用關(guān)系表達(dá)式:chinese>90表示“數(shù)學(xué)在95分以下”使用表達(dá)式:math<95一個數(shù)為奇數(shù)的條件表達(dá)式為n%2!=02、如果要表示比較復(fù)雜的條件,則可以使用邏輯運(yùn)算符將多個關(guān)系表達(dá)式組合起來,從而構(gòu)成復(fù)雜的條件。例如:表示“學(xué)生的語文成績在90分以上并且數(shù)學(xué)在95分以下”使用表達(dá)式:chinese>90&&math<95判斷變量ch是否是大寫字母的表達(dá)式為ch>=‘A’&&ch<=‘Z’3、對于更復(fù)雜的條件,可以使用“()”和邏輯、關(guān)系運(yùn)算符構(gòu)造條件表達(dá)式。常見的構(gòu)造條件表達(dá)式的方法:2024/8/29第3章控制結(jié)構(gòu)和數(shù)據(jù)文件21分析:根據(jù)數(shù)學(xué)知識,閏年年份滿足的條件為:如果年份能被4整除但不能被100整除,是閏年;年份能被400整除,也是閏年。例:設(shè)整型變量year表示年份,構(gòu)造一個條件表達(dá)式,當(dāng)year值為閏年時該條件表達(dá)式為“真”,否則為“假”。所以,判斷閏年的條件表達(dá)式為下列二者之一:①year%4==0&&year%100!=0②year%400==0表達(dá)式①②的或運(yùn)算完整地表示判斷閏年的條件:

(year%4==0&&year%100!=0)||year%400==0

等價表示:year%4==0&&year%100!=0||year%400==0或year%4==0&&year%100||year%400==0或!(year%4)&&year%100||!(year%400)2024/8/29第3章控制結(jié)構(gòu)和數(shù)據(jù)文件223.3選擇結(jié)構(gòu)(SelectionStructure)程序設(shè)計(jì)3.3.1

選擇結(jié)構(gòu)語句(ConditionalStatements)3.3.2

選擇結(jié)構(gòu)的嵌套(Nest)3.3.3switch語句、break語句和goto語句選擇結(jié)構(gòu)分為:單分支:if雙分支:if-else多分支:if-else-if、swtitch2024/8/29第3章控制結(jié)構(gòu)和數(shù)據(jù)文件233.3.1選擇結(jié)構(gòu)語句(ConditionalStatements)3-xx≤0y=2/xx>0分析:自然語言描述算法如下(1)輸入x;(2)如果x<=0則y=3-x; 否則y=2/x;(3)輸出y的值。定義變量y,x用戶輸入xX<=0Ty=3-xFy=2/x輸出y引例1:計(jì)算分段函數(shù)2024/8/29第3章控制結(jié)構(gòu)和數(shù)據(jù)文件24

引例2:學(xué)生查分時,應(yīng)輸出查詢成績。并只對分?jǐn)?shù)高于85分的學(xué)生表示慶賀。定義變量y從文件讀取數(shù)據(jù)yy>=85TF輸出”祝賀你!”輸出y

根據(jù)“條件表達(dá)式”的值選擇不同的程序分支執(zhí)行。分支流程控制用if語句(TheifStatement)實(shí)現(xiàn)。結(jié)論:2024/8/29第3章控制結(jié)構(gòu)和數(shù)據(jù)文件25if語句的基本語句形式if單分支if-else雙分支單分支語句格式:

if(condition)statement

雙分支語句格式:if(condition)statement1

elsestatement2說明:condition是控制條件表達(dá)式,圓括號“()”必不可少;例,ifb==aarea=a*a;/*錯,缺少條件括號*/語法上,內(nèi)嵌statement是一條語句。內(nèi)嵌statement有多條語句時,用復(fù)合語句內(nèi)嵌statement又是if分支語句時,構(gòu)成分支嵌套結(jié)構(gòu)。C標(biāo)準(zhǔn)規(guī)定,編譯程序必須能支持至少15層分支嵌套。內(nèi)嵌語句可以是:賦值語句函數(shù)調(diào)用語句控制語句復(fù)合語句空語句2024/8/29第3章控制結(jié)構(gòu)和數(shù)據(jù)文件26if(condition)if條件結(jié)構(gòu)\控制流程\語句statement

條件TFstatementif(condition)條件Fstatement1statement2elsestatement2statement1T2024/8/29第3章控制結(jié)構(gòu)和數(shù)據(jù)文件27【例3-1】把大寫字母轉(zhuǎn)換為對應(yīng)小寫字母

。分析:(1)問題背景:使用QQ、郵箱等軟件時經(jīng)常要輸入用戶名和密碼。對用戶而言,輸入的用戶名可不區(qū)分大小寫需要把輸入的字母轉(zhuǎn)換為相應(yīng)的?。ù螅懽帜冈倥c系統(tǒng)內(nèi)容(全大寫或小寫)進(jìn)行判斷比較。(2)需求分析:從鍵盤輸入一個字符,若是大寫字母,輸出其對應(yīng)的小寫字母。否則其它字符直接輸出(3)數(shù)學(xué)建模:小寫字母的ASCII碼值=大寫字母的ASCII碼值+32。算法NS流程圖描述

定義char型變量:chch=ch+32;輸出ch;

輸入字符ch;ch>=’A’&&ch<=’Z’TF#include<stdio.h>voidmain(){charch;printf("請輸入一個字符:\n");ch=getchar();printf("輸入的原始字符為%c:\n",ch);if(ch>='A'&&ch<='Z')ch=ch+32;printf(“轉(zhuǎn)換后的字符為%c:\n”,ch);}編碼

【例3-3】用“假設(shè)思想”法求任意兩數(shù)中的較大數(shù)。(必記算法)分析:假設(shè)思想:先假設(shè)某事物成立或不成立,然后判斷事實(shí)是否如此,如果事實(shí)和假設(shè)條件不符,則對假設(shè)進(jìn)行修正。

設(shè)有變量x、y、max;

假設(shè)較大的數(shù)是max=x;然后反假設(shè)證之:如果max<y條件成立,則假設(shè)錯誤,修改語句:max=y;否則假設(shè)正確。輸出總是大數(shù)的max值定義變量x,y,max;max=y;輸出max;輸入x,y;假設(shè)max=x;max<yTF#include<stdio.h>voidmain(void){intx,y,max; printf("請輸入兩個實(shí)數(shù):"); scanf("%d%d",&x,&y);

max=x;

if(max<y)max=y;

printf("兩數(shù)中較大的數(shù)為%d\n",max);}定義變量x,y,max;max=y;輸出max;輸入x,y;假設(shè)max=x;max<yTF求三個數(shù)或更多數(shù)中的最大數(shù)或最小數(shù)都可以使用該算法。

求三個數(shù)中的最小數(shù),程序如下:

#include<stdio.h>voidmain(void){floatx,y,z,min; /*定義x、y、z三個變量*/printf("請輸入三個實(shí)數(shù):"); /*提示信息*/scanf("%f%f%f",&x,&y,&z); /*輸入數(shù)據(jù)*/

min=x;/*假設(shè)x的值較大*/if(min>y)min=y; /*假設(shè)若不成立則max值修正為y*/

if(min>z)min=z;printf("三數(shù)中較小的數(shù)為%10.4f\n",min);}算法1:雙分支語句floatx,y,max;if(x>y)max=x;elsemax=y;輸出max;雙分支語句求兩數(shù)中的較大數(shù)算法2:雙分支語句floatx,y;if(x>y)輸出x;else

輸出y;算法3:雙分支語句floatx,y,max,min;if(x>y)max=x,min=y;elsemax=y,min=x;輸出max,min;算法4:單分支語句floatx,y,max;max=x;ifmax<ymax=y;輸出max;雙分支單分支應(yīng)用:數(shù)據(jù)排序。將x、y中的數(shù)據(jù)按降序排列。算法分析:“假設(shè)思想”1、定義變量x,y,t2、假設(shè)x、y已按降序排列,輸出x、y。3、若x,y是升序,則交換兩個變量中的值(兩兩交換)4、輸出x,y。#include<stdio.h>voidmain(void){intx,y,t;printf("Enterx,y:");scanf("%d,%d",&x,&y);if(x<y)

{

t=x;x=y;y=t;

}

/*兩兩交換*/

printf("%d,%d\n",x,y);}定義變量x,y,t;x<yTFt=x,x=y,y=t;輸出x,y#include<stdio.h>voidmain(void){intx,y;printf("Enterx,y:");scanf("%d,%d",&x,&y);if(x<y)

{intt

t=x;x=y;y=t;

}

/*兩兩交換*/

printf("%d,%d\n",x,y);}【例3-4】數(shù)學(xué)中有許多有趣的數(shù),如水仙花數(shù)、完數(shù)等。水仙花數(shù)是一個三位數(shù),其各位數(shù)字的立方和恰等于這個數(shù)。例如153,13+53+33=153。編寫程序,從鍵盤上輸入一個三位的整數(shù),判斷其是否為水仙花數(shù)。分析:(1)問題描述:判斷一個三位整數(shù)num是否為水仙花數(shù)(2)數(shù)學(xué)建模和流程:分解num的每一位數(shù)字:ge=num%10 /*個位*/bai=num/100 /*百位*/shi=num/10%10; /*十位*/若num==bai*bai*bai+shi*shi*shi+ge*ge*ge,則num為水仙花數(shù),否則不是。定義變量num,ge,shi,bai;輸出yes輸入一個三位數(shù)num;從num分解ge,shi,bai輸出no#include<stdio.h>voidmain(void){intnum,bai,shi,ge;printf("請輸入一個三位的整數(shù):");scanf("%d",&num);bai=num/100;shi=num/10%10;ge=num%10;if(num==bai*bai*bai+shi*shi*shi+ge*ge*ge)printf("%d是水仙花數(shù)。",num);elseprintf("%d不是水仙花數(shù)。",num);}是水仙花數(shù)?TF2024/8/29第3章控制結(jié)構(gòu)和數(shù)據(jù)文件372、條件運(yùn)算符和條件表達(dá)式條件運(yùn)算符是C語言中唯一的三目運(yùn)算符,由“?”和“:”組成。條件表達(dá)式的一般形式為: 表達(dá)式1?

表達(dá)式2:

表達(dá)式3

說明:表達(dá)式1一般是控制條件表達(dá)式2和表達(dá)式3可以是C語言中任意合法的表達(dá)式,一般這兩個表達(dá)式的值類型相同。2024/8/29第3章控制結(jié)構(gòu)和數(shù)據(jù)文件38功能:首先計(jì)算表達(dá)式1(條件)的邏輯值如結(jié)果為真,則計(jì)算表達(dá)式2的值,并將表達(dá)式2的值作為整個條件表達(dá)式的值;如結(jié)果為假,則計(jì)算表達(dá)式3的值,并將表達(dá)式3的值作為整個條件表達(dá)式的值。條件運(yùn)算符可看作以下if語句的縮略形式:

if(表達(dá)式1)條件表達(dá)式的值=表達(dá)式2的值

else

條件表達(dá)式的值=表達(dá)式3的值例,求兩數(shù)中的較大數(shù):max=(x>y?x:y)條件運(yùn)算符的優(yōu)先級低于邏輯運(yùn)算符,高于賦值操作符,自右向左結(jié)合。

2024/8/29第3章控制結(jié)構(gòu)和數(shù)據(jù)文件39【例3-5】從鍵盤輸入一個數(shù),判斷其是奇數(shù)還是偶數(shù)。#include<stdio.h>voidmain(void){intx;printf("x=?");scanf("%d",&x);x%2?printf("%d是奇數(shù)!\n",x):printf("%d是偶數(shù)!\n",x);}2024/8/29第3章控制結(jié)構(gòu)和數(shù)據(jù)文件40

趣味例題:編寫一個程序統(tǒng)計(jì)某物品的數(shù)量,統(tǒng)計(jì)結(jié)束后將物品數(shù)量存儲在變量nItems中并報(bào)告用戶。

把結(jié)果報(bào)告給用戶最直接的方法是調(diào)用printf函數(shù):

printf(“%ditemsfound.”,nItems);

但假如遇到一個語言學(xué)者,而nItems的值又恰巧為1時,看到這個輸出可能會讓他很不滿意:

1itemsfound./*

*/

因?yàn)槠渲袕?fù)數(shù)形式的items應(yīng)該是單數(shù)形式的??梢赃@樣用條件運(yùn)算符實(shí)現(xiàn):

printf(“%ditem%cfound.”,nItems,nItems>1?’s’:’’);

提示:如果使用“?:”運(yùn)算符代替復(fù)雜的if語句來處理一些小的細(xì)節(jié),那它將大大簡化程序的結(jié)構(gòu)。2024/8/29第3章控制結(jié)構(gòu)和數(shù)據(jù)文件413.3.2選擇結(jié)構(gòu)的嵌套(

Nestedifstatement)一個基本的if語句可以用作另一個if語句的分支語句,構(gòu)成嵌套選擇結(jié)構(gòu)。

即statement部分又是分支語句時,稱為分支嵌套。

C標(biāo)準(zhǔn)規(guī)定,編譯程序必須能支持至少15層分支嵌套。

2024/8/29第3章控制結(jié)構(gòu)和數(shù)據(jù)文件42if語句嵌套的形式如下:(1)單if語句的嵌套形式

if

(表達(dá)式)if語句內(nèi)嵌語句,可以是各種形式的if語句(2)雙分支if語句的嵌套形式

if(表達(dá)式)

if語句

else

if語句

內(nèi)嵌語句,如果是復(fù)雜的if語句,請用“{}”括起1、分支語句嵌套2024/8/29第3章控制結(jié)構(gòu)和數(shù)據(jù)文件43例如:①if(c<=100)/*內(nèi)嵌語句是單分支if語句,單分支嵌套單分支*/if(c>=50)printf("50<=c<=100\n");②if(c<=100) /*內(nèi)嵌語句是雙分支if語句,單分支嵌套雙分支*/if(c>=50)printf("50<=c<=100\n");elseprintf("c<50\n")③if(num1>num2)/*雙分支內(nèi)嵌雙分支,求三個數(shù)中的最大值*/if(num1>num3)max=num1; /*雙分支內(nèi)嵌雙分支*/elsemax=num3elseif(num2>num3)max=num2; /*雙分支內(nèi)嵌雙分支*/elsemax=num32024/8/29第3章控制結(jié)構(gòu)和數(shù)據(jù)文件44例,單分支的statement是一個雙分支選擇語句。if(a==1)if(b==2)printf(“***\n”);elseprintf(“###\n”);else與if配對問題:if語句中出現(xiàn)多個“if”與“else”時,要注意它們之間的匹配關(guān)系,否則可能導(dǎo)致邏輯錯誤。

書寫形式不能改變句法規(guī)則,不能決定else的配對問題。else與if的匹配原則是:一個else應(yīng)與其之前距離最近且沒有與其它else配對的if配對等價書寫形式:if(a==1)if(b==2)printf(“***\n”);elseprintf(“###\n”);if(a==1)

if(b==2)printf(“***\n”);elseprintf(“###\n”);2024/8/29第3章控制結(jié)構(gòu)和數(shù)據(jù)文件45

例:(else匹配問題)⑴if(c<=100)

if(c>=50)printf("50<=c<=100\n");⑵if(c<=100)if(c>=50)printf("50<=c<=100\n");elseprintf("c<50\n");else

if(c<=150)printf("100<c<=150\n");elseprintf("c>150\n");⑶if(c<=100)if(c>=50)printf("50<=c<=100\n");elseprintf("c<50\n")與哪個if配對?與哪個if配對?與哪個if配對?與哪個if配對?⑴if(c<=100)

if(c>=50)printf("50<=c<=100\n");⑵if(c<=100)if(c>=50)printf("50<=c<=100\n");elseprintf("c<50\n");else

if(c<=150)printf("100<c<=150\n");elseprintf("c>150\n");⑶if(c<=100)if(c>=50)printf("50<=c<=100\n");elseprintf("c<50\n")2024/8/29第3章控制結(jié)構(gòu)和數(shù)據(jù)文件46

【例3-6】編程實(shí)現(xiàn),判斷某數(shù)是否能被k整除。算法分析:1、問題背景:任何數(shù)除以零的值是無窮大,計(jì)算機(jī)無法存儲,產(chǎn)生一個數(shù)據(jù)溢出錯誤并終止程序的執(zhí)行。為了防止程序被0除而終止,必須保證除數(shù)不為零。

2、算法描述:定義并輸入數(shù)據(jù)a,k;如果除數(shù)k!=0

則繼續(xù)判斷a/k,若結(jié)果為0,能整除。否則不能整除

#include"stdio.h"voidmain(){inta,k;scanf("%d%d",&a,&k);if(k)/*確保k非零的情況下執(zhí)行a/k運(yùn)算*/

if(a%k==0)printf("%d/%dyes\n",a,k);else

printf("%d/%dno\n",a,k);}單分支嵌套雙分支if(k)是if(k!=0)常用的等價寫法x+5x≤1

y=

2x1<x<103/(x-10)x>10【例3-7】實(shí)際問題或數(shù)學(xué)中有許多分段函數(shù)。有分段函數(shù)如下,編程求其值。分析:(1)問題描述:分支嵌套語句的典型應(yīng)用是求解分段函數(shù)。本分段函數(shù)可用多種方法觀察圖形。從左往右(或從右往左)看數(shù)軸,分段函數(shù)若以第一個點(diǎn)分界,把數(shù)軸分為“x≤1”和“x>1”兩部分;其中“x>1”再從左往右,又分成三種情況1<x<10x>10x!=100110注意:多分段函數(shù)中的斷點(diǎn)。(2)需求分析:輸入x的值,根據(jù)x的值計(jì)算并輸出y的值。

y=2*xintx,y;輸出yx>1TF輸入x;x<10TFy=3/(x-10)y=x+5;X>10TFX無定義#include"stdio.h"voidmain(void){intx,y;printf("請輸入數(shù)據(jù)x:");scanf("%d",&x);

if(x>1)/*嵌套雙分支*/if(x<10)y=2*x;/*1<x<10*/elseif(x>10)y=3/(x-10); /*x>10*/elseprintf("x無定義。\n"); /*x=10無定義*/

elsey=x+5; /*x≤1*/printf("x=%d,y=%d\n",x,y);}使用分支嵌套結(jié)構(gòu)編寫程序如下提倡縮格書寫(indentation)有利于閱讀程序2024/8/29第3章控制結(jié)構(gòu)和數(shù)據(jù)文件512、多分支語句if-else-if(重點(diǎn))

多分支選擇結(jié)構(gòu):根據(jù)條件k(k1、k2、...、kn)的邏輯結(jié)果,執(zhí)行語句體1、2、...、n、n+1之一。條件1語句體1Y條件2NY語句體2條件3N語句體3Y語句體n+1N條件n語句體nYN2024/8/29第3章控制結(jié)構(gòu)和數(shù)據(jù)文件52語句功能:首先計(jì)算條件表達(dá)式1的值,如為真,執(zhí)行子句1;否則,若條件表達(dá)式2為真,執(zhí)行子句2;…;以此類推,若條件表達(dá)式n真,執(zhí)行子句n;若有語句n+1,則執(zhí)行語句n+1。所有條件均不成立,則結(jié)束if-else-if語句,執(zhí)行其下一條語句。多分支if-else-if語句的一般格式if(條件1) 語句體1;elseif(條件2) 語句體2;

elseif(條件3) 語句體3;

...elseif(條件n) 語句體n;

else 語句體n+1;2024/8/29第3章控制結(jié)構(gòu)和數(shù)據(jù)文件53特征多分支選擇語句只能選擇執(zhí)行多個子句中的一個子句,所以也叫多選一分支選擇語句。多分支選擇語句中,每個分支有不同的條件表達(dá)式,可以有任意個else子句。也叫級聯(lián)if語句(cascadingifstatement)只在else分支嵌套if-else語句。語法上,if-else-if結(jié)構(gòu)是一條語句。它是雙分支語句的嵌套擴(kuò)充。2024/8/29第3章控制結(jié)構(gòu)和數(shù)據(jù)文件54【例3-9】某些應(yīng)用中常需要判斷鍵盤輸入的字符類型。試編程實(shí)現(xiàn)。分析:

設(shè)字符類型數(shù)據(jù)分為:數(shù)字字符大寫字母小寫字母其它字符輸入一個字符,輸出該字符的類型。

charch;輸入ch;Tch>=’0’&&ch<=’9’F數(shù)字Tch>=’A’&&ch<=’Z’F字符

;大寫

ch>=’a’&&ch<=’z’

字母;T F

小寫 其它字符; 字母

;#include<stdio.h>voidmain(){charch;printf("請輸入一個字符");ch=getchar();

if(ch>=’0’&&ch<=’9’) printf("這是一個數(shù)字字符。\n");

else

if(ch>=’A’&&ch<=’Z’) printf("這是一個大寫字母。\n");

else

if(ch>=’a’&&ch<=’z’) printf("這是一個小寫字母。\n");

elseprintf("是其它字符。\n");}2024/8/29第3章控制結(jié)構(gòu)和數(shù)據(jù)文件57【例3-10】多分支的典型應(yīng)用。用if-else-if語句編程計(jì)算分段函數(shù)的值。分析:數(shù)學(xué)基礎(chǔ):分段函數(shù)的自變量取值范圍一般是整個數(shù)軸或數(shù)軸某部分。分段函數(shù)將數(shù)軸分成幾段,在各段應(yīng)用不同的公式計(jì)算函數(shù)的值。y=x2+2x+1x<-12x+sin(x)-1≤x≤1x3-1x>1

-1012024/8/29第3章控制結(jié)構(gòu)和數(shù)據(jù)文件58在數(shù)軸上從左向右(或從右向左)逐個分析各分段點(diǎn)并產(chǎn)生分支。若x<-1為真,應(yīng)用公式x2+2x+1;(分支一)否則,若x<=1,若為真,應(yīng)用公式2x+sin(x);(分支二)否則應(yīng)用公式x3-1計(jì)算函數(shù)的值。(分支三)2024/8/29第3章控制結(jié)構(gòu)和數(shù)據(jù)文件59定義變量x,y輸入xx<-1Tx<=1Ty=2x+sin(x)y=x3-1輸出yFFy=x2+2x+1提示:對于類似可以映象到數(shù)軸上的有序問題,均可用if-else-if語句來設(shè)計(jì)編程。2024/8/29第3章控制結(jié)構(gòu)和數(shù)據(jù)文件60程序如下:#include"stdio.h"#include"math.h"voidmain(){doublex,y;printf("enterx:");

scanf("%lf",&x);

if(x<-1)y=x*x+2*x+1;

else

if(x<=1)y=2*x+sin(x);

elsey=x*x*x-1;printf("x=%.2f,y=%.2f",x,y);}2024/8/29第3章控制結(jié)構(gòu)和數(shù)據(jù)文件61【學(xué)生項(xiàng)目案例3-1】從鍵盤任意輸入一個百分制考試成績,判斷該成績的等級?!戮庬?xiàng)目功能代碼分析:

對于考試成績等級的劃分,可在數(shù)軸上分段劃分如下:

為保證程序的健壯性,應(yīng)進(jìn)行數(shù)據(jù)的有效性檢查。及格中良優(yōu)無效數(shù)據(jù)無效數(shù)據(jù)060708090100不及格2024/8/29第3章控制結(jié)構(gòu)和數(shù)據(jù)文件62定義變量score輸入scorescore>100||score<0score>=90輸出優(yōu)score>=80數(shù)據(jù)有錯輸出良score>=70輸出中score>=60及格不及格TTTTTFFFFF2024/8/29第3章控制結(jié)構(gòu)和數(shù)據(jù)文件63編寫程序代碼如下:#include<stdio.h>voidmain(void){ floatscore;printf("請輸入成績:");scanf("%f",&score);/*從鍵盤輸入考試成績*/

if(score<0||score>100)printf("成績輸入錯誤!\n");/*有效性檢查*/

else

if(score>=90)printf("%4.1fisA\n",score);

else

if(score>=80)printf("%4.1fisB\n",score);

elseif(score>=70)printf("%4.1fisC\n",score);

else

if(score>=60)printf("%4.1fisD\n",score);

elseprintf("%4.1fisE\n",score);}if-else-if語句結(jié)構(gòu)易使程序冗長不清晰,降低程序的可讀性2024/8/29第3章控制結(jié)構(gòu)和數(shù)據(jù)文件64例【3-11】玩牌游戲。本游戲中,每一組牌用數(shù)字1~13代表;當(dāng)要顯示這些牌時,2~10可以直接顯示數(shù)字,但1、11、12、13應(yīng)該用Ace、Jack、Queen和King來表示。分析:

(1)問題描述:根據(jù)不同的牌面顯示不同的結(jié)果。設(shè)牌面值用變量cardnum表示

(2)處理流程:

3.3.3switch語句和break語句2024/8/29第3章控制結(jié)構(gòu)和數(shù)據(jù)文件65定義牌面變量x輸入xx==1輸出AceTF方法流程一:單分支語句

……x==2輸出2TF

x==3輸出3TF

x==11輸出JackTF

x==12輸出QueenTF

x==13輸出KingTF

2024/8/29第3章控制結(jié)構(gòu)和數(shù)據(jù)文件66定義牌面變量x輸入xx==1輸出AceTF方法流程二:多分支語句

x==2

輸出2TFx==3T輸出3F……….下一語句2024/8/29第3章控制結(jié)構(gòu)和數(shù)據(jù)文件67牌面變量1顯示Ace2顯示23顯示34顯示411顯示Jack12顯示Queen13顯示King下一條語句2024/8/29第3章控制結(jié)構(gòu)和數(shù)據(jù)文件68單分支語句實(shí)現(xiàn):……if(cardnum==1)printf(“Ace\n”);if(cardnum==2)printf(“2\n”);…if(cardnum==11)printf(“Jack\n”);if(cardnum==12)printf(“Queen\n”);if(cardnum==13)printf(“King\n”);……

特點(diǎn):每個單分支語句都要判斷一次

多分支if-else-if語句實(shí)現(xiàn):

if(cardnum==1)printf(“Ace\n”);else

if(cardnum==2)printf(“2\n”);

else………

else

if(cardnum==11)printf(“Jack\n”);

elseif(cardnum==12)printf(“Queen\n”);else

if(cardnum==13)printf(“King\n”);

特點(diǎn):雖然判斷的次數(shù)有所減少,但最壞情況下,還是要判斷到最后且結(jié)構(gòu)復(fù)雜。

2024/8/29第3章控制結(jié)構(gòu)和數(shù)據(jù)文件691、switch語句選擇結(jié)構(gòu)switch語句是if-else-if語句的推廣使用形式,又叫開關(guān)結(jié)構(gòu)語句,它根據(jù)同一個表達(dá)式的多個不同取值執(zhí)行不同的分支語句。特點(diǎn):實(shí)現(xiàn)選擇分支較多的復(fù)雜判斷結(jié)構(gòu)一般有兩個以上的可選項(xiàng)各選項(xiàng)分支條件取值可表示為不同的整型量各選項(xiàng)條件可用同一個表達(dá)式表示2024/8/29第3章控制結(jié)構(gòu)和數(shù)據(jù)文件70switch語句的一般格式如下:switch(expression){case

c1:statement1;

case

c2:statement2;

case

c3:statement3;……

case

cn:statementn;

default:statementn+1;}break;break;break;break;break;常量表達(dá)式開關(guān)表達(dá)式:可有多個不同結(jié)果

圓括號是必須的

2、功能:(1)計(jì)算expression的值,依次與各常量表達(dá)式的結(jié)果比較,等于第i個值時,順序執(zhí)行statementi、statementi+1、…、statementn+1子句。(2)若與所有常量表達(dá)式值都不相等,執(zhí)行default語句序列n+1。(3)每個子句可以有break選取項(xiàng)2024/8/29第3章控制結(jié)構(gòu)和數(shù)據(jù)文件71(1)break語句結(jié)束它所在的switch語句,終止該switch語句的執(zhí)行,所以也叫終止語句。

switch語句本身并沒有包括break語句。switch子句中如果沒有break語句,程序?qū)⒃趫?zhí)行完所選case子句后順序執(zhí)行緊隨其后的子句。這種設(shè)計(jì)在某些情況下是有用的,但它解決的問題遠(yuǎn)比不上它所帶來的麻煩。(2)開關(guān)expression的值應(yīng)為有序類型,如整型、字符型和枚舉類型等。(3)case子句和default子句組成switct語句的主體,statement子句可以為空。(4)常量表達(dá)式值互不相同且是expression可能的取值(5)default子句是可選項(xiàng)。注意:switch語句本意switch語句的執(zhí)行過程:值1語句組1下一條語句switch表達(dá)式值2值3…

值ndeauflt語句組2語句組3…語句組n語句組n+1值1語句組1加入break語句的switch語句switch表達(dá)式值1語句組1下一條語句break值2語句組2break值3語句組3break……break值n語句組nbreakdeauflt語句組n+1break

設(shè)cardnum為牌變量;case1、11、12、13分四種不同情況;其它2~10號情況規(guī)律相同,作為default類情況處理,用printf(“%d”,cardnum)語句實(shí)現(xiàn)輸出。程序段如下:#include<stdio.h>

voidmain(void){intcardnum; printf("Whatistherankofthecard(1-13)?");scanf("%d",&cardnum);switch(cardnum){ case1:printf("Ace\n");break; case11:printf("Jack\n");break; case12:printf("Queen\n");break; case13:printf("King\n");break;

default:printf("%d\n",cardnum);break;}}

2024/8/29第3章控制結(jié)構(gòu)和數(shù)據(jù)文件75【趣味例題2】有些網(wǎng)頁會向用戶提示今天的日期或其它有趣的內(nèi)容。編程模擬實(shí)現(xiàn)網(wǎng)頁上每天星期幾對應(yīng)語句的顯示。請學(xué)習(xí)者模擬上題分析。程序如下。#include<stdio.h>voidmain(){intd;printf("請輸入今天星期幾:");scanf("%d",&d); /*可利用標(biāo)準(zhǔn)函數(shù)從計(jì)算機(jī)系統(tǒng)直接獲取*/switch(d) /*開關(guān)表達(dá)式,*/{case5:printf("總算熬到星期五了哈\n");break; case6:printf("哈哈,周末啦!\n");break; case0:printf("明天又要上班,想想就煩。\n");break; default:printf("每個工作日慢得都象蝸牛爬啊!\n");break;}2024/8/29第3章控制結(jié)構(gòu)和數(shù)據(jù)文件76【學(xué)生項(xiàng)目案例3-2】用switch語句實(shí)現(xiàn)判斷百分制考試成績的等級?!M(jìn)化【學(xué)生項(xiàng)目案例3-1】分析:1.問題背景:“學(xué)生信息管理系統(tǒng)”的“成績管理子系統(tǒng)”中查詢學(xué)生成績時,一般輸入學(xué)號進(jìn)行查詢。查詢出學(xué)生成績后,系統(tǒng)判斷成績等級并報(bào)告結(jié)果。2.數(shù)學(xué)模型:

switch語句的開關(guān)表達(dá)式值的類型必須是可列舉的。學(xué)生成績理論上可列舉,但數(shù)據(jù)太多不可行。2024/8/29第3章控制結(jié)構(gòu)和數(shù)據(jù)文件77

縮小數(shù)據(jù)范圍法。設(shè)學(xué)生成績score為實(shí)型數(shù)據(jù)。將數(shù)據(jù)范圍縮小到0~10的整數(shù)范圍:(1)實(shí)型顯式轉(zhuǎn)換為整型;(2)用10取整轉(zhuǎn)為1至2位的十進(jìn)制整型;縮小數(shù)據(jù)的數(shù)學(xué)表達(dá)式為(int)score/10。5,4,3,2,1,067810,9(int)score/1059~069~6079~7089~80100~90(int)score59.0~069.0~60.079.0~70.089.0~80.0100.0~90.0floatscore分?jǐn)?shù)值范圍2024/8/29第3章控制結(jié)構(gòu)和數(shù)據(jù)文件783.算法分析:編制自定義函數(shù):函數(shù)首部:cjpd1()功能:判斷成績等級并報(bào)告結(jié)果定義一個臨時主函數(shù)main(),調(diào)用cjpd1()函數(shù)。2024/8/29第3章控制結(jié)構(gòu)和數(shù)據(jù)文件79cjpd1()函數(shù)主函數(shù)main()調(diào)用函數(shù)cjpd1();floatscore;輸入學(xué)生成績score;Tscore<0||score>100F

(int)score/10提示輸入10、9876其它值成績default:錯誤;輸出輸出輸出輸出輸出’A’’B’’C’’D’’E’break;break;break;break;break;程序代碼如下:#include"stdio.h"voidcjpd1()/*cjpd()自定義函數(shù)的定義*/{floatscore;printf("請輸入學(xué)生成績:");scanf("%f",&score);if(score<0||score>100)printf("輸入成績錯誤!\n");/*成績有效性判斷*/elseswitch((int)score/10) /*數(shù)據(jù)轉(zhuǎn)換*/{case10: /*case子句可以為空*/case9:printf("A\n");break;/*case10和9對應(yīng)同一語句序列*/case8:printf("B\n");break;case7:printf("C\n");break;case6:printf("D\n");break;default:printf("E\n");break;/*其它均為不及格*/}}voidmain()/*臨時主函數(shù)的定義*/{cjpd1();/*函數(shù)調(diào)用*/}2024/8/29第3章控制結(jié)構(gòu)和數(shù)據(jù)文件812024/8/29第3章控制結(jié)構(gòu)和數(shù)據(jù)文件822、嵌套的switch語句分析如下程序段執(zhí)行結(jié)果:intx=1,y=0;switch(x){case1:switch(y){case0:printf("**1**\n");break;case1:printf("**2**\n");break;

case2:printf("**3**\n")}break;/*插入該語句后結(jié)果如何*/2024/8/29第3章控制結(jié)構(gòu)和數(shù)據(jù)文件833.4軟件開發(fā)與項(xiàng)目案例設(shè)計(jì)3.4.1軟件項(xiàng)目及其開發(fā)過程3.4.2項(xiàng)目案例設(shè)計(jì)2024/8/29第3章控制結(jié)構(gòu)和數(shù)據(jù)文件843.4.1軟件項(xiàng)目及其開發(fā)過程1.軟件項(xiàng)目軟件項(xiàng)目是完成特定目的、符合用戶特定需求的軟件所需的組織結(jié)構(gòu)、過程和規(guī)范的集合。軟件項(xiàng)目可以是一個單獨(dú)的開發(fā)項(xiàng)目,也可以與產(chǎn)品項(xiàng)目組成一個完整的軟件產(chǎn)品項(xiàng)目。若是訂單開發(fā),成立軟件項(xiàng)目組即可;若是產(chǎn)品開發(fā),需成立軟件項(xiàng)目和產(chǎn)品項(xiàng)目組(負(fù)責(zé)市場調(diào)研和銷售),組成軟件產(chǎn)品項(xiàng)目組。公司實(shí)行項(xiàng)目管理時,首先要成立項(xiàng)目管理委員會,項(xiàng)目管理委員會下設(shè)項(xiàng)目管理小組、項(xiàng)目評審小組和軟件產(chǎn)品項(xiàng)目組。實(shí)施軟件項(xiàng)目需要周密部署,合理的規(guī)章制度,符合項(xiàng)目的軟件開發(fā)過程,良好的項(xiàng)目管理以及人員安排等。2024/8/29第3章控制結(jié)構(gòu)和數(shù)據(jù)文件852.軟件開發(fā)從軟件工程角度,軟件開發(fā)主要分為六個階段:需求分析階段、概要設(shè)計(jì)階段、詳細(xì)設(shè)計(jì)階段、編碼階段、測試階段、安裝及維護(hù)階段。

軟件開發(fā)需遵循七條基本原則。它們是:(1)用分階段的生命周期計(jì)劃嚴(yán)格管理;(2)堅(jiān)持進(jìn)行階段評審;(3)實(shí)行嚴(yán)格的產(chǎn)品控制;(4)采用現(xiàn)代程序設(shè)計(jì)技術(shù);(5)結(jié)果應(yīng)能夠清楚地審查;(6)開發(fā)小組地人員應(yīng)該少而精;(7)承認(rèn)不斷改進(jìn)軟件工程實(shí)踐的必要性。軟件開發(fā)面臨的問題:有限的時間、資金內(nèi),要滿足不斷增長的軟件產(chǎn)品質(zhì)量要求;開發(fā)的環(huán)境日益復(fù)雜,代碼共享日益困難,需跨越的平臺增多;程序的規(guī)模越來越大;軟件的重用性需要提高;軟件的維護(hù)越來越困難。2024/8/29第3章控制結(jié)構(gòu)和數(shù)據(jù)文件863.軟件項(xiàng)目管理與人員組織軟件項(xiàng)目管理的目的是為了讓軟件項(xiàng)目尤其是大型項(xiàng)目的整個軟件生命周期(從分析、設(shè)計(jì)、編碼到測試、維護(hù)全過程)都能在管理者的控制之下,以預(yù)定成本按期,按質(zhì)的完成軟件交付用戶使用。主要包括如下幾個方面:人員的組織與管理,軟件度量,軟件項(xiàng)目計(jì)劃,風(fēng)險(xiǎn)管理,軟件質(zhì)量保證,軟件過程能力評估,軟件配置管理等。

合理配置人員,根據(jù)項(xiàng)目工作量、所需專業(yè)技能,再參考各個人員的能力、性格、經(jīng)驗(yàn),組織一個高效、和諧的開發(fā)小組。一般一個開發(fā)小組人數(shù)在5到10人之間最為合適,如果項(xiàng)目規(guī)模很大,可以采取層級式結(jié)構(gòu),配置若干個這樣的開發(fā)小組。不是一群高水平的程序員在一起就一定可以組成一個成功的小組。與同事溝通融洽的程序員很重要。2024/8/29第3章控制結(jié)構(gòu)和數(shù)據(jù)文件874.軟件開發(fā)流程很多項(xiàng)目都是小型項(xiàng)目,參與人員少(2到5人),需快速交付(一兩個月)。項(xiàng)目人員配置一般有:一個項(xiàng)目經(jīng)理,一到四位開發(fā)人員。項(xiàng)目經(jīng)理負(fù)責(zé)需求分析,主持設(shè)計(jì)評審,決定設(shè)計(jì)評審是否通過,決定是否可進(jìn)入交叉測試決定是否可發(fā)布項(xiàng)目。開發(fā)人員負(fù)責(zé)系統(tǒng)設(shè)計(jì),開發(fā)和自測,交叉測試,修改Bug,編寫部署手冊和使用說明。要成功完成項(xiàng)目,除了使用成熟且被團(tuán)隊(duì)成員熟練使用的技術(shù)之外,有一個良好的開發(fā)流程,也是很必要的。小型軟件項(xiàng)目開發(fā)流程項(xiàng)目立項(xiàng)結(jié)束需求分析軟件需求規(guī)格說明書系統(tǒng)設(shè)計(jì)(業(yè)務(wù)流程、界面、數(shù)據(jù)庫)設(shè)計(jì)文檔設(shè)計(jì)評審評審記錄通過開發(fā)&自測代碼開發(fā)人員交叉測試Bug列表發(fā)布部署說明手冊2024/8/29第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

提交評論