2017年全國計算機(jī)等級考試C語言上機(jī)考試題庫-1-20套_第1頁
2017年全國計算機(jī)等級考試C語言上機(jī)考試題庫-1-20套_第2頁
2017年全國計算機(jī)等級考試C語言上機(jī)考試題庫-1-20套_第3頁
2017年全國計算機(jī)等級考試C語言上機(jī)考試題庫-1-20套_第4頁
2017年全國計算機(jī)等級考試C語言上機(jī)考試題庫-1-20套_第5頁
已閱讀5頁,還剩72頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

2017年全國計算機(jī)等級考試C語言上機(jī)考試題庫學(xué)生練習(xí)用第一套至第二十套第一套:1、程序填空程序通過定義學(xué)生結(jié)構(gòu)體變量,存儲了學(xué)生的學(xué)號、姓名和三門課的成績。所有學(xué)生數(shù)據(jù)均以二進(jìn)制方式輸出到文件中。函數(shù)fun的功能是重寫形參filename所指文件中最后一個學(xué)生的數(shù)據(jù),即用新的學(xué)生數(shù)據(jù)覆蓋該學(xué)生原來的數(shù)據(jù),其他學(xué)生的數(shù)據(jù)不變。

請?jiān)诔绦虻南庐嬀€處填入正確的內(nèi)容并把下畫線刪除,使程序得出正確的結(jié)果。

注意:部分源程序在文件BLANK1.C中。

不得增行或刪行,也不得更改程序的結(jié)構(gòu)!-----------------------------------------------------------------------------------------------------------------#include<stdio.h>#defineN5typedefstructstudent{longsno;charname[10];floatscore[3];}STU;voidfun(char*filename,STUn){FILE*fp;/**********found**********/fp=fopen(__1__,"rb+");/**********found**********/fseek(__2__,-(long)sizeof(STU),SEEK_END);/**********found**********/fwrite(&n,sizeof(STU),1,__3__);fclose(fp);}main(){STUt[N]={{10001,"MaChao",91,92,77},{10002,"CaoKai",75,60,88},{10003,"LiSi",85,70,78},{10004,"FangFang",90,82,87},{10005,"ZhangSan",95,80,88}};STUn={10006,"ZhaoSi",55,70,68},ss[N];inti,j;FILE*fp;fp=fopen("student.dat","wb");fwrite(t,sizeof(STU),N,fp);fclose(fp);fp=fopen("student.dat","rb");fread(ss,sizeof(STU),N,fp);fclose(fp);printf("\nTheoriginaldata:\n\n");for(j=0;j<N;j++){printf("\nNo:%ldName:%-8sScores:",ss[j].sno,ss[j].name);for(i=0;i<3;i++)printf("%6.2f",ss[j].score[i]);printf("\n");}fun("student.dat",n);printf("\nThedataaftermodifing:\n\n");fp=fopen("student.dat","rb");fread(ss,sizeof(STU),N,fp);fclose(fp);for(j=0;j<N;j++){printf("\nNo:%ldName:%-8sScores:",ss[j].sno,ss[j].name);for(i=0;i<3;i++)printf("%6.2f",ss[j].score[i]);printf("\n");}}-----------------------------------------------------------------------------------------------------------------【參考答案】

(1)filename

(2)fp

(3)fp

【解題思路】

填空1:本空是對文本文件的打開,filename所指的文件中的最后數(shù)據(jù)要進(jìn)行重寫,因此首先是要打開,因而本空填寫filename。

填空2:fseek

功能是重定位流上的文件指針。用法:

int

fseek(FILE

*stream,

long

offset,

int

fromwhere);本空應(yīng)該填寫fp。

填空3:因?yàn)轭}目中要對所有學(xué)生數(shù)據(jù)均以二進(jìn)制方式輸出到文件中,因此本空填寫fp。

知識點(diǎn)講解:

函數(shù)名:fseek

能:重定位流上的文件指針。

法:int

fseek(FILE

*stream,

long

offset,

int

fromwhere)。

述:函數(shù)設(shè)置文件指針stream的位置。如果執(zhí)行成功,stream將指向以fromwhere為基準(zhǔn),偏移offset個字節(jié)的位置。如果執(zhí)行失敗(比如offset超過文件自身大小),則不改變stream指向的位置。

返回值:成功,返回0;否則返回非0值。2、程序改錯下列給定程序中函數(shù)Creatlink的功能是:創(chuàng)建帶頭結(jié)點(diǎn)的單向鏈表,并為各結(jié)點(diǎn)數(shù)據(jù)域賦0到m-1的值。

請改正函數(shù)Creatlink中指定部位的錯誤,使它能得出正確的結(jié)果。

注意:部分源程序在文件MODI1.C中,不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!-----------------------------------------------------------------------------------------------------------------#include<stdio.h>#include<stdlib.h>typedefstructaa{intdata;structaa*next;}NODE;NODE*Creatlink(intn,intm){NODE*h=NULL,*p,*s;inti;/**********found***********/p=(NODE)malloc(sizeof(NODE));h=p;p->next=NULL;for(i=1;i<=n;i++){s=(NODE*)malloc(sizeof(NODE));s->data=rand()%m;s->next=p->next;p->next=s;p=p->next;}/**********found***********/returnp;}outlink(NODE*h){NODE*p;p=h->next;printf("\n\nTHELIST:\n\nHEAD");while(p){printf("->%d",p->data);p=p->next;}printf("\n");}main(){NODE*head;head=Creatlink(8,22);outlink(head);}-----------------------------------------------------------------------------------------------------------------【參考答案】

