版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、 PAGE 2 第306頁考生注意事項1、本資料匯集了2009年及以前所有的全國計算機等級考試二級C語言的上機考試真題,具有很高的真實性、權(quán)威性和全面性,也具有較強的參考價值,是備戰(zhàn)全國計算機等級考試二級C語言的良師益友,衷心希望本資料能為大家考試成功加油助力。2、本資料在每道題的后面都有參考答案和詳細分析,精講考點,分析題眼,詳解重點和難點并給出應(yīng)試技巧,為你輕松過關(guān)鋪路墊石。3、本資料內(nèi)容全面,對100套題做了詳細歸類,望各位學(xué)員能夠舉一反三,在短時間內(nèi)提高等級應(yīng)試能力。4、機試考試有三道大題,第一題是程序填空,占分30分,第二題是程序修改,占分30分,第三題是程序編寫,占分40分,整個上
2、機考試分值100分,考試時間60分鐘。5、上機考試的題目每年變化不大,考生只要平時基礎(chǔ)知識扎實,在考前強化時多做些上機考試模擬題,見多識廣,上機考試時就會遇到跟自己考前上機練習(xí)極其類似的題目,從而順利通過考試。6、考試中計算機出現(xiàn)故障、死機、死循環(huán)、電源故障等異常情況(即無法進行正??荚嚂r),應(yīng)舉手示意與監(jiān)考人員聯(lián)系,不得擅自關(guān)機和做出其它自行處理。7、上機考試時應(yīng)明確,考生目錄位于考試環(huán)境界面的左上角,每一個題目對應(yīng)的程序文件都存放在考生目錄下,要做每一道題時,應(yīng)先按平時掌握的打開文件的方法在考生目錄下打開每一道題所對應(yīng)的程序文件,然后再做題,做題的過程應(yīng)注意保存文件。8、上機考試做每一道題
3、時,應(yīng)盡量使用C編譯系統(tǒng)自身的編譯、連接功能調(diào)試程序,以便很快發(fā)現(xiàn)語法錯誤,解決語法錯誤,編譯、連接完成后,對得到的程序結(jié)果還應(yīng)認真分析,確保程序沒有邏輯錯誤為止。9、機試填空題應(yīng)注意:(1)一般設(shè)置3個填空;(2)填空后應(yīng)將填空序號和填空下劃線刪除,防止編譯出錯。 10、機試修改題應(yīng)注意:(1)錯誤一般有2個或3個;2(2)錯誤一般位于每個found之下一行或兩行范圍之內(nèi)。11、機試編程題應(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的功能是進行數(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ù)值返回。請在程序的下劃線處填入正確的內(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ù)中的語句c2=fun(c1);知:函數(shù)fun的返回類型為字符,故第一空應(yīng)填char;在題面中要求對數(shù)字字符進行轉(zhuǎn)換,故第二空的目的是判斷字符ch是否為一數(shù)字字符,即ch是否在09之間故第二空應(yīng)填ch=9或其等效形式;第三空處語句的目的是返回轉(zhuǎn)換后的結(jié)果,即返回一字
6、符,其所對應(yīng)的數(shù)字與轉(zhuǎn)換前字符所對應(yīng)的數(shù)字的和為9,故第三空應(yīng)填0或其等效形式。2、給定程序的功能是將大寫字母轉(zhuǎn)換為對應(yīng)小寫字母之后的第五個字母;若小寫字母為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【解析】:本題著重考察考生對C語言中一些簡單算法的掌握情況。先判斷輸入的字母是否是大寫字母,若是大寫字母,將其轉(zhuǎn)化為相應(yīng)的小寫字母,方法是該大寫字母對應(yīng)的ASCII碼值加上32就是其小寫字母的ASCII碼值,再判斷該小寫字母是否是au,若是轉(zhuǎn)化為其后的第5個字母。若該小寫字母是vz,則將其ACSII碼值減去21,轉(zhuǎn)換后的小
8、寫字母作為函數(shù)值返回。 題中第一個空填5:C語言中,字母從az或AZ的ASCII碼值是依次遞增的,所以將其轉(zhuǎn)換為其后的第5個字母應(yīng)該是c=c+5;或相同作用的語句。 題中第二個空填c:通過return語句將被調(diào)用函數(shù)中c的值帶回主調(diào)函數(shù)中去。題中第三個空填c1:此句是調(diào)用fun()函數(shù),括弧中是其實際參數(shù)。遞歸類:第34題3、下列給定程序中,函數(shù)fun()的功能是:用遞歸算法計算斐波拉契級數(shù)列中第n項的值。從第一項起,斐波拉契級數(shù)序列為1,1,2,3,5,8,13,21,例如,若給n輸入7,該項的斐波拉契級數(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)該是對于值為1和2的時候的處理,注意case語句常量后應(yīng)用的是冒號,而且不同的case對應(yīng)同一個值可以連續(xù)寫(像題目中那樣)。填空2:根據(jù)題目的意思,此處是求值的遞歸部分,由
10、遞推公式可以很容易的得到答案的形式,對于這種簡單的遞歸考生一定要掌握。填空3:由算法可以看出,此處是輸入數(shù)列的項數(shù)n,使用了scanf函數(shù),其參數(shù)應(yīng)該是變量的地址,即使用符號& 。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:這里要問的是函數(shù)的類型,由主函數(shù)main()對函數(shù)的調(diào)用可以得到函數(shù)的類型是double型的,當然也可以由函數(shù)的返回值語句得到。填空2:我們看到在下一條語句中已經(jīng)開始對變量x1的值進行比較了,所以這里要對x1進行賦值,由題意可知x1=(x0+a/x0)/2.0。填空3:用C語言求平方根的方法一般有兩種經(jīng)典的算法,它們分別是迭代法和遞歸法,本
12、題要求用遞歸法。該程序采用了if語句,程序的含義是當?shù)Y(jié)果差小于誤差時進行循環(huán)。文件讀寫類:第59 題5、給定程序的功能是:從鍵盤輸入若干行文件(每行不超過80個字符),寫到文件myfile4.txt中,用-1作為字符串輸入結(jié)束的標志。然后將文件的內(nèi)容讀出顯示在屏幕上。文件的讀寫分別由自定義函數(shù)ReadText和WriteText實現(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【解析】本題考核點為:文件的讀寫函數(shù)等。題中第一個空填*fw:fw是一個文件指針,從鍵盤上讀入數(shù)據(jù),輸入其所指向的文件中。 題中第二空填str:fputs函數(shù)向文件中寫數(shù)據(jù),其函數(shù)原型為:fputs(ch,
15、fp) 其中ch是要輸出的字符,它可以是一個字符常量,也可以是一個字符變量。fp是文件指針變量。 題中第三個空填str:printf函數(shù)的一般格式為: printf(格式控制,輸出表列) 1、格式控制是用雙引號括起來的字符串,也稱轉(zhuǎn)換控制字符串,它包括兩種信息: 格式說明:由%和格式字符組成,如%d,%f等。它的作用是將輸出的數(shù)據(jù)轉(zhuǎn)換為指定的格式輸出。格式說明總是由%字符開始的。普通字符,即需要原樣輸出的字符。 2、輸出表列:是需要輸出的一些數(shù)據(jù),可以是表達式。6、給定程序的功能是:調(diào)用函數(shù)fun將指定源文件中的內(nèi)容復(fù)制到指定的目標文件中,復(fù)制成功時函數(shù)返回值是1,失敗時返回值為0。在復(fù)制的過
16、程中,把復(fù)制的內(nèi)容輸出到終端屏幕。主函數(shù)中源文件名放在變量sfname中,目標文件名放在變量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本題的考核點是文件的讀寫函數(shù)等。 題中第一個空填r:r是文件的使用方式之一,其含義是為輸入打開一個文件用于輸入。 題中第二個空填fs:此語句是設(shè)置循環(huán)退出條件,即判斷是否到文件末尾。 題中第三個空填ft:fputc函數(shù)功能是把一個字符寫到磁盤文件上去。其一般調(diào)用形式為: fputc(ch,fp);其中ch是要輸出的字符,它可以是一個字符常量,也可以是一個字符變量。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 本題考核點為:文件的打開,關(guān)閉和讀寫操作。 題中第一個空填fp:是向文件指針fp所指向的文件中寫數(shù)據(jù)。 題中第二個空填fclose(fp);:此語句是文件的關(guān)閉操作。 題中第三個空填fname
21、:fopen函數(shù)用于文件的打開操作,其調(diào)用形式一般為:fopen(文件名,使用文件方式)。fname為所要打開的文件名。8、給定程序的功能是調(diào)用fun函數(shù)建立班級通訊錄。通訊錄中記錄每位學(xué)生的編號、姓名和電話號碼。班級的人數(shù)和學(xué)生的信息從鍵盤讀入,每個人的信息作為一個數(shù)據(jù)塊寫到名為myfile5.dat的二進制文件中。 #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本題考核點為結(jié)構(gòu)體和文件的操作等。 題中第一空填STYPE:typedef可以用來聲明新的類型名來代替已有的類型名,此題用STYPE來代替未命名的結(jié)構(gòu)體。 題中第二空填FILE:FILE關(guān)鍵字用于聲明文件指針。 題中第三空填fp:fwrite函數(shù)的一般調(diào)用形式為: fwrite(buffer,size,count,fp);其中buffer:是一個指針,是要輸出數(shù)據(jù)的地址;size:是要寫的字節(jié)數(shù);count:要進行讀寫多少個size字節(jié)的數(shù)據(jù)項;fp:文件型指針。9、程序通過定義學(xué)生結(jié)構(gòu)體變量,存儲了學(xué)生的學(xué)號、姓名
25、和3門課的成績。所有學(xué)生數(shù)據(jù)均以二進制方式輸出到文件中。函數(shù)fun的功能是從形參filename所指的文件中讀入學(xué)生數(shù)據(jù),并按照學(xué)號從小到大排序后,再用二進制方式把排序后的學(xué)生數(shù)據(jù)輸出到filename所指的文件中,覆蓋原來的文件內(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或與此語句功能相同的語句;再用二進制方式把排序后的數(shù)據(jù)輸出到指定文件中,fwrite函數(shù)的作用是往文件的當前位置寫入指定字節(jié)的數(shù)據(jù)塊,所以第三個空填:f
29、write。字符串類:第1038題10、給定程序中,函數(shù)fun的功能是:求出形參ss所指字符串數(shù)組中最長字符串的長度,其余字符串左邊用字符*補齊,使其與最長的字符串等長。字符串數(shù)組中共有M個字符串,且串長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ù)中,第一個for循環(huán)的作用是求出所有字符串中,長度最長的字符串的長度n,并記下此字符串在數(shù)組中的下標k,故第一空應(yīng)填k。在第二個for循環(huán)中,如果當前字符串不是最長字符串,則計算其長度len,并將從下標0到len的字符向右移動n-len位,故第二空為len;最后,再通過一個for循環(huán)語句在當前字符串前面補充len-n個*,故第三空應(yīng)為ssij或其等效形式。11、下列給定的程序中,fun()函數(shù)的功能是:將p所指字符串中每個單詞的最后一個字母改成大寫(這里的單詞是指有空格隔開的字符串)。例如,若輸入: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作為判斷標志,如果標志為1并且當前指針指向空格就應(yīng)該把標志返回0,以便下一次檢測。填空2:根據(jù)題目的意思,此處進行的是將p所指單詞的最后一個字母改成大寫,但是此時p已經(jīng)循環(huán)到了單詞后面的那個空格,所以應(yīng)該對p-1進行操作。填空3:由算法可以看出,這
34、里應(yīng)該是進行函數(shù)調(diào)用,根據(jù)前面的子函數(shù)定義可以知道,參數(shù)是一個指向向字符串的指針,所以應(yīng)該把數(shù)組的名字(也可以認為是指向數(shù)組首地址的指針)作為參數(shù)。12、str是一個由數(shù)字和字母字符組成的字符串,由變量num傳入字符串長度。請補充函數(shù)fun(),該函數(shù)的功能是:把字符串str中的數(shù)字字符轉(zhuǎn)換成數(shù)字并存放到整型數(shù)組bb中,函數(shù)返回數(shù)組bb的長度。例如:str=“Bcd123e456hui890”,結(jié)果為:123456890。注意:部分源程序給出如下。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的橫線上填入所編寫的若干表達式或語句。試題程序:#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:如果當前字符的ASCII碼大于字符0的ASCII碼,而小于字符9的ASCII碼
36、,則說明當前字符是數(shù)字字符。填空2:將數(shù)字字符轉(zhuǎn)換為數(shù)字的方法是,用當前數(shù)字字符的ASCII碼減去字符0的ASCII碼。填空3:題目要求函數(shù)返回數(shù)組bb的長度,而變量n記錄了數(shù)字字符的個數(shù),也就是數(shù)組bb的長度,所以函數(shù)應(yīng)該返回n。13、請補充函數(shù)fun(),該函數(shù)的功能是:把一個整數(shù)轉(zhuǎn)換成字符串,并倒序保存在字符數(shù)組str中。例如:當n=13572468時,str=“86427531”。注意:部分源程序給出如下。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的橫線上填入所編寫的若干表達式或語句。試題程序:#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,當n等于0時,說明已經(jīng)將整數(shù)的各位數(shù)字都轉(zhuǎn)換為數(shù)字字符并存入字符串中了。填空2:n對10求余,得到整數(shù)n的個位數(shù)字,在加上字符0的ASCII碼,得到
38、對應(yīng)的數(shù)字字符,并存入字符串str中。填空3:將整數(shù)轉(zhuǎn)換為字符串并倒序存放入字符數(shù)組str中后,還要在str最后加上字符串結(jié)束標記符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:由我們對語言的掌握和學(xué)習(xí)知道,這是程序?qū)︻^文件的聲明,根據(jù)語言的規(guī)定頭文件要用關(guān)鍵字include來聲明,并用#開始。填空2:這里考查的是對循環(huán)結(jié)束語句的掌握和字符串的結(jié)束標志的理解,我們知道字符串由0作為結(jié)束標志,由題意知,i一直增加到字符串結(jié)束,因此循環(huán)結(jié)束判斷語句使用si!= 0。填空3:由本題選擇條件if(si!=c)可知,如果字符串中的字符不是c,則執(zhí)行循環(huán),根據(jù)題目的意思這句應(yīng)該執(zhí)行的是sj+=si,這里考查了自加運算符
40、的靈活使用。15、請補充main函數(shù),該函數(shù)的功能是:從一個字符串中截取前面若干個給定長度的子字符串。其中,str1指向原字符串,截取后的字符存放在str2所指的字符數(shù)組中,n中存放需截取的字符個數(shù)。例如:當str1=“cdefghij”,然后輸入4,則str2=“cdef”。注意:部分源程序給出如下。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的橫線上填入所編寫的若干表達式或語句。試題程序:#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:本題考查對標準輸入函數(shù)scanf()的調(diào)用格式,由后面的程序可以知道,變量n保存了要截取的字符數(shù),注意在n前面不要忘了取址符 &。填空2:截取前n個字符,就是將字符串str1的前n個字符依次賦給字符串str2的前n
42、個字符。填空3:本題考查對標準輸出函數(shù)printf()的調(diào)用格式,根據(jù)題意,應(yīng)輸出截取后的字符串,即字符串str2。16、給定程序的功能是判斷字符ch是否與串str中的某個字符相同;若相同,什么也不做,若不同,則插在串的最后。 #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本題著重考察考生對C語言中函數(shù)的調(diào)用以及一些簡單算法的掌握情況。 題中第一空填!=:從題意得知,若字符ch與字符串str中的某個字符相同,什么也不做;若不同,則插在str的最后。因此fun函數(shù)中先設(shè)置了一個循環(huán)從字符串str中尋找字符ch,如果找到則中斷循環(huán)并保留字符c
44、h的地址,否則一直循環(huán)到串尾。因此通過判斷*str的內(nèi)容即可判斷是否已找到字符ch。 題中第二個空填str1:如果沒有找到字符ch,則在while循環(huán)后str指針指向串結(jié)束符0 x00,此時應(yīng)將字符ch寫入這里并在下一地址寫入一個串結(jié)束符0 x00,所以應(yīng)該是str1 = 0;語句。題中第三個空填s,c:此句是調(diào)用fun()函數(shù),括弧中是其實際參數(shù)。17、給定程序的功能是將在字符串s中出現(xiàn)、而未在字符串t中出現(xiàn)的字符形成一個新的字符串放在u中,u中字符按原字符串中字符順序排列,不去掉重復(fù)字符。 例如:當s=112345,t=2467時,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本題考核點為字符串的查找,賦值操作。 題中第一空填break;:break為跳出循環(huán)的語句。 if (si = tj) break;語句是指當si = tj,即tj中的字符已經(jīng)在字符指針sj所指向的字符數(shù)組中存在時,循環(huán)就結(jié)束。 題中第二空填si:*u+ = si;是將si賦給*u,然后u加1。題中第三空填*u:*u=0;,字符串的最后一個字符應(yīng)該是0的。18、請補充函數(shù)fun(),該函數(shù)的功能是:把字符下標為非素數(shù)的字符從字符串str中刪除,把字符下標為素數(shù)的字符重新保存在字符串str中
47、。字符串str從鍵盤輸入,其長度作為參數(shù)傳入函數(shù)fun()。例如,輸入“abcdefghijkl”,輸出“cdfhl”。注意:部分源程序給出如下。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的橫線上填入所編寫的若干表達式或語句。試題程序:#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聲明時沒有初始化,所以要在使用前初始化為0。填空2:如果一個數(shù)能被除了1和其自身之外的數(shù)整除,即余數(shù)為0,則這個數(shù)不是素數(shù)。所以除數(shù)j從2開始取數(shù)。填空3:如果當前字符的下標為非素數(shù),則應(yīng)將此字符刪除,所以變量k減1,使下一個字符覆蓋它,達到刪除的目的。
49、19、給定程序的功能是把s串中所有的字符前移一個位置,串中的第一個字符移到最后。 例如: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本題的考核點是c語言中循環(huán)語句的使用。提示思路:先保存原字符串的第一個字符,然后將后面的字符依次向前移一位,最后將原字符串的第一個字符添加到新字符串的最后。20、請補充函數(shù)fun(),該函數(shù)的功能是:按0到9統(tǒng)計一個字符串中的奇數(shù)數(shù)字字符各自出現(xiàn)的次數(shù),結(jié)果保存在數(shù)組num中。注意:不能使用字符串庫函數(shù)。例如:輸入“x=112385713.456+0.909*bc”,結(jié)果為:13,32,52
51、,71,92。注意:部分源程序給出如下。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的橫線上填入所編寫的若干表達式或語句。試題程序:#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:通過移動指針p,指向字符串tt中的各個字符,當指針p所指的字符為0時,即指向字符串tt的最后一個字符,while循環(huán)結(jié)束。填空2:將字符串中的數(shù)字字符0到9的個數(shù)都保存在數(shù)組bb10中。*p-0實現(xiàn)將字符0的個數(shù)保存在bb
53、0中,將字符1的個數(shù)保存在bb1中,依此類推,直到將字符9的個數(shù)保存在bb9中。填空3:由于奇數(shù)數(shù)字字符的個數(shù)存于bb1、bb3、bb5、bb7、bb9中,所以for循環(huán)的目的是將這些元素分別賦給num0、num1、num2、num3、num4。21、下列給定程序中,函數(shù)fun()的功能是:從N個字符串中找出最長的那個串,并將其地址作為函數(shù)值返回。各字符串在主函數(shù)中輸入,并放入一個字符串數(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語言的學(xué)習(xí)
55、中我們知道,這里應(yīng)該是對子函數(shù)返回值類型的定義,由下面返回的指針型變量sp可以知道,應(yīng)該定義成char *,注意中間的空格。填空2:根據(jù)題目的意思,此處應(yīng)該是先假設(shè)指針數(shù)組的第1個元素所指的字符串最長,之后對字符串指針數(shù)組進行遍歷,即給sp賦初值。填空3:由算法可以看出,這里應(yīng)該是把二維數(shù)組的每一行作為一個字符串的首地址進行長度比較,所以若遇字符串長度大于待定最長字符串,則令該字符串為待定最長字符串,如此循環(huán)直至指針數(shù)組末尾,即可得到最長字符串的地址。22、下列給定程序中,函數(shù)fun()的功能是:將字符串p中所有字符復(fù)制到字符串b中,要求每復(fù)制3個字符之后插入一個空格。例如,在調(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)處理字符串,因為字符串的結(jié)束標志0可以作為循環(huán)結(jié)束的判斷條件,所以C語言中很多情況都這樣使用,考生要注意。填空2:根據(jù)題目的意思,此處是對于寫入的字符個數(shù)進行計數(shù),如果到3就應(yīng)該結(jié)束這個循環(huán)插入空格,所以應(yīng)該和是否到達串結(jié)尾為邏輯與的關(guān)系。填空3:由算法可以看出,此處是在輸出結(jié)果中置入空格字符,注意插入空格后指針應(yīng)該后移。23、給定程序功能是用冒泡法對6個字符串進行排序。 #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、建立了一個二維字符串數(shù)組,用于存放用戶輸入的6個字符串; 2、建立了一個指針數(shù)組,目的是用6個指針分別指向6個字符串; 3、函數(shù)fun()的形參只有一個,即指針數(shù)組pstr,這表明要想在函數(shù)fun()
60、中對6個字符串進行操作,只能通過pstr中的6個指針。 題中第一個空填*(pstr+j):觀察源程序可以發(fā)現(xiàn),在程序中使用strcmp()函數(shù)是為了判斷字符串stri與stri+1兩者的大小,在fun()函數(shù)中只能通過指針來表達各個字符串,所以應(yīng)當填*(pstr+j)。 題中第二個空填pstrj:對兩個字符進行比較后,若pstri中的字符比pstrj中的字符大,則將pstrj中的字符賦給pstri。題中第三個空填p:對兩個字符進行比較后,若pstri中的字符比pstrj中的字符大,則將pstrj和pstri的內(nèi)容進行交換。24、給定程序的功能是分別統(tǒng)計字符串中大寫字母和小寫字母的個數(shù)。 例如,
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版太陽能光伏發(fā)電合同保修與后期維護服務(wù)3篇
- 2025年度毛石石材加工廠質(zhì)量管理體系合同4篇
- 二零二五年度防盜門行業(yè)標準制定與合作合同3篇
- 2025年度金融機構(gòu)間回購協(xié)議合同范本4篇
- 2025年行政協(xié)議指導(dǎo)大全:住房保障合作協(xié)議2篇
- 2025年水電站經(jīng)營權(quán)承包與電力供應(yīng)保障合同3篇
- 二零二五年度高端電子產(chǎn)品OEM定制服務(wù)合同
- 二零二五年度綠化項目投資合作協(xié)議4篇
- 二零二五年度集體土地租賃權(quán)抵押合同樣本3篇
- 二零二五年度草種種植技術(shù)合作與種子供應(yīng)協(xié)議3篇
- 2024-2025學(xué)年成都高新區(qū)七上數(shù)學(xué)期末考試試卷【含答案】
- 定額〔2025〕1號文-關(guān)于發(fā)布2018版電力建設(shè)工程概預(yù)算定額2024年度價格水平調(diào)整的通知
- 2025年浙江杭州市西湖區(qū)專職社區(qū)招聘85人歷年高頻重點提升(共500題)附帶答案詳解
- 《數(shù)學(xué)廣角-優(yōu)化》說課稿-2024-2025學(xué)年四年級上冊數(shù)學(xué)人教版
- “懂你”(原題+解題+范文+話題+技巧+閱讀類素材)-2025年中考語文一輪復(fù)習(xí)之寫作
- 2025年景觀照明項目可行性分析報告
- 2025年江蘇南京地鐵集團招聘筆試參考題庫含答案解析
- 2025年度愛讀書學(xué)長參與的讀書項目投資合同
- 電力系統(tǒng)分析答案(吳俊勇)(已修訂)
- 化學(xué)-河北省金太陽質(zhì)檢聯(lián)盟2024-2025學(xué)年高三上學(xué)期12月第三次聯(lián)考試題和答案
- 期末復(fù)習(xí)試題(試題)-2024-2025學(xué)年四年級上冊數(shù)學(xué) 北師大版
評論
0/150
提交評論