版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 PAGE 2 第306頁(yè)考生注意事項(xiàng)1、本資料匯集了2009年及以前所有的全國(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ì)歸類,望各位學(xué)員能夠舉一反三,在短時(shí)間內(nèi)提高等級(jí)應(yīng)試能力。4、機(jī)試考試有三道大題,第一題是程序填空,占分30分,第二題是程序修改,占分30分,第三題是程序編寫,占分40分,整個(gè)上
2、機(jī)考試分值100分,考試時(shí)間60分鐘。5、上機(jī)考試的題目每年變化不大,考生只要平時(shí)基礎(chǔ)知識(shí)扎實(shí),在考前強(qiáng)化時(shí)多做些上機(jī)考試模擬題,見多識(shí)廣,上機(jī)考試時(shí)就會(huì)遇到跟自己考前上機(jī)練習(xí)極其類似的題目,從而順利通過(guò)考試。6、考試中計(jì)算機(jī)出現(xiàn)故障、死機(jī)、死循環(huán)、電源故障等異常情況(即無(wú)法進(jìn)行正常考試時(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í)掌握的打開文件的方法在考生目錄下打開每一道題所對(duì)應(yīng)的程序文件,然后再做題,做題的過(guò)程應(yīng)注意保存文件。8、上機(jī)考試做每一道題
3、時(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)和填空下劃線刪除,防止編譯出錯(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)編寫;(2)所編寫的被調(diào)用的函數(shù)要與調(diào)用函數(shù)保持和諧統(tǒng)一,符合被調(diào)用與調(diào)用的關(guān)系。第一部分 程序填空題字符類:第1-2題1、函數(shù)fun的功能是進(jìn)行數(shù)字字符轉(zhuǎn)換。
4、若形參ch中是數(shù)字字符09,則0轉(zhuǎn)換成9,1轉(zhuǎn)換成8,2轉(zhuǎn)換成7,9轉(zhuǎn)換成0;若是其它字符則保持不變;并將轉(zhuǎn)換后的結(jié)果作為函數(shù)值返回。請(qǐng)?jiān)诔绦虻南聞澗€處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。注意:源程序存在考生文件夾下的BLANK1.C中。不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#include /*found*/_1_ fun(char ch)/*found*/ if (ch=0 & _2_)/*found*/ return 9- (ch- _3_ ); return ch ;main() char c1, c2; printf(nThe result :n); c1=2; c2
5、 = fun(c1); printf(c1=%c c2=%cn, c1, c2); c1=8; c2 = fun(c1); printf(c1=%c c2=%cn, c1, c2); c1=a; c2 = fun(c1); printf(c1=%c c2=%cn, c1, c2);答案: 【1】char【2】ch=9 【3】0由主函數(shù)中的語(yǔ)句c2=fun(c1);知:函數(shù)fun的返回類型為字符,故第一空應(yīng)填char;在題面中要求對(duì)數(shù)字字符進(jìn)行轉(zhuǎn)換,故第二空的目的是判斷字符ch是否為一數(shù)字字符,即ch是否在09之間故第二空應(yīng)填ch=9或其等效形式;第三空處語(yǔ)句的目的是返回轉(zhuǎn)換后的結(jié)果,即返回一字
6、符,其所對(duì)應(yīng)的數(shù)字與轉(zhuǎn)換前字符所對(duì)應(yīng)的數(shù)字的和為9,故第三空應(yīng)填0或其等效形式。2、給定程序的功能是將大寫字母轉(zhuǎn)換為對(duì)應(yīng)小寫字母之后的第五個(gè)字母;若小寫字母為vz,使小寫字母的值減21。轉(zhuǎn)換后的小寫字母作為函數(shù)值返回。例如,若形參是字母A,則轉(zhuǎn)換為小寫字母f;若形參是字母W,則轉(zhuǎn)換為小寫字母b。#include #include char fun(char c) if( c=A & c=a & c=v&c=z) c=c-21;/*found*/ return _2_ ;main() char c1,c2; printf(nEnter a letter(A-Z): ); c1=getchar()
7、; if( isupper( c1 ) ) /*found*/ c2=fun( _3_); printf(nnThe letter %c change to %cn, c1,c2); else printf(nEnter (A-Z)!n);答案: 【1】5【2】c 【3】c1【解析】:本題著重考察考生對(duì)C語(yǔ)言中一些簡(jiǎn)單算法的掌握情況。先判斷輸入的字母是否是大寫字母,若是大寫字母,將其轉(zhuǎn)化為相應(yīng)的小寫字母,方法是該大寫字母對(duì)應(yīng)的ASCII碼值加上32就是其小寫字母的ASCII碼值,再判斷該小寫字母是否是au,若是轉(zhuǎn)化為其后的第5個(gè)字母。若該小寫字母是vz,則將其ACSII碼值減去21,轉(zhuǎn)換后的小
8、寫字母作為函數(shù)值返回。 題中第一個(gè)空填5:C語(yǔ)言中,字母從az或AZ的ASCII碼值是依次遞增的,所以將其轉(zhuǎn)換為其后的第5個(gè)字母應(yīng)該是c=c+5;或相同作用的語(yǔ)句。 題中第二個(gè)空填c:通過(guò)return語(yǔ)句將被調(diào)用函數(shù)中c的值帶回主調(diào)函數(shù)中去。題中第三個(gè)空填c1:此句是調(diào)用fun()函數(shù),括弧中是其實(shí)際參數(shù)。遞歸類:第34題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。#include long fun(int g) switch(g) cas
9、e 0: return 0; case 1: _1_: return 1; return (_2_);main() long fib; int n; printf(Input n:);scanf(%d,_3_);printf(n=%dn,n); fib=fun(n); printf(fib=%dnn,fib); 答案:【1】case 2【2】fun(g-1)+fun(g-2)【3】&n【解析】填空1:根據(jù)題目的意思,這里應(yīng)該是對(duì)于值為1和2的時(shí)候的處理,注意case語(yǔ)句常量后應(yīng)用的是冒號(hào),而且不同的case對(duì)應(yīng)同一個(gè)值可以連續(xù)寫(像題目中那樣)。填空2:根據(jù)題目的意思,此處是求值的遞歸部分,由
10、遞推公式可以很容易的得到答案的形式,對(duì)于這種簡(jiǎn)單的遞歸考生一定要掌握。填空3:由算法可以看出,此處是輸入數(shù)列的項(xiàng)數(shù)n,使用了scanf函數(shù),其參數(shù)應(yīng)該是變量的地址,即使用符號(hào)& 。4、下列給定程序中,函數(shù)fun()的功能是:應(yīng)用遞歸算法求某數(shù)a的平方根。求平方根的迭代公式如下: 。例如,2的平方根為1.414214。#include #include _1_ fun(double a,double x0) double x1,y; _2_; if(fabs(x1-x0)=0.00001) _3_; else y=x1; return y;main() double x; printf(Ente
11、r x: ); scanf(%lf,&x); printf(The square root of %lf is %1fn,x, fun(x,1.0);答案: 【1】double【2】x1=(x0+a/x0)/2.0【3】y=fun(a,x1)【解析】填空1:這里要問(wèn)的是函數(shù)的類型,由主函數(shù)main()對(duì)函數(shù)的調(diào)用可以得到函數(shù)的類型是double型的,當(dāng)然也可以由函數(shù)的返回值語(yǔ)句得到。填空2:我們看到在下一條語(yǔ)句中已經(jīng)開始對(duì)變量x1的值進(jìn)行比較了,所以這里要對(duì)x1進(jìn)行賦值,由題意可知x1=(x0+a/x0)/2.0。填空3:用C語(yǔ)言求平方根的方法一般有兩種經(jīng)典的算法,它們分別是迭代法和遞歸法,本
12、題要求用遞歸法。該程序采用了if語(yǔ)句,程序的含義是當(dāng)?shù)Y(jié)果差小于誤差時(shí)進(jìn)行循環(huán)。文件讀寫類:第59 題5、給定程序的功能是:從鍵盤輸入若干行文件(每行不超過(guò)80個(gè)字符),寫到文件myfile4.txt中,用-1作為字符串輸入結(jié)束的標(biāo)志。然后將文件的內(nèi)容讀出顯示在屏幕上。文件的讀寫分別由自定義函數(shù)ReadText和WriteText實(shí)現(xiàn)。#include #include #include void WriteText(FILE *);void ReadText(FILE *);FILE *fp; main() if(fp=fopen(myfile4.txt,w)=NULL) printf(
13、open fail!n); exit(0); WriteText(fp); fclose(fp); if(fp=fopen(myfile4.txt,r)=NULL) printf( open fail!n); exit(0); ReadText(fp); fclose(fp);/*found*/void WriteText(FILE _1_ ) char str81; printf(nEnter string with -1 to end :n); gets(str); while(strcmp(str,-1)!=0) /*found*/ fputs( _2_ ,fw); fputs(n,fw
14、); gets(str); void ReadText(FILE *fr) char str81; printf(nRead file and output to screen :n); fgets(str,81,fr); while( !feof(fr) ) /*found*/ printf(%s,_3_); fgets(str,81,fr); 答案: 【1】*fw【2】str【3】str【解析】本題考核點(diǎn)為:文件的讀寫函數(shù)等。題中第一個(gè)空填*fw:fw是一個(gè)文件指針,從鍵盤上讀入數(shù)據(jù),輸入其所指向的文件中。 題中第二空填str:fputs函數(shù)向文件中寫數(shù)據(jù),其函數(shù)原型為:fputs(ch,
15、fp) 其中ch是要輸出的字符,它可以是一個(gè)字符常量,也可以是一個(gè)字符變量。fp是文件指針變量。 題中第三個(gè)空填str:printf函數(shù)的一般格式為: printf(格式控制,輸出表列) 1、格式控制是用雙引號(hào)括起來(lái)的字符串,也稱轉(zhuǎn)換控制字符串,它包括兩種信息: 格式說(shuō)明:由%和格式字符組成,如%d,%f等。它的作用是將輸出的數(shù)據(jù)轉(zhuǎn)換為指定的格式輸出。格式說(shuō)明總是由%字符開始的。普通字符,即需要原樣輸出的字符。 2、輸出表列:是需要輸出的一些數(shù)據(jù),可以是表達(dá)式。6、給定程序的功能是:調(diào)用函數(shù)fun將指定源文件中的內(nèi)容復(fù)制到指定的目標(biāo)文件中,復(fù)制成功時(shí)函數(shù)返回值是1,失敗時(shí)返回值為0。在復(fù)制的過(guò)
16、程中,把復(fù)制的內(nèi)容輸出到終端屏幕。主函數(shù)中源文件名放在變量sfname中,目標(biāo)文件名放在變量tfname中。 #include #include int fun(char *source, char *target) FILE *fs,*ft; char ch;/*found*/ if(fs=fopen(source, _1_)=NULL) return 0; if(ft=fopen(target, w)=NULL) return 0; printf(nThe data in file :n); ch=fgetc(fs);/*found*/ while(!feof(_2_) putchar(
17、ch );/*found*/ fputc(ch,_3_); ch=fgetc(fs); fclose(fs); fclose(ft); printf(nn); return 1;main() char sfname20 =myfile1,tfname20=myfile2; FILE *myf; int i; char c; myf=fopen(sfname,w); printf(nThe original data :n); for(i=1; i30; i+) c=A+rand()%25;fprintf(myf,%c,c); printf(%c,c); fclose(myf);printf(n
18、n); if (fun(sfname, tfname) printf(Succeed!); else printf(Fail!);答案: 【1】“r”【2】fs【3】ft本題的考核點(diǎn)是文件的讀寫函數(shù)等。 題中第一個(gè)空填r:r是文件的使用方式之一,其含義是為輸入打開一個(gè)文件用于輸入。 題中第二個(gè)空填fs:此語(yǔ)句是設(shè)置循環(huán)退出條件,即判斷是否到文件末尾。 題中第三個(gè)空填ft:fputc函數(shù)功能是把一個(gè)字符寫到磁盤文件上去。其一般調(diào)用形式為: fputc(ch,fp);其中ch是要輸出的字符,它可以是一個(gè)字符常量,也可以是一個(gè)字符變量。fp是文件指針變量。7、給定程序中,函數(shù)fun的功能是:將自然數(shù)
19、110以及它們的平方根寫到名為myfile3.txt的文本文件中,然后再順序讀出顯示在屏幕上。 #include #include int fun(char *fname ) FILE *fp; int i,n; float x; if(fp=fopen(fname, w)=NULL) return 0; for(i=1;i=10;i+)/*found*/ fprintf(_1_,%d %fn,i,sqrt(double)i); printf(nSucceed!n);/*found*/ _2_; printf(nThe data in file :n); /*found*/ if(fp=fop
20、en(_3_,r)=NULL) return 0; fscanf(fp,%d%f,&n,&x); while(!feof(fp) printf(%d %fn,n,x); fscanf(fp,%d%f,&n,&x); fclose(fp); return 1;main() char fname=myfile3.txt; fun(fname);答案: 【1】fp 【2】fclose(fp) 【3】fname 本題考核點(diǎn)為:文件的打開,關(guān)閉和讀寫操作。 題中第一個(gè)空填fp:是向文件指針fp所指向的文件中寫數(shù)據(jù)。 題中第二個(gè)空填fclose(fp);:此語(yǔ)句是文件的關(guān)閉操作。 題中第三個(gè)空填fname
21、:fopen函數(shù)用于文件的打開操作,其調(diào)用形式一般為:fopen(文件名,使用文件方式)。fname為所要打開的文件名。8、給定程序的功能是調(diào)用fun函數(shù)建立班級(jí)通訊錄。通訊錄中記錄每位學(xué)生的編號(hào)、姓名和電話號(hào)碼。班級(jí)的人數(shù)和學(xué)生的信息從鍵盤讀入,每個(gè)人的信息作為一個(gè)數(shù)據(jù)塊寫到名為myfile5.dat的二進(jìn)制文件中。 #include #include #define N 5typedef struct int num; char name10; char tel10;STYPE;void check();/*found*/int fun(_1_ *std)/*found*/ _2_ *fp
22、; int i; if(fp=fopen(myfile5.dat,wb)=NULL) return(0); printf(nOutput data to file !n); for(i=0; iN; i+)/*found*/ fwrite(&stdi, sizeof(STYPE), 1, _3_); fclose(fp); return (1);main() STYPE s10= 1,aaaaa,111111,2,bbbbb,222222,3,ccccc,333333, 4,ddddd,444444,5,eeeee,555555; int k; k=fun(s); if (k=1) print
23、f(Succeed!); check(); else printf(Fail!);void check() FILE *fp; int i; STYPE s10; if(fp=fopen(myfile5.dat,rb)=NULL) printf(Fail !n); exit(0); printf(nRead file and output to screen :n); printf(n num name teln); for(i=0; iN; i+) fread(&si,sizeof(STYPE),1, fp); printf(%6d %s %sn,si.num,,si.tel)
24、; fclose(fp);答案: 【1】STYPE 【2】FILE 【3】fp本題考核點(diǎn)為結(jié)構(gòu)體和文件的操作等。 題中第一空填STYPE:typedef可以用來(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:是要寫的字節(jié)數(shù);count:要進(jìn)行讀寫多少個(gè)size字節(jié)的數(shù)據(jù)項(xiàng);fp:文件型指針。9、程序通過(guò)定義學(xué)生結(jié)構(gòu)體變量,存儲(chǔ)了學(xué)生的學(xué)號(hào)、姓名
25、和3門課的成績(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)容。 #include #define N 5typedef struct student long sno; char name10; float score3; STU;void fun(char *filename) FILE *fp; int i, j; STU sN, t;/*found*/ fp = fopen(filename, _1_); fread
26、(s, sizeof(STU), N, fp); fclose(fp); for (i=0; iN-1; i+) for (j=i+1; jN; j+)/*found*/ if (si.sno _2_) t = si; si = sj; sj = t; fp = fopen(filename, wb);/*found*/ _3_(s, sizeof(STU), N, fp); fclose(fp);main() STU tN= 10005,ZhangSan, 95, 80, 88, 10003,LiSi, 85, 70, 78, 10002,CaoKai, 75, 60, 88, 10004,
27、FangFang, 90, 82, 87, 10001,MaChao, 91, 92, 77, ssN; int i,j; FILE *fp; fp = fopen(student.dat, wb); fwrite(t, sizeof(STU), 5, fp); fclose(fp); printf(nnThe original data :nn); for (j=0; jN; j+) printf(nNo: %ld Name: %-8s Scores: ,tj.sno, ); for (i=0; i3; i+) printf(%6.2f , tj.scorei); printf
28、(n); fun(student.dat); printf(nnThe data after sorting :nn); fp = fopen(student.dat, rb); fread(ss, sizeof(STU), 5, fp); fclose(fp); for (j=0; jN; j+) printf(nNo: %ld Name: %-8s Scores: ,ssj.sno, ); for (i=0; isj.sno或與此語(yǔ)句功能相同的語(yǔ)句;再用二進(jìn)制方式把排序后的數(shù)據(jù)輸出到指定文件中,fwrite函數(shù)的作用是往文件的當(dāng)前位置寫入指定字節(jié)的數(shù)據(jù)塊,所以第三個(gè)空填:f
29、write。字符串類:第1038題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)诔绦虻南聞澗€處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。 不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#include #include #define M 5#define N 20void fun(char (*ss)N) int i, j, k=0, n, m, len; for(i=0; in) /*found*/ n=len; _1_=i; for(i=0; i=0;
30、j-) ssim-=ssij; for(j=0; jn-len; j+)/*found*/ _3_=*; main() char ssMN=shanghai,guangzhou,beijing,tianjing,cchongqing; int i; printf(nThe original strings are :n); for(i=0; iM; i+) printf(%sn,ssi); printf(n); fun(ss); printf(nThe result:n); for(i=0; iM; i+) printf(%sn,ssi);答案: 【1】“rb” 【2】sj.sno 【3】fw
31、rite本題考查的是字符串中字符的插入。 在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)為ssij或其等效形式。11、下列給定的程序中,fun()函數(shù)的功能是:將p所指字符串中每個(gè)單詞的最后一個(gè)字母改成大寫(這里的單詞是指有空格隔開的字符串)。例如,若輸入:I am a student to tak
32、e the examination則應(yīng)輸出:I aM A studenT tO takE thE examinatioN試題程序:#include #include #include #include void fun(char *p) int k=0; for ( ;*p;p+) if (k) if (*p= ) _1_; _2_=toupper(*(p-1); else k=1;main()char chrstr64; int d; printf(nPlease enter an English sentence within 63 letters: ); gets(chrstr); d=
33、strlen(chrstr); chrstrd= ; chrstrd+1=0; printf(nBofore changing:n %s,chrstr); _3_; printf(nAfter changing:n %s,chrstr);答案:【1】k=0【2】*(p-1)【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è)字母改成大寫,但是此時(shí)p已經(jīng)循環(huán)到了單詞后面的那個(gè)空格,所以應(yīng)該對(duì)p-1進(jìn)行操作。填空3:由算法可以看出,這
34、里應(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=“Bcd123e456hui890”,結(jié)果為:123456890。注意:部分源程序給出如下。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的橫線上填入所編寫的若干表達(dá)式或語(yǔ)句。試題程序:#include#define N
35、80int bbN;int fun(char s,int bb,int num) int i,n=0; for(i=0;inum;i+) if(【1】)bbn=【2】;n+; return 【3】;main() char strN; int num=0,n,i; printf(Enter a string:n); gets(str); while(strnum)num+; n=fun(str,bb,num); printf(nbb= ); for(i=0;i= 0 &si= 9【2】si- 0【3】n【解析】填空1:如果當(dāng)前字符的ASCII碼大于字符0的ASCII碼,而小于字符9的ASCII碼
36、,則說(shuō)明當(dāng)前字符是數(shù)字字符。填空2:將數(shù)字字符轉(zhuǎn)換為數(shù)字的方法是,用當(dāng)前數(shù)字字符的ASCII碼減去字符0的ASCII碼。填空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=“86427531”。注意:部分源程序給出如下。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的橫線上填入所編寫的若干表達(dá)式或語(yǔ)句。試題程序:#include#include#define N 80char strN
37、;void fun(long int n) int i=0; while(【1】) stri=【2】;n/=10;i+; 【3】;main() long int n=13572468; clrscr(); printf(* the origial data *n); printf(n=%ld,n); fun(n); printf(n%s,str);答案:【1】n0【2】n%10+0【3】stri= 0【解析】填空1:while循環(huán)的執(zhí)行條件是n0,當(dāng)n等于0時(shí),說(shuō)明已經(jīng)將整數(shù)的各位數(shù)字都轉(zhuǎn)換為數(shù)字字符并存入字符串中了。填空2:n對(duì)10求余,得到整數(shù)n的個(gè)位數(shù)字,在加上字符0的ASCII碼,得到
38、對(duì)應(yīng)的數(shù)字字符,并存入字符串str中。填空3:將整數(shù)轉(zhuǎn)換為字符串并倒序存放入字符數(shù)組str中后,還要在str最后加上字符串結(jié)束標(biāo)記符0。14、下列給定程序中,函數(shù)fun()的功能是:從字符串s中,刪除所有小寫字母c。試題程序:_1_void fun(char *s)int i, j; for(i=j=0;_2_;i+) if(si!= c) _3_; sj=0;main() char s80; printf(nEnter a string: ); gets(s); printf(The original string: ); puts(s); fun(s); printf(The string
39、 after deleted: ); puts(s); printf(nn ); 答案:【1】#include 【2】si!= 0【3】sj+=si【解析】填空1:由我們對(duì)語(yǔ)言的掌握和學(xué)習(xí)知道,這是程序?qū)︻^文件的聲明,根據(jù)語(yǔ)言的規(guī)定頭文件要用關(guān)鍵字include來(lái)聲明,并用#開始。填空2:這里考查的是對(duì)循環(huán)結(jié)束語(yǔ)句的掌握和字符串的結(jié)束標(biāo)志的理解,我們知道字符串由0作為結(jié)束標(biāo)志,由題意知,i一直增加到字符串結(jié)束,因此循環(huán)結(jié)束判斷語(yǔ)句使用si!= 0。填空3:由本題選擇條件if(si!=c)可知,如果字符串中的字符不是c,則執(zhí)行循環(huán),根據(jù)題目的意思這句應(yīng)該執(zhí)行的是sj+=si,這里考查了自加運(yùn)算符
40、的靈活使用。15、請(qǐng)補(bǔ)充main函數(shù),該函數(shù)的功能是:從一個(gè)字符串中截取前面若干個(gè)給定長(zhǎng)度的子字符串。其中,str1指向原字符串,截取后的字符存放在str2所指的字符數(shù)組中,n中存放需截取的字符個(gè)數(shù)。例如:當(dāng)str1=“cdefghij”,然后輸入4,則str2=“cdef”。注意:部分源程序給出如下。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的橫線上填入所編寫的若干表達(dá)式或語(yǔ)句。試題程序:#include #include#define LEN 80main() char str1LEN,str2LEN; int n,i; clrscr(); printf(Enter
41、the string:n); gets(str1); printf(Enter the position of the string deleted:); scanf(【1】); for(i=0;in;i+)【2】 str2i=0; printf(The new string is:%sn,【3】);【答案】【1】%d,&n【2】str2i=str1i;【3】str2【解析】填空1:本題考查對(duì)標(biāo)準(zhǔn)輸入函數(shù)scanf()的調(diào)用格式,由后面的程序可以知道,變量n保存了要截取的字符數(shù),注意在n前面不要忘了取址符 &。填空2:截取前n個(gè)字符,就是將字符串str1的前n個(gè)字符依次賦給字符串str2的前n
42、個(gè)字符。填空3:本題考查對(duì)標(biāo)準(zhǔn)輸出函數(shù)printf()的調(diào)用格式,根據(jù)題意,應(yīng)輸出截取后的字符串,即字符串str2。16、給定程序的功能是判斷字符ch是否與串str中的某個(gè)字符相同;若相同,什么也不做,若不同,則插在串的最后。 #include #include void fun(char *str, char ch ) while ( *str & *str != ch ) str+;/*found*/ if ( *str _1_ ch ) str 0 = ch;/*found*/ _2_ = 0; main( ) char s81, c ; printf( nPlease enter a
43、string:n ); gets ( s ); printf (n Please enter the character to search : ); c = getchar();/*found*/ fun(_3_) ; printf( nThe result is %sn, s);答案: 【1】!=【2】str1【3】str2本題著重考察考生對(duì)C語(yǔ)言中函數(shù)的調(diào)用以及一些簡(jiǎn)單算法的掌握情況。 題中第一空填!=:從題意得知,若字符ch與字符串str中的某個(gè)字符相同,什么也不做;若不同,則插在str的最后。因此fun函數(shù)中先設(shè)置了一個(gè)循環(huán)從字符串str中尋找字符ch,如果找到則中斷循環(huán)并保留字符c
44、h的地址,否則一直循環(huán)到串尾。因此通過(guò)判斷*str的內(nèi)容即可判斷是否已找到字符ch。 題中第二個(gè)空填str1:如果沒(méi)有找到字符ch,則在while循環(huán)后str指針指向串結(jié)束符0 x00,此時(shí)應(yīng)將字符ch寫入這里并在下一地址寫入一個(gè)串結(jié)束符0 x00,所以應(yīng)該是str1 = 0;語(yǔ)句。題中第三個(gè)空填s,c:此句是調(diào)用fun()函數(shù),括弧中是其實(shí)際參數(shù)。17、給定程序的功能是將在字符串s中出現(xiàn)、而未在字符串t中出現(xiàn)的字符形成一個(gè)新的字符串放在u中,u中字符按原字符串中字符順序排列,不去掉重復(fù)字符。 例如:當(dāng)s=112345,t=2467時(shí),u中的字符串為1135。 #include #includ
45、e void fun (char *s,char *t, char *u) int i, j, sl, tl; sl = strlen(s); tl = strlen(t); for (i=0; isl; i+) for (j=0; j=tl)/*found*/ *u+ = _2_; /*found*/ _3_ = 0;main() char s100, t100, u100; printf(nPlease enter string s:); scanf(%s, s); printf(nPlease enter string t:); scanf(%s, t); fun(s, t, u); p
46、rintf(the result is: %sn, u);答案: 【1】break 【2】si 【3】*u本題考核點(diǎn)為字符串的查找,賦值操作。 題中第一空填break;:break為跳出循環(huán)的語(yǔ)句。 if (si = tj) break;語(yǔ)句是指當(dāng)si = tj,即tj中的字符已經(jīng)在字符指針sj所指向的字符數(shù)組中存在時(shí),循環(huán)就結(jié)束。 題中第二空填si:*u+ = si;是將si賦給*u,然后u加1。題中第三空填*u:*u=0;,字符串的最后一個(gè)字符應(yīng)該是0的。18、請(qǐng)補(bǔ)充函數(shù)fun(),該函數(shù)的功能是:把字符下標(biāo)為非素?cái)?shù)的字符從字符串str中刪除,把字符下標(biāo)為素?cái)?shù)的字符重新保存在字符串str中
47、。字符串str從鍵盤輸入,其長(zhǎng)度作為參數(shù)傳入函數(shù)fun()。例如,輸入“abcdefghijkl”,輸出“cdfhl”。注意:部分源程序給出如下。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的橫線上填入所編寫的若干表達(dá)式或語(yǔ)句。試題程序:#include #define N 80void fun(char s,int n) int i, j, k, flag; 【1】; for(i=0; i1)sk+=si;flag=1;for(【2】; ji&flag; j+)if(i%j=0)flag=0;【3】; sk=0;main() int i=0,strlen=0; char st
48、rN; clrscr(); printf(n Input a string:n); gets(str); while(stri!=0) strlen+;i+; fun(str, strlen); printf(n* display string *n); puts(str); 【答案】【1】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開始取數(shù)。填空3:如果當(dāng)前字符的下標(biāo)為非素?cái)?shù),則應(yīng)將此字符刪除,所以變量k減1,使下一個(gè)字符覆蓋它,達(dá)到刪除的目的。
49、19、給定程序的功能是把s串中所有的字符前移一個(gè)位置,串中的第一個(gè)字符移到最后。 例如:s串中原有的字符串為:Mn.123xyZ,則調(diào)用該函數(shù)后,s串中的內(nèi)容為:n.123xyZM。 #include #define N 81fun ( char *s ) char bN ; fprintf(b, %s%c, s + 1, *s) ;/*found*/ strcpy(_1_) ;main( ) char a N ; printf ( Enter a string : ); gets ( a ); printf ( The original string is : ); puts( a );/*
50、found*/ fun ( _2_ ); printf ( The string after modified : );/*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ù)的功能是:按0到9統(tǒng)計(jì)一個(gè)字符串中的奇數(shù)數(shù)字字符各自出現(xiàn)的次數(shù),結(jié)果保存在數(shù)組num中。注意:不能使用字符串庫(kù)函數(shù)。例如:輸入“x=112385713.456+0.909*bc”,結(jié)果為:13,32,52
51、,71,92。注意:部分源程序給出如下。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的橫線上填入所編寫的若干表達(dá)式或語(yǔ)句。試題程序:#include#define N 1000void fun(char *tt,int num) int i,j; int bb10; char *p=tt; for(i=0;i=0&*p=9)【2】;p+; for(i=1,j=0;i10;i=i+2,j+)【3】;main() char strN; int num10,k; printf(nPlease enter a char string:); gets(str); printf(n*T
52、he original string*n); puts(str); fun(str,num); printf(n*The number of letter*n); for(k=0;k5;k+) printf(n);printf(%d=%d,2*k+1,numk); printf(n); return;【答案】【1】*p【2】bb*p-0+【3】numj=bbi【解析】填空1:通過(guò)移動(dòng)指針p,指向字符串tt中的各個(gè)字符,當(dāng)指針p所指的字符為0時(shí),即指向字符串tt的最后一個(gè)字符,while循環(huán)結(jié)束。填空2:將字符串中的數(shù)字字符0到9的個(gè)數(shù)都保存在數(shù)組bb10中。*p-0實(shí)現(xiàn)將字符0的個(gè)數(shù)保存在bb
53、0中,將字符1的個(gè)數(shù)保存在bb1中,依此類推,直到將字符9的個(gè)數(shù)保存在bb9中。填空3:由于奇數(shù)數(shù)字字符的個(gè)數(shù)存于bb1、bb3、bb5、bb7、bb9中,所以for循環(huán)的目的是將這些元素分別賦給num0、num1、num2、num3、num4。21、下列給定程序中,函數(shù)fun()的功能是:從N個(gè)字符串中找出最長(zhǎng)的那個(gè)串,并將其地址作為函數(shù)值返回。各字符串在主函數(shù)中輸入,并放入一個(gè)字符串?dāng)?shù)組中。試題程序:#include #include #define N 5#define M 81_1_fun(char (*sq)M)int i; char *sp; _2_; for(i=0;iN;i+)
54、 if(strlen(sp)strlen(_3_) sp=sqi; return sp;main()char strNM, *longest; int i; printf(Enter %d lines:n ,N); for(i=0;iN;i+) gets(stri); printf(nThe %d string :n ,N); for(i=0;iN;i+) puts(stri); longest=fun(str); printf(nThe longest string :n ); puts(longest); 答案:【1】char *【2】sp=sq0【3】sqi【解析】填空1:從C語(yǔ)言的學(xué)習(xí)
55、中我們知道,這里應(yīng)該是對(duì)子函數(shù)返回值類型的定義,由下面返回的指針型變量sp可以知道,應(yīng)該定義成char *,注意中間的空格。填空2:根據(jù)題目的意思,此處應(yīng)該是先假設(shè)指針數(shù)組的第1個(gè)元素所指的字符串最長(zhǎng),之后對(duì)字符串指針數(shù)組進(jìn)行遍歷,即給sp賦初值。填空3:由算法可以看出,這里應(yīng)該是把二維數(shù)組的每一行作為一個(gè)字符串的首地址進(jìn)行長(zhǎng)度比較,所以若遇字符串長(zhǎng)度大于待定最長(zhǎng)字符串,則令該字符串為待定最長(zhǎng)字符串,如此循環(huán)直至指針數(shù)組末尾,即可得到最長(zhǎng)字符串的地址。22、下列給定程序中,函數(shù)fun()的功能是:將字符串p中所有字符復(fù)制到字符串b中,要求每復(fù)制3個(gè)字符之后插入一個(gè)空格。例如,在調(diào)用fun()函
56、數(shù)之前給字符串a(chǎn)輸入ABCDEFGHIJK,調(diào)用函數(shù)之后,字符串b中的內(nèi)容則為ABC DEF GHI JK。試題程序:#include void fun(char *p,char *b) int i, k=0; while(_1_) i=0; while(_2_&*p) bk=*p; k+;p+;i+; if(*p) b_3_= ; bk= 0;main() char a80,b80; printf(Enter a string: ); gets(a); printf(The original string: ); puts(a); fun(a,b); printf(nThe string a
57、fter insert space: ); puts(b); printf(nn );答案:【1】*p【2】i3【3】k+【解析】填空1:根據(jù)題目的意思,這里應(yīng)該是利用wile循環(huán)處理字符串,因?yàn)樽址慕Y(jié)束標(biāo)志0可以作為循環(huán)結(jié)束的判斷條件,所以C語(yǔ)言中很多情況都這樣使用,考生要注意。填空2:根據(jù)題目的意思,此處是對(duì)于寫入的字符個(gè)數(shù)進(jìn)行計(jì)數(shù),如果到3就應(yīng)該結(jié)束這個(gè)循環(huán)插入空格,所以應(yīng)該和是否到達(dá)串結(jié)尾為邏輯與的關(guān)系。填空3:由算法可以看出,此處是在輸出結(jié)果中置入空格字符,注意插入空格后指針應(yīng)該后移。23、給定程序功能是用冒泡法對(duì)6個(gè)字符串進(jìn)行排序。 #include #define MAXLI
58、NE 20fun ( char *pstr6) int i, j ; char *p ; for (i = 0 ; i 5 ; i+ ) for (j = i + 1; j 0) p = *(pstr + i) ;/*found*/ pstri = _2_ ;/*found*/ *(pstr + j) = _3_ ; main( ) int i ; char *pstr6, str6MAXLINE ; for(i = 0; i 6 ; i+) pstri = stri ; printf( nEnter 6 string(1 string at each line): n ) ; for(i =
59、 0 ; i 6 ; i+) scanf(%s, pstri) ; fun(pstr) ; printf(The strings after sorting:n) ; for(i = 0 ; i 6 ; i+) printf(%sn, pstri) ;答案:【1】*(pstr+j)【2】pstrj【3】p首先,我們必須先讀懂題中程序的大致意思,這是正確填空的重要前提。 程序中的重要思想如下: 1、建立了一個(gè)二維字符串?dāng)?shù)組,用于存放用戶輸入的6個(gè)字符串; 2、建立了一個(gè)指針數(shù)組,目的是用6個(gè)指針?lè)謩e指向6個(gè)字符串; 3、函數(shù)fun()的形參只有一個(gè),即指針數(shù)組pstr,這表明要想在函數(shù)fun()
60、中對(duì)6個(gè)字符串進(jìn)行操作,只能通過(guò)pstr中的6個(gè)指針。 題中第一個(gè)空填*(pstr+j):觀察源程序可以發(fā)現(xiàn),在程序中使用strcmp()函數(shù)是為了判斷字符串stri與stri+1兩者的大小,在fun()函數(shù)中只能通過(guò)指針來(lái)表達(dá)各個(gè)字符串,所以應(yīng)當(dāng)填*(pstr+j)。 題中第二個(gè)空填pstrj:對(duì)兩個(gè)字符進(jìn)行比較后,若pstri中的字符比pstrj中的字符大,則將pstrj中的字符賦給pstri。題中第三個(gè)空填p:對(duì)兩個(gè)字符進(jìn)行比較后,若pstri中的字符比pstrj中的字符大,則將pstrj和pstri的內(nèi)容進(jìn)行交換。24、給定程序的功能是分別統(tǒng)計(jì)字符串中大寫字母和小寫字母的個(gè)數(shù)。 例如,
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 有機(jī)硅納米技術(shù)進(jìn)展-洞察分析
- 醫(yī)學(xué)影像處理技術(shù)-洞察分析
- 細(xì)胞培養(yǎng)與再生醫(yī)學(xué)-洞察分析
- 項(xiàng)目定位策略研究-洞察分析
- 網(wǎng)絡(luò)輿論引導(dǎo)策略-第1篇-洞察分析
- 營(yíng)銷資源整合案例分析-洞察分析
- 《哲學(xué)史概論》課件
- 《電子商務(wù)外包培訓(xùn)》課件
- 農(nóng)村兄弟房屋繼承協(xié)議書
- 計(jì)算機(jī)組裝與維護(hù)項(xiàng)目教程項(xiàng)目教程課件
- 中國(guó)天眼之父南仁東
- 礦大畢業(yè)設(shè)計(jì)-固定式帶式輸送機(jī)設(shè)計(jì)
- 《膽囊結(jié)石的護(hù)理》PPT
- 安徽云帆藥業(yè)有限公司原料藥生產(chǎn)項(xiàng)目環(huán)境影響報(bào)告
- 藥品質(zhì)量受權(quán)人管理規(guī)程
- 校本課程之《紅樓夢(mèng)詩(shī)詞曲賞析》教案
- 熱動(dòng)復(fù)習(xí)題材料熱力學(xué)與動(dòng)力學(xué)
- 馬工程-公共財(cái)政概論-課程教案
- GB/T 38058-2019民用多旋翼無(wú)人機(jī)系統(tǒng)試驗(yàn)方法
- GB/T 30902-2014無(wú)機(jī)化工產(chǎn)品雜質(zhì)元素的測(cè)定電感耦合等離子體發(fā)射光譜法(ICP-OES)
- GB/T 22638.2-2016鋁箔試驗(yàn)方法第2部分:針孔的檢測(cè)
評(píng)論
0/150
提交評(píng)論