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

下載本文檔

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

文檔簡(jiǎn)介

程序設(shè)計(jì)與實(shí)踐

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

2015年2月使用

目錄

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

成績(jī)?cè)u(píng)定3

實(shí)驗(yàn)內(nèi)容4

文檔格式12

2012年二級(jí)考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

補(bǔ)充知識(shí)112

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

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

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

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

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

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

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

成績(jī)?cè)u(píng)定

本課程的總評(píng)成績(jī)?cè)u(píng)定標(biāo)準(zhǔn)為:

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

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

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

實(shí)驗(yàn)內(nèi)容

實(shí)驗(yàn)一:個(gè)人資金賬戶管理

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

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

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

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

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

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

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

下;

3,增加修改資金賬戶的功能。輸入一個(gè)記錄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是隨機(jī)文件,記錄資金帳戶消費(fèi)流水帳記錄信息*/

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

#include"stdio.h"

#include"stdlib.h"

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

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

longlogid;/*記錄ID*/

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

charlognote[15];/*記錄事件說(shuō)明*/

doublecharge;/*發(fā)生費(fèi)用:負(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;/*記錄號(hào)按順序是上次的+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;

)

實(shí)驗(yàn)二自動(dòng)售貨機(jī)

下圖所示為簡(jiǎn)易自動(dòng)售貨機(jī),物品架1、2上共有10樣商品,按順序進(jìn)行編

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

用。如果物品架上的商品被用戶買走,儲(chǔ)物柜中會(huì)自動(dòng)取出商品送到物品架上,

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

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

用戶購(gòu)買商品的操作方法如下。

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

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

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

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

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

編號(hào)按鈕即可。每選中一樣商品,售貨機(jī)控制器會(huì)判斷錢幣是否足夠購(gòu)買,如果

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

結(jié)束購(gòu)物。

請(qǐng)為自動(dòng)售貨機(jī)編程,輸入錢幣值序列,以-1作為結(jié)束,依次輸入多個(gè)購(gòu)買

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

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

輸入輸出示例:

輸入:

1122551010-1/*錢幣序列*/

123516910-1/*物品編號(hào)*/

輸出:

Total:36yuan,change:19yuan

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

實(shí)驗(yàn)三:自動(dòng)寄存柜

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

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

子,寄存柜就會(huì)自動(dòng)打開一個(gè)空的箱子,并且打印輸出一張小小的密碼紙條;如

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

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

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

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

密碼”。

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

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

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

子編號(hào),否則輸出提示“密碼錯(cuò)誤”。

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

輸入輸出示例:

寄存箱總數(shù):10

1.投硬幣2.輸密碼0.退出請(qǐng)選擇:1

投幣值:1

寄存箱編號(hào):1密碼:9342

L投硬幣2.輸密碼0.退出請(qǐng)選擇:2

輸入密碼:9342

1號(hào)寄存箱已打開

L投硬幣2.輸密碼0.退出請(qǐng)選擇:0

結(jié)束

實(shí)驗(yàn)四:停車場(chǎng)管理

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

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

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

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

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

場(chǎng)的車都必須先退出停車場(chǎng)為它讓路,待其開出停車場(chǎng)后,這些車輛再依原來(lái)次

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

停留在便道上的車不收停車費(fèi)。編寫程序?qū)υ撏\噲?chǎng)進(jìn)行管理。

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

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

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

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

停車場(chǎng)內(nèi)停留的時(shí)間。

輸入輸出示例

3

Al1

1號(hào)車停入1號(hào)位

A22

2號(hào)車停入2號(hào)位

A33

3號(hào)車停入3號(hào)位

D14

1號(hào)車出停車場(chǎng),停留時(shí)間3

A45

4號(hào)車停入3號(hào)位

A56

5號(hào)車在便道上等待

D47

4號(hào)車出停車場(chǎng),停留時(shí)間2

5號(hào)車停入3號(hào)位

D58

5號(hào)車出停車場(chǎng),停留時(shí)間1

