程序設(shè)計與實踐教材_第1頁
程序設(shè)計與實踐教材_第2頁
程序設(shè)計與實踐教材_第3頁
程序設(shè)計與實踐教材_第4頁
程序設(shè)計與實踐教材_第5頁
已閱讀5頁,還剩119頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

程序設(shè)計與實踐

2海第二I殳大學(xué)

2015年2月使用

目錄

實習(xí)要求及時間安排3

成績評定3

實驗內(nèi)容4

文檔格式12

2012年二級考C大綱16

2004年全真考題21

2005年全真考題28

2006年全真考題34

2007年全真考題40

2008年全真考題46

2009年全真考題51

2010年全真考題(B)58

2010年全真考題(C)65

2010年全真考題(E)72

2011年全真考題(A)80

2011年全真考題(B)93

2012年全真考題105

補充知識112

實習(xí)要求及時間安排

《程序設(shè)計與實踐》課程實習(xí)為分散進行,共16周。

前8周為課程實習(xí);課程實習(xí)要求完成六個程序。要求所有程序按模塊化設(shè)計,

結(jié)構(gòu)清晰,能夠獲得最終結(jié)果,并提交實驗報告(格式見后)。

后8周為參加上海市高等學(xué)校計算機等級考試(二級)《C程序設(shè)計》考前輔導(dǎo)。

通過輔導(dǎo)和5?6月份的考試報名(請關(guān)注校園網(wǎng)通知),參加每年10月最后一個

星期六或11月第一個星期六考試院組織的統(tǒng)一考試,獲取優(yōu)秀或合格證書。

成績評定

本課程的總評成績評定標(biāo)準(zhǔn)為:

總評成績=60%實習(xí)課程成績+40%上海市二級考成績

一般上海市二級考成績不低于45分才能總評合格,該最低成績視當(dāng)年上海市二

級考合格率做調(diào)整(上海市二級考合格率在50?60%波動)。

實驗內(nèi)容

實驗一:個人資金賬戶管理

編程實現(xiàn)資金賬戶的管理,具體要求如下。

1,資金賬戶的信息統(tǒng)一放在隨機文件中,該隨機文件包括的數(shù)據(jù)項有記錄ID、

發(fā)生日期、發(fā)生事件、發(fā)生金額(正的表示收入,負(fù)的表示支出)和金額。每發(fā)

生一筆收支,文件要增加一條記錄,并計算一次余額。,

2,程序?qū)崿F(xiàn)3個功能,包括:(1),能創(chuàng)建資金賬戶文件并添加收入或支出信息

記錄;(2),能顯示所有記錄,得知資金賬戶的收支流水賬;(3),能查詢最后一

條記錄,獲知賬戶最后的余額。賬戶文件名命名為cashbox.dat,文件部分內(nèi)容如

下;

3,增加修改資金賬戶的功能。輸入一個記錄ID,如果文件中已存在該記錄,則輸

入新的記錄信息并更新資金賬戶文件中相應(yīng)記錄的信息。要求定義和調(diào)用函數(shù)

UpdateLog()淇功能是修改資金賬戶記錄。

LongIDCreateDateNoteChargeBalance

12006-06-01alimony500.00500.00

22006-06-08shopping-300.00200.00

32006-06-15shopping-60.00140.00

42006-06-20workingpay200.00340.00

52006-08-01scholarship1000.001340.00

部分參考源代碼:

/*crashbox.dat是隨機文件,記錄資金帳戶消費流水帳記錄信息*/

/*程序的功能:添加新流水帳記錄,查詢資金帳戶最后記錄*/

#include"stdio.h"

#include"stdlib.h"

longsize;/*當(dāng)前最近一次的流水號*/

structLogData{/*記錄的結(jié)構(gòu)*/

longlogid;/*記錄ID*/

charlogdate[ll];/*記錄發(fā)生日期*/

charlognote[15];/*記錄事件說明*/

doublecharge;/*發(fā)生費用:負(fù)表示支出,正表示收入*/

doublebalance;/*余額*/

);

intinputchoice()/*選擇操作參數(shù)*/