(1)p=(NODE

*)malloc(sizeof(NODE));

(2)return

h;

【考點(diǎn)分析】

本題考查:變量賦初值;for循環(huán)語句;函數(shù)返回值。

【解題思路】

(1)由變量定義可知p為指向結(jié)點(diǎn)的指針。指向剛分配的結(jié)構(gòu)指針,所以應(yīng)改為p=(NODE

*)malloc(sizeof(NODE))。

(2)在動態(tài)分配內(nèi)存的下一行語句是,使用臨時結(jié)構(gòu)指針變量h保存p指針的初始位置,最后返回不能使用p,是因?yàn)閜的位置已經(jīng)發(fā)生了變化,所以應(yīng)改為return

h。3、程序設(shè)計請編寫函數(shù)fun,該函數(shù)的功能是:統(tǒng)計一行字符串中單詞的個數(shù),作為函數(shù)值返回。字符串在主函數(shù)中輸入,規(guī)定所有單詞由小寫字母組成,單詞之間有若干個空格隔開,一行的開始沒有空格。

注意:部分源程序在文件PROG1.C中。

請勿改動main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入所編寫的若干語句。-----------------------------------------------------------------------------------------------------------------#include<string.h>#include<stdio.h>#defineN80intfun(char*s){}voidmain(){FILE*wf;charline[N];intnum=0;printf("Enterastring:\n");gets(line);num=fun(line);printf("Thenumberofwordis:%d\n\n",num);/******************************/wf=fopen("out.dat","w");fprintf(wf,"%d",fun("abigcar"));fclose(wf);/*****************************/}-----------------------------------------------------------------------------------------------------------------【參考答案】

int

fun(char

*s)

{

int

i,j=0;

for(i=0;s[i]!='\0';i++)

if(s[i]!='

'&&(s[i+1]=='

'||s[i+1]=='\0'))

/*如果一個字母的下一個字符為空格或者結(jié)束標(biāo)記,則表示一個單詞結(jié)束*/

j++;

return

j;

/*返回單詞個數(shù)*/

}

【解題思路】

要判斷單詞的個數(shù),首先想到的是程序怎樣識別出一個單詞,如果一個字母的下一個字符為空格或者結(jié)束標(biāo)記,則表示一個單詞結(jié)束,因此程序使用for循環(huán)語句遍歷整個字符串,用if條件語句判斷當(dāng)前字符是否表示一個單詞的結(jié)束,如果當(dāng)前字符表示一個單詞結(jié)束,則存放單詞個數(shù)的變量加1,最后返回單詞的個數(shù)。第二套1、程序填空給定程序中,函數(shù)fun的功能是:計算形參x所指數(shù)組中N個數(shù)的平均值(規(guī)定所有數(shù)均為正數(shù)),作為函數(shù)值返回,并將大于平均值的數(shù)放在形參y所指數(shù)組中,在主函數(shù)中輸出。

例如,有10個正數(shù):46、30、32、40、6、17、45、15、48、26,其平均值為30.500000。

主函數(shù)中輸出:46

32

40

45

48。

請?jiān)诔绦虻南庐嬀€處填入正確的內(nèi)容并把下畫線刪除,使程序得出正確的結(jié)果。

注意:部分源程序在文件BLANK1.C中。

不得增行或刪行,也不得更改程序的結(jié)構(gòu)!-----------------------------------------------------------------------------------------------------------------#include<stdlib.h>#include<stdio.h>#defineN10doublefun(doublex[],double*y){inti,j;doubleav;/**********found**********/av=__1__;/**********found**********/for(i=0;i<N;i++) av=av+__2__;for(i=j=0;i<N;i++)/**********found**********/if(x[i]>av)y[__3__]=x[i];y[j]=-1;returnav;}main(){inti;doublex[N],y[N];for(i=0;i<N;i++){x[i]=rand()%50;printf("%4.0f",x[i]);}printf("\n");printf("\nTheaverageis:%f\n",fun(x,y));for(i=0;y[i]>=0;i++)printf("%5.1f",y[i]);printf("\n");}-----------------------------------------------------------------------------------------------------------------【參考答案】

(1)0.0

(2)x[i]/N

(3)j++

【解題思路】

填空1:通過讀上面的程序可以看出此空考的是給變量賦初值,av代表的是平均值,因此av的初值應(yīng)該是0.0。

填空2:通過for循環(huán)可知,此空代表求平均值,因此應(yīng)該填寫x[i]/N。

填空3:先把大于平均值的數(shù)放在形參y所指數(shù)組中,然后使下標(biāo)值加1,因此此空應(yīng)該填j++。2、程序改錯下列給定程序中,函數(shù)fun的功能是:根據(jù)整型參數(shù)m,計算如下公式的值。

例如,若m=2000,則應(yīng)輸出0.000160。

請改正程序中的錯誤,使它能得出正確的結(jié)果。