E00

實(shí)驗(yàn)五;學(xué)生成績(jī)管理

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

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

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

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

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

(4)能夠分別按總分和學(xué)號(hào)進(jìn)行排序。

(5)能夠根據(jù)學(xué)號(hào)查詢?cè)搶W(xué)生的基本信息。

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

程序運(yùn)行時(shí),菜單形式如下。

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è)計(jì)各個(gè)自定義函數(shù)。同時(shí),程序能

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

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

實(shí)驗(yàn)六:完美的代價(jià)

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

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

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

相鄰的字符互換位置。

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

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

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

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

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

Impossibleo

輸入輸出示例1

5

mamad

3

輸入輸出示例2

6

aabbcd

Impossible

實(shí)驗(yàn)思考題:值班安排

醫(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í),先輸入一個(gè)整數(shù)n,再輸入n組條件,要求能夠根據(jù)輸入的條

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

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

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

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

格式1:編號(hào)比較運(yùn)算符編號(hào)天數(shù)

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

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

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

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

輸入輸出示例

7

A<C1

D<E1

E>B2

B>G4

F<B1

F>C1

F=4

EDBFCAG

文檔格式

每個(gè)程序均需獨(dú)立完成相應(yīng)的實(shí)驗(yàn)文檔,打包提交。包括:

實(shí)驗(yàn)報(bào)告,程序源代碼,EXE可執(zhí)行程序

打包文檔名稱:班級(jí)—學(xué)號(hào)—姓名—實(shí)驗(yàn)號(hào)

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

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

實(shí)驗(yàn)號(hào)按實(shí)驗(yàn)順序如下:實(shí)驗(yàn)一、實(shí)驗(yàn)二、……

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

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

實(shí)驗(yàn)報(bào)告模板如下:

程序設(shè)計(jì)與實(shí)踐

實(shí)驗(yàn)報(bào)告

實(shí)驗(yàn)一:個(gè)人資金賬戶管理

姓名:XXX

學(xué)號(hào):XXX

班級(jí):XXX

實(shí)驗(yàn)時(shí)間:2015/xx/xx-2015/xx/xx

一:實(shí)驗(yàn)名稱:個(gè)人資金賬戶管理

注:每個(gè)實(shí)驗(yàn)名稱需對(duì)應(yīng)

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

三:實(shí)驗(yàn)?zāi)康?/p>

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

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

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

四:實(shí)驗(yàn)內(nèi)容:

注:此處請(qǐng)按實(shí)驗(yàn)要求改寫,語(yǔ)句精煉。說(shuō)明實(shí)驗(yàn)題的內(nèi)容及基本要求。

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

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

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

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

可。

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

待改進(jìn)之處,以及有何收獲,體會(huì)等)

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

空白哦!

2012年二級(jí)考C大綱

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

(2012年修訂)

一、考試性質(zhì)

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

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

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

能力。考試對(duì)象主要是上海高等學(xué)校非計(jì)算機(jī)專業(yè)學(xué)生,考試每年舉行一次,當(dāng)年的十月下

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

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

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

考試院組織實(shí)施。

二、考試目標(biāo)

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

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

解、掌握c語(yǔ)言的語(yǔ)法和使用它進(jìn)行編程的方法,并能上機(jī)調(diào)試運(yùn)行解決簡(jiǎn)單實(shí)際問(wèn)題。

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

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

三、考試細(xì)則

考試采用基于網(wǎng)絡(luò)環(huán)境的無(wú)紙化上機(jī)考試系統(tǒng)。考試時(shí)間為120分鐘。試卷總分為100

分。

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

服務(wù)器下載、考試結(jié)果上傳到服務(wù)器,若不按照要求上傳到服務(wù)器,則考試無(wú)效。考試閱卷

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

四、試卷參考樣式

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

基本概念

一單選題10題15分

語(yǔ)義知識(shí)

常用算法

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

程序設(shè)計(jì)

基本語(yǔ)句

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

