計(jì)算機(jī)二級(jí)改錯(cuò)_第1頁(yè)
計(jì)算機(jī)二級(jí)改錯(cuò)_第2頁(yè)
計(jì)算機(jī)二級(jí)改錯(cuò)_第3頁(yè)
計(jì)算機(jī)二級(jí)改錯(cuò)_第4頁(yè)
計(jì)算機(jī)二級(jí)改錯(cuò)_第5頁(yè)
已閱讀5頁(yè),還剩161頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

[由上機(jī)部分:

1、本資料匯集了2010年以前所有的全國(guó)計(jì)算機(jī)等級(jí)考試二

級(jí)C語(yǔ)言的上機(jī)考試真題,具有很高的真實(shí)性、權(quán)威性和全面性,/

也具有較強(qiáng)的參考價(jià)值,是備戰(zhàn)全國(guó)計(jì)算機(jī)等級(jí)考試二級(jí)C語(yǔ)言

的良師益友,衷心希望本資料能為大家考試成功加油助力。

2、本資料在每道題的后面都有參考答案和詳細(xì)分析,精講考點(diǎn),分析題眼,詳解重點(diǎn)和難

點(diǎn)并給出應(yīng)試技巧,為你輕松過(guò)關(guān)鋪路墊石.

3、本資料內(nèi)容全面,對(duì)100套題做了詳細(xì)歸類(lèi),望各位學(xué)員能夠舉一反三,在短時(shí)間內(nèi)提

高等級(jí)應(yīng)試能力。

4、機(jī)試考試有三道大題,第一題是程序填空,占分30分,第二題是程序修改,占分30分,

第三題是程序編寫(xiě),占分40分,整個(gè)上機(jī)考試分值100分,考試時(shí)間60分鐘.

5、上機(jī)考試的題目每年變化不大,考生只要平時(shí)基礎(chǔ)知識(shí)扎實(shí),在考前強(qiáng)化時(shí)多做些上機(jī)

考試模擬題,見(jiàn)多識(shí)廣,上機(jī)考試時(shí)就會(huì)遇到跟自己考前上機(jī)練習(xí)極其類(lèi)似的題目,從而順利

通過(guò)考試。

6、考試中計(jì)算機(jī)出現(xiàn)故障、死機(jī)、死循環(huán)、電源故障等異常情況(即無(wú)法進(jìn)行正??荚嚂r(shí)),

應(yīng)舉手示意與監(jiān)考人員聯(lián)系,不得擅自關(guān)機(jī)和做出其它自行處理.

7、上機(jī)考試時(shí)應(yīng)明確,考生目錄位于考試環(huán)境界面的左上角,每一個(gè)題目對(duì)應(yīng)的程序文件

都存放在考生目錄下,要做每一道題時(shí),應(yīng)先按平時(shí)掌握的打開(kāi)文件的方法在考生目錄下打開(kāi)

每一道題所對(duì)應(yīng)的程序文件,然后再做題,做題的過(guò)程應(yīng)注意保存文件.

8、上機(jī)考試做每一道題時(shí),應(yīng)盡量使用C編譯系統(tǒng)自身的編譯、連接功能調(diào)試程序,以便

很快發(fā)現(xiàn)語(yǔ)法錯(cuò)誤,解決語(yǔ)法錯(cuò)誤,編譯、連接完成后,對(duì)得到的程序結(jié)果還應(yīng)認(rèn)真分析,確

保程序沒(méi)有邏輯錯(cuò)誤為止。

9、機(jī)試填空題應(yīng)注意:(1)一般設(shè)置3個(gè)填空;(2)填空后應(yīng)將填空序號(hào)和填空下劃線(xiàn)

刪除,防止編譯出錯(cuò).

10、機(jī)試修改題應(yīng)注意:(1)錯(cuò)誤一般有2個(gè)或3個(gè);2(2)錯(cuò)誤一般位于每個(gè)found之下

一行或兩行范圍之內(nèi).

11、機(jī)試編程題應(yīng)注意:(1)編程題一般都是在被調(diào)用的函數(shù)之內(nèi)編寫(xiě);(2)所編寫(xiě)的被

調(diào)用的函數(shù)要與調(diào)用函數(shù)保持和諧統(tǒng)一,符合被調(diào)用與調(diào)用的關(guān)系。

第一部分程序填空題

字符類(lèi):集1-2逋

1、函數(shù)fun的功能是進(jìn)行數(shù)字字符轉(zhuǎn)換。若形參ch中是數(shù)字字符'0'?'9',則'0'轉(zhuǎn)換成'9',T'轉(zhuǎn)換成'8',

'2'轉(zhuǎn)換成'7',……,’9'轉(zhuǎn)換成'0':若是其它字符則保持不變;并將轉(zhuǎn)換后的結(jié)果作為函數(shù)值返回。

請(qǐng)?jiān)诔绦虻南聞澗€(xiàn)處填入正確的內(nèi)容并把下劃線(xiàn)刪除,使程序得出正確的結(jié)果。

注意:源程序存放在考生文件夾下的BLANK1.C中。

不得增行或刪行,也不得更改程序的結(jié)構(gòu)!

4include<stdio.h>

/**********found**********/

__1___fun(charch)

/**********found**********/

if(ch>二'O'&&_2—)

/**********found**********/

return9-(ch-__3___);

returnch;

)我們處在同一條起跑線(xiàn)上,

mainO每位學(xué)員應(yīng)做好考前沖剌