注意:部分源程序在文件MODI1.C中,不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!-----------------------------------------------------------------------------------------------------------------#include<stdlib.h>#include<conio.h>#include<stdio.h>/*************found**************/fun(intm){doubley=0,d;inti;/*************found**************/for(i=100,i<=m,i+=100){d=(double)i*(double)i;y+=1.0/d;}return(y);}voidmain(){intn=2000;system("CLS");printf("\nTheresultis%1f\n",fun(n));}-----------------------------------------------------------------------------------------------------------------【參考答案】

(1)double

fun(int

m)

(2)for(i=100;i<=m;i+=100)

【解題思路】

(1)題目要求在函數(shù)fun中求級數(shù)前m項(xiàng)和,可用循環(huán)語句,每次計算級數(shù)中的一項(xiàng),然后累加。第一處錯誤在于定義fun(int

m),由函數(shù)的返回值可知應(yīng)該定義為double

fun(int

m)。

(2)for(i=100,i<=m,i+=100)中是一個簡單的語法錯誤。for循環(huán)語句的形式為for(表達(dá)式1;表達(dá)式2;表達(dá)式3)

,其表達(dá)式之間應(yīng)以";"相隔。3、程序設(shè)計已知學(xué)生的記錄由學(xué)號和學(xué)習(xí)成績構(gòu)成,N名學(xué)生的數(shù)據(jù)已存入a結(jié)構(gòu)體數(shù)組中。請編寫函數(shù)fun,該函數(shù)的功能是:找出成績最低的學(xué)生記錄,通過形參返回主函數(shù)(規(guī)定只有一個最低分)。已給出函數(shù)的首部,請完成該函數(shù)。

注意:部分源程序在文件PROG1.C中。

請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。-----------------------------------------------------------------------------------------------------------------#include<stdio.h>#include<string.h>#include<conio.h>#include<stdlib.h>#defineN10typedefstructss{charnum[10];ints;}STU;fun(STUa[],STU*s){}voidmain(){FILE*wf;STUa[N]={{"A01",81},{"A02",89},{"A03",66},{"A04",87},{"A05",77},{"A06",90},{"A07",79},{"A08",61},{"A09",80},{"A10",71}},m;inti;system("CLS");printf("*****Theoriginaldata*****\n");for(i=0;i<N;i++)printf("No=%sMark=%d\n",a[i].num,a[i].s);fun(a,&m);printf("*****THERESULT*****\n");printf("Thelowest:%s,%d\n",m.num,m.s);/******************************/wf=fopen("out.dat","w");fprintf(wf,"%s,%d",m.num,m.s);fclose(wf);/*****************************/}-----------------------------------------------------------------------------------------------------------------【參考答案】

fun(STU

a[],STU

*s)

{

int

i;

*s=a[0];

/*先認(rèn)為第1個值最小*/

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

/*如果在循環(huán)的過程中再發(fā)現(xiàn)比第1個值更小的則賦給*s*/

if(s->s>a[i].s)

*s=a[i];

}

【解題思路】

找出結(jié)構(gòu)體數(shù)組元素中的最小值。先認(rèn)為第1個值最小,即*s=a[0];,如果在循環(huán)的過程中發(fā)現(xiàn)比第1個值更小的,就將指針s指向該元素,直到找到最小元素。另外,本題還涉及結(jié)構(gòu)體中的指向運(yùn)算符,請考生注意。第三套1、程序填空給定程序中,函數(shù)fun的功能是:計算x所指數(shù)組中N個數(shù)的平均值(規(guī)定所有數(shù)均為正數(shù)),平均值通過形參返回給主函數(shù),將小于平均值且最接近平均值的數(shù)作為函數(shù)值返回,并在主函數(shù)中輸出。

例如,有10個正數(shù):46、30、32、40、6、17、45、15、48、26,平均值為30.500000。

主函數(shù)中輸出m=30。

請?jiān)诔绦虻南庐嬀€處填入正確的內(nèi)容并把下畫線刪除,使程序得出正確的結(jié)果。

注意:部分源程序在文件BLANK1.C中。

不得增行或刪行,也不得更改程序的結(jié)構(gòu)!-----------------------------------------------------------------------------------------------------------------#include<stdlib.h>#include<stdio.h>#defineN10doublefun(doublex[],double*av){inti,j;doubled,s;s=0;for(i=0;i<N;i++)s=s+x[i];/**********found**********/__1__=s/N;d=32767;for(i=0;i<N;i++)if(x[i]<*av&&*av-x[i]<=d){/**********found**********/d=*av-x[i]; j=__2__; }/**********found**********/return__3__;}main(){inti;doublex[N],av,m;for(i=0;i<N;i++){x[i]=rand()%50;printf("%4.0f",x[i]);}printf("\n");m=fun(x,&av);printf("\nTheaverageis:%f\n",av);printf("m=%5.1f",m);printf("\n");}-----------------------------------------------------------------------------------------------------------------【參考答案】

(1)*av

(2)i

(3)x[j]

【解題思路】

填空1:從原程序中可以看出*av代表的是平均值,而s/N表示的就是平均值,因此本空應(yīng)該填*av。

填空2:if語句來判斷找最接近平均值的數(shù),因而此空應(yīng)該填i。

填空3:題目要求將小于平均值且最接近平均值的數(shù)作為函數(shù)返回,而j表達(dá)的是最接近平均值的數(shù)在數(shù)組中的下標(biāo),因而本空應(yīng)該填寫x[j]。程序修改下列給定程序中,函數(shù)fun的功能是:根據(jù)整型形參n,計算如下公式的值。

