計算機二級上C語言機題庫_第1頁
計算機二級上C語言機題庫_第2頁
計算機二級上C語言機題庫_第3頁
計算機二級上C語言機題庫_第4頁
計算機二級上C語言機題庫_第5頁
已閱讀5頁,還剩133頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第1套:

1.填空題

給定程序中,函數(shù)fun的功能是:將形參n所指變量中,各位上為偶數(shù)的數(shù)去除,剩余的數(shù)

按原來從高位到低位的順序組成一個新的數(shù),并通過形參指針n傳回所指變量。例如,輸入

一個數(shù):27638496,新的數(shù)為:7391.

voidfun(unsignedlong*n)

{unsignedlongx=0,i;intt;

i=l;

while(*n)

y**********founc|**********/

{t=*n%_l_;

/**********found**********/

if(t%2!=_2_)

{x=x+t*i;i=i*10;}

*n=*n/10;

)

y**********found**********/

*n=3;

答案:⑴10(2)0(3)x

2.改錯題

給定程序MODI1.C中函數(shù)fun的功能是:計算n!。例如,給n輸入5,則輸出120.000000。

doublefun(intn)

{doubleresult=1.0;

/************found************/

ifn==0

return1.0;

while(n>1&&n<170)

/************found************/

result*=n-

returnresult;

)

答案:(l)if(n==0)⑵result*=n--;

3.編程題

請編寫一個函數(shù)fun,它的功能是:將一個數(shù)字字符串轉(zhuǎn)換為一個整數(shù)。例如,若輸入字符

串"-1234",則函數(shù)把它轉(zhuǎn)換為整數(shù)數(shù)值-1234。

longfun(char*p)

{inti,len,t;/*len為串長,t為正負標識*/

longx=0;

len=strlen(p);

if(p[O]=='-')

{t=-l;len-;p++;}

elset=l;

/*以下完成數(shù)字字符串轉(zhuǎn)換為■個數(shù)字*/

while(*p)x=x*10-48+(*p++);

returnx*t;

第2套:

1.填空題

給定程序中,函數(shù)fun的功能是將形參給定的字符串、整數(shù)、浮點數(shù)寫到文本文件中,再用

字符方式從此文本文件中逐個讀入并顯示在終端屏幕上。

voidfun(char*szinta,doublef)

{/**********found*********7

charch;

fp=fopen("filel.txt"z"w");

H

fprintf(fp,%s%d%f\n"zs,a,f);

fclose(fp);

fp=fopen("filel.txt"z"r");

printf("\nTheresult:\n\n");

ch=fgetc(fp);

/**********found*********7

while(!feof(_2_)){

/**********foun(j**********/

putchar(_3_);ch=fgetc(fp);}

putchar('\n');

fclose(fp);

)

答案:⑴FILE*⑵fp(3)ch

2.改錯題

給定程序M0DI1.C中函數(shù)fun的功能是:依次取出字符串中所有數(shù)字字符,形成的字符串,

并取代原字符串。

voidfun(char*s)

{intij;

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

if(s[i]>='O'&&s[i]<='9')

/**********found**********/

s[j]=s[i];

/**********found**********/

s[j]="\O";

答案:⑴S[j++]=s[i];(2)sO]='\0';

3.編程題

請編寫函數(shù)fun,函數(shù)的功能是:將m行n列的二維數(shù)組中的字符數(shù)據(jù),按列的順序依次放

到一個字符串中。例如,二維數(shù)組中的數(shù)據(jù)為:

wwww

ssss

HHHH

則字符串中的內(nèi)容應(yīng)該是:WSHWSHWSHo

voidfun(chars[][N],char*b)

{inti,j,n=O;

for(i=0;i<N;i++)/*請?zhí)顚懴鄳?yīng)語句完成其功能*/

{for(j=0;j<M;j++){

b[n]=s[j][i];

n=i*M+j+1;

)

)

b[n]='\0';

)

第3套:

L填空題

程序通過定義學生結(jié)構(gòu)體變量,存儲了學生的學號,姓名和3門課的成績。所有學生數(shù)據(jù)均

以二進制方式輸出到文件中。函數(shù)fun的功能是重寫形參filename所指文件中最后一個學生

的數(shù)據(jù),即用新的學生數(shù)據(jù)覆蓋該學生原來的數(shù)據(jù),其它學生的數(shù)據(jù)不變。

voidfun(char*filename,STUn)

{FILE*fp;

/**********found**********/

fp=fopen(_l_,"rb+");

/**********found**********/

fseek(_2_,-lL*sizeof(STU),SEEK_END);

/**********found**********/

fwrite(&nzsizeoffSTU),1,_3_);

fclose(fp);

答案:(l)filename(2)fp⑶fp

2,改錯題

給定程序M0DI1.C中的函數(shù)Creatlink的功能是創(chuàng)建軍帶頭結(jié)點的單向鏈表,并為各結(jié)點數(shù)

據(jù)域賦。到m-1的值。

NODE*Creatlink(intn,intm)

{NODE*h=NULL,*p,*s;

inti;

/**********found***********/

p=(NODE)malloc(sizeof(NODE));

h=P;

p->next=NULL;

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

{s=(NODE*)malloc(sizeof(NODE));

s->data=rand()%m;s->next=p->next;

p->next=s;p=p->next;

)

/**********found***********/

returnp;

答案:

(l)p=(NODE*)malloc(sizeof(NODE));

(2)returnh;

3.編程題

請編寫函數(shù)fun,函數(shù)的功能是:統(tǒng)計?行字符串中單詞的個數(shù),作為函數(shù)值返回。-行字符

串在主函數(shù)中輸入,規(guī)定所有的單詞由小寫字母組成,單詞之間由若干個空格隔開,一行的

開始沒有空格。

intfun(char*s)

{intk=1;

while(*s){

if(*s=='')k++;

s++;

)

returnk;

第4套:

1.填空題

程序通過定義學生結(jié)構(gòu)體變量,存儲了學生的學號、姓名和3門課的成績。所有學生數(shù)據(jù)均

以二進制方式輸出到文件中,函數(shù)fun的功能是從形參filename所指的文件中讀入學生數(shù)據(jù),

并按照學號從小到大排序后,再用二進制方式把排序后的學生數(shù)據(jù)輸出到filename所指的

文件中,覆蓋原來的文件內(nèi)容。

voidfun(char*filename)

{FILE*fp;inti,j;

STUs[NLt;

/**********found**********/

fp=fopen(filename,_1_);

fread(s,sizeof(STU),N,fp);

fclose(fp);

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

for(j=i+l;j<N;j++)

/**********found**********/

if(s[i].sno_2_s[j].sno)

{t=s[i];s[i]=s[j];s[j]=t;}

fp=fopen(filename/"wb");

/**********foun(j**********/

_3_(s,sizeof(STU),N,fp);/*二進制輸出*/

fclose(fp);

答案:⑴"rb"(2)>(3)fwrite

2.改錯題

給定程序M0DI1.C中函數(shù)fun的功能是:在字符串的最前端加入n個*號,形成新串,并且

覆蓋原串。注意:字符串的長度最長允許為79。

voidfun(chars[],intn)

{chara[80],*p;

inti;

/**********found***********/

s=p;

for(i=0;i<n;i++)a[i]='*';

do

{a[i]=*P;

i++;

)

/**********found***********/

while(*p++)

a[i]=0;

strcpy(s,a);

}

答案:(l)p=s;(2)while(*p++);

3.編程題

請編寫函數(shù)fun,函數(shù)的功能是:統(tǒng)計各年齡段的人數(shù)。N個年齡通過調(diào)用隨機函數(shù)獲得,

并放在主函數(shù)的age數(shù)組中;要求函數(shù)把0至9歲年齡段的人數(shù)放在d⑼中,把10至19歲

年齡段的人數(shù)放在d[l]中,把20至29歲年齡段的人數(shù)放在d⑵中,其余依次類推,把100

歲(含100歲)以上年齡的人數(shù)放在d[10]中。結(jié)果在主函數(shù)中輸出。

voidfun(int*a,int*b)

{inti,j;

for(i=0;i<M;i++)b[i]=0;

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

j=a[i]/10;

if(j>10)b[M-1]++;elseb[j]++;

第5套:

1.填空題

給定程序中,函數(shù)fun的功能是將參數(shù)給定的字符串、整數(shù)浮點數(shù)寫到文本文件中,再用字

符串方式從此文本文件中逐個讀入,并調(diào)用庫函數(shù)atoi和atof將字符串轉(zhuǎn)換成相應(yīng)的整數(shù)、

浮點數(shù),然后將其顯示在屏幕上。

voidfun(char*s,inta,doublef)

{/**********found**********/

_1—fp;

charstr[100],strl[100]zstr2[100];

intal;doublefl;

fp=fopen("filel.txt"z"w");

fprintf(fp,"%s%d%f\n",s,a,f);

/**********found**********/

_2_;

fp=fopenC'filel.txt",Mr");

/**********found**********!

fscanf(_3_,"%s%s%s",str,strl,str2);

fclose(fp);

al=atoi(strl);

fl=atof(str2);

H

printf(\nTheresult:\n\n%s%d%f\n"zstr,al,fl);

)

答案:⑴FILE*(2)fclose(fp)(3)fp

2.改錯題

給定程序MODILC中函數(shù)fun的功能是:對n名學生的學習成績,按從高到低的順序找出

前m(mW10)名學生來,并將這些學生數(shù)據(jù)存放在一個動態(tài)分配的連續(xù)存儲區(qū)中,此存儲區(qū)

的首地址作為函數(shù)值返回。

STU*fun(STUa[],intm)

{STUb[N],*t;

inti,j,k;

/**********found**********/

t=(STU*)calloc(sizeof(STU),m)

for(i=0;i<N;i++)b[i]=a[i];

for(k=0;k<m;k++)

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

if(b[i].s>b[j].s)j=i;

/**********found**********/

t(k)=b(j);

b[j].s=O;

)

returnt;

)

答案:(l)t=(STU*)calloc(sizeof(STU),m);

(2)t[k]=b[j];

3.編程題

請編寫函數(shù)fun,函數(shù)的功能是:刪去?維數(shù)組中所有相同的數(shù),使之只剩?個。數(shù)組中的

數(shù)已按由小到大的排序排列,函數(shù)返回刪除后數(shù)組中數(shù)據(jù)的個數(shù)。例如,一維數(shù)組中的數(shù)據(jù)

是:2223445666677899101010o除后,數(shù)組中的內(nèi)容應(yīng)該是:2345678910?

intfun(inta[],intn)

{inti,j=1,k=a[O];

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

if(k!=a[i]){

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

k=a[i];

)

a[j]=0;

returnj;

)

第6套:

1.填空題

給定程序中,函數(shù)fun的功能是根據(jù)形參i的值返回某個函數(shù)的值。當調(diào)用正確時,程序輸

出:Xl=5.000000,X2=3.000000,xl*xl+xl*x2=40.000000

/**********found**********/

_1_fun(inti,doublex,doubley)

{if(i==l)

/**********found**********/

return_2_(x);

else

/**********found**********/

return_3_(x,y);

答案:⑴double(2)fl(3)f2

2.改錯題

給定程序M0DI1.C中函數(shù)fun的功能是:比較兩個字符串,將長的那個字符串的首地址作為

函數(shù)值返回。

/**********^Q^p£|**********/

charfun(char*s,char*t)

{intsl=O,tl=O;char*ssz*tt;

ss=s;tt=t;

while(*ss)

{sl++;

/**********found**********/

(*ss)++;

)

while(*tt)

{tl++;

/**********^QUQJ**********/

(*?)++;

)

if(tl>sl)returnt;

elsereturns;

)

答案:⑴char*fun(char*s,char*t)

(2)ss++;(3)tt++;

3.編程題

請編寫函數(shù)fun,函數(shù)的功能是:移動字符串中的內(nèi)容,移動的規(guī)則如下:把第1到第m個

字符,平移到字符串的最后,把第m+1到最后的字符移動到字符串的前部。例如,字符串

中原有的內(nèi)容為:ABCDEFGHIJK,m的值為3,則移動后,字符串中的內(nèi)容應(yīng)該是:DEFGHIJKABC。

voidfun(char*w,intm)/*可調(diào)用funl函數(shù)左移字符*/

{inti;

for(i=0;i<m;i++)funl(w);

第7套:

1.填空題

程序通過定義并賦初值的方式,利用結(jié)構(gòu)體變量存儲了一名學生的信息。函數(shù)fun的功能是

輸出這位學生的信息。

/**********found**********/

voidshow(STU___1___)

{inti;

printf("\n%d%s%c%d-%d-%d",tt.num,,tt.sex,

tt.birthday.year,tt.birthday.month,tt.birthday.day);

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

/**********found**********/

printf("%5.1f"z—2—);

printf("\n");

main()

{STUstd={l,”Zhanghua,'M',1961,10,8,76.5,78.0,82.0};

printf("\nAstudentdata:\n");

/**********found**********/

show(-3一);

答案:⑴tt(2)tt.score[i](3)std

2.改錯題

給定程序MODI1.C中函數(shù)fun的功能是:求出數(shù)組中最大數(shù)和次最大數(shù),并把最大數(shù)和a[0]

中的數(shù)對調(diào)、次最大數(shù)和a[l]中的數(shù)對調(diào)。

intfun(int*a,intn)

{inti,m,t,k;

for(i=0;i<2;i++){

/**********founcl**********/

m=0;

for(k=i+l;k<n;k++)

/**********found**********/

if(a[k]>a[m])k=m;

t=a[i];a[i]=a[m];a[m]=t;

)

答案:(l)m=i;(2)if(a伙]>a[m])m=k;

3.編程題

請編寫一個函數(shù)unsignedfun(unsignedw),w是一個大于10的無符號整數(shù),若w是n(n22)

位的整數(shù),函數(shù)求出w的低n-l位的數(shù)作為函數(shù)值返回。例如:w值為5923,則函數(shù)返回

923;w值為923則函數(shù)返回23。

unsignedfun(unsignedw)

{if(w>10000)w%=10000;

elseif(w>1000)w%=1000;

elseif(w>100)w%=100;

elseif(w>10)w%=10;

returnw;

第8套:

L填空題

給定程序通過定義并賦初值的方式,利用結(jié)構(gòu)體變量存儲了?名學生的學號、姓名和3門課

的成績。函數(shù)fun的功能是將該學生的各科成績都乘以一個系數(shù)a。

/**********found**********/

voidmodify(___1___*ss,floata)

{inti;

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

/**********found**********/

ss->___2___*=a;

)

main()

{STUstd={l/"Zhanghua",76.5,78.0,82.0};

floata;

printf("\nTheoriginalnumberandnameandscores:\n");

show(std);

printf("\nlnputanumber:");scanf("%f",&a);

/**********found**********

modify(___3___,a);

printf("\nAresultofmodifying:\nH);

show(std);

答案:(l)STU(2)score[i](3)&std

2.改錯題

給定程序M0DILC中函數(shù)fun的功能是:求k!(k<13),所求階乘的值作為函數(shù)值返回。例如:

若k=10,則應(yīng)輸出:3628800c

longfun(intk)

{/************found***********7

ifk>0

return(k*fun(k-l));

/************found************/

elseif(k=0)

returnIL;

答案:⑴if(k>0)(2)elseif(k==0)

3.編程題

程序定義了nXn的二維數(shù)組,并在主函數(shù)中自動賦值。請編寫函數(shù)Fun(inta[][NLintn),函

數(shù)的功能是:使數(shù)組左下三角元素中的值乘以n?

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

a=197397

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

456

121518

intfun(inta[][N],intn)

{inti,j;

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

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

a[i][j]*=n;

第9套:

1.填空題

給定程序中,函數(shù)fun的功能是將不帶頭節(jié)點的單向鏈表結(jié)點數(shù)據(jù)域中的數(shù)據(jù)從小到大排序。

即若原鏈表結(jié)點數(shù)據(jù)域從頭到尾的數(shù)據(jù)為:10、4、2、8、6,排序后鏈表結(jié)點數(shù)據(jù)域從頭至

尾的數(shù)據(jù)為:2、4、6、8、10?

voidfun(NODE*h)

{NODE*p,*q;intt;

P=h;

while(p){

/**********^Q^p£|**********/

q=_i_;

/**********^QJJPQ|**********/

while(_2_)

{if(p->data>q->data)

{t=p->data;p->data=q->data;q->data=t;}

q=q->next;

)

y**********^Q|jp|^|**********/

P=_3_;

答案:(l)p->next(2)q(3)p->next

2.改錯題

給定程序M0DI1.C中函數(shù)fun的功能是:將s所指字符串的字母轉(zhuǎn)換為按字母序列的后續(xù)字

母(但Z轉(zhuǎn)換為A,z轉(zhuǎn)換為a),其它字符不變。

voidfun(char*s)

{/**********found***********/

while(*s!='@')

{if(*s>='A'&*s<='Z'11*s>='a'&&*s<='z')

{if(*s=='Z')*s='A';

elseif(*s=='z')*s='a';

else*s+=1;

)

/**********^QUP|^|***********/

(*s)++;

答案:(l)while(*s)(l)s++;

3.編程題

請編寫函數(shù)fun,函數(shù)的功能是:移動一維數(shù)組中的內(nèi)容;若數(shù)組中有n個整數(shù),要求把下

標從0到p(含p,p小于等于n-1)的數(shù)組元素平移到數(shù)組的最后。例如,一維數(shù)組中的原始

內(nèi)容為:1,2,3,4,5,6,7,8,9,10;p的值為3。移動后,-一維數(shù)組中的內(nèi)容應(yīng)為:

5,6,7,8,9,10,1,2,3,4。

voidfun(int*w,intp,intn)

{intiJ=0,b[N];

for(i=p+1;i<n;i++)b[j++]=w[i];

for(i=0;i<=p;i++)b[j++]=w[i];

for(i=0;i<n;i++)w[i]=b[i];

)

第10套:

1.填空題

給定程序中,函數(shù)fun的功能是:判定形參a所指的NXN(規(guī)定N為奇數(shù))的矩陣是否是吆J

方“,若是,函數(shù)返回值為1;不是,函數(shù)返回值為0?!盎梅健钡呐卸l件是:矩陣每行、每

列、主對角線及反對角線上元素之和都相等。例如,以下3X3的矩陣就是一個“幻方”:

492

357

816

intfun(int(*a)[N])

{intij,ml,m2,row,colum;

ml=m2=0;

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

{j=N-i-l;ml+=a[i][i];m2+=a[i][j];}

if(ml!=m2)return0;

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

/**********^QUQJ**********/

row=colum=_1_;

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

{row+=a[i][j];colum+=a[j][i];}

/**********found**********/

if((row!=colum)_2_(row!=ml))return0;

)

/**********found**********I

return_3_;

}

答案:⑴o(2)11(3)1

2.改錯題

給定程序MODI1.C中fun函數(shù)的功能是:根據(jù)整型形參m,計算如下公式的值。

111

T=l-------------------------------------

23m

例如,若主函數(shù)中輸入5,則應(yīng)輸出-0.283333

doublefun(intm)

{doublet=1.0;

inti;

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

/**********found**********/

t=1.0-1/i;

/**********found**********/

答案:⑴t=t-1.0/i;(2)returnt;

3.編程題

請編寫一個函數(shù),函數(shù)的功能是刪除字符串中的所有空格。例如,主函數(shù)中輸入"asdafaa

z67",則輸出為"asdafaaz67"?

intfun(char*str)

{char*p=str;

inti=0;

while(*p){

if(*p!='')str[i++]=*p;

P++;

)

str[i]=0;

}

第11套:

1.填空題

給定程序中,函數(shù)fun的功能是將帶頭結(jié)點的單向鏈表逆置。即若原鏈表中從頭到尾結(jié)點數(shù)

據(jù)域依次為:2、4、6、8、10,逆置后,從頭到尾結(jié)點數(shù)據(jù)域依次為:10、8、6、4、2。

voidfun(NODE*h)

{NODE*p,*q,*r;

/**********found**********/

P=

/**********found**********/

if(p==_2_)return;

q=p->next;

p->next=NULL;

while(q)

{r=q->next;q->next=p;

/**********found**********/

p=q;q=_3_;

}

h->next=p;

)

答案:(l)next(2)0(3)r

2.改錯題

給定程序MODI1.C中函數(shù)fun的功能是:計算s所指字符串中含有t所指字符串的數(shù)目,并

作為函數(shù)值返回。

intfun(char*s,char*t)

{intn;

char*p,*r;

n=0;

while(*s)

{p=s;

/*********found**********/

r=p;

while(*r)

if(*r==*p){r++;p++;}

elsebreak;

/*********found**********I

if(*r=0)

n++;

s++;

)

returnn;

}

答案:(l)r=t;(2)if(*r==0)

3.編程題

請編寫函數(shù)fun,函數(shù)的功能是:將放在字符串數(shù)組中的m個字符串(每串的長度不超過n),

按順序合并組成一個新的字符串。函數(shù)fun中給出的語句僅供參考。例如,字符串數(shù)組中的

M個字符串為

AAAA

BBBBBBB

CC

則合并后的字符串的內(nèi)容應(yīng)是:AAAABBBBBBBCCo

voidfun(chara[M][N]zchar*b)

{/*以下代碼僅供參考*/

inti;*b=0;

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

strcat(b,a[i]);

第12套:

1.填空題

給定程序中,函數(shù)fun的功能是將不帶頭結(jié)點的單向鏈表逆置。即若原鏈表中從頭到尾結(jié)點

數(shù)據(jù)域依次為:2、4、6、8、10,逆置后,從頭至尾結(jié)點數(shù)據(jù)域依次為:10、8、6、4、2。

/**********found**********/

_1_*fun(NODE*h)

{NODE*p,*qz*r;

P=h;

if(p==NULL)

returnNULL;

q=p->next;

p->next=NULL;

while(q)

{/**********found*********7

r=q->_2_j

q->next=p;

p=q;

/**********found**********/

q=_3_;

)

returnp;

答案:⑴NODE(2)next(3)r

2.改錯題

給定程序M0DI1.C中函數(shù)fun的功能是:將S所指字符串中位于奇數(shù)位置的字符或ASCII碼

為偶數(shù)的字符放入t所指數(shù)組中(規(guī)定第一個字符放在第0位中)。例如,字符串中的數(shù)據(jù)為:

AABBCCDDEEFF,則輸出應(yīng)當是:ABBCDDEFF

voidfun(char*s,chart[])

{inti,j=0;

for(i=0;i<strlen(s);i++)

/***********found**********/

if(i%2&&s[i]%2==0)

t[j++]=s[i];

/***********found**********/

t[i]='\O';

答案:⑴if(i%211s[i]%2==0)

⑵51=2;

3.編程題

請編寫函數(shù)fun,函數(shù)的功能是:將m行n列的二維數(shù)組中的數(shù)據(jù),按列的順序依次放到一

維數(shù)組中。函數(shù)fun中給出的語句僅供參考。例如,二維數(shù)組中的數(shù)據(jù)為:

33333333

44444444

55555555

則一維數(shù)組中的內(nèi)容應(yīng)是:334455334455334455334455。

voidfun(int(*s)[10],int*b,int*n,intmm,intnn)

{intij,np=0;/*np用作b數(shù)組下標*/

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

for(j=0;j<mm;j++){

b[np]=s[j][i];

np=i*mm+j+1;

)

*n=np;

第13套:

1.填空題

給定程序中,函數(shù)fun的功能是將帶頭節(jié)點的單向鏈表結(jié)點數(shù)據(jù)域中的從頭到尾結(jié)點數(shù)據(jù)域

依次為:10、4、2、8、6,逆置后,從頭至尾結(jié)點數(shù)據(jù)域依次為:2、4、6、8、10。

voidfun(NODE*h)

{NODE*p,*q;intt;

/**********foun(j**********/

P=_1—;

while(p){

/**********found**********/

q=_2_;

while(q){

/**********found**********/

if(p->data_3_q->data)

{t=p->data;p->data=q->data;q->data=t;}

q=q->next;

)

p=p->next;

}

答案:(l)h->next(2)p->next(3)>=

2.改錯題

給定程序M0DI1.C是建立一個帶頭結(jié)點的單向鏈表,并用隨機函數(shù)為各結(jié)點數(shù)據(jù)域賦值。

函數(shù)fun的作用是求出單向鏈表結(jié)點(不包括頭結(jié)點)數(shù)據(jù)域中的最大值并且作為函數(shù)值返回。

fun(NODE*h)

{intmax=-l;

NODE*p;

/***********found**********/

P=h;

while(p)

{if(p->data>max)

max=p->data;

/***********found**********/

p=h->next;

}

returnmax;

)

答案:⑴p=h->next;(2)p=p->next;

3.編程題

請編寫函數(shù)fun,函數(shù)的功能是:將M行N列的二維數(shù)組中的數(shù)據(jù),按行的順序依次放到

一維數(shù)組中,一維數(shù)組中數(shù)據(jù)的個數(shù)存放在形參n所指的存儲單元中。例如,二維數(shù)組中的

數(shù)據(jù)為:

33333333

44444444

55555555

則一維數(shù)組中的內(nèi)容應(yīng)是:

333333334444444455555555。

voidfun(int(*s)[10],int*b,int*n,intmm,intnn)

{inti,j,k;

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

for(j=0;j<nn;j++){

k=i*nn+j;

b[k]=s[i]U];

)

*n=mm*nn;

)

第14套:

L填空題

給定程序中,函數(shù)fun的功能是用函數(shù)指針指向要調(diào)用的函數(shù),并進行調(diào)用。規(guī)定在2處使

f指向函數(shù)fl,在3處使f指向函數(shù)f2。當調(diào)用正確時,程序輸出:Xl=5.000000,x2=3.000000

xl*xl+xl*x2=40.00000

doublefun(doublea,doubleb)

"**********found**********/

doublerlzr2;

/**********found**********!

f=_2_;/*pointfountionfl*/

rl=f(a);

y**********^Qm-j^|**********I

3/*pointfountionf2*/

r2=(*f)(a,b);

returnrl+r2;

}

答案:⑴double⑵fl⑶f2

2.改錯題

請編寫函數(shù)fun,函數(shù)的功能是:判斷字符串是否為回文?若是,函數(shù)返回1,主函數(shù)中輸

出:YES,否則返回0,主函數(shù)中輸出N。?;匚氖侵疙樧x和倒讀都一樣的字符串。例如,字

符串LEVEL是回文,而字符串123312就不是回文。

intfun(NODE*h)

{intsum=0;

NODE*p;

/***********found**********j

P=h;

while(p)

{if(p->data%2==0)

sum+=p->data;

/***********found**********/

p=h->next;

)

returnsum;

答案:(l)p=h->next;(2)p=p->next;

3.編程題

請編寫函數(shù)fun,函數(shù)的功能是:判斷字符串是否為回文?若是,函數(shù)返回1,主函數(shù)中輸

出:YES,否則返回0,主函數(shù)中輸出N。?;匚氖侵疙樧x和倒讀都一樣的字符串。例如,字

符串LEVEL是回文,而字符串123312就不是回文。

intfun(char*str)

{inti,j=strlen(str);

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

if(str[i]!=str[j-i-1])return0;

return1;

第15套:

1.填空題

程序通過定義學生結(jié)構(gòu)體變量,存儲了學生的學號、姓名和3門課的成績。所有學生數(shù)據(jù)均

以二進制方式輸出到student.dat文件中。函數(shù)fun的功能是從指定文件中找出指定學號的

學生數(shù)據(jù),讀入此學生數(shù)據(jù),對該生的分數(shù)進行修改,使每門課的分數(shù)加3分,修改后重寫

文件中該學生的數(shù)據(jù),即用該學生的新數(shù)據(jù)覆蓋原數(shù)據(jù),其它學生數(shù)據(jù)不變;若找不到,則

什么都不做。

voidfun(char*filename,longsno)

{FILE*fp;

STUn;inti;

fp=fopen(filename,"rb+");

/**********found**********/

while(!feof(_1_))

{fread(&n,sizeoffSTU),1,fp);

/**********found**********/

if(n.sno_2_sno)break;

if(!feof(fp))

{for(i=0;i<3;i++)n.score[i]+=3;

/**********found**********/

fseek(_3一-lL*sizeof(STU),SEEK_CUR);

fwrite(&n,sizeof(STU),1,fp);

)

fclose(fp);

答案:⑴fp(2)==⑶fp

2.改錯題

給定程序M0DI1.C中函數(shù)fun的功能是:利用插入排序法對字符串中的字符按從小到大的順

序進行曲排序。插入法的基本算法是:先對字符串中的頭兩個元素進行排序。然后把第三個

字符插入到前三個字符依然有序;再把第四個字符插入到前三個字符中,……。待排序的字

符串已在主函數(shù)中賦予。

voidinsert(char*aa)

{inti,j,n;charch;

/**********found**********

n=strlen[aa];

for(i=l;i<n;i++){

/**********found**********/

c=aa[i];

j=i-l;

while((j>=0)&&(ch<aa[j]))

{aa[j+l]=aa[j];

)

aaO+l]=ch;

)

)

答案:(l)n=strlen(aa);(2)ch=aa[i];

3.編程題

N名學生的成績已在主函數(shù)中放入?個帶頭節(jié)點的鏈表結(jié)構(gòu)中,h指向鏈表的頭節(jié)點。請編

寫函數(shù)fun,它的功能是:找出學生的最高分,由函數(shù)值返回。

doublefun(STREC*h)

{doublemax=h->s;

STREC*p;

p=h->next;

while(p)

{if(p->s>max)

max=p->s;

p=p->next;

returnmax;

第16套:

1.填空題

給定程序中,函數(shù)fun的功能是:求出形參ss所指字符串數(shù)組中最長字符串的長度,將其

余字符串右邊用字符*補齊,使其與最長的字符串等長。ss所指字符串數(shù)組中共有M個字符

串,且串長<N。

voidfun(char(*ss)[N])

{int\,n,len=0;

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

{len=strlen(ss[i]);

if(i==O)n=len;

if(len>n)n=len;

)

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

/**********found**********!

n=strlen(___1___);

for(j=0;j<len-n;j++)

/**********found**********/

SS[>][—2—

/**********found**********/

ss[i][n+j+-3_]='\0';

)

)

答案:(l)ss[i](2)n+j(3)1

2.改錯題

給定程序M0DI1.C中fun函數(shù)的功能是:將p所指字符串中每個單詞的最后一個字母改成大

寫。(這里的"單詞"是指由空格隔開的字符串)。例如,若輸入"Iamastudenttotake

theexamination.",則應(yīng)輸出"IaMAstudenTtOtakEthEexamination.",,

voidfun(char*p)

{intk=0;

for(;*p;p++)

if(k)

{/**********found***********/

if(p==")

{k=0;

/**********found***********/

*(p-l)=toupper(*(p-l))

)

)

else

k=1;

}

答案:⑴if(*P==)

(2)*(p-1)=toupper(*(p-1));

3.編程題

請編寫函數(shù)fun,對長度為7個字符的字符串,除首、尾字符外,將其余5個字符按ASCII

碼降序排列。例如,原來的字符串為CEAedca,排序后輸出為CedcEAa。

intfun(char*s,intnum)

{charch;

inti,j;

for(i=1;i<6;i++)

for(j=i+l;j<6;j++){

if(*(s+i)<*(s+j)){

ch=*(s+j);

*(s+j)=*(s+i);

*(s+i)=ch;

)

)

1.填空題

程序通過定義學生結(jié)構(gòu)體數(shù)組,存放了若干名學生的學號、姓名和3門課的成績。函數(shù)fun

的功能是將存放學生數(shù)據(jù)的結(jié)構(gòu)體數(shù)組,按照姓名的字典序(從小到大)排序。

voidfun(structstudenta[],intn)

{/**********founc|**********/

1t;

inti,j;

/**********found**********/

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

for(j=i+l;j<n;j++)

/**********found**********/

if(strcmp(_3_)>0)

{t=a[i];a[i]=a[j];a[j]=t;}

答案:(l)structstudent(2)n-l

(3)a[i].name,a[j].name

2,改錯題

給定程序M0DI1.C中函數(shù)fun的功能是:在p所指字符串中找出ASCII碼值最大的字符,將

其放在第一個位置上;并將該字符前的原字符向后順序移動。例如,調(diào)用fun函數(shù)之前給字

符串輸入:ABCDeFGH,調(diào)用后字符串中的內(nèi)容為:eABCDFGHo

fun(char*p)

{charmax,*q;inti=0;

max=p[i];

while(p[i]!=0)

{if(max<p[i])

{max=p[i];

/**********found**********/

q=p+i

)

i++;

)

/**********found**********/

wihle(q>p)

{*q=*(q-l);

q-;

)

p[0]=max;

答案:⑴q=p+i;(2)while(q>p)

3.編程題

學生的記錄由學號和成績組成,N名學生的數(shù)據(jù)已在主函數(shù)中放入結(jié)構(gòu)體數(shù)組s中,請編寫

函數(shù)fun,它的功能是;把指定分數(shù)范圍內(nèi)的學生數(shù)據(jù)放在b所指的數(shù)組中,分數(shù)范圍內(nèi)的

學生人數(shù)由函數(shù)值返回。例如,輸入的分數(shù)是6069,則應(yīng)當把分數(shù)在60到69的學生數(shù)

據(jù)進行輸出,包含60分利69分的學生數(shù)據(jù)。主函數(shù)中將把60放要low中,把69放在heigh

中。

intfun(STREC*a,STREC*b,intI,inth)

{inti,j=0;

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

if(a[i].s>=I&&a[i].s<=h)b[j++]=a[i];

returnj;

)

第18套:

L填空題

給定程序中,函數(shù)fun的功能是:將形參s所指字符串中的所有字母字符順序前移,其他字

符順序后移,處理后新字符串的首地址作為函數(shù)值返回。例如,s所指字符串為:

asdl23fgh543df,處理后新字符串為asdfghdfl23543.

char*fun(char*s)

{int\,j,k,n;char*p,*t;

n=strlen(s)+l;

t=(char*)malloc(n*sizeof(char));

p=(char*)malloc(n*sizeof(char));

j=0;k=0;

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

{if(((s[i]>='a')&&(s[i]<='z'))11((s[i]>='A')&&(s[i]<=2'))){

/**********found**********/

皿=_l_;j++;}

else

{p[k]=s[i];k++;}

)

/**********foun(j**********/

for(i=0;i<_2_;i++)t[j+i]=p[i];

/**********found**********/

t[j+k卜_3_;

returnt;

)

答案:⑴s[i](2)k(3)0

2.改錯題

給定程序M0DI1.C中函數(shù)fun的功能是:將s所指字符串中最后一次出現(xiàn)的與tl所指字符

串相同的子串替換成t2所指字符串,所形成的新串放在w所指的數(shù)組中。此處,要求tl和

t2所指字符串的長度相同。例如,當s所指字符串中的內(nèi)容為:"abcdbfabc",tl所指子串中

的內(nèi)容為:"abcdabf99c”。

intfun(char*s,char*tl,char*t2,char*w)

{inti;char*p,*r,*a;

strcpy(w,s);

/************^QJJp^j************!

while(w)

{p=w;r=tl;

while(*r)

/************found************/

IF(*r==*p)

{r++;p++;}

elsebreak;

if(*r=='\0')a=w;

w++;

)

r=t2;

while(*r){*a=*r;a++;r++;}

}

答案:⑴while(*w)(2)if(*r==*p)

3.編程題

函數(shù)fun的功能是:將s所指字符串中ASCII值為奇數(shù)的字符刪除,串中剩余字符形成一個

新串放在t所指的數(shù)組中。例如,若S所指字符串中的內(nèi)容為:"ABCDEFG12345",其中字符

A的ASCII碼值為奇數(shù)、…、字符1的ASCII碼值也為奇數(shù)、…都應(yīng)當刪除,其它依次類推。

最后t所指的數(shù)組中的內(nèi)容應(yīng)是:"BDF24"。

voidfun(char*s,chart[])

{inti,j=0;

for(i=0;i<strlen(s);i++)if(s[i]%2==0)t[j++]=s[i];

t[j]=0;

)

第19套:

1.填空題

程序通過定義學生結(jié)構(gòu)體變量,存儲了學生的學號、姓名和3門課的成績。函數(shù)fun的功能

是將形參a所指結(jié)構(gòu)體變量s中的數(shù)據(jù)進行修改,并把a中的地址作為函數(shù)值返回主函數(shù),

要主函數(shù)中輸出修改后的數(shù)據(jù)。例如:a所指變量s中的學號、姓名、和三門課的成績依次

是:10001."zhangsan",95、80、88,修改后輸出t中的數(shù)據(jù)應(yīng)為:10002,"LiSi'\96、81、

89。

/**********found**********/

_1_fun(structstudent*a)

{inti;

a->sno=10002;

strcpy(a->name,"LiSi");

/**********foun(j**********/

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

/**********found**********/

return_3_;

)

答案:(l)structstudent(2)a->score[i]

(3)a

2.改錯題

給定程序M0DI1.C中函數(shù)fun的功能是:從N個字符串中找出最長的那個串,并將其地址

作為函數(shù)值返回。各字符串在主函數(shù)中輸入,并放入一個字符串數(shù)組中。

/**********found*********7

fun(char(*sq)[M])

{inti;char*sp;

sp=sq[O];

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

if(strlen(sp)<strlen(sq[i]))

sp=sq[i];

/**********foun(j**********/

returnsq;

)

答案:(l)char*fun(char(*sq)[M])

(2)returnsp;

3.編程題

函數(shù)fun的功能是:將a、b中的兩個兩位正整數(shù)合并形成一個新的整數(shù)放在c中。合并的

方式是:將a中的十位和個位數(shù)依次放在變量c的百位和個位上,b中的卜位和個位數(shù)依次

放在變量c的十位和千位上。例如,當a=45,b=12。調(diào)用該函數(shù)后,c=2415。

voidfun(inta,intb,long*c)

{*c=(b%10)*1000+(a/10)*100+(b/10)*10+a%10;

}

第20套:

L填空題

給定程序中,函數(shù)fun的功能是:計算形參x所指數(shù)組中N個數(shù)的平均值(規(guī)定所有數(shù)均為

正數(shù)),將所指數(shù)組中小于平均值的數(shù)據(jù)移至數(shù)組的前部,大于等于平均值的數(shù)據(jù)移至x所

指數(shù)組的后部,平均值作為函數(shù)值返回,在主函數(shù)中輸出平均值和移動后的數(shù)據(jù)。例如,有

10個正數(shù):4630324061745154826,平均值為:30.500000移動后

的輸出為:3061715264632404548

doublefunfdouble*x)

{inti,j;doubleav,y[N];

av=0;

/**********found**********/

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

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

if(x[i]<av){

/**********found*********7

y[j]=x[i];x[i]=-l;

i=0;

while(i<N)

{if(x[i]!=-l)yU++]=x[i];

/**********found**********/

_3_;

for(i=0;i<N;i++)x[i]=y[i];

returnav;

答案:⑴x[i]/N(2)j++⑶i++

2.改錯題

給定程序M0DI1.C中函數(shù)fun的功能是:統(tǒng)計字符串中各元音字母(即:A、E、I、0、U)的

個數(shù)。注意:字母不分大、小寫。例如:若輸入:THIsisaboot,則輸出應(yīng)該是:1、0、

2、2、Oo

fun(char*szintnum[5])

{intkzi=5;

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

y**********founc|**********/

num[i]

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論