




已閱讀5頁,還剩68頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
2017年全國計算機等級考試C語言上機考試題庫學生練習用第21套至第40套第二十一套1、程序填空給定程序中,函數fun的功能是:將形參s所指字符串中的數字字符轉換成對應的數值,計算出這些數值的累加和作為函數值返回。例如,形參s所指的字符串為abs5def126jkm8,程序執(zhí)行后的輸出結果為22。請在程序的下畫線處填入正確的內容并把下畫線刪除,使程序得出正確的結果。注意:部分源程序在文件BLANK1.C中。不得增行或刪行,也不得更改程序的結構!-#include #include #include int fun(char *s) int sum=0; while(*s) /*found*/ if( isdigit(*s) ) sum+= *s- _1_ ;/*found*/ _2_; /*found*/ return _3_ ;main() char s81; int n; printf(nEnter a string:nn); gets(s); n=fun(s); printf(nThe result is: %dnn,n);-【參考答案】(1)48 (2)s+ (3)sum【解題思路】本題是把字符串中是數字字符轉換成對應的數值并進行累加。填空1:0字符對應的ASCII碼值是48,因此數字字符轉換成對應數值時只要減去48,即是該數字字符對應的數值,所以應填48。填空2:判斷完一個字符之后,將字符串指針移到下一個位置,所以應填s。填空3:返回累加和sum,所以應填sum。2、程序修改下列給定的程序中,函數fun的功能是:計算并輸出k以內最大的10個能被13或17整除的自然數之和。k的值由主函數傳入,若k的值為500,則函數的值為4622。請改正程序中的錯誤,使它能得出正確的結果。注意:部分源程序在文件MODI1.C中,不要改動main函數,不得增行或刪行,也不得更改程序的結構!-#include #include #include int fun(int k) int m=0,mc=0, j; while(k=2)&(mc10) /*found*/ if(k%13=0)|(k%17=0) m=m+k;mc+; k-;/*found*/ return m;void main()system(CLS); printf(%dn ,fun(500);-【參考答案】(1)if(k%13=0)|(k%17=0)(2) return m;【解題思路】(1)C語言中,x能被y整除的表示方法是x%y0,而不是題目中所表示的x%y0。所以,if(k%130)|(k%170)修改后的結果應該是答案所示信息。(2)程序中缺少程序完整所需的,此類信息在做題時一定要注意,可以在做題前先運行一下程序,這樣明顯的錯誤一般都會有錯誤信息顯示出來。比如丟失的錯誤信息是Compound statement missing in function fun。3、程序設計編寫函數fun,它的功能是:求小于形參n同時能被3與7整除的所有自然數之和的平方根,并作為函數值返回。例如,若n為1000時,程序輸出應為:s153.909064。注意:部分源程序在文件PROG1.C中。請勿改動主函數main和其他函數中的任何內容,僅在函數fun的花括號中填入你編寫的若干語句。-#include #include double fun( int n)main() /* 主函數 */ void NONO (); printf(s =%fn, fun ( 1000) ); NONO();void NONO ()/* 本函數用于打開文件,輸入數據,調用函數,輸出數據,關閉文件。 */ FILE *fp, *wf ; int i, n ; double s; fp = fopen(in.dat,r) ; wf = fopen(out.dat,w) ; for(i = 0 ; i 10 ; i+) fscanf(fp, %d, &n) ; s = fun(n) ; fprintf(wf, %fn, s) ; fclose(fp) ; fclose(wf) ;-【參考答案】 double fun(int n) double sum=0.0; int i; for(i=21;i=n;i+) if(i%3=0)&(i%7=0) sum+=i; return sqrt(sum); 【解題思路】本題考查算術運算的算法,首先利用一個for循環(huán)判斷小于n且能同時被3和7整除的整數,并將滿足條件的整數累加到sum,之后調用sqrt函數計算sum的平方根,并作為函數的返回值。第二十二套1、程序填空給定程序中,函數fun的功能是:找出形參s所指字符串中出現頻率最高的字母(不區(qū)分大小寫),并統(tǒng)計出其出現的次數。例如,形參s所指的字符串為:abcAbsmaxless,程序執(zhí)行后的輸出結果為:lettera:3timesletters:3times請在程序的下畫線處填入正確的內容并把下畫線刪除,使程序得出正確的結果。注意:部分源程序在文件BLANK1.C中。不得增行或刪行,也不得更改程序的結構!-#include #include #include void fun(char *s) int k26=0,n,i,max=0; char ch; while(*s) if( isalpha(*s) ) /*found*/ ch=tolower(_1_); n=ch-a;/*found*/ kn+= _2_ ; s+;/*found*/ if(maxkn) max= _3_ ; printf(nAfter count :n); for(i=0; i26;i+) if (ki=max) printf(nletter %c : %d timesn,i+a,ki);main() char s81; printf(nEnter a string:nn); gets(s); fun(s);-【參考答案】(1)*s (2)1 (3)kn【解題思路】本題統(tǒng)計字符串中各字母的個數,建立了一個包括26個整型變量的數組,用來存儲每個字母的個數。填空1:isalpha函數的作用是判斷當前字符是否為字母,tolower函數的作用是將當前字母轉換為小寫字母,所以應填*s。填空2:把該字母出現的個數累加到指定的數組中,所以應填1。填空3:max用來記錄出現次數最高的字母的出現次數,如果當前該字母出現次數大于最大次數max,那么把該次數賦值給max,所以應填kn。2、程序修改下列給定程序中,函數fun的功能是:求S的值。 例如,當k為10時,函數的值應為1.533852。請改正程序中的錯誤,使它能得出正確的結果。注意:部分源程序在文件MODI1.C中,不要改動main函數,不得增行或刪行,也不得更改程序的結構!-#include #include #include #include /*found*/fun(int k) int n; float s, w, p, q; n=1; s=1.0; while(n=k) w=2.0*n; p=w-1.0; q=w+1.0; s=s*w*w/p/q; n+; /*found*/ return svoid main() system(CLS); printf(%fn ,fun(10);-【參考答案】(1)float fun(int k)(2)return s;【解題思路】(1)此處為函數定義錯誤,根據返回值的類型可知函數類型標識符應為float。(2)語法錯誤。3、程序設計請編寫函數fun,其功能是:計算并輸出下列多項式的值。 例如,當n10時,函數值為0.909091。注意:部分源程序在文件PROG1.C中。請勿改動主函數main和其他函數中的任何內容,僅在函數fun的花括號中填入你編寫的若干語句。-#include#include#includedouble fun(int n) void main() FILE *wf; system(CLS); printf(%fn,fun(10);/*/ wf=fopen(out.dat,w); fprintf(wf,%f,fun(10); fclose(wf);/*/-【參考答案】double fun(int n) int i; double s=0.0; for(i=1;i=n;i+) s=s+1.0/(i*(i+1); /*求級數的和*/ return s;【解題思路】本題要求級數的和,由多項式的形式可知,應使用循環(huán)語句實現,循環(huán)的通項為1/n(n+1)。本程序首先定義了和變量及循環(huán)變量,然后運用一個for語句求出級數的和,最后將和變量s返回。第二十三套1、程序填空給定程序中,函數fun的功能是:利用指針數組對形參ss所指字符串數組中的字符串按由長到短的順序排序,并輸出排序結果。ss所指字符串數組中共有N個字符串,且串長小于M。請在程序的下畫線處填入正確的內容并把下畫線刪除,使程序得出正確的結果。注意:部分源程序在文件BLANK1.C中。不得增行或刪行,也不得更改程序的結構!-#include #include #define N 5#define M 8void fun(char (*ss)M) char *psN,*tp; int i,j,k; for(i=0; iN; i+) psi=ssi; for(i=0; iN-1; i+) /*found*/ k= _1_ ; for(j=i+1; jN; j+)/*found*/ if(strlen(psk) strlen(_2_) ) k=j;/*found*/ tp=psi; psi=psk; psk= _3_ ; printf(nThe string after sorting by length:nn); for(i=0; iN; i+) puts(psi);main() char chNM=red,green,blue,yellow,black; int i; printf(nThe original stringnn); for(i=0;iN;i+)puts(chi); printf(n); fun(ch);-【參考答案】(1)i (2)psj (3)tp【解題思路】本題是按字符串的長短進行排序。填空1:外循環(huán)每循環(huán)一次,k應保存當前的i值,所以應填i。填空2:使用內循環(huán)對i1后面的字符串長度進行比較,所以應填psj。填空3:此處的作用是交換兩個變量的值,所以應填tp。2、程序修改已知一個數列從0項開始的前3項:0、0、1,以后的各項都是其相鄰的前3項之和。下列給定的程序中,函數fun的功能是:計算并輸出該數列前n項的平方根之和sum。n的值通過形參傳入。例如,當n10時,程序的輸出結果應為23.197745。請改正程序中的錯誤,使它能得出正確的結果。注意:部分源程序在文件MODI1.C中,不要改動main函數,不得增行或刪行,也不得更改程序的結構!-#include #include #include #include /*found*/fun(int n) double sum, s0, s1, s2, s; int k; sum=1.0; if (n=2) sum=0.0; s0=0.0; s1=0.0; s2=1.0; for (k=4;k=n;k+) s=s0+s1+s2; sum+=sqrt(s); s0=s1;s1=s2;s2=s; /*found*/ return sumvoid main()int n; system(CLS); printf(Input N=); scanf(%d,&n); printf(%fn,fun(n);-【參考答案】(1)double fun(int n)(2)return sum;【解題思路】(1)根據函數的返回值可知函數fun應定義為double類型。(2)語法錯誤,缺分號。3、程序設計請編寫函數fun,它的功能是計算下列級數和,和值由函數值返回。 例如,當n10,x0.3時,函數值為1.349859。注意:部分源程序在文件PROG1.C中。請勿改動主函數main和其他函數中的任何內容,僅在函數fun的花括號中填入你編寫的若干語句。-#include#include#include#includedouble fun(double x, int n) void main() FILE *wf; system(CLS); printf(%f ,fun(0.3,10);/*/ wf=fopen(out.dat,w); fprintf(wf,%f,fun(0.3,10); fclose(wf);/*/-【參考答案】double fun(double x,int n) int i; double s=1.0,s1=1.0; for(i=1;i=n;i+) s1=s1*i; /*各項中的階乘*/ s=s+pow(x,i)/s1; /*按公式求出*/ return s;【解題思路】程序定義了變量s1和s,s1表示每項的分母(即各項的階乘),s存放累加和。循環(huán)語句控制累加的次數,在循環(huán)體中進行階乘和累加操作,累加的結果存入s中。此處使用了求乘方函數pow(x,i),其含義是求x的i次方的值。第二十四套1、程序填空給定程序中,函數fun的功能是:根據形參i的值返回某個函數的值。當調用正確時,程序輸出:x15.000000,x23.000000,x1*x1+x1*x2=40.000000。注意:部分源程序在文件BLANK1.C中。不得增行或刪行,也不得更改程序的結構!-#include double f1(double x) return x*x; double f2(double x, double y) return x*y; /*found*/_1_ fun(int i, double x, double y) if (i=1)/*found*/ return _2_(x); else/*found*/ return _3_(x, y);main() double x1=5, x2=3, r; r = fun(1, x1, x2); r += fun(2, x1, x2); printf(nx1=%f, x2=%f, x1*x1+x1*x2=%fnn,x1, x2, r);-【參考答案】(1)double (2)f1 (3)f2【解題思路】填空1:本空函數fun的返回值,根據return可知,不論返回的是f1還是f2,它們的返回值均為double型的,故此空應該填寫double。填空2:因為函數fun的功能是根據形參i的值返回某個函數的值,當i等于1時,應該返回的是f1。填空3:如果不滿足if的話,應該返回的是f2。2、程序修改下列給定程序中,函數fun的功能是:比較兩個字符串,將長的字符串的首地址作為函數值返回。請改正程序中的錯誤,使它能得出正確的結果。注意:部分源程序在文件MODI1.C中,不要改動main函數,不得增行或刪行,也不得更改程序的結構!-#include #include /*found*/double fun(char *s,char *t) int s1=0,t1=0; char *ss,*tt; ss=s; tt=t; while(*ss) s1+; /*found*/(*ss)+; while(*tt) t1+;/*found*/(*tt)+; if(t1s1)return t; elsereturn s;void main() char a80,b80; printf(nEnter a string : ); gets(a); printf(nEnter a string again: ); gets(b); printf(nThe longer is :nn%sn, fun(a,b);-【參考答案】(1)char *fun(char *s,char *t)(2)ss+;(3)tt+;【解題思路】(1)在主函數的輸出語句中,函數fun是以字符串格式輸出的,所以定義函數時應為char *fun( char *s,char *t)。(2)和(3)這里是地址加1,而不是內容加1,所以改為ss+和tt+。3、程序設計請編寫函數fun,其功能是:移動字符串中的內容,移動的規(guī)則是把第1m個字符,平移到字符串的最后,把第m1到最后的字符移到字符串的前部。例如,字符串中原有的內容為ABCDEFGHIJK,m的值為3,移動后,字符串中的內容應該是DEFGHIJKABC。注意:部分源程序在文件PROG1.C中。請勿改動main函數和其他函數中的任何內容,僅在函數fun的花括號中填入你編寫的若干語句。-#include #include #define N 80void fun (char *w,int m) void main() FILE *wf; char aN= ABCDEFGHIJK,bN= ABCDEFGHIJK; int m; printf(The origina string :n); puts(a); printf(nnEnter m: ); scanf(%d,&m); fun(a,m); printf(nThe string after moving :n); puts(a); printf(nn);/*/ wf=fopen(out.dat,w); fun(b,3); fprintf(wf,%s,b); fclose(wf);/*/-【參考答案】void fun (char *w,int m) int i,j; char t; for(i=1;i=m;i+) /*進行m次的循環(huán)左移*/ t=w0; for(j=1;wj!=0;j+) /*從第2個字符開始以后的每個字符都依次前移一個字符*/ wj-1=wj; wj-1=t; /*將第1個字符放到最后一個字符中*/ 【解題思路】本題應采用循環(huán)左移的算法,多層循環(huán)用于控制移動的字符的個數,即需進行多少次循環(huán),內嵌循環(huán)的作用是將從第2個字符以后的每個字符依次前移一個位置,最后將第1個字符放到最后一個字符中。第二十五套1、程序填空程序通過定義學生結構體變量,存儲了學生的學號、姓名和三門課的成績。所有學生數據均以二進制方式輸出到文件中。函數fun的功能是從形參filename所指的文件中讀入學生數據,并按照學號從小到大排序后,再用二進制方式把排序后的學生數據輸出到filename所指的文件中,覆蓋原來的文件內容。請在程序的下畫線處填入正確的內容并把下畫線刪除,使程序得出正確的結果。注意:部分源程序在文件BLANK1.C中。不得增行或刪行,也不得更改程序的結構!-#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(s, sizeof(STU), N, fp); fclose(fp); for (i=0; iN-1; i+) for (j=i+1; jN; j+)/*found*/ if (si.sno _2_ sj.sno) 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,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(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; i (3)fwrite【解題思路】填空1:題目中要求從形參filename所指的文件中讀入學生的數據,以此可以看出本空應該填寫rb。填空2:此處的if語句是比較學號的大小,如果學號大就和學號小的換位,以此本空填寫。填空3:題目要求所有的學生數據均以二進制方式輸出到文件中,因此本空填寫fwrite。2、程序修改下列給定程序中函數fun的功能是:在字符串的最前端加入n個*號,形成新串,并且覆蓋原串。字符串的長度最長允許為79。請改正程序中的錯誤,使它能得出正確的結果。注意:部分源程序在文件MODI1.C中,不要改動main函數,不得增行或刪行,也不得更改程序的結構!-#include #include void fun ( char s, int n ) char a80 , *p; int i;/*found*/ s=p; for(i=0; in; i+) ai=*; do ai=*p; i+; /*found*/ while(*p+) ai=0; strcpy(s,a);main() int n; char s80; printf(nEnter a string : ); gets(s); printf(nThe string %sn,s); printf(nEnter n ( number of * ) : ); scanf(%d,&n); fun(s,n); printf(nThe string after insert : %s n ,s);-【參考答案】(1)p=s;(2)while(*p+);【解題思路】(1)指針p應指向s,所以應改為p=s;。(2)循環(huán)等待,當while循環(huán)執(zhí)行一次,臨時變量p應該指向字符串的下一位置,所以應改為while(*p+);。3、程序設計請編寫函數fun,該函數的功能是:統(tǒng)計各年齡段的人數。N個年齡通過調用隨機函數獲得,并放入主函數的age數組中。要求函數把09歲年齡段的人數放在d0中,把1019歲年齡段的人數放在d1中,把2029歲年齡段的人數放在d2中,依此類推,把100歲(含100歲)以上年齡的人數都放在d10中。結果在主函數中輸出。注意:部分源程序在文件PROG1.C中。請勿改動main函數和其他函數中的任何內容,僅在函數fun的花括號中填入你編寫的若干語句。-#include # define N 50# define M 11void fun(int *a, int *b) double rnd() static t=29,c=217,m=1024,r=0; r=(r*t+c)%m; return(double)r/m);void main() FILE *wf; int ageN, i,dM; int bN=32,45,15,12,86,49,97,3,44,52,17,95,63; for(i=0; iN; i+) agei=(int)(115*rnd(); /*產生一個隨機的年齡數組*/ printf(The original data :n); for(i=0; iN; i+) printf(i+1)%10=0? %4dn:%4d,agei); /*每行輸出10個數*/ printf(nn); fun(age,d); for(i=0; i10; i+) printf(%4d-%4d :%4dn, i*10, i*10+9,di); printf(Over 100 : %4dn,d10);/*/ wf=fopen(out.dat,w); fun(b,d); for(i=0; i10; i+) fprintf(wf,%4d-%4d :%4dn, i*10, i*10+9,di); fprintf(wf,Over 100 : %4d,d10); fclose(wf);/*/-【參考答案】void fun(int *a,int *b) int i,j; for(j=0;jM;j+) bj=0; /*數組b初始化為0*/ for(i=0;i=100) b10+; /*如果年齡大于等于100,b10自增1*/ else bai/10+; /*如果年齡小于100,則將其分別統(tǒng)計到bai/10中*/【解題思路】本題是一個分段函數的問題,用兩個循環(huán)來完成。第1個循環(huán)的作用是使b中的所有元素值都為0。這個循環(huán)不能省略,因為若未對b中的元素賦初值,則它們的值是不可預測的。第2個循環(huán)的作用是分別統(tǒng)計a中各年齡段的人數。當ai100時,按題意要將其統(tǒng)計到b10中。else的作用是如果年齡
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 部門辦公經費管理辦法
- 藥品運輸投訴管理辦法
- 慈溪市售水機管理辦法
- 邢臺疫情寵物管理辦法
- 中國樹脂動物工藝品項目投資可行性研究報告
- 大號翠鴨地毯行業(yè)深度研究分析報告(2024-2030版)
- 2025年中國便攜式保溫瓶行業(yè)市場發(fā)展前景及發(fā)展趨勢與投資戰(zhàn)略研究報告
- 2025年中國氨穩(wěn)定型硅溶膠行業(yè)市場發(fā)展前景及發(fā)展趨勢與投資戰(zhàn)略研究報告
- 2025年中國半殼夏夷貝行業(yè)市場發(fā)展前景及發(fā)展趨勢與投資戰(zhàn)略研究報告
- 工藝性項目可行性研究報告
- 私人房屋抵押合同
- 腹瀉課件模板
- 《市場人員商務禮儀》課件
- 《OSB-單板復合集裝箱底板剛度模型及工藝研究》
- 3.3.1天氣系統(tǒng)-鋒與天氣課件高二地理湘教版(2019)選擇性必修1
- 《重大火災隱患判定規(guī)則》知識培訓
- 辦公室主任職業(yè)規(guī)劃
- 第九章新時代中國特色大國外交與構建人類命運共同體-2024版研究生新中特教材課件
- 出國工作合同范例
- 《執(zhí)法規(guī)范化建設探究的國內外文獻綜述》2700字
- 大學物業(yè)服務月考核評價評分表
評論
0/150
提交評論