例如,若n=10,則應(yīng)輸出0.617977。

請改正程序中的錯誤,使它能得出正確的結(jié)果。

注意:部分源程序在文件MODI1.C中,不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!-----------------------------------------------------------------------------------------------------------------#include<stdlib.h>#include<conio.h>#include<stdio.h>/*************found**************/intfun(intn){floatA=1;inti;/*************found**************/for(i=2;i<n;i++)A=1.0/(1+A);returnA;}voidmain(){intn;system("CLS");printf("\nPleaseentern:");scanf("%d",&n);printf("A%d=%lf\n",n,fun(n));}-----------------------------------------------------------------------------------------------------------------【參考答案】

(1)float

fun(int

n)

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

【解題思路】

(1)根據(jù)函數(shù)的返回值可知,函數(shù)應(yīng)定義為float型。

(2)該題中函數(shù)fun的作用是計算數(shù)列前n項(xiàng)的和,而數(shù)列的組成方式是:第n項(xiàng)的分母是1加第n-1項(xiàng)的值,分子為1,如果循環(huán)累加按for(i=2;i<n;i++)執(zhí)行,當(dāng)輸入n=2時循環(huán)不會執(zhí)行,程序?qū)⒌貌坏较胍慕Y(jié)果,因此循環(huán)變量的取值范圍應(yīng)包括2。程序設(shè)計下列程序定義了N×N的二維數(shù)組,并在主函數(shù)中自動賦值。請編寫函數(shù)fun(int

a[

][N],int

m),該函數(shù)的功能是使數(shù)組右上半三角元素中的值乘以m。

例如,若m的值為2,a數(shù)組中的值為:

則返回主程序后a數(shù)組中的值應(yīng)為:

注意:部分源程序在文件PROG1.C中。

請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。-----------------------------------------------------------------------------------------------------------------#include<conio.h>#include<stdio.h>#include<stdlib.h>#include<string.h>#defineN5voidfun(inta[][N],intm){}main(){inta[N][N],m,i,j;FILE*out;printf("*****Thearray*****\n");for(i=0;i<N;i++){for(j=0;j<N;j++) {a[i][j]=rand()%20; printf("%4d",a[i][j]); }printf("\n"); }m=rand()%4;printf("m=%4d\n",m);fun(a,m);printf("THERESULT\n");for(i=0;i<N;i++){for(j=0;j<N;j++)printf("%4d",a[i][j]);printf("\n");}/******************************/out=fopen("out.dat","w");for(i=0;i<N;i++) for(j=0;j<N;j++) a[i][j]=i*j;fun(a,8);for(i=0;i<N;i++){ for(j=0;j<N;j++) fprintf(out,"%4d",a[i][j]); fprintf(out,"\n");}fclose(out);/******************************/}-----------------------------------------------------------------------------------------------------------------【參考答案】

void

fun(int

a[][N],

int

m)

{

int

i,j;

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

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

a[i][j]=a[i][j]*m;

/*右上半三角元素中的值乘以m*/

}

【解題思路】

本程序?qū)崿F(xiàn)將矩陣中右上半三角元素中的值乘以m,使用循環(huán)語句遍歷數(shù)組元素,第1個循環(huán)用于控制行坐標(biāo),第2個循環(huán)用于控制列下標(biāo)。第四套程序填空給定程序中,函數(shù)fun的功能是:計算形參x所指數(shù)組中N個數(shù)的平均值(規(guī)定所有數(shù)均為正數(shù)),將所指數(shù)組中大于平均值的數(shù)據(jù)移至數(shù)組的前部,小于等于平均值的數(shù)據(jù)移至x所指數(shù)組的后部,平均值作為函數(shù)值返回,在主函數(shù)中輸出平均值和移動后的數(shù)據(jù)。

例如,有10個正數(shù):46、30、32、40、6、17、45、15、48、26,平均值為30.500000。

移動后的輸出為:46、32、40、45、48、30、6、17、15、26。

請?jiān)诔绦虻南庐嬀€處填入正確的內(nèi)容并把下畫線刪除,使程序得出正確的結(jié)果。

注意:部分源程序在文件BLANK1.C中。

不得增行或刪行,也不得更改程序的結(jié)構(gòu)!-----------------------------------------------------------------------------------------------------------------#include<stdlib.h>#include<stdio.h>#defineN10doublefun(double*x){inti,j;doubles,av,y[N];s=0;for(i=0;i<N;i++)s=s+x[i];/**********found**********/av=__1__;for(i=j=0;i<N;i++)if(x[i]>av){/**********found**********/y[__2__]=x[i]; x[i]=-1;}for(i=0;i<N;i++)/**********found**********/if(x[i]!=__3__)y[j++]=x[i];for(i=0;i<N;i++)x[i]=y[i];returnav;}main(){inti;doublex[N];for(i=0;i<N;i++){x[i]=rand()%50;printf("%4.0f",x[i]);}printf("\n");printf("\nTheaverageis:%f\n",fun(x));printf("\nTheresult:\n",fun(x));for(i=0;i<N;i++)printf("%5.0f",x[i]);printf("\n");}-----------------------------------------------------------------------------------------------------------------【參考答案】

(1)s/N

(2)j++

(3)-1

【解題思路】

填空1:由原程序可知,av代表的是平均值,而平均值的求法是所有數(shù)的總和除以數(shù)的個數(shù),因而本空應(yīng)該填寫s/N。

