版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2030年中國柴油機(jī)深井泵項(xiàng)目可行性研究報告
- 2024-2030年中國果脯軟糖行業(yè)市場運(yùn)營模式及未來發(fā)展動向預(yù)測報告
- 2024-2030年中國杜仲茶行業(yè)市場競爭力策略及投資盈利分析報告
- 2024-2030年中國木本油料行業(yè)規(guī)模預(yù)測及項(xiàng)目可行性分析報告
- 2024-2030年中國月子中心行業(yè)經(jīng)營管理及投資規(guī)劃分析報告版
- 2024-2030年中國智慧農(nóng)業(yè)行業(yè)發(fā)展現(xiàn)狀規(guī)模研究報告
- 2024-2030年中國舊金屬回收行業(yè)供需狀況發(fā)展戰(zhàn)略規(guī)劃分析報告
- 2024-2030年中國旅游產(chǎn)業(yè)經(jīng)營模式及未來發(fā)展規(guī)劃預(yù)測報告
- 裝飾工程材料進(jìn)場計劃及其保證措施
- 年度突發(fā)環(huán)境事件隱患排查計劃
- 《嬰幼兒活動設(shè)計與指導(dǎo)》 課件-13-18月兒童親子活動指導(dǎo)
- 2024-2025學(xué)年七年級上學(xué)期歷史觀點(diǎn)及論述題總結(jié)(統(tǒng)編版)
- 面部設(shè)計美學(xué)培訓(xùn)
- 制冷原理與設(shè)備(上)知到智慧樹章節(jié)測試課后答案2024年秋煙臺大學(xué)
- 2020年同等學(xué)力申碩《計算機(jī)科學(xué)與技術(shù)學(xué)科綜合水平考試》歷年真題及答案
- 20世紀(jì)西方音樂知到智慧樹期末考試答案題庫2024年秋北京大學(xué)
- 膿毒癥及膿毒癥休克
- 人教版八年級上冊英語1-4單元測試卷(含答案)
- 四年級數(shù)學(xué)(上)計算題專項(xiàng)練習(xí)及答案
- 帶式輸送機(jī)機(jī)械設(shè)計課程設(shè)計(帶式輸送機(jī))
- (人教版2024版)道德與法治七上第三單元 珍愛我們的生命 單元復(fù)習(xí)課件
評論
0/150
提交評論