專業(yè)課參考語言程序設(shè)計_第1頁
專業(yè)課參考語言程序設(shè)計_第2頁
專業(yè)課參考語言程序設(shè)計_第3頁
專業(yè)課參考語言程序設(shè)計_第4頁
專業(yè)課參考語言程序設(shè)計_第5頁
已閱讀5頁,還剩38頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

文件:保存你的數(shù)據(jù)共57頁第2

一個文本文件含有:學(xué)號、姓名、數(shù)學(xué)成績、物理成績和政治成績(成績均為整數(shù)),數(shù)據(jù)之間采用空格進(jìn)行分隔。要求:

1.從磁盤中讀出全部學(xué)生的信息;

2.計算每名學(xué)生的個人總成績;

3.按總成績從高到低排序,給出名次??偝煽兿嗤瑫r,按照讀入的先后次序排列;

4.排序后的數(shù)據(jù)按名次存入新的文本文件中,文件中要增加總成績和名次信息;

5.按原文件中數(shù)據(jù)順序顯示全部信息。文件處理實(shí)例共57頁第3

問題難點(diǎn)分析1.將磁盤中的數(shù)據(jù)讀入內(nèi)存后如何保存?按數(shù)據(jù)讀入的順序保存在帶頭結(jié)點(diǎn)的單鏈表中。成績結(jié)點(diǎn)包括的基本信息:學(xué)號、姓名、數(shù)學(xué)成績、物理成績、政治成績,總成績和名次;

2.對鏈表進(jìn)行排序?按總成績從高到低進(jìn)行選擇排序。先在整個鏈表中找出最高分,作為第一名放在鏈表的最前面,然后在其余結(jié)點(diǎn)中找出“最高分”,放在剩余結(jié)點(diǎn)的最前面,依此類推。

3.如何將排序后的數(shù)據(jù)按原始順序輸出?方法很多。采用結(jié)構(gòu)指針數(shù)組保存數(shù)據(jù)的原始順序。文件處理實(shí)例共57頁第4

數(shù)據(jù)結(jié)點(diǎn)typedefstructnode{charno[10]; 學(xué)號charname[20]; 姓名intmath,phy,plo; 數(shù)學(xué)/物理/政治成績intsum; 總成績intrank; 名次structnode*next; 結(jié)點(diǎn)的鏈}NODE; 定義數(shù)據(jù)類型NODEtypedefNODE*

PNODE;定義指針類型

PNODE文件處理實(shí)例12n-1nΛ...head表頭結(jié)點(diǎn)數(shù)據(jù)結(jié)點(diǎn)數(shù)據(jù)結(jié)點(diǎn)數(shù)據(jù)結(jié)點(diǎn)數(shù)據(jù)結(jié)點(diǎn)共57頁第5

采用結(jié)構(gòu)指針數(shù)組保存數(shù)據(jù)的原始順序PNODE*sp;文件處理實(shí)例spsp[1]sp[2]sp[3]sp[4]sp[0]head100958580980spsp[1]sp[2]sp[3]sp[4]sp[0]head100958580980

排序結(jié)果 對鏈表進(jìn)行排序,通過head

可得到排序結(jié)果。原有次序 通過指針數(shù)組sp可得到原始順序。共57頁第6