{charcl,c2;

printf(z,\nTheresult:\n");的良好準(zhǔn)備.

cl=2';c2=fun(cl);

printf("cl趣cc2=%c\n”,cl,c2);

cl=,8';c2=fun(cl);

printf(/zcl=%cc2=%c\n/z,cl,c2);

c\-a,;c2=fun(cl);

printf("cl=%cc2=%c\n”,cl,c2);

)

答案:[1]char[2]<=,9,[31'O'

2

由主函數(shù)中的語(yǔ)句〃c2=fun(cl);〃知:函數(shù)fun的返回類(lèi)型為字符,故第■空應(yīng)填char;在題面中要求對(duì)數(shù)字

字符進(jìn)行轉(zhuǎn)換,故第二空的目的是判斷字符ch是否為一數(shù)字字符,即ch是否在'0'?'9'之間故第二空應(yīng)填ch<='9'

或其等效形式;第三空處語(yǔ)句的目的是返回轉(zhuǎn)換后的結(jié)果,即返回一字符,其所對(duì)應(yīng)的數(shù)字與轉(zhuǎn)換前字符所對(duì)應(yīng)

的數(shù)字的和為9,故第三空應(yīng)填'0'或其等效形式。

2、給定程序的功能是將大寫(xiě)字母轉(zhuǎn)換為對(duì)應(yīng)小寫(xiě)字母之后的第五個(gè)字母;若小寫(xiě)字母為v?z,使小寫(xiě)字母的

值減21。轉(zhuǎn)換后的小寫(xiě)字母作為函數(shù)值返回。例如,若形參是字母A,則轉(zhuǎn)換為小寫(xiě)字母f;若形參是字母W,則

轉(zhuǎn)換為小寫(xiě)字母b。

請(qǐng)?jiān)诔绦虻牟?劃線(xiàn)處填入正確的內(nèi)容并把卜.劃線(xiàn)刪除,使程序得出正確的結(jié)果。

注意:源程序存放在考生文件夾下的BLANK1.C中。

不得增行或刪行,也不得更改程序的結(jié)構(gòu)!

#include<stdio.h>

#include<ctype.h>

charfun(charc)

{if(c>='A'&&cC'Z')

c=c+32;

if(c>=,a'&&c<-u*)

/**************found**************/

elseif(c>='v'&&c<='z')

c=c-21;

/**************found**************/

return__2__;

)

mainO

{charcl,c2;

printf(/z\nEnteraletter(A-Z):〃);cl=getchar();

if(isupper(cl)){

/**************found**************/

c2=fun(_3_);

printf('\n\nTheletter\'%c\'changeto\'%c\'\n',cl,c2);

)

elseprintf(*XnEnter(A-Z)!\n*);

)

答案:【1】5[2]c[3]cl

本題著重考察考生對(duì)C語(yǔ)言中?些簡(jiǎn)單算法的掌握情況。

解題思路:先判斷輸入的字母是否是大寫(xiě)字母,若是大寫(xiě)字母,將其轉(zhuǎn)化為相應(yīng)的小寫(xiě)字母,方法是該大寫(xiě)

字母對(duì)應(yīng)的ASCII碼值加上32就是其小寫(xiě)字母的ASCH碼值,再判斷該小寫(xiě)字母是否是a?u,若是轉(zhuǎn)化為其后的第

5個(gè)字母。若該小寫(xiě)字母是v?z,則將其ACSII碼值減去21,轉(zhuǎn)換后的小寫(xiě)字母作為函數(shù)值返回。

題中第一個(gè)空填“5〃:C語(yǔ)言中,字母從a?z或A?Z的ASCH碼值是依次遞增的,所以將其轉(zhuǎn)換為其后的第5

個(gè)字母應(yīng)該是〃c=c+5;"或相同作用的語(yǔ)句。

題中第二個(gè)空填”c〃:通過(guò)return語(yǔ)句將被調(diào)用函數(shù)中c的值帶回主調(diào)函數(shù)中去。

題中第三個(gè)空填〃cl〃:此句是調(diào)用fun()函數(shù),括弧中是其實(shí)際參數(shù)。

本評(píng)析僅作參考。

建歸類(lèi):第3—4眄

3、下列給定程序中,函數(shù)fun()的功能是:用遞歸算法計(jì)算斐波拉契級(jí)數(shù)列中第n項(xiàng)的值。從第一項(xiàng)起,斐

波拉契級(jí)數(shù)序列為1,1,2,3,5,8,13,21,……,例如,若給n輸入7,該項(xiàng)的斐波拉契級(jí)數(shù)值為13。

試題程序:

4include<stdio.h>

longfun(intg)

{

switch(g)

{case0:return0;

case1:1_:return1;

}

return(-2__);

)

main()

longfib;intn;

printf("Inputn:;scanf(**%d,3);printf(nn=%d\n,*,n);

fib=fun(n);

printf(nfib=%d\n\nn,fib);

)

答案:【1】case2[2]fun(g-l)+fun(g-2)13】&n

【解析】填空1:根據(jù)題目的意思,這里應(yīng)該是對(duì)于值為1和2的時(shí)候的處理,注意case語(yǔ)句常量后應(yīng)用的是

冒號(hào),而且不同的case對(duì)應(yīng)同?個(gè)值可以連續(xù)寫(xiě)(像題目中那樣)。

填空2:根據(jù)題目的意思,此處是求值的遞歸部分,由遞推公式可以很容易的得到答案的形式,對(duì)于這種簡(jiǎn)

單的遞歸考生一定要掌握。

填空3:由算法可以看出,此處是輸入數(shù)列的項(xiàng)數(shù)n,使用了scanf函數(shù),其參數(shù)應(yīng)該是變量的地址,即使用符號(hào)

4、卜列給定程序中,函數(shù)fun()的功能是:應(yīng)用遞歸算法求某數(shù)a的平方根。求平方根的迭代公式如卜.:

-v,=(xn+—)/2例如,2的平方根為1.414214

玉)

#include<math.h>

#include<stdio.h>

1fun(doublea,doublexO)

{doublexl,y;

_2_;

if(fabs(xl-xO)>=0.00001)

__3__;

elsey=xl;

returny;

)

main()

{doublex;

printf(uEnterx:H);scanf(n%lfn,&x);

n,T

printf(Thesquarerootof%lfis%lf\n,xzfun(xz1.0));

)

答案:【1】double[2]xl=(x0+a/x0)/2.0[3]y=fun(a,xl)

【解析】填空1:這里要問(wèn)的是函數(shù)的類(lèi)型,由主函數(shù)main。對(duì)函數(shù)的調(diào)用可以得到函數(shù)的類(lèi)型是double型的,

當(dāng)然也可以由函數(shù)的返回值語(yǔ)句得到。

填空2:我們看到在下一條語(yǔ)句中已經(jīng)開(kāi)始對(duì)變量xl的值進(jìn)行比較了,所以這里要對(duì)xl進(jìn)行賦值,由題意可

知xl=(xO+a/xO)/20。

填空3:用C語(yǔ)言求平方根的方法?般有兩種經(jīng)典的算法,它們分別是迭代法和遞歸法,本題要求用遞歸法。

該程序采用「if語(yǔ)句,程序的含義是當(dāng)?shù)Y(jié)果差小于誤差時(shí)進(jìn)行循環(huán)。

文件慎寫(xiě)類(lèi):第5—9題

5、給定程序的功能是:從鍵盤(pán)輸入若干行文件(每行不超過(guò)80個(gè)字符),寫(xiě)到文件myfile4.txt中,用-1作為字

符串輸入結(jié)束的標(biāo)志。然后將文件的內(nèi)容讀出顯示在屏幕I:。文件的讀寫(xiě)分別由自定義函數(shù)ReadText和WriteText

實(shí)現(xiàn)。

請(qǐng)?jiān)诔绦虻南聞澗€(xiàn)處填入正確的內(nèi)容并把下劃線(xiàn)刪除,使程序得出正確的結(jié)果。

注意:源程序存放在考生文件夾下的BLANK1.C中。

不得增行或刪行,也不得更改程序的結(jié)構(gòu)!

itinclude<stdio.h>

#include<string.h>

4include<stdlib.h>

voidWriteText(FILE*);上制

voidReadText(FILE*);

FILEfp;

mainO

{if((fp二fopen("myfile4.txt",〃w"))=NULL)

{printf(*openfail!!\n,z);exit(0);}

WriteText(fp);.只有上秋薪盡

fclose(fp);

if((fp=fopenle4.txt",〃r"))=NULL)

{printfopenfail!!\n,z);exit(0);}

ReadText(fp);

fclose(fp);

)

/**********found**********/

voidWriteText(FILE__1_)

{charstr[81];

4

printf(<z\nEnterstringwith-1toend:\rT);

gets(str);

while(strcmp(str,〃T〃)!=0){

/**********found**********/

fputs(___2___,fw);fputs("\n",fw);

gets(str);

)

)

voidReadText(FILE*fr)

{charstr[81];

printf('AnReadfileandoutputtoscreen:\n〃);

fgets(str,81,fr);

whi1e(!feof(fr)){

/**********found**********/

printf___3___);

fgets(str,81,fr);

)

)

本題考核點(diǎn)為:文件的讀寫(xiě)函數(shù)等。

答案:【1】*fw[2]str[3]str

題中第一個(gè)空填"*fw":fw是一個(gè)文件指針,從鍵盤(pán)上讀入數(shù)據(jù),輸入其所指向的文件中。

題中第:空填"str":fputs函數(shù)向文件中寫(xiě)數(shù)據(jù),其函數(shù)原型為:fputs(ch,fp)其中ch是要輸出的字符,

它可以是?個(gè)字符常量,也可以是個(gè)字符變量。fp是文件指針變量。

題中第三個(gè)空填"str":printf函數(shù)的一般格式為:

printf(格式控制,輸出表列)

1、"格式控制"是用雙引號(hào)括起來(lái)的字符串,也稱(chēng)"轉(zhuǎn)換控制字符串”,它包括兩種信息:

格式說(shuō)明:由線(xiàn)”和格式字符組成,如刎,%f等。它的作用是將輸出的數(shù)據(jù)轉(zhuǎn)換為指定的格式輸出。格式說(shuō)

明總是由〃獷字符開(kāi)始的。

普通字符,即需耍原樣輸出的字符。

2、"輸出表列”:是需要輸出的一些數(shù)據(jù),可以是表達(dá)式。

6、給定程序的功能是:調(diào)用函數(shù)fun將指定源文件中的內(nèi)容復(fù)制到指定的目標(biāo)文件中,復(fù)制成功時(shí)函數(shù)返回值

是1,失敗時(shí)返回值為0。在復(fù)制的過(guò)程中,把復(fù)制的內(nèi)容輸出到終端屏幕。主函數(shù)中源文件名放在變量sfname

中,目標(biāo)文件名放在變量tfname中。

請(qǐng)?jiān)诔绦虻牟?劃線(xiàn)處填入正確的內(nèi)容并把下劃線(xiàn)刪除,使程序得出正確的結(jié)果。

注意:源程序存放在考生文件夾下的BLANK1.C中。

不得增行或刪行,也不得更改程序的結(jié)構(gòu)!

^include<stdio.h>

#include<stdlib.h>

intfun(char*source,char*target)

{FILE*fs,*ft;charch;

/**********found**********/

if((fs=fopen(source,___1___))=NULL)

return0;

if((ft=fopen(target,〃w〃))=NULL)

return0;

printf(〃\nThedatainfile:\n");

ch=fgetc(fs);

/**********found**********/

while(!feof(__2___))

{putchar(ch);

/**********found**********/

fputc(ch,___3___);

ch=fgetc(fs);

}

fclose(fs);fclose(ft);

printfC\n\nO;

return1;

)

main()

{charsfname[20]tfname[20]="myfile2”;

FILE*myf;inti;charc;

myf=fopen(sfname,"w");

printf(,z\nTheoriginaldata:\n");

for(i=l;i<30;i++){c='A'+rand()%25;fprintf(myf,"%c”,c);printfC%cz,,c);}

fclose(myf);printf(〃\n\n");

if(fun(sfname,tfname))printfCSucceed!O;

elseprintf("Fail!”);

)

答案:【1】“”[2]fs[3]ft

本題的考核點(diǎn)是文件的讀寫(xiě)函數(shù)等。

題中第一個(gè)空填"r〃是文件的使用方式之一,其含義是為輸入打開(kāi)一個(gè)文件用于輸入。

題中第二個(gè)空填〃fs〃:此語(yǔ)句是設(shè)置循環(huán)退出條件,即判斷是否到文件末尾。

題中第三個(gè)空填〃ft〃:fputc函數(shù)功能是把一個(gè)字符寫(xiě)到磁盤(pán)文件上去。其一般調(diào)用形式為:

fputc(ch,fp);

其中ch是要輸出的字符,它可以是一個(gè)字符常量,也可以是一個(gè)字符變量。fp是文件指針變量。

7、給定程序中,函數(shù)fun的功能是:將自然數(shù)1?10以及它們

的平方根寫(xiě)到名為myfile3.txt的文本文件中,然后再順序讀出顯示在屏幕上。

請(qǐng)?jiān)诔绦虻南聞澗€(xiàn)處填入正確的內(nèi)容并把下劃線(xiàn)刪除,使程序得出正確的結(jié)果。

注意:源程序存放在考生文件夾下的BLANK1.C中。

不得增行或刪行,也不得更改程序的結(jié)構(gòu)!

^include<math.h>

#include<stdio.h>

intfun(char*fname)

{FILE*fp;inti,n;floatx;

if((fp=fopen(fname,〃w〃))=NULL)return0;

for(i=l;i<=10;i++)

/**********found**********/

fprintf(___1___,*%di,sqrt((double)i));

printf(,z\nSucceed!\n*);

/**********found**********/

—2_;

printf(/z\nThedatainfile:\n〃);

/**********found**********/

if((fp=fopen(__3,”:r〃))=NULL)

return0;

fscanf(fp,&n,&x);

while(!feof(fp))

{printf("%dn,x);fscanf(fp,&n,&x);}

fclose(fp);

return1;

)

main()

{charfname[]=z/myfile3.txt*;

fun(fname);

)

答案:[1]fp[2]fclose(fp)[3]fname

本題考核點(diǎn)為:文件的打開(kāi),關(guān)閉和讀寫(xiě)操作。

題中第一個(gè)空填〃fp〃:是向文件指針fp所指向的文件中寫(xiě)數(shù)據(jù)。

題中第二個(gè)空填〃fclose(fp)/:此語(yǔ)句是文件的關(guān)閉操作。

題中第三個(gè)空填〃fname":fopen函數(shù)用于文件的打開(kāi)操作,其調(diào)用形式?般為:fopen(文件名,使用文件方

式)。"fname〃為所要打開(kāi)的文件名。

8、給定程序的功能是調(diào)用fun函數(shù)建立班級(jí)通訊錄。通訊錄中記錄每位學(xué)生的編號(hào)、姓名和電話(huà)號(hào)碼。班級(jí)的

人數(shù)和學(xué)生的信息從鍵盤(pán)讀入,每個(gè)人的信息作為?個(gè)數(shù)據(jù)塊寫(xiě)到名為myfile5.dat的二進(jìn)制文件中。

請(qǐng)?jiān)诔绦虻南聞澗€(xiàn)處填入正確的內(nèi)容并把下劃線(xiàn)刪除,使程序得出正確的結(jié)果。

注意:源程序存放在考生文件夾卜.的BLANK1.C中。

不得增行或刪行,也不得更改程序的結(jié)構(gòu)!

#include<stdio.h>

#include<stdlib.h>

#defineN5

typedefstruct

{intnum;

charname[10];

chartel[10];

}STYPE;

voidcheck();

/**********found**********/

intfun(__1___*std)

6

/**********found**********/

___2___*fp;inti;

if((fp=fopen("myfile5.dat",〃wb"))二二NULL)

return(0);

printfC\nOutputdatatofile!\n");

for(i=0;i<N;i++)

/**********found**********/

fwrite(&std[i],sizeof(STYPE),1,___3___);

fclose(fp);

return(1);

)

main()

{STYPEs[10]={{1,“aaaaa","111111”},{2,"bbbbb","222222”},{3,〃ccccc〃,”333333〃),

{4,"ddddd","444444〃},{5,"eeeee","555555”}};

intk;

k=fun(s);

if(k=l)

{printf("Succeed!");check();}

else

printf("Fail!");

)

voidcheck()

{FILE*fp;inti;

STYPEs[10];

if((fp=fopen("myfile5.dat",〃rb"))二二NULL)

{printf("Fail!!\n");exit(0);}

printf(/z\nReadfileandoutputtoscreen:\n");

printf(z/\nnumname;

for(i=0;i<N;i++)

{fread(&s[i],sizeof(STYPE),1,fp);

printf(〃%6d%s%s\n*,s[i].num,s[i].name,s[i].tel);

)

fclose(fp);

)

答案:[1]STYPE[2]FILE[3]fp

本題考核點(diǎn)為結(jié)構(gòu)體和文件的操作等。

題中第?空填“STYPE〃:typedef可以用來(lái)聲明新的類(lèi)型名來(lái)代替已有的類(lèi)型名,此題用“STYPE〃來(lái)代替未命

名的結(jié)構(gòu)體。

題中第二空填“FILE〃:〃FILE〃關(guān)鍵字用于聲明文件指針。

題中第三空填〃fp〃:fwrite函數(shù)的?般調(diào)用形式為:

fwrite(buffer,size,count,fp);

其中buffer:是一個(gè)指針,是要輸出數(shù)據(jù)的地址;size:是要寫(xiě)的字節(jié)數(shù);count:要進(jìn)行讀寫(xiě)多少個(gè)size字節(jié)

的數(shù)據(jù)項(xiàng):fp:文件型指針。

9、程序通過(guò)定義學(xué)生結(jié)構(gòu)體變量,存儲(chǔ)了學(xué)生的學(xué)號(hào)、姓名和3門(mén)課的成績(jī)。所有學(xué)生數(shù)據(jù)均以二進(jìn)制方式輸

出到文件中。函數(shù)fun的功能是從形參filename所指的文件中讀入學(xué)生數(shù)據(jù),并按照學(xué)號(hào)從小到大排序后,再用

二進(jìn)制方式把排序后的學(xué)生數(shù)據(jù)輸出到filename所指的文件中,覆蓋原來(lái)的文件內(nèi)容。

請(qǐng)?jiān)诔绦虻南聞澗€(xiàn)處填入1E確的內(nèi)容并把下劃線(xiàn)刪除,使程序得出正確的結(jié)果。

注意:源程序存放在考生文件夾卜.的BLANKLC中。

不得增行或刪行,也不得更改程序的結(jié)構(gòu)!

#include<stdio.h>

^defineN5

typedefstructstudent{

longsno;

charname[10];

floatscore[3];

}STU;

voidfun(char*fi1ename)

{FILE*fp;inti,j;

STUs[N],t;

/**********found**********/

fp=fopen(filename,_1_);

fread(s,sizeof(STU),N,fp);

fclose(fp);

for(i=0;i<N-l;i++)

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

/**********found**********/

if(s[i].sno_2_)

{t=s[i];s[i]=s[j];s[j]=t;}

fp=fopen(filename,"wb");

/**********found**********/

_3_(s,sizeof(STU),N,fp);

fclose(fp);

)

main()

{STUt[N]={{10005,"ZhangSan",95,80,88},{10003,"LiSi",85,70,78),

{10002,"CaoKai",75,60,88},{10004,“FangFang”,90,82,87},

{10001,"MaChao,;91,92,77}},ss[N];

inti,j;FILE*fp;

fp=fopen("student,dat","wb〃);

fwrite(t,sizeof(STU),5,fp);

fclose(fp);

printf('\n\nTheoriginaldata:\n\n");

for(j=0;j<N;j++)

{printf(z,\nNo:%ldName:%-8sScores:",t[j].sno,t[j].name);

for(i=0;i<3;i++)printf(,z%6.2f”,t[j].score[i]);

printf("\n");

}

fun("student.dat〃);

printf(/z\n\nThedataaftersorting:\n\n〃);

fp=fopen("student,dat","rb〃);

fread(ss,sizeof(STU),5,fp);

fclose(fp);

for(j=0;j<N;j++)

{printfCAnNo:%ldName:%-8sScores:ss[j].sno,ss[j].name);

for(i=0;i<3;i++)printf(z/%6.2f〃,ss[j].score[i]);

printf("\n");

)

)

答案:[2]s[j].sno[3]fwrite

本題的考核點(diǎn)是結(jié)構(gòu)體類(lèi)型變量的定義和引用以及文件函數(shù)的應(yīng)用。

fopen函數(shù)的作用是打開(kāi)一個(gè)文件,在fun函數(shù)中為輸入打開(kāi)一個(gè)二進(jìn)制文件,所以第一個(gè)空填:〃rb〃或與此

語(yǔ)句功能相同的語(yǔ)句;利用嵌套循環(huán)語(yǔ)句按學(xué)號(hào)從小到大排序,所以第二個(gè)空填:>s[j].sno或與此語(yǔ)句功能相

同的語(yǔ)句;再用:進(jìn)制方式把排序后的數(shù)據(jù)輸出到指定文件中,fwrite函數(shù)的作用是往文件的當(dāng)前位置寫(xiě)入指定

字節(jié)的數(shù)據(jù)塊,所以第三個(gè)空填:fwrite。

字符串類(lèi):萍10—38瓢

10、給定程序中,函數(shù)fun的功能是:求出形參ss所指字符串?dāng)?shù)組中最長(zhǎng)字符串的長(zhǎng)度,其余字符串左邊用字

符*補(bǔ)齊,使其與最長(zhǎng)的字符串等長(zhǎng)。字符串?dāng)?shù)組中共有M個(gè)字符串,且串長(zhǎng)<N。

請(qǐng)?jiān)诔绦虻南聞澗€(xiàn)處填入正確的內(nèi)容并把下劃線(xiàn)刪除,使程序得出正確的結(jié)

果。

注意:源程序存放在考生文件夾卜?的BLANK1.C中。

不得增行或刪行,也不得更改程序的結(jié)構(gòu)!

#include<stdio.h>

#include<string.h>

^defineM5

#defineN20

voidfun(char(*ss)[N])

{inti,j,k=0,n,m,len;

for(i=0;i<M;i++)

{len=strlen(ss[i]);

if(i==0)n=len;

if(len>n){

/**********found**********/

n=len;_1____=i;

)

}

for(i=0;i<M;i++)

if⑴=k)

{m=n;

len=strlen(ss[i]);

/**********found**********/

for(j=___2___;j>=0;j—)

ss[i][m—]=ss[i][j];

8

for(j=0;j<n-len;j++)

/**********found**********/

―3—='*';

})

main()

{charss[M][N]={"shanghai","guangzhou","beijing","tianjing","cchongqing"};

inti;

printf(z/\nTheoriginalstringsare:\n");

for(i=0;i<M;i++)printf(z,%s\n,z,ss[i]);

printf(〃\n〃);

fun(ss);

printf(z/\nTheresult:\n/z);

for(i=0;i<M;i++)printf("%s\n”,ss[i]);

)

答案:[2]s[j].sno[3]fwrite

本題考杳的是字符串中字符的插入。

在fun函數(shù)中,第一個(gè)for循環(huán)的作用是求出所有字符串中,長(zhǎng)度最長(zhǎng)的字符串的長(zhǎng)度n,并記下此字符串在數(shù)

組中的下標(biāo)k,故第一空應(yīng)填k。在第二個(gè)for循環(huán)中,如果當(dāng)前字符串不是最長(zhǎng)字符串,則計(jì)算其長(zhǎng)度len,并將

從卜.標(biāo)0到len的字符向右移動(dòng)n-len位,故第二空為len;最后,再通過(guò)一個(gè)for循環(huán)語(yǔ)句在當(dāng)前字符串前面補(bǔ)充len-n

個(gè)⑻,故第三空應(yīng)為ss[i][j]或其等效形式。

11、下列給定的程序中,fun()函數(shù)的功能是:將p所指字符串中每個(gè)單詞的最后一個(gè)字母改成大寫(xiě)(這里的〃

單詞〃是指有空格隔開(kāi)的字符串)。例如,若輸入:

Iamastudenttotaketheexamination

則應(yīng)輸出:IaMAstudenTtOtakEthEexaminatioN

試題程序:

4include<conio.h>

#include<ctype.h>

#include<stdio.h>

^include<string.h>

voidfun(char*p)

(

intk=0;

for(;*p;p++)

if(k)

(

if(*p='')

{

1;

___2____=toupper(*(p-l));

}I-

else

k=1;

)

main()

{charchrstr[64];

intd;

printf(*\nPleaseenteranEnglishsentencewithin63letters:");

gets(chrstr);

d=strlen(chrstr);

chrstr[d]=,';

chrstr[d+l]=0;

printf('\nBoforechanging:\n%s〃,chrstr);

一3〃;

printf(^XnAfterchanging:\n%s/z,chrstr);

)

答案:【1】k=0[2]*(p-l)[3]fun(chrstr)

【解析】填空1:根據(jù)題目的意思,這里應(yīng)該是以變量k作為判斷標(biāo)志,如果標(biāo)志為1并且當(dāng)前指針指向空格

就應(yīng)該把標(biāo)志返回0,以便下一次檢測(cè)。

填空2:根據(jù)題目的意思,此處進(jìn)行的是將p所指單詞的最后?個(gè)字母改成大寫(xiě),但是此時(shí)p已經(jīng)循環(huán)到了單

詞后面的那個(gè)空格,所以應(yīng)該對(duì)P-1進(jìn)行操作。

填空3:由算法可以看?出,這里應(yīng)該是進(jìn)行函數(shù)調(diào)用,根據(jù)前面的子函數(shù)定義可以知道,參數(shù)是一個(gè)指向向字符

串的指針,所以應(yīng)該把數(shù)組的名字(也可以認(rèn)為是指向數(shù)組首地址的指針)作為參數(shù)。

12、str是一個(gè)由數(shù)字和字母字符組成的字符串,由變量num傳入字符串長(zhǎng)度。請(qǐng)補(bǔ)充函數(shù)fun(),該函數(shù)的

功能是:把字符串str中的數(shù)字字符轉(zhuǎn)換成數(shù)字并存放到整型數(shù)組bb中,函數(shù)返回?cái)?shù)組bb的長(zhǎng)度。

例如:str="Bcdl23e456hui890”,結(jié)果為:123456890。

注意:部分源程序給出如下。

請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的橫線(xiàn)上填入所編寫(xiě)的若干表達(dá)式或語(yǔ)句。

試題程序:

#include<stdio.h>

#defineN80

intbb[N];

intfun(chars[],intbb[],intnum)

(

inti,n=0;

for(i=0;i<num;i++)

(

if(_LU_)

(

bb[n]=[2];

n++;

)

)

return[3];

)

main()

{charstr[N];

intnum=0zn,i;

printf(nEnterastring:\nn);

gets(str);

while(str[num])

num++;

n=fun(str,bb,num);

printf(n\nbb=n);

for(i=0;i<n;i++)

printf(*'%dn,bb[i]);}

答案:【1]§[i]>=U&&s[i]v=,9'[2]s[i]-,0'【3】n

【解析】填空1:如果當(dāng)前字符的ASCII碼大于字符。的ASCH碼,而小于字符9的ASCII碼,則說(shuō)明當(dāng)前字

符是數(shù)字字符。填空2:將數(shù)字字符轉(zhuǎn)換為數(shù)字的方法是,用當(dāng)前數(shù)字字符的ASCH碼減去字符。的ASCH碼。填

空3:題目要求函數(shù)返回?cái)?shù)組bb的長(zhǎng)度,而變量n記錄了數(shù)字字符的個(gè)數(shù),也就是數(shù)組bb的長(zhǎng)度,所以函數(shù)應(yīng)該返

回n。

13、請(qǐng)補(bǔ)充函數(shù)fun(),該函數(shù)的功能是:把個(gè)整數(shù)轉(zhuǎn)換成字符串,并倒序保存在字符數(shù)組str中。例如:

當(dāng)n=13572468時(shí),str="8642753r'。

注意:部分源程序給出如下。

請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的橫線(xiàn)上填入所編寫(xiě)的若干表達(dá)式或語(yǔ)句。

試題程序:

#include<stdio.h>

#include<conio.h>

#defineN80

charstr[N];

voidfun(longintn)

{inti=0;

while([1])

{

str[i]=[2];

n/=10;

i++;

)

[3];

main()

{longintn=13572468;

clrscr();

printf(n***theorigialdata

printf(,,n=%ld,',n);

fun(n);

printf(n\n%sn,str);

答案:【1】n>0[2]n%10+'0'[3]str[i]=,\O,

【解析】填空1:while循環(huán)的執(zhí)行條件是n〉0,當(dāng)n等于0時(shí),說(shuō)明已經(jīng)將整數(shù)的各位數(shù)字都轉(zhuǎn)換為數(shù)字字符

10___________________________________________________________________________________________

并存入字符串中了。填空2:n對(duì)10求余,得到整數(shù)n的個(gè)位數(shù)字,在加上字符。的ASCII碼,得到對(duì)應(yīng)的數(shù)字字符,

并存入字符串str中。填空3:將整數(shù)轉(zhuǎn)換為字符串并倒序存放入字符數(shù)組str中后,還要在str最后加上字符串結(jié)

束標(biāo)記符

14、下列給定程序中,函數(shù)fun()的功能是:從字符串s中,刪除所有小寫(xiě)字母,c,。

試題程序:

1<stdio.h>

voidfun(char*s)

{inti,j;

for(i=j=0;_2__;i++)

if(s[i]!=fc*)

__3__;

s[j]=,\0T7

}

main()

{chars[80];

printf(n\nEnterastring:n);gets(s);

printf("Theoriginalstring:");puts(s);

fun(s);

printf("Thestringafterdeleted:“);

puts(s);

printf(”\n\n");

)

答案:【1】#indude[2]s[i]!='\0'[3]s[j++]=s[i]

【解析】填空1:由我們對(duì)C語(yǔ)言的掌握和學(xué)習(xí)知道,這是程序?qū)︻^文件的聲明,根據(jù)C語(yǔ)言的規(guī)定頭文件

要用關(guān)鍵字include來(lái)聲明,并用"#"開(kāi)始。

填空2:這里考查的是對(duì)循環(huán)結(jié)束語(yǔ)句的掌握和字符串的結(jié)束標(biāo)志的理解,我們知道字符串由V)'作為結(jié)束標(biāo)

志,由題意知,i一直增加到字符串結(jié)束,因此循環(huán)結(jié)束判斷語(yǔ)句使用s[i]!=W。

填空3:由本題選擇條件if(s[i]!=P)可知,如果字符串中的字符不是"c",則執(zhí)行循環(huán),根據(jù)題目的意思這句應(yīng)該

執(zhí)行的是s[j++]=s[i],這里考查了自加運(yùn)算符的靈活使用。

15、請(qǐng)補(bǔ)充main函數(shù),該函數(shù)的功能是:從?個(gè)字符串中截取前面若干個(gè)給定長(zhǎng)度的子字符串。其中,strl

指向原字符串,截取后的字符存放在str2所指的字符數(shù)組中,n中存放需截取的字符個(gè)數(shù)。

例如:當(dāng)strl="cdefghij”,然后輸入4,則str2="cdef'。

注意:部分源程序給出如下。

請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的橫線(xiàn)上填入所編寫(xiě)的若干表達(dá)式或語(yǔ)句。

試題程序:

#include<stdio.h>

#include<conio.h>

#defineLEN80

main()

{charstrl[LEN],str2[LEN];

intn,i;

clrscr();

printf("Enterthestring:\nH);

gets(strl);

printf(nEnterthepositionofthestring

deleted:");

scanf([1]);

for(i=0;i<n;i++)

【2】

str2[i]='\0,;

printf(HThenewstringis:%s\n",[3]);}

【答案】11】[2]str2[i]=strl[ih[3]str2

【解析】填空1:本題考查對(duì)標(biāo)準(zhǔn)輸入函數(shù)scanf()的調(diào)用格式,由后面的程序可以知道,變量n保存了要截

取的字符數(shù),注意在n前面不要忘了取址符,填空2:截取前n個(gè)字符,就是將字符串strl的前n個(gè)字符依次賦

給字符串slr2的前n個(gè)字符。填空3:本題考查對(duì)標(biāo)準(zhǔn)輸出函數(shù)prinlf()的調(diào)用格式,根據(jù)題意,應(yīng)輸出截取后的

字符串,即字符串str2.

16、給定程序的功能是判斷字符ch是否與串str中的某個(gè)字符相同;若相同,什么也不做,若不同,則插在串

的最后。

請(qǐng)?jiān)诔绦虻南聞澗€(xiàn)處填入正確的內(nèi)容并把下劃線(xiàn)刪除,使程序得出正確的結(jié)果。

注意:源程序存放在考生文件夾下的BLANK1.C中。

不得增行或刪行,也不得更改程序的結(jié)構(gòu)!

^include<stdio.h>

#include<string.h>

voidfun(char*str,charch)

{while(*str&&*str!=ch)str++;

/**********found**********/

if(*str___1___ch)

{str[0]=ch;

/**********found**********/

―2—=0;

)

)

main()

{chars[81],c;

printf(〃\nPleaseenterastring:\nz/);gets(s);

printf(〃\nPleaseenterthecharactertosearch:;

c=getcharO;

/**********found**********/

fun(___3___);

printf("\nTheresultis%s\n”,s);

)

答案:[11!=(21str[l][3]str2

本題著重考察考生對(duì)C語(yǔ)言中函數(shù)的調(diào)用以及?些簡(jiǎn)單算法的掌握情況。

題中第一空填〃!=":從題意得知,若字符ch與字符串str中的某個(gè)字符相同,什么也不做:若不同,則插在

str的最后。因此fun函數(shù)中先設(shè)置了一個(gè)循環(huán)從字符串str中尋找字符ch,如果找到則中斷循環(huán)并保留字符ch的

地址,否則?直循環(huán)到串尾。因此通過(guò)判斷*str的內(nèi)容即可判斷是否已找到字符ch。

題中第二個(gè)空填〃如果沒(méi)有找到字符ch,則在while循環(huán)后str指針指向串結(jié)束符0x00,此時(shí)應(yīng)將字

符ch寫(xiě)入這里并在下一地址寫(xiě)入一個(gè)串結(jié)束符0x00,所以應(yīng)該是=0;〃語(yǔ)句。

題中第三個(gè)空填〃s,c〃:此句是調(diào)用fun。函數(shù),括弧中是其實(shí)際參數(shù)。

17、給定程序的功能是將在字符串S中出現(xiàn)、而未在字符串t中出現(xiàn)的字符形成一個(gè)新的字符串放在U中,U中字

符按原字符串中字符順序排列,不去掉重復(fù)字符。

例如:當(dāng)$="112345",t="2467"時(shí),u中的字符串為T(mén)135”。

請(qǐng)?jiān)诔绦虻南聞澗€(xiàn)處填入正確的內(nèi)容并把下劃線(xiàn)刪除,使程序得出正確的結(jié)果。

注意:源程序存放在考生文件夾下的BLANK1.C中。

不得增行或刪行,也不得更改程序的結(jié)構(gòu)!

#include<stdio.h>

#include<string.h>

voidfun(char*s,char*t,char*u)

{inti,j,si,tl;

si=strlen(s);tl=strlen(t);

for(i=0;i<sl;i++)

{for(j=0;j<tl;j++)

/************found************/

if(s[i]==t[j])—1—;

if(j>=tl)

/************found************/

*u++=___2___;

)

/************found************/

—3—二'\0';

)

mainO

{chars[100],t[100],u[100];

printf("\nPleaseenterstrings:〃);scanf(〃%s",s);

printf(z,\nPleaseenterstringt:");scanf(〃%s〃,t);

fun(s,t,u);

printftheresultis:%s\n〃,u);

)

答案:[1]break[2]s[i][3]*u

本題考核點(diǎn)為字符串的查找,賦值操作。

題中第一空填"break;":break為跳出循環(huán)的語(yǔ)句。"if(s[i]=t[j])break;“語(yǔ)句是指當(dāng)s[i]=t[j],

即l[j]中的字符已經(jīng)在字符指針s[j]所指向的字符數(shù)組中存在時(shí),循環(huán)就結(jié)束。

題中第二空填"s[ir:"*u++=s[i];〃是將s[i]賦給*U,然后U加晨

題中第三空填〃*u":"*u='\0';〃,字符串的最后一個(gè)字符應(yīng)該是''0'的。

18、請(qǐng)補(bǔ)充函數(shù)fun(),該函數(shù)的功能是:把字符下標(biāo)為非素?cái)?shù)的字符從字符串str中刪除,把字符下標(biāo)為素

數(shù)的字符重新保存在字符串str中。字符串str從鍵盤(pán)輸入,其長(zhǎng)度作為參數(shù)傳入函數(shù)fun()。

例如,輸入“abcdefghijkl”,輸出“cdfhl”。

注意:部分源程序給出如下。

請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的橫線(xiàn)上填入所編寫(xiě)的若干表達(dá)式或語(yǔ)句。

試題程序:

#include<stdio.h>

12

#defineN80

voidfun(chars[],intn)

{

inti,j,k,flag;

for(i=0;i<n;i++)

(

if(i>D

s[k++]=s[i];

flag=l;

for([2];j<i&&flag;j++)

if(i%j==0)

(

flag=0;

[3];

)

}

s[k]=,\0';

)

main()

(

inti=0,strlen=0;

charstr[N];

clrscr();

printf(\nInputastring:\nu);

gets(str);

while(str[i]!=?\0?)

{

strlen++;

i++;

}

fun(str,strlen);

printf(displaystring***\n*');

puts(str);

)

【答案】【l】k=0[2]j=2[3]k-

【解析】填空1:變量k聲明時(shí)沒(méi)有初始化,所以要在使用前初始化為0。填空2:如果?個(gè)數(shù)能被除了1和其

自身之外的數(shù)整除,即余數(shù)為0,則這個(gè)數(shù)不是素?cái)?shù)。所以除數(shù)j從2開(kāi)始取數(shù)。填空3:如果當(dāng)前字符的下標(biāo)為小

素?cái)?shù),則應(yīng)將此字符刪除,所以變量k減1,使卜一一個(gè)字符覆蓋它,達(dá)到刪除的目的。

19.給定程序的功能是把s串中所有的字符前移一個(gè)位置,申中的第一個(gè)字符移到最后。

例如:s串中原有的字符串為:Mn.123xyZ,則調(diào)用該函數(shù)后,s串中的內(nèi)容為:n.123xyZM。

請(qǐng)?jiān)诔绦虻南聞澗€(xiàn)處填入正確的內(nèi)容并把下劃線(xiàn)刪除,使程序得出正確的結(jié)果。

注意:源程序存放在考生文件夾下的BLANK1.C中。

不得增行或刪行,也不得更改程序的結(jié)構(gòu)!

#include<stdio.h>

ttdefineN81

fun(char*s)

{charb[N];

fprintf(b,s+1,*s);

/**************found**************/

strcpy(__1___);

)

main()

{chara[N];

printf("Enterastring:);gets(a);

printf("Theoriginalstringis:);puts(a);

/**************found**************/

fun(__2…);

printf("Thestringaftermodified:");

/**************found**************/

__3___(a);

)

答案:【1]a[2]s,b[3]puts

本題的考核點(diǎn)是C語(yǔ)言中循環(huán)語(yǔ)句的使用。

提示思路:先保存原字符串的第一個(gè)字符,然后將后面的字符依次向前移一位,最后將原字符串的第一個(gè)

字符添加到新字符串的最后。

20、請(qǐng)補(bǔ)充函數(shù)fun(),該函數(shù)的功能是:按P'到,9,統(tǒng)計(jì)一個(gè)字符串中的奇數(shù)數(shù)字字符各自出現(xiàn)的次數(shù),

結(jié)果保存在數(shù)組num中。注意:不能使用字符串庫(kù)函數(shù)。

例如:輸入“x=112385713.456+0.909*bc”,結(jié)果為:1=3,3=2,5=2,7=1,9=2。

注意:部分源程序給出如下。

請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的橫線(xiàn)上填入所編寫(xiě)的若干表達(dá)式或語(yǔ)句。

試題程序:

#include<stdio.h>

#defineN1000

voidfun(char*tt,intnum[])

{inti,j;

intbb[10];

char*p=tt;

for(i=0;i<10;i++)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論