填空2:y數(shù)組代表暫時存放x數(shù)組,if(x[i]>av)表達(dá)的是當(dāng)x數(shù)組中的數(shù)大于平均值時,應(yīng)該把這些大于平均值的數(shù)放在y數(shù)組的前半部分,因而此空應(yīng)該填y[j++]。

填空3:此空表明當(dāng)x[i]不等于什么時,x[i]中的數(shù)要賦值給y數(shù)組,由題意可知此空只能填寫-1。程序修改下列給定程序的功能是:讀入一個英文文本行,將其中每個單詞的第一個字母改成大寫,然后輸出此文本行(這里"單詞"是指由空格隔開的字符串)。

例如,若輸入"I

am

a

student

to

take

the

examination",則應(yīng)輸出"I

Am

A

Student

To

Take

The

Examination"。

請改正程序中的錯誤,使程序能得出正確的結(jié)果。

注意:部分源程序在文件MODI1.C中,不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!-----------------------------------------------------------------------------------------------------------------#include<stdlib.h>#include<string.h>#include<conio.h>#include<ctype.h>#include<stdio.h>#include<string.h>/*************found**************/voidupfst(charp){intk=0;for(;*p;p++)if(k){if(*p=='') k=0;}else{ if(*p!='') { k=1; *p=toupper(*p); } }}voidmain(){ charchrstr[81]; system("CLS"); printf("\nPleaseenteranEnglishtextline:"); gets(chrstr); printf("\nBoforechanging:\n%s",chrstr); upfst(chrstr); printf("\nAfterchanging:\n%s\n",chrstr);}-----------------------------------------------------------------------------------------------------------------【參考答案】

void

upfst(char

*p)

【解題思路】

主函數(shù)中fun函數(shù)的調(diào)用方式說明函數(shù)fun的參數(shù)應(yīng)為指針類型。程序設(shè)計下列程序定義了N×N的二維數(shù)組,并在主函數(shù)中賦值。請編寫函數(shù)fun,函數(shù)的功能是:求出數(shù)組周邊元素的平均值并作為函數(shù)值返回給主函數(shù)中的s。例如,若a

數(shù)組中的值為:

則返回主程序后s的值應(yīng)為3.375。

注意:部分源程序在文件PROG1.C中。

請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入所編寫的若干語句。-----------------------------------------------------------------------------------------------------------------#include<stdio.h>#include<conio.h>#include<stdlib.h>#defineN5doublefun(intw[][N]){}voidmain(){FILE*wf;inta[N][N]={0,1,2,7,9,1,9,7,4,5,2,3,8,3,1,4,5,6,8,2,5,9,1,4,1};inti,j;doubles;system("CLS");printf("*****Thearray*****\n");for(i=0;i<N;i++){for(j=0;j<N;j++){printf("%4d",a[i][j]);}printf("\n");}s=fun(a);printf("*****THERESULT*****\n");printf("Thesumis:%lf\n",s);/******************************/wf=fopen("out.dat","w");fprintf(wf,"%lf",s);fclose(wf);/*****************************/}-----------------------------------------------------------------------------------------------------------------【參考答案】

double

fun

(int

w[][N])

{

int

i,j,k=0;

double

sum=0.0;

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

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

if(i==0||i==N-1||j==0||j==N-1)

/*只要下標(biāo)中有一個為0或N-1,則它一定是周邊元素*/

{sum=sum+w[i][j];

/*將周邊元素求和*/

k++;

}

return

sum/k;

/*求周邊元素的平均值*/

}

【解題思路】

本題要求計算二維數(shù)組周邊元素的平均值,for循環(huán)語句控制循環(huán)過程,if條件語句根據(jù)數(shù)組元素的下標(biāo)判斷該元素是否為二維數(shù)組的周邊元素。

本題采用逐一判斷的方式,周邊元素的規(guī)律為下標(biāo)中有一個是0或N-1,所以只要下標(biāo)中有一個為0或N-1,那么它一定是周邊元素。計算周邊元素個數(shù)的方式是當(dāng)給sum累加一個值時,k也加1。第五套程序填空給定程序中,函數(shù)fun的功能是:計算形參x所指數(shù)組中N個數(shù)的平均值(規(guī)定所有數(shù)均為正數(shù)),將所指數(shù)組中小于平均值的數(shù)據(jù)移至數(shù)組的前部,大于等于平均值的數(shù)據(jù)移至x所指數(shù)組的后部,平均值作為函數(shù)值返回,在主函數(shù)中輸出平均值和移動后的數(shù)據(jù)。

例如,有10個正數(shù):47、30、32、40、6、17、45、15、48、26,其平均值為30.500000。

移動后的輸出為:30、6、17、15、26、47、32、40、45、48。

請?jiān)诔绦虻南庐嬀€處填入正確的內(nèi)容并把下畫線刪除,使程序得出正確的結(jié)果。

注意:部分源程序在文件BLANK1.C中。

