版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第十五章C程序開發(fā)指導(dǎo)原則程序設(shè)計程序編碼常見的程序錯誤程序測試與調(diào)試程序的效率程序設(shè)計程序設(shè)計是編好程序的基礎(chǔ),是程序開發(fā)周期的一個重要部分。在程序編碼之前,程序應(yīng)該很好地構(gòu)思,應(yīng)仔細(xì)考慮到程序的各個方面。程序設(shè)計主要與用于編寫程序的開發(fā)策略有關(guān),以便獲得問題的解決方案程序設(shè)計包括以下4個步驟:問題分析勾勒程序結(jié)構(gòu)算法開發(fā)控制結(jié)構(gòu)的選擇問題分析在得出問題的求解過程之前,必須完全理解該問題的本質(zhì),以及想要程序做些什么。我們需要確定:輸入何種數(shù)據(jù)想要何種輸出程序運(yùn)行有哪些限制和條件勾勒程序結(jié)構(gòu)一旦確定了我們想要什么,以及我們有什么了,下一步就是要確定如何實現(xiàn)它。C語言是結(jié)構(gòu)化語言,適合于使用自上而下的方法。自上而下:把求解的過程分解為各種任務(wù),然后再把這些任務(wù)分隔成更小的子任務(wù),等等,直到這些任務(wù)足夠小,能很好掌握,編寫代碼方便。這些任務(wù)和子任務(wù)可以形成程序函數(shù)的基礎(chǔ)。自上而下的方法,首先設(shè)計高層函數(shù),不用考慮低層函數(shù)。低層函數(shù)的實際內(nèi)容等到設(shè)計該層時再考慮,使得過程越來越細(xì)化。自上而下的方法可產(chǎn)生可讀性好、模塊化的代碼,使得這些代碼易于理解和維護(hù),且有助于根據(jù)低層函數(shù)來劃分程序的功能。算法開發(fā)確定了求解過程和程序的總體輪廓后,下一步就是給出詳細(xì)且明確的逐步過程,稱為每個函數(shù)的算法描述算法可以使用流程圖或編寫偽代碼。前者以圖形方式表示算法,而偽代碼則以邏輯順序描述求解步驟。一個問題可能有多種不同的求解方法,必須考慮所有可能的方法,然后選擇一種。選擇標(biāo)準(zhǔn):方法使用簡單、運(yùn)行時間少、能產(chǎn)生所需精度的結(jié)果控制結(jié)果復(fù)雜的解決方案可能包含大量的控制語句,任何算法都可以使用3種基本控制語句結(jié)構(gòu)來實現(xiàn)結(jié)構(gòu)化。3種基本控制語句:順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)一個設(shè)計良好的程序有以下優(yōu)點(diǎn):編碼容易且錯誤少測試簡單維護(hù)容易有良好的文檔化功能成本估計更正確編碼過程可更精確地控制程序編碼編碼強(qiáng)調(diào)的是簡單性和清晰性編碼往往是需要被他人使用的,因此必須可讀且易于理解避免使用復(fù)雜的邏輯與編碼編碼風(fēng)格:自身文檔化語句的構(gòu)造輸入/輸出格式程序的通用性自身文檔化文檔化是指描述程序的詳細(xì)內(nèi)容。某些細(xì)節(jié)可作為程序的一部分內(nèi)置在程序之中,即程序的自身文檔化。自身文檔化包含兩個方面:使用有意義的變量名使用注釋例: area=length*wide;
優(yōu)于:
a=l*w;應(yīng)避免使用容易產(chǎn)生混淆的名稱,使用有意義的函數(shù)名也有助于程序的理解和維護(hù)。自身文檔化注釋:最好給語句塊,而不是每一行,做注釋使用空行或縮排法,這樣的注釋更易閱讀使用恰當(dāng)?shù)淖⑨?,不正確的注釋比沒有注釋還要糟糕語句構(gòu)造雖然允許在一行中放置多條語句,但應(yīng)盡量每行一條語句,且進(jìn)行必要的縮排。例:
if(item=0) {number=1;code=0;} 最好改寫為: if(item=0) { number=1; code=0; }語句構(gòu)造語句構(gòu)造建議:每行一條語句當(dāng)使用選擇或循環(huán)語句時,使用恰當(dāng)?shù)目s排避免太多層的循環(huán)嵌套,最好不要多于3層使用簡單的條件測試,如果有必要,應(yīng)把復(fù)雜條件分隔為簡單條件使用括號使邏輯和算數(shù)表達(dá)式更清楚當(dāng)需要時,使用空格,以提高程序的可讀性輸入/輸出格式輸入/輸出格式應(yīng)簡單且容易被用戶接受:保持格式簡單給出輸入結(jié)束說明符為所有交互式輸入請求添加標(biāo)記說明為所有輸出報告添加標(biāo)記說明在運(yùn)行時遇到某些特殊情況時,應(yīng)給出輸出信息程序的通用性應(yīng)該使程序?qū)δ承?shù)據(jù)或某個參數(shù)值的依賴性最小化。例:
for(sum=0,i=1;i<=10;i++) sum=sum+i;
修改成以下形式更為通用:
sum=0; for(i=m;i<=n;i=i+step) sum=sum+i;常見的程序錯誤丟失分號C語言規(guī)定語句末尾必須有分號。分號是C語句不可缺少的一部分。例: a=3 b=4;常見的程序錯誤誤用分號例如:
if(a>b);
printf("a
is
largerthanb\n");
或
for(sum=0,i=1;i<=10;i++); sum=sum+i;常見的程序錯誤誤把“=”作為“等于”比較符。例:
if(a=b)
printf("aequaltob");在C語言中,“=”是賦值運(yùn)算符,“==”才是關(guān)系運(yùn)算符“等于”。常見的程序錯誤應(yīng)該有花括弧的復(fù)合語句,忘記加花括弧。如: sum=0;
i=1;
while(i<=100) sum=sum+i; i++;常見的程序錯誤括弧不配對。當(dāng)一個語句中使用多層括弧時常出現(xiàn)這類錯誤,純屬粗心所致。例:
while((c=getchar(
)!='#')
putchar(c);常見的程序錯誤忘記定義變量。如: main(
)
{ x=3; y=6;
printf("%d\n
",x+y); }常見的程序錯誤輸入時數(shù)據(jù)的組織與要求不符。用scanf函數(shù)輸入數(shù)據(jù),應(yīng)注意如何組織輸入例:
scanf("%d%d",&a,&b); 輸入數(shù)據(jù):3,4這是錯的。數(shù)據(jù)間應(yīng)該用空格來分隔。例:
scanf("%d,%d",&a,&b);
應(yīng)輸入:3,4例:
scanf("inputa&b:%d,%d",&a,&b);應(yīng)改為:
printf("inputa&b:");
scanf("%d,%d",&a,&b);常見的程序錯誤輸入變量時忘記使用地址符。例:
scanf("%d%d",a,b); 應(yīng)寫成:
scanf("%d%d",&a,&b);常見的程序錯誤未注意int型數(shù)據(jù)的數(shù)值范圍。整數(shù)的范圍為:-32768~32767。例:
intnum;
num=89101;
printf("%d",num);常見的程序錯誤輸入輸出的數(shù)據(jù)的類型與所用格式說明符不一致。例:
inta=3; doubleb=4.5;
printf("%f
%d\n",a,b); 輸出為:0.000000
16402常見的程序錯誤在用標(biāo)識符時,忘記了大寫字母和小寫字母的區(qū)別例:main(
){
int
a,b,c;a=2; b=3;C=A+B;
printf("%d+%d=%d",A,B,C);}常見的程序錯誤在定義數(shù)組時,將定義的“元素個數(shù)”誤認(rèn)為是“可使用的最大下標(biāo)值”main(
){
inta[10]={1,2,3,4,5,6,7,8,9,10};
inti;
for(i=1;i<=10;i++)
printf("%d”,a[i]);}常見的程序錯誤對二維或多維數(shù)組的定義和引用的方法不對。main(
){
inta[5,4]; …
printf("%d",a[1+2,2+2]); …}對二維數(shù)組和多維數(shù)組在定義和引用時必須將每一維的數(shù)據(jù)分別用方括弧括起來常見的程序錯誤誤以為數(shù)組名代表數(shù)組中全部元素。例:main(
){
inta[4]={1,3,5,7};
printf("%d%d%d%d\n",a);}常見的程序錯誤混淆字符數(shù)組與字符指針的區(qū)別。main(
){ charstr[4];
str="Computerandc";
printf("%s\n",str);}str是數(shù)組名,代表數(shù)組首地址。在編譯時對str數(shù)組分配了一段內(nèi)存單元在程序運(yùn)行期間str是一個常量,不能再被賦值。常見的程序錯誤在引用指針變量之前沒有對它賦予確定的值。main(
){ char*p;
scanf(“%s”,*p);}可改為 char*p,c[20];
p=c;
scanf("%s",p);常見的程序錯誤switch語句的各分支中漏寫break語句。例:switch(score){ case5:printf(“Verygood!");case4:printf("Good!");case3:printf("Pass!");case2:printf("Fail!");
defult:printf("dataerror!");}常見的程序錯誤混淆字符和字符串的表示形式。例: charsex;
sex="M";sex是字符變量,只能存放一個字符。而字符常量的形式是用單引號括起來的應(yīng)改為: sex='M';“M”是用雙引號括起來的字符串,它包括兩個字符:‘M’和‘\0’,無法存放到字符變量sex中。常見的程序錯誤使用自加(++)和自減(--)運(yùn)算符時出的錯誤。例:main(
){
int*p,a[5]={1,3,5,7,9};p=a;
printf("%d",*p++);}常見的程序錯誤所調(diào)用的函數(shù)在調(diào)用語句之后才定義,而又在調(diào)用前未加說明。例:main(
){ floatx=3.5,y=-7.6,z; z=max(x,y);
printf("%f\n",z);}floatmax(floatx,floaty){ return(z=x>y?x:y);}常見的程序錯誤應(yīng)改為:floatmax(floatx,floaty){ return(z=x>y?x:y);}main(
){ floatx=3.5,y=-7.6,z; z=max(x,y);
printf("%f\n",z);}常見的程序錯誤誤認(rèn)為形參值的改變會影響實參的值。例:swap(intx,inty){
intt;t=x;x=y;y=t;}main(
){
inta=3;b=4;
swap(a,b);
printf("%d,%d\n",a,b);}常見的程序錯誤函數(shù)的實參和形參類型不一致。fun(floatx,floaty){…}main(
){
inta=3,b=4;c=fun(a,b);}常見的程序錯誤不同類型的指針混用。main(
){
inti=3,*p1; floata=1.5,*p2; p1=&i;
p2=&a; p2=p1;
printf("%d,%d\n",*p1,*p2);}指向不同類型的指針間的賦值必須進(jìn)行強(qiáng)制類型轉(zhuǎn)換。例: p2=(float*)p1;常見的程序錯誤混淆數(shù)組名與指針變量的區(qū)別。main(
){
inti,a[5];
for(i=0;i<5;i++)
scanf("%d",a++);}常見的程序錯誤使用文件時忘記打開,或打開方式與使用情況不匹配。例:if((fp=fopen("test","r"))==NULL){
printf("cannotopenthisfile\n"); exit(0);}ch=fgetc(fp);while(ch!='#'){
ch=ch+4;
fputc(ch,fp);
ch=fget(fp);}
常見的程序錯誤使用不正確的注釋注釋以/*開頭,以*/結(jié)束,必須成對出現(xiàn)。不支持嵌套注釋。例1:/* x=1;
y=2; */例2:/* x=1; /* y=1; */
z=2; */常見的程序錯誤忽視了運(yùn)算符的優(yōu)先級例:
if(a=max()>=100) a=a*0.95;常見的程序錯誤在宏定義中參數(shù)遺漏了括號例:
#definef(x)x*x
調(diào)用語句:
y=f(a+b);
展開為:
y=a+b*a+b;常見的程序錯誤程序錯誤類型:語法錯誤。指違背了C語法的規(guī)定,對這類錯誤,編譯程序一般能給出“出錯信息”,并且告訴你在哪一行出錯。只要細(xì)心,是可以很快發(fā)現(xiàn)并排除的。邏輯錯誤。程序并無違背語法規(guī)則,但程序執(zhí)行結(jié)果與原意不符。這是由于程序設(shè)計人員設(shè)計的算法有錯或編寫程序有錯,通知給系統(tǒng)的指令與解題的原意不相同,即出現(xiàn)了邏輯
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中班健康注意安全教案
- 學(xué)校常見傳染病健康知識
- 大班科學(xué)活動神奇的彩虹
- 康復(fù)治療的認(rèn)識
- KYN28-12高壓開關(guān)柜技術(shù)規(guī)范書
- 2025房屋改造合同
- 財經(jīng)簡歷工作總結(jié)模板
- 墻體材料可行性研究報告
- 2025建設(shè)工程合同管理實務(wù)馬
- 2025供用電的合同模板
- 2024年醫(yī)美行業(yè)社媒平臺人群趨勢洞察報告-醫(yī)美行業(yè)觀察星秀傳媒
- 新零售門店運(yùn)營管理流程手冊
- 心理學(xué)專業(yè)知識考試參考題庫500題(含答案)(一)
- 2024年浙江高考技術(shù)試題(含答案)
- 資管行業(yè)投研一體化建設(shè)
- 提高保險公司客戶投訴處理能力的整改措施
- 物業(yè)費(fèi)收取協(xié)議書模板
- 電工(中級工)理論知識練習(xí)題(附參考答案)
- 工業(yè)設(shè)計概論試題
- 起重機(jī)的維護(hù)保養(yǎng)要求與月度、年度檢查記錄表
- 消防設(shè)施維護(hù)保養(yǎng)記錄表
評論
0/150
提交評論