程序設(shè)計(jì)

常用算法

四編程題2題35分

綜合應(yīng)用

合計(jì)17題100分

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

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

號(hào)

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

1

及書寫規(guī)則

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

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

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

理解

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

程序的書寫格式

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

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

C語(yǔ)言程序設(shè)計(jì)步驟

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

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

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

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

.常量和變量掌握

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

理解

方法

C語(yǔ)言變量和C語(yǔ)言?各種類型變量的定義和說(shuō)明掌握

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

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

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

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

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

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

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

位運(yùn)算?位運(yùn)算規(guī)則和簡(jiǎn)單位運(yùn)算知道

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

賦值運(yùn)算

?復(fù)合賦值理解

其他運(yùn)算?條件、逗號(hào)、求存儲(chǔ)空間大小運(yùn)算知道

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

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

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

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

理解

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

掌握

4語(yǔ)句

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

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

?描述條件和情況的if,switch語(yǔ)句、

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

?選擇語(yǔ)句嵌套掌握

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

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

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

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

轉(zhuǎn)移語(yǔ)句

句掌握

5數(shù)組

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

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

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

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

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

理解

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

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

函數(shù)的定義方法

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

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

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

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

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

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

理解

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

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

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

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

變量的存儲(chǔ)類別和

7

編譯預(yù)處理

變量存儲(chǔ)類別的概

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

念理解

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

變量的生存期和有

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

效期知道

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

8指針

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

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

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

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

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

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

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

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

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)成鏈表、單向鏈表的建立、輸出、刪

鏈表

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

10文件

基本概念.文件類型一文本文件/二進(jìn)制文件、文件指針理解

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

文件操作?定位掌握

?文件的讀/寫

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

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

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

常用庫(kù)函數(shù)

定位:fseek>rewind理解

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

fprintf>fscanf>fwrite、fread等

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

11

簡(jiǎn)單知識(shí)

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

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

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

操作.棧和隊(duì)列的建立和基本操作知道

排序和查找?簡(jiǎn)單的排序算法和查找算法知道

六、幾點(diǎn)說(shuō)明

(一)適用對(duì)象

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

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

48-64學(xué)時(shí),其中16-32學(xué)時(shí)為實(shí)驗(yàn)課

(三)建議計(jì)算機(jī)配置

1、硬件

中央處理器PentiumIII550MGHz以上

內(nèi)存128MB以上

硬盤20GB以上

2、軟件

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

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

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

安裝并使用“上海市高校計(jì)算機(jī)等級(jí)考試通用平臺(tái)”進(jìn)行考試。

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

(五)參考教材

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

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

全真考題

2004年全真考題

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

二級(jí)(C程序設(shè)計(jì))

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

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

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

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

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

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

structrec{

intx;

血y;

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

計(jì)算表達(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)分別寫出下歹必個(gè)指針變量pl,p2,p3,p4的含義。

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

(5)寫出程序的輸出結(jié)果(假定類型unsignedint的字長(zhǎng)為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語(yǔ)句改寫成等價(jià)的條件語(yǔ)句。

血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分)

閱讀下列程序并回答問(wèn)題,把答案寫在答卷紙的對(duì)應(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個(gè)輸入整數(shù)是1,2,3,4,則程序的輸出是什么?

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

改錯(cuò)。下列程序中都有三個(gè)錯(cuò)誤,按原來(lái)程序的要求,糾正錯(cuò)誤,并以“將#XX行改為YYYY"

的形式進(jìn)行解答,代碼左邊的“#01“、“#02"、…是附加的行號(hào)。

(1)程序3.1輸入10個(gè)正整數(shù),計(jì)算其中的素?cái)?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計(jì)算字符串s中最后一次出現(xiàn)子串t的地址,通過(guò)函數(shù)值返回,在主函數(shù)中輸

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

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

【程序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程序段,把解答寫在答卷紙的對(duì)應(yīng)欄內(nèi)。不要求寫完整的程序,也不

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

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

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

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論