不得增行或刪行,也不得更改程序的結(jié)構(gòu)!-----------------------------------------------------------------------------------------------------------------#include<stdlib.h>#include<stdio.h>#defineN10doublefun(double*x){inti,j;doubleav,y[N];av=0;for(i=0;i<N;i++)/**********found**********/ av+=__1__;for(i=j=0;i<N;i++)if(x[i]<av){y[j]=x[i];x[i]=-1;/**********found**********/ __2__; }i=0;while(i<N){if(x[i]!=-1)y[j++]=x[i];/**********found**********/__3__;}for(i=0;i<N;i++)x[i]=y[i];returnav;}main(){inti;doublex[N];for(i=0;i<N;i++){x[i]=rand()%50;printf("%4.0f",x[i]);}printf("\n");printf("\nTheaverageis:%f\n",fun(x));printf("\nTheresult:\n",fun(x));for(i=0;i<N;i++)printf("%5.0f",x[i]);printf("\n");}-----------------------------------------------------------------------------------------------------------------【參考答案】

(1)x[i]/N

(2)j++或++j

(3)i++或++i

【解題思路】

填空1:av代表平均值,本題考查了怎樣求平均值,因此本空應(yīng)該填寫x[i]/N。

填空2:通過for循環(huán)和if判斷找到x[i]中比平均值小的數(shù),并把這些值賦值給y[j],因此本空應(yīng)該填寫j++或者++j。

填空3:通過while循環(huán)語句,把x[i]中比平均值大的數(shù)放在數(shù)組y的后半部分,因此本空應(yīng)該填寫i++或者++i。程序修改下列給定函數(shù)中,函數(shù)fun的功能是:統(tǒng)計字符串中各元音字母(即A、E、I、O、U)的個數(shù)。注意:字母不分大小寫。

例如,輸入"THIs

is

a

boot",則應(yīng)輸出是1

0

2

2

0。

請改正程序中的錯誤,使它能得出正確的結(jié)果。

注意:部分源程序在文件MODI1.C中,不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!-----------------------------------------------------------------------------------------------------------------#include<stdlib.h>#include<conio.h>#include<stdio.h>/*************found**************/fun(char*s,intnum[5]){intk,i=5;for(k=0;k<i;k++)/*************found**************/num[i]=0;for(;*s;s++){i=-1;/*************found**************/switch(s){case'a':case'A':{i=0;break;}case'e':case'E':{i=1;break;}case'i':case'I':{i=2;break;}case'o':case'O':{i=3;break;}case'u':case'U':{i=4;break;}}if(i>=0)num[i]++;}}voidmain(){chars1[81];intnum1[5],i;system("CLS");printf("\nPleaseenterastring:");gets(s1);fun(s1,num1);for(i=0;i<5;i++)printf("%d",num1[i]);printf("\n");}-----------------------------------------------------------------------------------------------------------------【參考答案】

(1)void

fun(char

*s,

int

num[5])

(2)num[k]=0;

(3)switch(*s)

【解題思路】

switch語句說明如下:

(1)switch后的表達(dá)式,可以是整型或字符型,也可以是枚舉類型。在新的ANSIC標(biāo)準(zhǔn)中允許表達(dá)式的類型為任何類型。

(2)每個case后的常量表達(dá)式只能是由常量組成的表達(dá)式,當(dāng)switch后的表達(dá)式的值與某一個常量表達(dá)式的值一致時,程序就轉(zhuǎn)到此case后的語句開始執(zhí)行。如果沒有一個常量表達(dá)式的值與switch后的值一致,就執(zhí)行default后的語句。

(3)各個case后的常量表達(dá)式的值必須互不相同。

(4)各個case的次序不影響執(zhí)行結(jié)果,一般情況下,盡量將出現(xiàn)概率大的case放在前面。

(5)在執(zhí)行完一個case后面的語句后,程序會轉(zhuǎn)到下一個case后的語句開始執(zhí)行,因而必須使用break語句才能跳出。程序設(shè)計請編寫函數(shù)fun,該函數(shù)的功能是:求出二維數(shù)組周邊元素之和,作為函數(shù)值返回。二維數(shù)組中的值在主函數(shù)中賦予。

例如,若二維數(shù)組中的值為:

則函數(shù)值為61。

注意:部分源程序在文件PROG1.C中。

請勿改主動函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。-----------------------------------------------------------------------------------------------------------------#include<conio.h>#include<stdio.h>#include<stdlib.h>#defineM4#defineN5intfun(inta[M][N]){}voidmain(){FILE*wf;intaa[M][N]={{1,3,5,7,9},{2,9,9,9,4},{6,9,9,9,8},{1,3,5,7,0}};inti,j,y;system("CLS");printf("Theoriginaldatais:\n");for(i=0;i<M;i++){for(j=0;j<N;j++)printf("%6d",aa[i][j]);printf("\n");}y=fun(aa);printf("\nThesun:%d\n",y);printf("\n");/******************************/wf=fopen("out.dat","w");fprintf(wf,"%d",y);fclose(wf);/*****************************/}-----------------------------------------------------------------------------------------------------------------【參考答案】

int

fun(int

a[M][N])

{

int

i,j,sum=0;

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

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

if(i==0||i==M-1||j==0||j==N-1)

/*只要下標(biāo)中有一個為0或M-1或N-1,則它一定是周邊元素*/

sum=sum+a[i][j];

/*將周邊元素相加*/

return

sum;

}

【解題思路】