{

intmychoice;

printf("\nEnteryourchoice:\n");

printf(n1-AddanewcashL0G.\n2-ListAllCashLOG.\nn);

printf("3-QueryLastCashLOG.\nO-Endprogram.\nn);

M

scanf("%d?&mychoice);

returnmychoice;

}.

longgetLogcount(FILE*cfptr)/*獲取文件記錄總數(shù)*/

(

longbegin,endjogcount;

fseek(cfptr,OL,SEEK_SET);

begin=ftell(cfptr);

fseek(cfptr,size,SEEK_END);

end=ftell(cfptr);

logcount=(end-begin)/size-1;

returnlogcount;

}

voidListAllLog(FILE*cfptr)/*列出所有收支流水帳*/

(-

structLogDatalog;

fseek(cfptr,OL,SEEK_SET);/*定位指針到文件開始位置*/

fread(&log,size,1,cfptr);

printf("logidlogdatalognotechargebalance\nn);

while(!feof(cfptr)){

printf(n%61d%-lls%-15s%1021f%10.21f\nn,

log.logid,log.logdata?log.lognotejog.chargge,log.balance);

fread(&log.size9l,cfptr);

};

)

voidQueryLastLog(FILE*clptr)/*查詢顯示最后一條記錄*/

{.

structLogDatalog;

longlogcount;

logcount=getLogcount(cfptr);

if(logcount>0)/*表示有記錄存在*/

(一

fseek(cfptr?size*(logcount-1),SEEK_SET);/*定位最后記錄*/

fread(&log,size,1,cfptr);/*讀取最后記錄*/

printf(nThelastlogis:\nn);

printf(nlogid:%-61d\nlogdata:%-11s\nlognote:%-15s\nn,

log.logidjog.logdatajog.lognote);

printf("charge:%-10.21f\nbalance:%-10.21f\n"?

log.chargejog.balance);/*顯示最后記錄內(nèi)容*/

elseprintf(nnologsinfile!\nn);

voidAddNewLog(FILE*c^)tr)/*添加新紀(jì)錄*/

(

structLogDatalogjastlog;

longlogcount;

printf(nInputlogdate(format:2006-01-01):");

scanf("%sn,log.logdate);

printf(nInputlognote:");

nn

scanf(%s?log.lognote);

printf("InputCharge:Income+andexpend-:");

scanf("%lf\&log.charge);

logcount=getLogcount(cfptr);/*獲取記錄數(shù)*/

if(logcount>0){

fseek(cfptr,size*(logcount-l),SEEK_SET);

fread(&lastlog,size,1,cfptr);/*讀入最后記錄*/

log.logid=lastlog.logid+l;/*記錄號按順序是上次的+1*/

log.balance=log.charge+lastlog.balance;

)

else{/*如果文件是初始狀態(tài),記錄數(shù)為0*/

log.logid=l;

log.balance=log.charge;

)一

rewind(cfptr);

printf(,,logid=%ld\n,,Jog.logid);

fwrite(&log.sizeof(structLogData),l,cfptr);/*寫入記錄*/

}

FILE*openfile(char*openmode)/*打開文件*/

(

FILE*中;

nn

if((fp=fopen(cashbox.dat?openmode))==NULL){

printf(ncannotopenfilecashbox.dat!\nn);

exit(0);

)

return(fp);

)

intmain(void)

FILE*巾;

intchoice;

size=sizeof(structLogData);

while((choice=inputchoice())!=0){

switch(choice){

easel:

幣=openfile(“ab+”);

AddNewLog(fp);

break;

case2:/*列出所有的收入支出情況*/

fp=openfile("rbn);

ListAllLog(fp);

break;

case3:/*查詢最后記錄及余額*/

^)=openfile(nrbn);

QueryLastLog(^));

break;

default:

printf("InputError.");

break;

)

)

if(fclose(fp)){

printf(nCannotclosethefile!\nn);

exit(0);

)

return0;

)

實驗二自動售貨機

下圖所示為簡易自動售貨機,物品架1、2上共有10樣商品,按順序進行編

號分別為1?10,標(biāo)有價格與名稱,一個編號對應(yīng)一個可操作按鈕,供選擇商品使

用。如果物品架上的商品被用戶買走,儲物柜中會自動取出商品送到物品架上,

保證物品架上一定會有商品。用戶可以一次投入較多錢幣,并可以選擇多樣商品,

售貨機可以一次性將商品輸出并找零錢。

用戶購買商品的操作方法如下。

(1)從“錢幣入口”放入錢幣,依次放入多個硬幣或紙幣。錢幣可支持1元(紙

幣、硬幣)、2元(紙幣)、5元(紙幣)、10元(紙幣),放入錢幣時,控制器會先對錢

幣進行檢驗以識別出幣值,并統(tǒng)計幣值總額,顯示在控制器顯示屏中,提示用戶

確認(rèn)錢幣放入完畢。

(2)用戶確認(rèn)錢幣放入完畢,便可選擇商品,只要用手指按對應(yīng)商品外面的

編號按鈕即可。每選中一樣商品,售貨機控制器會判斷錢幣是否足夠購買,如果

錢幣足夠,自動根據(jù)編號將物品進行計數(shù)和計算所需錢幣值;如果錢幣不足,則

結(jié)束購物。

請為自動售貨機編程,輸入錢幣值序列,以-1作為結(jié)束,依次輸入多個購買

商品編號,若編號超出范圍或余額不足則輸入結(jié)束,輸出錢幣總額與找回零錢,

以及所購買商品名稱及數(shù)量。

輸入輸出示例:

輸入:

1122551010-1/*錢幣序列*/

123516910-1/*物品編號*/

輸出:

Total:36yuan,change:19yuan

Table-water:2;Table-water:1;Table-water:1;Milk:1;Beer:1;Oolong-Tea:1;Green-Tea:1;

實驗三:自動寄存柜

某超市門口的自動寄存柜有n個寄存箱,并且有一個投幣控制器,顧客想要

寄存小件物品時,只要在投幣控制器中投入一個1元硬幣,如果此時有空閑的箱

子,寄存柜就會自動打開一個空的箱子,并且打印輸出一張小小的密碼紙條;如

果沒有空閑的箱子,則提示“本柜已滿”。當(dāng)顧客離開超市時,用密碼紙條上指

定的數(shù)字密碼依次輸入到開箱控制器,則顧客所存包的箱子門就會自動打開,顧

客取走物品后,關(guān)上門。

輸入數(shù)據(jù)時,可先輸入寄存箱總數(shù)n,再由用戶選擇是“投硬幣”還是“輸

密碼”。

如果選擇“投硬幣”,則只有硬幣值是1時才開箱。如果有空閑的箱子,則

輸出箱子編號及密碼(4位數(shù)字);如果無空閑的箱子,則提示“本柜已滿”。

如果選擇“輸密碼”,若輸入的密碼與某一箱子密碼相符,則顯示打開的箱

子編號,否則輸出提示“密碼錯誤”。

請編寫開箱控制程序?qū)崿F(xiàn)上述過程。

輸入輸出示例:

寄存箱總數(shù):10

1.投硬幣2.輸密碼0.退出請選擇:1

投幣值:1

寄存箱編號:1密碼:9342

L投硬幣2.輸密碼0.退出請選擇:2

輸入密碼:9342

1號寄存箱已打開

L投硬幣2.輸密碼0.退出請選擇:0

結(jié)束

實驗四:停車場管理

設(shè)有一個可以停放n輛汽車的狹長停車場,它只有一個大門供車輛進出。車

輛按到達(dá)停車場時間的先后次序依次從停車場最里面向大門口處停放(即最先到

達(dá)的一輛車停放在停車場的最里面)。如果停車場已放滿n輛車,則以后到達(dá)的

車輛只能在停車場大門外的便道上等待,一旦停車場內(nèi)有車開走,則排在便道上

的第一輛車可以進入停車場。停車場內(nèi)如有某輛車要開走,則在它之后進入停車

場的車都必須先退出停車場為它讓路,待其開出停車場后,這些車輛再依原來次

序進場。每輛車在離開停車場時,都應(yīng)根據(jù)它在停車場內(nèi)停留的時間長短交費,

停留在便道上的車不收停車費。編寫程序?qū)υ撏\噲鲞M行管理。

輸入數(shù)據(jù)時,先輸入一個整數(shù)n(n<=10),再輸入若干組數(shù)據(jù),每組數(shù)據(jù)包括3

個數(shù)據(jù)項:汽車到達(dá)或離開的信息(A表示到達(dá)、D表示離開、E表示結(jié)束)、汽車

號碼、汽車到達(dá)或離開的時刻。當(dāng)輸入“E00”時程序結(jié)束。

若有車輛到達(dá),則輸出該汽車的停車位置;若有車輛離開,則輸出該汽車在

停車場內(nèi)停留的時間。

輸入輸出示例

3

Al1

1號車停入1號位

A22

2號車停入2號位

A33

3號車停入3號位

D14

1號車出停車場,停留時間3

A45

4號車停入3號位

A56

5號車在便道上等待

D47

4號車出停車場,停留時間2

5號車停入3號位

D58

5號車出停車場,停留時間1

E00

實驗五;學(xué)生成績管理

設(shè)計一個菜單驅(qū)動的學(xué)生成績管理程序,管理n個學(xué)生的m門考試科目成

績,實現(xiàn)以下基本功能。

(1)能夠新增學(xué)生信息,并計算總分和平均分。

(2)能夠根據(jù)學(xué)號修改和刪除某學(xué)生信息。

(3)能夠顯示所有學(xué)生的成績信息。

(4)能夠分別按總分和學(xué)號進行排序。

(5)能夠根據(jù)學(xué)號查詢該學(xué)生的基本信息。

(6)學(xué)生成績數(shù)據(jù)最終保存在文件中,能夠?qū)ξ募x、寫學(xué)生數(shù)據(jù)。

程序運行時,菜單形式如下。

ManagementforStudents'sscores

1.Appendrecord

2.Listrecord

3.Deleterecord

4.Modifyrecord

5.Searchrecord

6.Sortindescendingorderbysum

7.Sortinascendingorderbysum

8.Sortindescendingorderbynum

9.Sortinascendingorderbynum

W.WritetoaFile

R.ReadfromaFile

O.Exit

Pleaseinputyourchoice:

要求用模塊化方式組織程序結(jié)構(gòu),合理設(shè)計各個自定義函數(shù)。同時,程序能

夠進行異常處理,檢查用戶輸入數(shù)據(jù)的有效性,在用戶輸入數(shù)據(jù)有錯誤(如類型

錯誤)或無效時,不會中斷程序的執(zhí)行,程序具有一定的健壯性。

實驗六:完美的代價

回文串是一種特殊的字符串,它從左往右讀和從右往左讀是一樣的,有人認(rèn)

為回文串是一種完美的字符串。現(xiàn)在給出一個字符串,它不一定是回文的,請計

算使得該字符串變成一個回文串的最少交換次數(shù)。這里的交換指將字符串中兩個

相鄰的字符互換位置。

例如所給的字符串為mamad,第一次交換a和d,得到mamda;第二次交換m

和d,得至Umadma;第三次交換最后面的m和a,得至Umadam□

編寫程序,從鍵盤讀入數(shù)據(jù)。第一行是一個整數(shù)N(N<=80),表示所給字符串

的長度,第二行是所給的字符串,長度為N且只包含小寫英文字母。如果所給

字符串能經(jīng)過若干次交換變成回文串,則輸出所需的最少交換次數(shù);否則,輸出

Impossibleo

輸入輸出示例1

5

mamad

3

輸入輸出示例2

6

aabbcd

Impossible

實驗思考題:值班安排

醫(yī)院有A、B、C、D、E、F、G共7位大夫,在一星期內(nèi)(星期一至星期天)

每人要輪流值班一天,如果已知如下信息。

(1)A大夫比C大夫晚1天值班。

(2)D大夫比E大夫晚1天值班。

(3)E大夫比B大夫早2天值班。

(4)B大夫比G大夫早4天值班。

(5)F大夫比B大夫晚1天值班。

(6)F大夫比C大夫早1天值班。

(7)F大夫星期四值班。

就可以確定周一直至周日的值班人員分別為:E,D,B,F,C,A,G。

編寫程序,根據(jù)輸入的條件,輸出星期一到星期天的值班人員。

輸入數(shù)據(jù)時,先輸入一個整數(shù)n,再輸入n組條件,要求能夠根據(jù)輸入的條

件確認(rèn)唯一的值班表,且輸入的n組條件中能夠直接或間接得到任意兩位大夫的

關(guān)聯(lián)聯(lián)系,例如上面的條件(2)直接顯示了D與E間的關(guān)系,而通過條件(1)(6)(5)

可以間接得到A與B的關(guān)系。

條件的輸入格式有以下兩種。

格式1:編號比較運算符編號天數(shù)

其中比較運算符有兩種:〉或<,分別表示“早”和“晚工

例如,A<C1表示A大夫比C大夫晚1天值班。

格式2:編號=數(shù)值

例如,F(xiàn)=4表示:F大夫在星期四值班。

輸入輸出示例

7

A<C1

D<E1

E>B2

B>G4

F<B1

F>C1

F=4

EDBFCAG

文檔格式

每個程序均需獨立完成相應(yīng)的實驗文檔,打包提交。包括:

實驗報告,程序源代碼,EXE可執(zhí)行程序

打包文檔名稱:班級—學(xué)號—姓名—實驗號

其中:班級前二位為中文后跟大寫字母A和一位數(shù)字,如:計算A1

學(xué)號和姓名需寫完整

實驗號按實驗順序如下:實驗一、實驗二、……

注意各部分連接用下劃線,不得有空格

各程序名稱按Pl、P2、……、P6順序命名

實驗報告模板如下:

程序設(shè)計與實踐

實驗報告

實驗一:個人資金賬戶管理

姓名:XXX

學(xué)號:XXX

班級:XXX

實驗時間:2015/xx/xx-2015/xx/xx

一:實驗名稱:個人資金賬戶管理

注:每個實驗名稱需對應(yīng)

二:實驗環(huán)境:一臺安裝有VC6.0程序的電腦。

三:實驗?zāi)康?/p>

(1)培養(yǎng)和鍛煉對具有一定復(fù)雜度和規(guī)模的問題的分析與求解能力。

(2)掌握程序設(shè)計的綜合方法,能綜合應(yīng)用各種數(shù)據(jù)類型實現(xiàn)較復(fù)雜數(shù)據(jù)的存儲。

(3)培養(yǎng)良好的C程序設(shè)計風(fēng)格與代碼規(guī)范意識。

四:實驗內(nèi)容:

注:此處請按實驗要求改寫,語句精煉。說明實驗題的內(nèi)容及基本要求。

五:實驗步驟:(實驗設(shè)計,關(guān)鍵代碼。實驗結(jié)果需截圖)

注:此處請注意寫出程序設(shè)計思路,各功能模塊的實現(xiàn)算法描述,對

所附關(guān)鍵代碼要注釋,寫明使用的實驗數(shù)據(jù)及測試結(jié)果,并對運行結(jié)

果給出截圖。截圖方法:使用Alt+PrtSc鍵獲得窗口的截圖,粘貼即

可。

六:實驗<1、結(jié):(主要介紹程序的完成情況,重點、難點以及解決方法,有

待改進之處,以及有何收獲,體會等)

注:辛辛苦苦做好,總會有些體會想說,除非不是你親手完成。不要

空白哦!

2012年二級考C大綱

上海市高等學(xué)校計算機等級考試(二級)《c程序設(shè)計》考試大綱

(2012年修訂)

一、考試性質(zhì)

上海市高等學(xué)校計算機等級考試是上海市教育委員會組織的全市高校統(tǒng)一的教學(xué)考試,

是檢測和評價高校計算機應(yīng)用基礎(chǔ)知識教學(xué)水平和教學(xué)質(zhì)量的重要依據(jù)之一。該項考試旨在

規(guī)范和加強上海高校非計算機專業(yè)的計算機教學(xué)工作,提高非計算機專業(yè)學(xué)生的計算機應(yīng)用

能力??荚噷ο笾饕巧虾8叩葘W(xué)校非計算機專業(yè)學(xué)生,考試每年舉行一次,當(dāng)年的十月下

旬、十一月上旬的星期六或星期日。凡考試成績達(dá)到合格者或優(yōu)秀者,由上海市教育委員會

頒發(fā)相應(yīng)的證書。

本考試由上海市教育委員會統(tǒng)一領(lǐng)導(dǎo),聘請有關(guān)專家組成考試委員會,委托上海市教育

考試院組織實施。

二、考試目標(biāo)

C語言是當(dāng)前常用的一種簡潔、高效、功能豐富的程序設(shè)計語言,是理工科大學(xué)生學(xué)習(xí)

計算機編程能力、理解計算機解決問題的方法的重要工具。學(xué)生通過該課程的學(xué)習(xí),應(yīng)能了

解、掌握c語言的語法和使用它進行編程的方法,并能上機調(diào)試運行解決簡單實際問題。

《C程序設(shè)計》的考試目標(biāo)是測試考生掌握C語言知識的程度和綜合運用語言知識進行

程序設(shè)計的能力。

三、考試細(xì)則

考試采用基于網(wǎng)絡(luò)環(huán)境的無紙化上機考試系統(tǒng)??荚嚂r間為120分鐘。試卷總分為100

分。

試題由四部分組成:單選題、程序調(diào)試題、程序填空題和綜合編程題。試卷從局域網(wǎng)的

服務(wù)器下載、考試結(jié)果上傳到服務(wù)器,若不按照要求上傳到服務(wù)器,則考試無效??荚囬喚?/p>

采用機器和人工相結(jié)合的網(wǎng)上閱卷方式。

四、試卷參考樣式

序號題型題量計分考核目標(biāo)

基本概念

一單選題10題15分

語義知識

常用算法

二程序填空題2題20分程序理解

程序設(shè)計

基本語句

三程序調(diào)試題3題30分程序調(diào)試

程序設(shè)計

常用算法

四編程題2題35分

綜合應(yīng)用

合計17題100分

五、考試內(nèi)容和要求

內(nèi)容要點和考點要求

C程序的組成、結(jié)構(gòu)

1

及書寫規(guī)則

.預(yù)處理命令理解

C語言源程序結(jié)構(gòu).外部數(shù)據(jù)定義知道

?函數(shù)main和其它函數(shù)定義

理解

.基本詞法單位、標(biāo)識符/常量/運算符等構(gòu)成規(guī)則理解

程序的書寫格式

?程序的書寫格式與風(fēng)格知道

.VC編程環(huán)境的操作使用掌握

C語言程序設(shè)計步驟

.程序的編輯/編譯/連接/調(diào)試/運行掌握

2基本數(shù)據(jù)類型

C語言數(shù)據(jù)類型

.基本類型、數(shù)組、結(jié)構(gòu)、指針類型、空類型掌握

.常量和變量掌握

C語言常量.整型、實型(單/雙精度)、字符型和字符串常量的表示

理解

方法

C語言變量和C語言?各種類型變量的定義和說明掌握

基本數(shù)據(jù)類型.變量的初始化掌握

3基本運算和表達(dá)式

運算符?運算符種類、功能、目數(shù)、優(yōu)先級、結(jié)合性和副作用理解

算術(shù)運算?自動類型轉(zhuǎn)換規(guī)則掌握

?關(guān)系和邏輯運算規(guī)則掌握

關(guān)系和邏輯運算

?邏輯運算的優(yōu)化規(guī)則理解

位運算?位運算規(guī)則和簡單位運算知道

.賦值運算中自動類型轉(zhuǎn)換規(guī)則(以左值類型為準(zhǔn)轉(zhuǎn)換)掌握

賦值運算

?復(fù)合賦值理解

其他運算?條件、逗號、求存儲空間大小運算知道

.表達(dá)式組成規(guī)則、各類表達(dá)式理解

.描述計算過程/條件判斷的表達(dá)式理解

表達(dá)式.各類型數(shù)據(jù)混合運算中求值順序掌握

.表達(dá)式運算中的隱式類型轉(zhuǎn)換和強制類型轉(zhuǎn)換

理解

.基本運算執(zhí)行順序、表達(dá)式結(jié)果類型

掌握

4語句

基本語句及順序結(jié)?定義/說明語句,表達(dá)式語句,空語句,復(fù)合語句、函數(shù)

構(gòu)語句調(diào)用語句掌握

?描述條件和情況的if,switch語句、

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

?選擇語句嵌套掌握

?描述循環(huán)執(zhí)行的while,do-while,for語句

循環(huán)結(jié)構(gòu)語句

?循環(huán)語句嵌套掌握

?改變程序流程執(zhí)行次序的break,continue,return語

轉(zhuǎn)移語句

句掌握

5數(shù)組

一維數(shù)組?一維數(shù)組定義、引用和初始化掌握

二維數(shù)組.二維數(shù)組定義、引用和初始化掌握

?字符數(shù)組定義、引用和初始化掌握

字符數(shù)組和字符串

?字符串結(jié)束標(biāo)志、初始化、字符串處理函數(shù)

理解

6函數(shù)定義和調(diào)用

.函數(shù)原型、函數(shù)名、形式參數(shù)、函數(shù)返回值、函數(shù)體一一

函數(shù)的定義方法

函數(shù)執(zhí)行過程的描述掌握

函數(shù)類型和返回值.不同類型函數(shù)定義、缺省類型、空類型理解

函數(shù)傳值調(diào)用?形參、實參及其參數(shù)單向傳遞掌握

.函數(shù)原型及作用理解

函數(shù)說明?用戶定義函數(shù)說明理解

?系統(tǒng)庫函數(shù)說明--用頭文件包含

理解

函數(shù)參數(shù)類型和函?傳值調(diào)用和傳址調(diào)用掌握

數(shù)的傳址調(diào)用.數(shù)組名作為函數(shù)參數(shù)理解

函數(shù)嵌套調(diào)用和遞?遞歸函數(shù)的定義和調(diào)用知道

歸調(diào)用.遞歸函數(shù)的執(zhí)行過程理解

變量的存儲類別和

7

編譯預(yù)處理

變量存儲類別的概

?自動、寄存器、外部及內(nèi)部靜態(tài)/外部靜態(tài)各種變量類型

念理解

變量的作用域.在函數(shù)外部、函數(shù)內(nèi)部、復(fù)合語句內(nèi)定義變量的作用域理解

變量的生存期和有

?自動、外部及內(nèi)部靜態(tài)/外部靜態(tài)變量的生存期和有效期

效期知道

編譯預(yù)處理.文件包含和宏定義知道

8指針

指針概念.地址、指針和指針變量的含義和表示掌握

指針與地址運算符.取地址運算符&和取內(nèi)容運算符*理解

用指針處理數(shù)組、字?數(shù)組、字符串的指針以及指向數(shù)組、字符串的指針變量理解

符串?通過指針引用以上各類型數(shù)據(jù)理解

用指針作函數(shù)參數(shù)?通過指針類型參數(shù)傳遞計算結(jié)果,改變主調(diào)函數(shù)實參值理解

-函數(shù)指針--返回指針值的的指針函數(shù)知道

指針的高級功能?指針數(shù)組、指向指針的指針知道

,main函數(shù)的命令行參數(shù)簡介知道

9結(jié)構(gòu)體與共用體

?結(jié)構(gòu)定義方法和引用方法理解

結(jié)構(gòu)體類型數(shù)據(jù)

?結(jié)構(gòu)體變量初始化理解

結(jié)構(gòu)體數(shù)組?結(jié)構(gòu)體數(shù)組定義、初始化理解

?指向結(jié)構(gòu)體類型變量的指針變量理解

結(jié)構(gòu)體指針變量

?指向結(jié)構(gòu)體類型數(shù)組的指針變量知道

?用指針和結(jié)構(gòu)體構(gòu)成鏈表、單向鏈表的建立、輸出、刪

鏈表

除與插入(包括動態(tài)空間申請與釋放)理解

10文件

基本概念.文件類型一文本文件/二進制文件、文件指針理解

?文件的打開和關(guān)閉

文件操作?定位掌握

?文件的讀/寫

?常用的庫函數(shù):

打開和關(guān)閉:fopen>fclose

文件結(jié)束判斷:feofO

常用庫函數(shù)

定位:fseek>rewind理解

讀/寫:fputc>fgetc>fputs>fgets>

fprintf>fscanf>fwrite、fread等

算法和數(shù)據(jù)結(jié)構(gòu)的

11

簡單知識

算法和結(jié)構(gòu)化程序.算法概念、表示

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

單鏈表、棧和隊列的.單鏈表建立、查找、插入、刪除和合并

操作.棧和隊列的建立和基本操作知道

排序和查找?簡單的排序算法和查找算法知道

六、幾點說明

(一)適用對象

理、工、農(nóng)、醫(yī)等專業(yè)類非計算機專業(yè)本科生

(二)建議學(xué)時數(shù)

48-64學(xué)時,其中16-32學(xué)時為實驗課

(三)建議計算機配置

1、硬件

中央處理器PentiumIII550MGHz以上

內(nèi)存128MB以上

硬盤20GB以上

2、軟件

操作系統(tǒng)Windows2000及以上

編程環(huán)境中文MicrosoftVisualC++6.0或其它C語言編程環(huán)境

(四)考試環(huán)境

安裝并使用“上海市高校計算機等級考試通用平臺”進行考試。

客戶端安裝中文VisualC++6.0或其它C語言編程環(huán)境。

(五)參考教材

?《C程序設(shè)計》.譚浩強.清華大學(xué)出版社.

?《C/C++程序設(shè)計》.夏寶嵐等.華東理工大學(xué)出版社.

全真考題

2004年全真考題

2004年上海市高等學(xué)校計算機等級考試試卷

二級(C程序設(shè)計)

(本試卷答卷時間為120分鐘)

試題一(28分,每小題4分)

解答下列各小題,把正確的解答寫在答卷紙的對應(yīng)欄內(nèi)。

(1)假設(shè)對n(n>0)個學(xué)生按下列方法進行分班:每班k(k>0)個學(xué)生,最后一個班若不足k人

也單獨編成一個班。試用C語言中的條件表達(dá)式表示所編班級個數(shù)。

(2)設(shè)有變量定義:

structrec{

intx;

血y;

}s[]={{4528},{9,36}}5*p=s;

計算表達(dá)式(p?>y/p->x*s[l].x+s[l].y)的值。

(3)寫出下列程序的輸出結(jié)果。

#include<stdio.h>

voidmain(){

chars[]=n2473H,c,i;

fdr(i=O;c=s[i];i++){

switch(cJ01){

case2:

case3:putchar(c+4);continue;

case4:putchar(c+4);break;

case5:putchar(c+3);

default:putchar(c+2);

)

putchar('\n');

)

(4)分別寫出下歹必個指針變量pl,p2,p3,p4的含義。

int*pl,*p2[5],(*p3)(),(*p4)[5];

(5)寫出程序的輸出結(jié)果(假定類型unsignedint的字長為16位)。

#include<stdio.h>

voidmainQ{

unsignedintul=0x958,u2,u3;

u2=(ul&OxFF)?4;

u3=(ul&OxFFOO)?4;

printf("%x%x%x\n”,u2,u3,u2|u3);

)

(6)閱讀如下程序段,把其中的switch語句改寫成等價的條件語句。

血x,y;

scanf("%d”,&x);

switch(x!=0){

case0:y=0;break;

case1:switch(x>0){

case1:y=l;break;

case0:y=-l;

)

}

(7)描述函數(shù)conv()的功能,并寫出下列程序的輸出結(jié)果。

voidconv(intm){

if(m>=2)

conv(m/2);

printf(n%dH,m%2);

}

voidmain(){

conv(13);

)

試題二(12分,每小題6分)

閱讀下列程序并回答問題,把答案寫在答卷紙的對應(yīng)欄內(nèi)。

(1)【程序2.1]

#include<stdio.h>

voidsort(inta[],intn){

int

fbr(i=O;i<n-l;i++)

for(j=i+l;j<n;j++)

if(a[i]>a[j])t=a[i],a[i]=a[j],a[j]=t;

voiddelsame(intx[],intn){

inti,j,m=n;

fbr(i=O;i<m;i++){

while(x[i]==x[i+l]){

for(j=i;j<m;j++)

x[j]=x[j+l];

m—;

}

)

returnm;

}

voidmain(){

intx[]={74,4,35,4,65,65,72,74,35},i,m,n;

n=sizeofifx)/sizeof(x[0]);

sort(x,n);

m=delsame(x,n);

for(i=0;i<m;i++)printf(H%3dH,x[i]);

printf(H\nn);

}

(a)函數(shù)sort()的功能是什么?(b)函數(shù)delsame()的功能是什么?(c)程序的輸出是什么?

(2)【程序2.2]

#include<stdio.h>

#defineM4

voidmain(){

inti,j,k,m,a[4];

printf(nEnter4numbers:");

for(i=0;i<M;i++)scanf(H%dH,&a[i]);

fbr(i=M;i>0;i-){

k=a[M-l];

for(j=M-l;j>O;j-)

a[j]=a[j-l];

a[0]=k;

fbr(m=0;m<M;m++)

printf(H%dn,a[m]);

printf(n\nn);

)

}

設(shè)一維數(shù)組a的4個輸入整數(shù)是1,2,3,4,則程序的輸出是什么?

試題三(12分,每小題6分)

改錯。下列程序中都有三個錯誤,按原來程序的要求,糾正錯誤,并以“將#XX行改為YYYY"

的形式進行解答,代碼左邊的“#01“、“#02"、…是附加的行號。

(1)程序3.1輸入10個正整數(shù),計算其中的素數(shù)之和并輸出結(jié)果(不考慮溢出情況)。

【程序3.1】

#01#include<stdio.h>

#02intsum(int*b,intm){

#03ints=0,is_prime(long);

#04while(m—)

#05if(is_prime(*b++))s+=*b;

#06returns;

#07}

#08intisjprime(longm){

#09intk;

#10if(m<=1)return0;

#11ififm==2||m==3)return1;

#12fdr(k=2;k*k<=m;k++)

#13if(m%k==0)return0;

#14elsereturn1;

#15}

#16voidmain(){

#17intx[10],i;

#18for(i=0;i<10;i++)scanf(H%dH,x++);

#19printf(Hsum=%d\nn,sum(x,10));

#20}

(2)程序3.2計算字符串s中最后一次出現(xiàn)子串t的地址,通過函數(shù)值返回,在主函數(shù)中輸

出此地址開始的字符串;若未找到,函數(shù)返回NULL(例如字符串s為"456712345678abcd",

當(dāng)子串t為"567"時,輸出為“5678abcd";當(dāng)t為"789"時,輸出"未找到")。

【程序3.2】

#01#include<stdio.h>

#02char*fun(char*s,t){

#03char*p,*r,*a;

#04a=null;

#05while(*s){

#06p=s;r=t;

#07while(*r)

#08if(r==p){r++;p++;}

#09elsebreak;

#10if(*r=='\(T)a=s;

#11s++;

#12}

#13returna;

#14)

#15voidmain(){

#16chars[100],t[100],*p;

#17printf(,,\nPleaseenterstrings:H);scanf(n%sH,s);

#18printf(H\nPleaseentersubstringt:H);scanf(H%sH,t);

#19p=fun(s,t);

#20if(p)printf(H\nTheresultis:%s\nH,p);

#21elseprintf(H\nNotfound!\nH);

#22)

試題四(18分,每小題9分)

按指定的要求編寫C程序段,把解答寫在答卷紙的對應(yīng)欄內(nèi)。不要求寫完整的程序,也不

必定義語句中出現(xiàn)的變量。

(1)兀的值可以使用下公式計算

請編寫函數(shù)compute_pi(doubleeps)計算兀的近似值,當(dāng)公式中某一項的值小于eps(例

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論