頁main(){FILE*sfp,*tfp;charsfilename[20]="chengji.txt",tfilename[20]="cjresl0.txt";

PNODEhead,p,*sp,*q;//sp為指向PNODE的指針intcount=0,i;if((sfp=fopen(sfilename,"r"))==NULL){......}//打開數(shù)據(jù)文件head=(PNODE)malloc(sizeof(NODE));strcpy(head->no,"");//初始化表頭結(jié)點(diǎn)strcpy(head->name,"");head->next=NULL;head->math=head->phy=head->plo=head->sum=head->rank=0;文件處理實(shí)例共57頁第7

頁main(){......

while(!feof(sfp))//從文件中讀入數(shù)據(jù)

{p=(PNODE)malloc(sizeof(NODE));

if(fscanf(sfp,"%s%s%d%d%d",p->no,p->name,&p->math,&p->phy,&p->plo)==5)

{

count++;p->sum=p->math+p->phy+p->plo;//計算總分

insertnode(head,p);//建立鏈表

}

else

free(p);

}......文件處理實(shí)例head100958580980共57頁第8

頁main(){....../*sp為指向結(jié)構(gòu)指針的指針。申請結(jié)構(gòu)指針數(shù)組*/

sp=(PNODE)malloc((count+1)*sizeof(PNODE));*(sp+count)=NULL;//數(shù)組最后一個元素置為NULLp=head->next;i=0;//建立結(jié)構(gòu)指針數(shù)組與結(jié)點(diǎn)的關(guān)系while(p!=NULL)

{*(sp+i++)=p;p=p->next;

}......文件處理實(shí)例sphead100958580980sp[1]sp[2]sp[3]sp[..]sp[0]NULL共57頁第9

頁main(){......

sort(head);//對鏈表進(jìn)行排序文件處理實(shí)例head100958580980if((tfp=fopen(tfilename,"w"))==NULL){....}//打開輸出文件

p=head->next;//p指向第一個數(shù)據(jù)結(jié)點(diǎn)

while(p!=NULL)

//通過鏈表按名次寫文件

{fprintf(tfp,"%d,%s,%s,%d,%d,%d,%d\n",p->rank,p->no,p->name,p->math,p->phy,p->plo,p->sum);

p=p->next;//p指向下一個數(shù)據(jù)結(jié)點(diǎn)

}......共57頁第10

頁main(){......

q=sp;

while(*q!=NULL)//按原順序顯示

{p=*q;printf("%s,%s,%d,%d,%d,%d,%d\n",p->no,p->name,p->rank,p->math,p->phy,p->plo,p->sum);q++;

}文件處理實(shí)例spsp[1]sp[2]sp[3]sp[..]sp[0]NULL//釋放鏈表全部結(jié)點(diǎn)freelist(head);free(sp);fclose(sfp);fclose(tfp);}head100958580980共57頁第11

頁insertnode(PNODEhead,PNODEp){PNODEq=head;

while(q->next!=NULL)//定位尾結(jié)點(diǎn)q=q->next;p->next=q->next;//將p插入到鏈尾q->next=p;}文件處理實(shí)例head100958580980freelist(PNODEhead){PNODEp=head;while(p!=NULL)//釋放全部結(jié)點(diǎn)

{ p=p->next; free(head); head=p;

}}共57頁第12

頁sort(PNODEhead){PNODEp,q;inti=0;while(head->next!=NULL){p=head->next;q=p;//當(dāng)前最大值結(jié)點(diǎn)應(yīng)在head之后

while(p!=NULL)//q指向最大值結(jié)點(diǎn)

{if(p->sum>q->sum)q=p;p=p->next;

}

q->rank=++i;//設(shè)置名次while(head->next!=q)//前移q指向的結(jié)點(diǎn){p=head;

while(p->next!=q)//p:指向q的前一個結(jié)點(diǎn)p=p->next;p->next=q->next;q->next=head->next;head->next=q;//調(diào)整順序:q移到head的后面}head=head->next;//移動頭指針,跳過有序結(jié)點(diǎn)}}文件處理實(shí)例測試:程序員的基本功第14

頁黑盒法測試的一般步驟1.研究問題,設(shè)計測試用例;2.事先預(yù)計測試結(jié)果;3.進(jìn)行軟件測試,記錄實(shí)際的測試結(jié)果;4.將實(shí)際的測試結(jié)果與預(yù)計的測試結(jié)果進(jìn)行比較,若兩者一致,則通過測試;若不一致,則分析原因,確定錯誤。軟件測試第15

頁黑盒測試的關(guān)鍵不同的測試用例發(fā)現(xiàn)錯誤的能力不同,為了提高測試的效率,應(yīng)選擇高效的測試用例。由于不可能進(jìn)行窮盡測試,所以要選擇少量“最有效的”測試數(shù)據(jù),進(jìn)行盡可能完備的測試。一個好的測試用例是能夠發(fā)現(xiàn)至今尚未發(fā)現(xiàn)的錯誤。軟件測試第16

頁測試用例設(shè)計的一般原則1.測試用例不僅要有合理的輸入,還應(yīng)有不合理的輸入。2.除檢查程序正常功能之外,還應(yīng)檢查程序是否做了不該做的事情。3.應(yīng)長期保存測試用例,直到整個系統(tǒng)廢棄為止。軟件測試第17

頁黑盒法測試用例設(shè)計的常用方法等價劃分:按照輸入/輸出劃分等價類,屬于同一等價類的情況可以認(rèn)為相互是等價的,只要選取一個典型的測試用例即可代表這一類的結(jié)果。邊界值分析:針對測試輸入和輸出的邊界。錯誤推測:憑經(jīng)驗(yàn)針對可能出錯的地方進(jìn)行測試。軟件測試第18

頁等價劃分函數(shù)功能:在int為16位用二進(jìn)制補(bǔ)碼表示整數(shù)的環(huán)境中,將一個數(shù)字串轉(zhuǎn)換為整數(shù)。原型:intatoi(char*str,int*x);返回值為狀態(tài)信息:0為正確,非0為錯誤。有效輸入等價類無效輸入等價類合法輸出等價類非法輸出等價類邊界值測試軟件測試軟件測試等價劃分:設(shè)計的測試用例1.1-6個數(shù)字組成的字符串,輸出是合法的正整數(shù)輸入:“1”預(yù)計輸出:1輸入:“12”預(yù)計輸出:12輸入:“123”預(yù)計輸出:123輸入:“1234”預(yù)計輸出:1234輸入:“12345”預(yù)計輸出:12345輸入:“1”預(yù)計輸出:1輸入:“\t1”預(yù)計輸出:1輸入:“\t1”預(yù)計輸出:1軟件測試等價劃分2.最高位數(shù)字是0的字符串,輸出是合法的正整數(shù)輸入:“000001”預(yù)計輸出:1輸入:“00010”預(yù)計輸出:10輸入:“000000”預(yù)計輸出:0輸入:“0”預(yù)計輸出:0軟件測試等價劃分3.負(fù)號與最高位數(shù)字緊相臨,輸出合法的負(fù)整數(shù)輸入:“-1”預(yù)計輸出:-1輸入:“-10”預(yù)計輸出:-10輸入:“-12345”預(yù)計輸出:-12345輸入:“-00001”預(yù)計輸出:-1輸入:“-10”預(yù)計輸出:-10輸入:“\t-10”預(yù)計輸出:-10軟件測試等價劃分

4.太小的負(fù)整數(shù)輸入:“-47561”預(yù)計輸出:錯誤——無效輸入

5.太大的正整數(shù)輸入:“132767”預(yù)計輸出:錯誤——無效輸入

6.空字符串輸入:“”預(yù)計輸出:錯誤——沒有數(shù)字

7.字符串左部字符既不是0也不空格輸入:“XXXXX1”預(yù)計輸出:錯誤——無效輸入軟件測試等價劃分8.最高位后面有空格輸入“12”預(yù)計輸出:錯誤——無效輸入

9.最高位數(shù)字后面有其他字符輸入“1XX2”預(yù)計輸出:錯誤——無效輸入10.負(fù)號和最高位數(shù)字之間有空格輸入“-12”預(yù)計輸出:錯誤——負(fù)號位置錯軟件測試邊界值分析11.使輸出剛好等于最小的負(fù)整數(shù)輸入:“-32768”預(yù)計輸出:-3276812.使輸出剛好等于最大的正整數(shù)輸入:“32767”預(yù)計輸出:3276713.使輸出剛剛小于最小的負(fù)整數(shù)輸入:“-32769”預(yù)計輸出:錯誤——無效輸入14.使輸出剛剛大于最大的正整數(shù)輸入:“32768”預(yù)計輸出:錯誤——無效輸入軟件測試實(shí)用測試策略1.在任何情況下都應(yīng)該使用邊界值分析的方法。這種方法暴露程序問題的能力最強(qiáng)。邊界包括:輸入數(shù)據(jù)的邊界和輸出數(shù)據(jù)的邊界。

2.必要時用等價劃分的方法補(bǔ)充測試測試方案。3.必要時再用錯誤推測法補(bǔ)充測試方案。4.對照程序邏輯,檢查已經(jīng)設(shè)計出的測試方案,再補(bǔ)充測試方案。北京理工大學(xué)計算機(jī)科學(xué)工程系901教研室軟件測試測試實(shí)例

輸入三角形的三條邊長(三個整數(shù)),判斷三角形屬于不等邊、等腰或等邊三角形中的哪一種??梢栽O(shè)計出11種測試情況:1.正常的不等邊三角形2.正常的等邊三角形3.正常的等腰三角形,包括兩條相等邊的三種不同的排列方法4.退化的三角形(兩邊和等于第三邊),包括三種不同的排列5.三條邊不能構(gòu)成三角形,包括三種不同的排列6.一條邊的長度為0,包括三種不同的排列7.兩條邊的長度為0,包括三種不同的排列8.三條邊的長度全為09.輸入的數(shù)據(jù)中包含負(fù)整數(shù)10.輸入的數(shù)據(jù)不全(不足三個正整數(shù))11.輸入的數(shù)據(jù)中包含非整數(shù)型的數(shù)據(jù)北京理工大學(xué)計算機(jī)科學(xué)工程系901教研室軟件測試測試功能測試數(shù)據(jù)1.等邊三角形 10,10,102.等腰三角形 10,10,17 10,17,10 17,10,103.不等邊三角形 8,10,12 8,12,10 10,12,84.不能構(gòu)成三角形 10,10,21 10,21,10 21,10,105.退化的三角形

10,5,5 5,10,5 5,5,106.0數(shù)據(jù) 0,0,0 0,0,17 0,17,0 17,0,0 0,10,12 12,0,10 12,10,07.負(fù)數(shù)據(jù) -10,-10,-10 -10,-10,17 -10,17,-10 17,-10,-10 -8,10,17 17,-8,10 10,17,-8北京理工大學(xué)計算機(jī)科學(xué)工程系901教研室軟件測試測試功能測試數(shù)據(jù)8.遺漏數(shù)據(jù) -,-,- 10,-,- -,10,0 -,-,10 8,10,- 8,-,10 -,8,109.無效數(shù)據(jù) A,B,C =,+,* 8,10,A 8,A,10 A,10,8 7E3,10.5,A 10.5,7E3,A A,10.5,7E3北京理工大學(xué)計算機(jī)科學(xué)工程系901教研室軟件測試測試實(shí)例:Y2K(千年蟲)問題測試方案??梢栽O(shè)計出如下測試情況:1.1999年1月1日:年份欄第一次出現(xiàn)992.1999年4月9日:1999年的第99天,可能表示為:99993.1999年8月22日:GPS日期會發(fā)生溢出,變?yōu)?980年1月6日4.1999年9月9日:可能出現(xiàn):9999或9/9/99,具有特殊意義5.1999年12月31日:1999年的最后一天6.2000年1月1日:2000年的第一天(必測的日期)北京理工大學(xué)計算機(jī)科學(xué)工程系901教研室軟件測試測試實(shí)例:Y2K(千年蟲)問題測試方案。7.2000年1月3日:2000年的第一個工作日(必測的日期)8.2000年1月10日:第一次出現(xiàn)7位數(shù)的日期9.2000年2月28日:閏年的前一天(風(fēng)暴前夕)10.2000年2月29日:2000年閏年問題,確認(rèn)系統(tǒng)正確處理閏年11.2000年3月1日:閏年問題,應(yīng)為3月1日2000年的第61天12.2000年10月10日:第一次出現(xiàn)8位日期13.2000年12月31日:該天為2000年的第366天,閏年處理北京理工大學(xué)計算機(jī)科學(xué)工程系901教研室軟件測試測試實(shí)例:Y2K(千年蟲)問題測試方案。可以設(shè)計出如下測試情況:14.2001年1月1日:2000年(閏年)后的第一天15.2001年2月29日:確定系統(tǒng)正確處理這一無效日期16.2001年9月9日:UNIX系統(tǒng)的日期索引欄寬度不夠17.2001年12月31日:Lotus將此日設(shè)為產(chǎn)品使用年限的終點(diǎn)18.2004年2月29日:應(yīng)為閏年19.2010年1月1日:ANSIC字庫溢出20.2019年4月7日:GPS第二次產(chǎn)生日期溢出21.2037年1月1日:NTP溢出22.2038年1月19日:UNIX溢出23.2042年9月18日:IBMS/360溢出共57頁第32

頁輸入n和首數(shù)字字符,輸出由數(shù)字圍起的高和下底寬度均n的空心梯形。要求:輸出的數(shù)字循環(huán)出現(xiàn),即輸出數(shù)字9后再輸出的是0。輸入:55輸出圖形: 5678901098765 66 77 88 90109測試用例設(shè)計共57頁第33

頁第一個測試用例:公開的樣例 55邊界情況:圖形高度為1

輸入:10

輸出:0邊界情況:圖形高度為2—實(shí)心圖形

輸入:24

輸出:455455測試用例設(shè)計

輸入:29

輸出:900900

輸入:20

輸出:011011共57頁第34

頁邊界情況:高度為3—最小的空心圖形

輸入:31

輸出:

1234321 22 343

輸入:38

輸出:

8

901098 99 010

輸入:39

輸出: 9012109 00 121測試用例設(shè)計共57頁第35

頁邊界情況:高度為4—最小的偶數(shù)空心圖形

輸入:41

輸出:

1234554321 22 33 4554

輸入:49

輸出:

9012332109 00 11 2332測試用例設(shè)計共57頁第36

頁邊界情況:數(shù)字兩次變化

輸入:12

0

輸出:012345678901234566543210987654321011223344556677889900123456654321測試用例設(shè)計共57頁第37

頁調(diào)試

跟蹤程序的執(zhí)行過程,找出錯誤并糾正。

調(diào)試程序是程序員必須具備的基本素質(zhì)之一,優(yōu)秀的程序員絕對都是調(diào)試程序的高手。調(diào)試程序需要經(jīng)驗(yàn)積累,而這些經(jīng)驗(yàn)只能在實(shí)踐過程中學(xué)習(xí),而非課堂上學(xué)到。因此在編程過程中發(fā)現(xiàn)這樣或者那樣的問題時,應(yīng)當(dāng)靜下心來仔細(xì)地檢查、調(diào)試自己的程序,把這當(dāng)成一種難得的積累經(jīng)驗(yàn)的機(jī)會。調(diào)試程序共57頁第38

頁VC6的調(diào)試功能 F10:stepover,單步執(zhí)行。遇到函數(shù)會將函數(shù)作為一個整體執(zhí)行完畢(跨過去)。 F11:stepinto,單步進(jìn)入。單步執(zhí)行代碼,如果遇到函數(shù)調(diào)用,會進(jìn)入函數(shù)內(nèi)部;如果函數(shù)是系統(tǒng)函數(shù),會變成匯編指令。

若在函數(shù)內(nèi)部設(shè)置了斷點(diǎn),則F10也會停在函數(shù)體內(nèi)。

Shift+F11:stepout:跳出。與F11配合。調(diào)試程序共57頁第39

頁VC6的調(diào)試功能 Ctrl+F10:Runtocursor,運(yùn)行到光標(biāo)處。在某一行代碼,點(diǎn)一下,右擊鼠標(biāo),選擇RunToCursor,程序會執(zhí)行到鼠標(biāo)處暫停。 F5:go,繼續(xù)執(zhí)行。調(diào)試程序共57頁第40

頁使用了未初始化的變量:有些變量我們假設(shè)它的值為0,但又未對其初始化。

溫馨提示

  • 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

提交評論