本題采用逐一判斷的方式,周邊元素的規(guī)律是,其下標(biāo)值中一定有一個是0或M-1或N-1。程序中循環(huán)語句用來控制數(shù)組的行和列,條件語句用來判斷數(shù)組元素是否為周邊元素。第六套程序填空給定程序中,函數(shù)fun的功能是將a和b所指的兩個字符串分別轉(zhuǎn)換成面值相同的整數(shù),并進(jìn)行相加作為函數(shù)值返回,規(guī)定字符串中只含9個以下數(shù)字字符。

例如,主函數(shù)中輸入字符串"32486"和"12345",在主函數(shù)中輸出的函數(shù)值為44831。

請?jiān)诔绦虻南庐嬀€處填入正確的內(nèi)容并把下畫線刪除,使程序得出正確的結(jié)果。

注意:部分源程序在文件BLANK1.C中。

不得增行或刪行,也不得更改程序的結(jié)構(gòu)-----------------------------------------------------------------------------------------------------------------#include<stdio.h>#include<string.h>#include<ctype.h>#defineN9longctod(char*s){longd=0;while(*s)if(isdigit(*s)){/**********found**********/d=d*10+*s-__1__;/**********found**********/__2__; }returnd;}longfun(char*a,char*b){/**********found**********/return__3__;}main(){chars1[N],s2[N];do{printf("Inputstrings1:");gets(s1);}while(strlen(s1)>N);do{printf("Inputstrings2:");gets(s2);}while(strlen(s2)>N);printf("Theresultis:%ld\n",fun(s1,s2));}-----------------------------------------------------------------------------------------------------------------【參考答案】

(1)'0'

(2)s++或++s

(3)ctod(a)+ctod(b)

【解題思路】

填空1:isdigt(*s)這個函數(shù)表示檢查*s是否是數(shù)字(0~9),d=d*10+*s-?表示的是要把字符串分別轉(zhuǎn)換成面值相同的整數(shù),因此本空應(yīng)該填寫'0'。

填空2:*s所代表的字符串中字符需要一個一個的字符進(jìn)行轉(zhuǎn)換成整數(shù),因此此空應(yīng)該填寫s++或++s。

填空3:題目要求把轉(zhuǎn)換后的字符進(jìn)行相加后作為函數(shù)的返回值,因此本空應(yīng)該填寫ctod(a)+ctod(b)。程序修改下列給定程序中,fun函數(shù)的功能是:分別統(tǒng)計字符串中大寫字母和小寫字母的個數(shù)。

例如,給字符串s輸入:AAaaBBbb123CCcccd,則應(yīng)輸出:upper=6,lower=8。

請改正程序中的錯誤,使它得出正確的結(jié)果。

注意:部分源程序在文件MODI1.C中,不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!-----------------------------------------------------------------------------------------------------------------#include<stdio.h>/**********found**********/voidfun(char*s,inta,intb){while(*s){if(*s>='A'&&*s<='Z')/**********found**********/*a=a+1;if(*s>='a'&&*s<='z')/**********found**********/*b=b+1;s++;}}main(){chars[100];intupper=0,lower=0;printf("\nPleaseastring:");gets(s);fun(s,&upper,&lower);printf("\nupper=%dlower=%d\n",upper,lower);}-----------------------------------------------------------------------------------------------------------------3、程序設(shè)計請編一個函數(shù)

float

fun(double

h),該函數(shù)的功能是:使變量h中的值保留兩位小數(shù),并對第三位進(jìn)行四舍五入(規(guī)定h中的值為正數(shù))。

例如,若h值為1234.567,則函數(shù)返回1234.570000;若h值為

1234.564,則函數(shù)返回1234.560000。

注意:部分源程序在文件PROG1.C中。

請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。-----------------------------------------------------------------------------------------------------------------#include<stdio.h>#include<conio.h>#include<stdlib.h>floatfun(floath){}voidmain(){FILE*wf;floata;system("CLS");printf("Entera:");scanf("%f",&a);printf("Theoriginaldatais:");printf("%f\n\n",a);printf("Theresult:%f\n",fun(a));/******************************/wf=fopen("out.dat","w");fprintf(wf,"%f",fun(8.32533));fclose(wf);/*****************************/}-----------------------------------------------------------------------------------------------------------------第七套1、程序填空給定程序中,函數(shù)fun的功能是:調(diào)用隨機(jī)函數(shù)產(chǎn)生20個互不相同的整數(shù)放在形參a所指數(shù)組中(此數(shù)組在主函數(shù)中已置0)。

請?jiān)诔绦虻南庐嬀€處填入正確的內(nèi)容并把下畫線刪除,使程序得出正確的結(jié)果。

注意:部分源程序在文件BLANK1.C中。

不得增行或刪行,也不得更改程序的結(jié)構(gòu)!-----------------------------------------------------------------------------------------------------------------#include<stdlib.h>#include<stdio.h>#defineN20voidfun(int*a){inti,x,n=0;x=rand()%20;/**********found**********/while(n<__1__){for(i=0;i<n;i++)/**********found**********/if(x==a[i]) __2__;/**********found**********/if(i==__3__) {a[n]=x;n++;}x=rand()%20;}}main(){intx[N]={0},i;fun(x);printf("Theresult:\n");for(i=0;i<N;i++){printf("%4d",x[i]);if((i+1)%5==0)printf("\n");}printf("\n\n");}-----------------------------------------------------------------------------------------------------------------【參考答案】

(1)N或20

(2)break

(3)n

【解題思路】

填空1:變量n用于存儲數(shù)組的下標(biāo),要通過while語句對數(shù)組進(jìn)行賦值,數(shù)組的容量為20,因此循環(huán)條件應(yīng)為n<20。

填空2:通過一個for循環(huán)判斷x是否與數(shù)組中已存的元素重復(fù),若重復(fù)則跳出for循環(huán)結(jié)束。

填空3:若for循環(huán)是由break語句結(jié)束的,則x與數(shù)組中的元素重復(fù),此時i必然小于n;若for循環(huán)是因?yàn)檠h(huán)變量i遞增到某值,而不再滿足循環(huán)條件結(jié)束的,說明x的值與數(shù)組中的元素不重復(fù),則此時i的值等于n。2、程序修改下列給定程序中,函數(shù)fun的功能是:先從鍵盤上輸入一個3行、3列的矩陣的各個元素的值,然后輸出主對角線元素之和。

請改正程序中的錯誤,使它能得出正確的結(jié)果。

注意:部分源程序在文件MODI1.C中,不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!-----------------------------------------------------------------------------------------------------------------#include<stdio.h>voidfun(){inta[3][3],sum;inti,j;/*************found**************/sum=1;for(i=0;i<3;i++){for(j=0;j<3;j++)/*************found**************/scanf("%d",a[i][j]);}for(i=0;i<3;i++)sum=sum+a[i][i];printf("Sum=%d\n",sum);}voidmain(){fun();}-----------------------------------------------------------------------------------------------------------------【參考答案】

(1)sum=0;

(2)scanf("%d",&a[i][j]);

【解題思路】

該題考查對循環(huán)語句的掌握和對數(shù)組概念的理解。本題的解題思路為:先從鍵盤輸入一個3×3矩陣,然后循環(huán)累加,執(zhí)行循環(huán)語句中的sum=sum+a[i][i];。因?yàn)樽兞縮um用來存放累加后的結(jié)果,所以應(yīng)對其初始化為0。第二處錯誤考查標(biāo)準(zhǔn)輸入函數(shù)scanf的格式,被賦值的變量前要加上取地址符"&"。程序設(shè)計編寫程序,實(shí)現(xiàn)矩陣(3行、3列)的轉(zhuǎn)置(即行列互換)。

例如,若輸入下面的矩陣:

則程序輸出:

注意:部分源程序在文件PROG1.C中。

請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。-----------------------------------------------------------------------------------------------------------------#include<stdio.h>#include<conio.h>#include<stdlib.h>voidfun(intarray[3][3]){}voidmain(){FILE*wf;inti,j;intarray[3][3]={{100,200,300},{400,500,600},{700,800,900}};system("CLS");for(i=0;i<3;i++){for(j=0;j<3;j++)printf("%7d",array[i][j]);printf("\n");}fun(array);printf("Convertedarray:\n");for(i=0;i<3;i++){for(j=0;j<3;j++)printf("%7d",array[i][j]);printf("\n");}/******************************/wf=fopen("out.dat","w");for(i=0;i<3;i++){for(j=0;j<3;j++)fprintf(wf,"%7d",array[i][j]);fprintf(wf,"\n");}fclose(wf);/*****************************/}-----------------------------------------------------------------------------------------------------------------【參考答案】

void

fun

(int

array[3][3])

{

int

i,j,t;

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

/*將右上三角和左下三角對換,實(shí)現(xiàn)行列互換*/

for(j=i+1;j<3;j++)

{t=array[i][j];

array[i][j]=array[j][i];

array[j][i]=t;

}

}

【解題思路】

要實(shí)現(xiàn)矩陣轉(zhuǎn)置,即將右上角數(shù)組元素和左下角數(shù)組元素對換,本題通過數(shù)組元素交換方法,完成矩陣轉(zhuǎn)置操作。

因?yàn)閷仃囖D(zhuǎn)置后仍然存回其本身,所以只能循環(huán)矩陣中的一個角(本程序是右上半三角)??刂朴疑习肴堑姆椒ㄊ窃趦?nèi)層循環(huán)中循環(huán)變量j從i+1或i開始。第八套程序填空給定程序中,函數(shù)fun的功能是:找出N×N矩陣中每列元素中的最大值,并按順序依次存放于形參b所指的一維數(shù)組中。

請?jiān)诔绦虻南庐嬀€處填入正確的內(nèi)容并把下畫線刪除,使程序得出正確的結(jié)果。

注意:部分源程序在文件BLANK1.C中。

不得增行或刪行,也不得更改程序的結(jié)構(gòu)!-----------------------------------------------------------------------------------------------------------------#include<stdio.h>#defineN4voidfun(int(*a)[N],int*b){inti,j;for(i=0;i<N;i++){/**********found**********/b[i]=__1__;for(j=1;j<N;j++)/**********found**********/if(b[i]__2__a[j][i]) b[i]=a[j][i];}}main(){intx[N][N]={{12,5,8,7},{6,1,9,3},{1,2,3,4},{2,8,4,3}},y[N],i,j;printf("\nThematrix:\n");for(i=0;i<N;i++){for(j=0;j<N;j++)printf("%4d",x[i][j]);printf("\n");}/**********found**********/fun(__3__);printf("\nTheresultis:");for(i=0;i<N;i++)printf("%3d",y[i]);printf("\n");}-----------------------------------------------------------------------------------------------------------------【參考答案】

(1)a[0][i]

(2)<

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論