2022年山東省萊蕪市全國計算機等級考試C語言程序設計真題(含答案)_第1頁
2022年山東省萊蕪市全國計算機等級考試C語言程序設計真題(含答案)_第2頁
2022年山東省萊蕪市全國計算機等級考試C語言程序設計真題(含答案)_第3頁
2022年山東省萊蕪市全國計算機等級考試C語言程序設計真題(含答案)_第4頁
2022年山東省萊蕪市全國計算機等級考試C語言程序設計真題(含答案)_第5頁
已閱讀5頁,還剩41頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

2022年山東省萊蕪市全國計算機等級考試

C語言程序設計真題(含答案)

學校:班級:姓名:考號:

一、2.填空題(10題)

1.數(shù)據(jù)字典是各類數(shù)據(jù)描述的集合,它通常包括5個部分,即數(shù)據(jù)項、

數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)流、和處理過程。

2.某二叉樹中度為2的結(jié)點有18個,則該二叉樹中有【】個葉子結(jié)

八占、、O

3.有以下程序段:

inta[10]={l,2,3,4,5,6,7,8,9』0},*p=&a[3],b;

b=p[5];

b中的值是【】。

4若有定義inta[4][4]={{l,2,3,4},{0},{4,6,8,10},{1,3,

5.7}),則初始化后,得到的初值是。

5.棧和隊列通常采用的存儲結(jié)構(gòu)是【】。

6.語句"int(*ptr)();”的含義是____是指向函數(shù)的指針,該函數(shù)返回一

個int型數(shù)據(jù)。

7.下面程序的運行結(jié)果是【】。

intf(inta[],intn)

{if(n>1)returna[O]+f(&a[l],n-l);

elsereturna[0];

}

main()

{intaa[3]={l,2,3},s;

s=f(&aa[O],3);

printf("%d\n",s);

)

8.閱讀下列程序,則程序的輸出結(jié)果為【】。

#include"stdio.h"

structty

{intdata;

charc;};

main()

{structtya={30,'x'};

fun(a);

printf("%d%c",a.data,a.c);}

fun(structtyb)

{b.data=20;

b.c='y';}

9.在關系模型中,把數(shù)據(jù)看成一個二維表,每一個二維表稱為一個

10.執(zhí)行下面程序段后,k值是【】。

k=l;n=263;

do

{k*=n%10;n/=10;

}while(n);

二、單選題(10題)

11.若有說明charsl[30]="Thecity",s2[]="isbeautiful";,則在使用函數(shù)

strcat(sl,s2)后,結(jié)果是()。

A.si的內(nèi)容更新為Thecityisbeautiful\0

B.sl的內(nèi)容更新為isbeaut\0

C.sl的內(nèi)容更新為Thecity'Oisbeautiful'。

D.sl的內(nèi)容更新為Thecityisbeautiful\O

12.有如下程序intfunc(inta,intb){return(a+b);}main()

{intx=2,y=5,z=8,r;r=func(fnnc(x,y),z);printf("%d\n",r);}

該程序的輸出結(jié)果是______o

A.12B.13C.14D.15

13.下列敘述中正確的是

A.C語言中既有邏輯類型也有集合類型

B.C語言中沒有邏輯類型但有集合類型

C.C語言中有邏輯類型但沒有集合類型

D.C語言中既沒有邏輯類型也沒有集合類型

14.有以下程序

#include<stdio.h>

voidfun(int*a,int*B)

(

int*c;

c=a;a=b;b=c;

}

main()

(

intx=3,y=5,*p=&x,*q=&y;

fun(p,q);

printf("%d,%d,",*p,*q);

fun(&x,&y);

printf("%d,%d\n",*p,*q);

)

程序運行后的輸出結(jié)果是o

A.3,5,5,3B.3,5,3,5C.5,3,3,5D.5,3,5,3

15一個棧的入棧序列是a,b,c,d,e,f,則棧的不可能的輸出序列為()

A.fedcbB.defbcC.defcbD.abcdef

16.以下函數(shù)的時間復雜度和空間復雜度為0

Function(n)

(n<=1)

return用

Function(r>-1)?Function(n-2);

A.T(n)=O(2An),S(n)=O(n)

B.T(n)=O(l),S(n)=O(l)

C.T(n)=O(2An),S(n)=O(l)

D.T(n)=O(n),S(n)=O(n)

17.

有以下程序:

main

{intnum[4][4]={l,2,3.4},{5,6,7.8},{9,10,11,

12.},{13,14,15.16}},i,j;

fbr(i=O;i<4;i++)

{for(j=0;j<i;j++)printf("%4c",);

for(j=;J<4;j++)printf("%4d",num

[i][j]);

printf("\n");}}

若要按以下形式輸出數(shù)組右上半三角

1234

678

1112

16

則在程序下劃線處應填入的是()。

A.i-1B.iC.i+1D.4—i

18.以下定義數(shù)組的語句錯誤的是()。

A.intnum[]={1,2,3,4,5,6};

B.intnum[][3]={{l,2},3,4,5,6};

C.intnum[2][4]={{l,2},{3,4},{5,6});

D.intnum[][4]={1,2,3,4,5,6};

19.廣義表((a),a)的表頭是()。

A.aB.(a)C.((a))D.()

2O.if語句的基本形式是:if(表達式)語句,以下關于“表達式”值的敘述中

正確的是

A.必須是邏輯值B.必須是整數(shù)值C.必須是正數(shù)D.可以是任意合法的

數(shù)值

三、程序設計題(10題)

21.使用VC++2010打開考生文件夾下progl中的解決方案。此解決方

案的項目中包含一個源程序文件progl.c。在此程序中,已知學生的記

錄由學號和學習成績構(gòu)成,N名學生的記錄已存入a結(jié)構(gòu)體數(shù)組中。

請編寫函數(shù)fun(),該函數(shù)的功能是找出成績最高的學生記錄,通過形

參將其返回主函數(shù)(規(guī)定只有一個最高分)。已給出函數(shù)的首部,請

完成該函數(shù)。

注意:部分源程序給出如下。

請勿改動主函數(shù)main。和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的花

括號中填入你編寫的若干語句。

試題程序:

#include<stdlib.h>

#include<stdio.h>

#include<string.h>

#include<conio.h>

#defineN10

typedefstructss/*定義結(jié)構(gòu)體*/

{charnum[10];

ints;

}STU;

fun(STUa[],STU*s)

)

voidmain()

(

STUa[N]={{“A01”,8",{“A02”,89},{“A03”,66},

{“A04”,87},{“A05”,77},{“A06”,90},{“A07”,79},

卜A08”,61}/“A09”,80},{4<A10",7

inti;

system(“CLS”);

printf("****Theoriginaldata*****);

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

u,,

printf(No=%sMark=%d\n5a[i].num,a[i].s);

fun(a,&m);

printf("****THERESULT****\n");

printf("Thetop:%s,%d\n”,m.num,m.s);

}

22.

請編寫一個函數(shù)voidproc(intm,intk,intxx[]),該函數(shù)的功能是將大

于整數(shù)m且緊靠m的k個非素數(shù)存人所指的數(shù)組中。例如,若輸入:

105(即M=10,k=5),則應輸出:1214151618。注意:部分源程序

給出如下。請勿改動main()函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函

數(shù)proc()的花括號中填入所編寫的若干語句。試題程序:

Uindudc<stdlib.h>

Cincludr<coc?ouh>

■include<atd?o.h>

vodprocimtm.mth?int

voednuitH)

wiim?n?u(J000]i

?ywiewi(*CLS*)?

pniwR*\nPle?Menicttwomietrr??*)i

proc<m?n?ti)i

pam”?%d

pnntfC*\n*)t

23.使用VC++2010打開考生文件夾下progl中的解決方案。此解決方

案的項目中包含一個源程序文件progl.c。在此程序中,編寫一個函

數(shù),其功能是從傳入的num個字符串中找出最長的一個字符串,并通

過形參指針max傳回該字符串的地址(用****作為結(jié)束輸入的標識)。

注意涪B分源程序在文件progl.c中。請勿改動主函數(shù)main()和其他函數(shù)

中的任何內(nèi)容,僅在函數(shù)fun()的花括號中填入你編寫的若干語句。

試題程序:

1#include<conio.h>

2#include<stdio.h>

3#include<string.h>

4#include<stdlib.h>

5char*fun(char(*a)[81],intnum,char*max)

6{

7

8)

9voidmain()

10{

11FILE*wf;

12charss[10][81],*ps=NULL;

13chars[3][81]={"abed","deg","diegns"),*p=NULL;

14inti=0,n;

15system("CLS");

16printf("輸入若干個字符串:");

17gets(ss[i]);

18puts(ss[i]);

19while(!stremp(ss[i],"****")==0)/*用4個星號作為結(jié)束輸入的標志

*/

20{

21i++;

22gets(ssfil);

24puts(ss[i]);

25)

26n=i;

27ps=fun(ss,n,ps);

28printf("\nmax=%s\n",ps);

30wf=fopen("out.dat","w");

31p=fun(s,3,p);

32fprintf(wf,"%s",p);

33fclose(wf);

24.請編寫函數(shù)proc,其功能是:計算并輸出下列多項式值。

S=(l-1/2)+(1/3-1/4)+...+(1/(2n-l)-l/2n)

例如,若主函數(shù)從鍵盤給n輸入20后,則輸出為S=0.680803。

注意:部分源程序給出如下。

請勿改動main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)proc的花括

號中填入所編寫的若干語句。

試題程序:

#includet:stdio.h>

doubleproc(intn)

(

)

voidmain

(

intn;

doubleslim;

printf("\nlnputn:");

scanf("%d",&n);

sum=proc(n)o

printf("\ns=%f\n",sum);

)

25.編寫函數(shù)fun(),其功能是:求出1?1000中能被7或11整除,但

不能同時被7和11整除的所有整數(shù),并將其放在a所指的數(shù)組中,通過

n返回這些數(shù)的個數(shù)。注意:部分源程序給出如下。請勿改動main()

函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的花括號中填入所編

寫的若干語句。試題程序:

UmcludeVadhhh>

includeVezo.h>

9includeVstdio.ti>

*oidlun<ini?.?ml?n)

voidnwiin()

mtaa£lOOO]?ii?ki

?y?tctn("ClJi-)i

(wn<?a>&■>.

(or(k-Oik<i>ilt++)

if?e+l)為10?-0)

lpnntf(*X5d??3h])t

prifiif(w\n*>iI"一行Y9個IT

ebe

prtnifc"KSd*?

pnnth*\nw>?

26.某學生的記錄由學號、8門課程成績和平均分組成,學號和8門課程

的成績已在主函數(shù)中給出,請編寫函數(shù)fun,其功能是:求出該學生的

平均分,并放入記錄的ave成員中。

例如,學生的成績是:85.5,76,69.5,85,91,72,64.5,87.5,

則他的平均分應為78.875。注意:部分源程序在文件PROG1.C中。

請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)flm的花括

號中填入你編寫的若干語句。

fiiiclude<stdio.h>

fdefineN8

typedefstruct

Icharnum[10];

doubleB[N];

doubleave;

|STREC;

voidfiin(STREC?a)

main()

|STREC?=|"GA005",85.5,76,69.5.85,91.72,64.5,87.51;

inti:

voidNONO();

fun(&s);

printf("The%?*ssludentdau:\n".s.num);

for(i?0;i<N;i??)

pnntf("%4.lAn"?[i]);

printf("\nave=%7.3An"ave);

NONO();

I

voidNONO()

1/?本函數(shù)用于打開文件,輸人數(shù)據(jù),*用函敷,粕出數(shù)據(jù),關閉文件.

FILE?out;

intij;STREC>[10]=|

I"GA005”,as.5.76.69.5.85.91.72,64.5,87.5(,

I*GA00P.82.5,66.76.5,76,89.76.46.5,78.51,

|,GA002-.72.5,6.79,68.46.S.58.51.

I■GA003-,92.5,76.86.5,86,99,86t56.5,8?.5|,

I?GA004-,92.66.5,46.5,56,76,75,1.

|-GA006",75.5,74,71.5,1t

I-CA007-,92.5,61,72.5,84.79,75,66.5.72.5J,

I"GA008-,72.5,S6,73.5,80,69,63,76?5.53.51,

|-GA009",66.5,71,74.5.70,61.82,86.5,58.51.

|-CAOJO*,76,66.S,715,60.76,71.96.5,93.51,

Is

out=fopen(**out.<hl**,*w*);

(br(i=0;i<10;i??)|

fun(&?[i]);

fpnntf(out,*%7.3AnH,t[i].ave);

I

fdo0e(out);

27.

函數(shù)fun的功能是:將s所指字符串中下標為偶數(shù)同時ASCII值為奇數(shù)

的字符刪除,S所指串中剩余的字符形成的新串放在t所指的數(shù)組中。

例如,若s所指字符串中的內(nèi)容為“ABCDEFG12345",其中字符C的

ASCII碼值為奇數(shù),在數(shù)組中的下標為偶數(shù),因此必須刪除;而字符1的

ASCII碼值為奇數(shù),在數(shù)組中的下標為奇數(shù),因此不應當刪除,其他依

此類推。最后t所指的數(shù)組中的內(nèi)容應是“BDF12345”。

注意:部分源程序給出如下。

請勿改動main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號

中填入你編寫的若干語句。

試題程序:

#include<stdio.h>

#include<string.h>

voidfun(char*s,chart[D

(

)

main()

{.?

char100],t[100];

printf(n\nPleaseenterstringS:");

冢皿s);

fun(s?t);

printfrenultis:%s\n,\t);

28.使用VC++2010打開考生文件夾下progl中的解決方案。此解決方

案的項目中包含一個源程序文件progl.c。在此程序中,定義了NxN的

二維數(shù)組,并在主函數(shù)中賦值。請編寫函數(shù)fun(),其功能是求出數(shù)組

周邊元素的平均值并將其作為函數(shù)值返回給主函數(shù)中的s。例如,若a

數(shù)組中的值為

01279

19745

23831

45682

59141

則返回主程序后s的值應為3.375o

注意:部分源程序在文件progl.c中。

請勿改動主函數(shù)main。和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的花

括號中填入你編寫的若干語句。

試題程序:

1#include<stdio.h>

2#include<conio.h>

3#include<stdlib.h>

4#defineN5

5doublefun(intw[][n])

6{

7

8}

9voidmain()

10{

11FILE*wf;

12inta[N][N]={0,1,2,7,9,1,9,7,4,5,2,3,8,3』,4,5,6,8,2,5,9,

13inti,j;

14doubles;

15system("CLS");

16printf("***Thearray***\n");

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

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

19{printf("%4d",a[i][j]);}

20printf("\n");

21)

22s=fun(a);

23printf("***TheResult***\n");

24printf("Thesumis:%lf\n",s);

26wf=fopen("out.dat","w");

27fprintf(wf,"%if",s);

28fclose(wf);

29/******************/

30)

29.學生的記錄由學號和成績組成,M名學生的數(shù)據(jù)已在主函數(shù)中放人

結(jié)構(gòu)體數(shù)組stu中,請編寫函數(shù)proc(),它的功能是:把指定分數(shù)范圍

之外的學生數(shù)據(jù)放在b所指的數(shù)組中,分數(shù)范圍之外的學生人數(shù)由函

數(shù)值返回。

例如,輸入的分數(shù)是70和79,則應當把分數(shù)低于70和高于79的學生

數(shù)據(jù)輸出,不包含70分和79分的學生數(shù)據(jù)。主函數(shù)中把70放在low

中,把79放在heigh中。

注意:部分源程序給出如下。

請勿改動main。函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)proc()的花括

號中填人所編寫的若干語句。

試題程序:

ddrftneM16

typedrfMruct

(

dur

STRfX1

iniproHSTREC???STREC?b?間1?mth)

midmainC>

STREL*(<e<;A(Nna.SS>.rGA0O3*.M?

I?GAOO:*?孫.<?GAW.M>?

<aGA001a?Mi.rGAOO7a,74h

<<GAOO?-.W-GA006*.M.

<-GAOI$*99OI.CGAO13e?S3H

rGAOI2<.Ml.rGAOH<?82h

<?GA01】?.731.('GAO]7?.$9).

<*GAOiSa?<4k<eGAOI<e?MHs

STRECh[M]?

mti.n?low*heigh*ti

pnvit(("Enter2?ntt*vrnumberlow&

height

Manf(*SdKd*?&krw?&hci<h>i

if<httgbVlow)

1=height

heigh*lowi

low*tt

proc(attt?h?law?i

prtfiifC,Thr?tudri?t?<huout

Kd-----Kdi\a*.low.hetch)i

tor(90iYoii++)

pnmf(???M0<.11nl.MD.".

〃?削指定分數(shù)題(!內(nèi)的學生記■

prtni?*\ti*)?

30.請編寫函數(shù)proc(),其功能是:將str所指字符串中下標為偶數(shù)的字

符刪除,串中剩余字符形成的新串放在t所指數(shù)組中。例如,當str所

指字符串中的內(nèi)容為ABCDEFGHIJK(輸入完成以空格、Tab或者Enter

鍵加任意非空格、Tab或者Enter鍵的一個字符作為輸入結(jié)束標志),則

在t所指數(shù)組中的內(nèi)容應是BDFHJ。注意:部分源程序給出如下。請

勿改動main()函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)proc()的花

括號中填入所編寫的若干語句。試題程序:

=tneludeVsTdLb.

£include<como.h>

#include〈Mdidh>

BrncludtVxn皿h>

voidprocCchar?ar.char?[]>

midriMinC>

MMI*1S

charntr[100j?t[100]i

HEE4*CI^5*)?

pcn<CPl”Aemier?inntStr**>i

proriur.t)i

prtntf<*\nTheEuhIB:K?\n"?<>!

四、2.程序修改題(10題)

31.下列給定程序中,函數(shù)fun()的功能是根據(jù)整型形參m,計算如下公

式的值。

y=1-l/(2x2)+1/(3x3)-l/(4x4)+...+(-1)(m+l)/(mxm)

例如:m中的值為5,則應輸出0.83861lo

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

注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。

試題程序:

#include<conio.h>

#include<stdio.h>

doublefun(intm)

{doubley=1.0;

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

intj=l;

inti;

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

/****************jpQund*******+******/

y+=l/(i*i);

)

return(y);

)

main()

(

intn=5;

clrscr();

printf("\nTheresultisfun(n));

)

32.下列給定程序中,函數(shù)fun()的功能是;利用插入排序法對字符串中

的字符按從小到大的順序進行排序。插入法的基本方法是:先對字符串

中的頭兩個元素進行排序,然后把第3個字符插入到前兩個字符中,插

入后前3個字符依然有序;再把第4個字符插入到前3個字符中,待排

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

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

注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu).

試題程序:

#include<String.h>

#include<stdio.h>

#defineN80

voidinsert(char*aa)

{ihti,j,n;charch;

n=strlen(aa);

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

{c=aa[i];

j=i-l;

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

{aaU+l]=aa[j];

j-s

)

aa[j+l]=ch;

)

main()

{chara[N]="QWERTYUIOPASDFGHJKIMNBVCXZ";

inti;

printf("Theoriginalstring:%s\n",a);

insert(a);

printf("Thestringaftersorting:

%s\n\n",a);

33.下列給定程序中,函數(shù)fun()的功能是:用冒泡法對6個字符串按由

大到小的順序進行排序。

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

注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。

試題程序:

#include<conio.h>

#include<stdio.h>

#defineMAXLINE20

voidfun(char*pstr[6])

inti,j;

char*p;

fbr(i=O;i<5;i++)

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

/*************^Qund*************/

if(strcmp((pstr+i),(pstr+j))<0)

{

p=*(pstr+i);

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

/*************fk)und*************/

*(pstr+j)=*p;

)

)

main()

(

inti;

char*pstr[6],str[6][MAXLINE];

clrscr();

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

pstr[i]=str[i];

printf("/nEnter6string(1stringateachline):\n");

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

scanf("%s",pstr[i]);

fun(pstr);

printf("Thestringsaftersoiling:\n");

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

printf("%s\n",pstr[i]);

34.下列給定程序中函數(shù)fun()的功能是:將長整型數(shù)中每一位上為奇數(shù)

的數(shù)依次取出,構(gòu)成一個新數(shù)放在沖。高位仍在高位,低位仍在低位。

例如當s中的數(shù)為87653142例t中的數(shù)為7531。

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

注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。

試題程序:

#include<stdio.h>

#include<conlo.h>

voidfun(longs,long*t)

{intd;

longsl=l;

/*************^Qund**************/

t=0;

while(s>0)

{d=s%10;

/***************************/

if(d%2==0)

{*t=d*sl+*t;

sl*=10;

)

s/=10;

)

}

main()

{longs,t;

clrscr();

printf("\nPleaseenters:");scanf("%ld",&s);

fun(s,&t);

printf("Theresultis:%ld\n",t);

35.給定程序M0D11.C中函數(shù)fun的功能是:交換主函數(shù)中兩個變量

的值。例如:若變量a中的值原為8,b中的值為3。程序運行后a中的

值為3,b中的值為8。請改正程序中的錯誤,使它能計算出正確的結(jié)

果。

注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!

*include<stdio.h>

2/………found………?/

3voidfun(intxrinty)

4(

5intt;

6/*******w*found**********/

7!t-x;x-y;y?t;

8:}

9;main()

10I{

11inta,b;

12a?8;b?3;

13fun(&a,&b);

ww

14printf(%dr%d\n,a,b);

15

36.下列給定程序中,函數(shù)fun()的功能是將字符串s中位于偶數(shù)位置的

字符或ASCII碼為奇數(shù)的字符放入字符串t中(規(guī)定第一個字符放在第0

位中)。

例如:字符串中的數(shù)據(jù)為ADFESHDI,則輸出應當是AFESDL

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

注意,?不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。

試題程序:

#include<conio.h>

#include<stdio.h>

#include<string.h>

#defineN80

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

voidfun(chars,chart[])

inti,j=0;

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

/*********j^Qund*+************/

if(i%2=0||s[i]%2!=0)

tU++]=s[i];

t[j]='\O';

)

main()

(

chars[N],t[N];

clrscr();

printf("\nPleaseenterstrings:");

gets(s);

fun(s,t);

printf("\nTheresultis:%s\n",t);

37.下列給定程序中,函數(shù)fun()的功能是:根據(jù)整型形參n,計算如下

公式的值。

Al=l,A2=l/(5+Al),A3=l/(5+A2)........An=l/(5+A(n-l))

例如,若n=10,則應輸出0.192582。

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

注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。

試題程序:

#include<conio.h>

#include<stdio.h>

floatfun(intn)

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

intA=l;

inti;

/*************^^und*************/

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

A=16/(5+A);

returnA;

)

main()

(

intn;

clrscr();

printf("\nPleaseentern:");

scanf("%d",&n);

,,

printf("A%d=%lf\n1n,fun(n));

)

38.給定程序MODHC中函數(shù)fun的功能是:對N名學生的學習成績,

按從高到低的順序找出前m(mS10)名學生來,并將這些學生數(shù)據(jù)存放在

一個動態(tài)分配的連續(xù)存儲區(qū)中,此存儲區(qū)的首地址作為函數(shù)值返回。

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

注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!

1tinclude<stdio.h>

2■include<stdlib.h>

3finclude<string.h>

4?defineN10

5typedefstructss

6(charnum(10);

7ints;

8)STU;

9STU*fun(STUa(Eintm)

10(STUb(N],*t;

11int

12/****?*****found**********/

13t-(STU*)calloc(sizeof(STU),m)

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

15for(k?0;k<m;

16{for(i-j-0;i<N;i++)

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

18/****??*???found****?*??**/

19t(k)-b(j);

20b(j].s-0;

21)

22returnt;

23]

24outresult(STUa(],FILE*pf)

25(inti;

26for(i?0;i<N;[?+)

n

27fprintf(pfr"No-%sMark-%d\nr

a[i].numra(i].s);

28fprintf(pf,w\n\n");

29)

30main()

31(STUa[N)-{{“A01”,81},「A02”,89),

「A03”,66},「A04”,87},{“A05”,77),

LA06-,90},「A07”,79》,LA08-,61},

ww

("A09r80h("A10,71));

32STU*pOrder;

33int1,m;

34printf(??**??TheOriginaldata

…;

35outresult(a,stdout);

36printf("\nGivethenumberofthe

studentswhohavebetterscore:");

H

37scanf(%d"r;

38while(m>10)

39{printf(w\nGivethenumberofthe

studentswhohavebetterscore:*,);

40scanf("%dw,&m);

41

42pOrder-fun(a,m);

43printf(***?*?THERESULT

\nw);

44printf("Thetop:\nw);

45for(i?0;i<m;i++)

w

46printf("%s%d\nrpOrder[i].

num,pOrder(i].s);

47free(pOrder);

48

39.下列給定程序中,函數(shù)fun()的功能是計算并輸出high以內(nèi)的素數(shù)

之和。high由主函數(shù)傳給fun()函數(shù)。若high的值為100,則函數(shù)的值

為1060o

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

注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。

試題程序:

#include<conio.h>

#include<stdio.h>

#include<math.h>

intfun(inthigh)

intsum=0,n=0,j,yes;

while(high>=2)

yes=l;

for(j=2;j<=high/2;j++)

/***************************/

ifhigh%j==O

yes=0;

break;

/*************■^Qund**************/

if(yes==0)

sum+=high;

n++;

high-;

)

returnsum;

)

main()

(

clrscr();

printf("%d\n",fun(lOO));

)

40.在主函數(shù)中從鍵盤輸入若干個數(shù)放入數(shù)組中,用。結(jié)束輸入并放在

最后一個元素中。下列給定程序中,函數(shù)fun()的功能是計算數(shù)組元素中

值為負數(shù)的平均值(不包括0)。

例如:數(shù)組中元素的值依次為43,47,-21,53,-8,12,0,則程序的

運行結(jié)果為-25.333333。

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

注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。

試題程序:

#include<conio.h>

#include<stdio.h>

doublefun(intxf])

{

doublesum=0.0;

intc=0,i=0;

while(x[i]==0)

if(x[i]<0)

{

sum=sum+x[i];

C++;

}

i++;

)

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

sum=sum\c;

returnsum;

)

main()

(

intx[1000];

inti=0;

clrscr();

printf("\nPleaseentersomedata(endwith

0):”);

do

{

scanf("%d",&x[i]);

}while(x[i++]!=0);

printf("%f\n",fun(x));

五、程序改錯題(2題)

41.

由N個有序整數(shù)組成的數(shù)列已放在一維數(shù)組中,下列給定程序函數(shù)fun

0的功能是:利用折半查找法查找整數(shù)m在數(shù)組中的位置。若找到,

返回其下標值;否則,返回-屋折半查找的基本算法是:每次查找前先

確定數(shù)組中待查的范圍low和high(10w%high)o然后用m與中間位

置(mid)上元素的值進行比較。如果m的值大于中間位置元素的值,

則下一次的查找范圍落在中間位置之后的元素中;反之,下一次的查找

范圍落在中間位置之前的元素中,直到low>;high,查找結(jié)束。請改

正程序中的錯誤,使它能得出正確的結(jié)果。注意:不要改動main()

函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:

5include<stdio.h>

rdefineN10

//*???found?■??

voidfunCintintm)

{inilow=0.high=xN-!.midi

whilr(low<=high)

(mtd=(low+high)/2i

hi?h=mid-11

//????found????

elseif<m>afmidj)

low?mid4-11

elsereturn<mid)i

return<-1)i

voidmain()

(inti?a[N]?{-3.1.7.9.13.I5?67.89.100.

180}?k,nu

printf("?數(shù)組中的數(shù)據(jù)如下,,

for(ix,0ii<Nit4"+)

printf(*%dt

printfC*Enterm:")?

k=fun(a.m>i

if(k>*0>

printf<*m=%d?index=%d\n"?m.k>i

elseprint""Notbefound!\n"):

42.下列給定程序中,函數(shù)fun()的功能是:將長整型數(shù)中各位上為奇

數(shù)的數(shù)依次取出,構(gòu)成一個新數(shù)放在t中。高位仍在高位,低位仍在低

位。例如,當s中的數(shù)為87653142時,t中的數(shù)為7531。請改正程序

中的錯誤,使它能得出正確的結(jié)果。注意:不要改動main()函數(shù),

不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:

絆includeVsldlib.h>

*include<stdio.h>

*includeVconio,h>

voidfun(longs.long?t>

intdi

longsi=Ij

//????found???■

t?Oi

while(s>0>

d=s%10t

//????found????

*d%2??0)

<

?t-d*si+*ti

!ii?lOi

)

?/~10|

}

)

voidmain()

(

longs?u

systcm()i

printf(*\nPleaseenters:*>1

scanf("%idw?&*)g

fun(s?&?t)1

printf("Theresultin:%id\n".t)?

I

六、操作題(2題)

43.請編寫一個函數(shù)intfun(int*s,intt,int*k),用來求出數(shù)組的最小

元素在數(shù)組中的下標并存放在k所指的存儲單元中。

例如,輸入如下整數(shù):

234345753134436458100321135760

則輸出結(jié)果為6,100。

注意:部分源程序給出如下。

請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括

號中填入所編寫的若干語句。

試題程序:

#include<conio.h>

#include<stdio.h>

intfun(int*s,intt,int*k)

(

)

main()

(

inta[10]={234,345,753,134,436,458,

100,321,

135,760),k;

clrscr();

fun(a,10,&k);

printf("%dr%d\n",k,a[k]);

)

44.請補充函數(shù)fun(),該函數(shù)的功能是:把一個字符串中的字符(字母)

按從小到大排序并把這個全部由字母組成的字符串保存在原串中,函

數(shù)返回這個字符串的長度。例如;輸入“cixbr2.3",如果為bcirx,字符串

長度為5。

注意:部分源程序給出如下.

請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的橫線

上填入所編寫的若干表達式或語句。

#include<stdio.h>

#defineN20

intfun(char*str)

(

inti=0,j=0,k=-0,m=0;

chart;

char*p=str;

while(*p)

(

if((*p>='A'&&*p<='Z')||(*p>='a'

&&*p<='z'))

【】

p++;

)

*(str+i)='\0';

【】;

while(*(p+j))

【】;

while(*(p+k))

(

if(*(p+k)<*(str+m)

(

t=*(str+m);

*(str+m)=*(p+k);

*(p+k)=t;

k++;

j++;

)

returni;}

main()

{

charstr[81];

ihtn;

clrscr();

printf("Inputtheoriginalstring");

gets(str);

printf("***TheOriginalstring***In");

puts(str);

printf("***Thenwestring***\n");

n=fun(str);

puts(str);

printf("***Thelengthofnewstringis:

%d***\n",n);

參考答案

L數(shù)據(jù)存儲數(shù)據(jù)存儲

2.1919解析:根據(jù)二叉樹的性質(zhì):在任意一棵二叉樹中,度為。的結(jié)點

(即葉子結(jié)點)總是比度為2的結(jié)點多一個。本題中度為2的結(jié)點數(shù)為18,

故葉子結(jié)點數(shù)為18+1=19個。

3.99解析:p是一個指針變量,指向數(shù)組a的元素a[3],所以

b=p[5]=a[5+3]=a網(wǎng)=9。

4.00解析:二維數(shù)組可以看成是按矩陣形式排列的,題目中給二維數(shù)組

賦初值是按行分段賦值的,a[4][4]可以分解為4個一維數(shù)組,其數(shù)組名

分別為a[0]、a[l],a[2],a[3],這4個一維數(shù)組都有4個元素,a[0]的元

素為a[0][0]、a[O][l],a⑼⑵、a[0][3]o

5.鏈式存儲和順序存儲鏈式存儲和順序存儲

6.ptrptr解析:本題考查函數(shù)指針的概念。函數(shù)指針的定義格式是:類型

標識符(*旨針變量名)()。注:“類型標識符”為函數(shù)返回值的類型。

7.66解析:經(jīng)過分析將遞歸函數(shù)寫成其數(shù)學表達式如下:

本題中定義了一個長度為3的數(shù)組aa并初始化。接著調(diào)用遞歸函數(shù)f,

由上面的數(shù)學表達式以計算其返回值s=l+2+3=6,所以空格處應該填6。

8.30x30x解析:本題的參數(shù)傳遞屬于值傳遞,所以函數(shù)內(nèi)不能改變調(diào)用

函數(shù)中的數(shù)據(jù)。

9.關系關系解析:關系模型用;維表表示,則每個;維表代表一種關系。

10.3636解析:本題循環(huán)體共執(zhí)行了3次。第一次:k=3,n=26:第二次:

k=18,n-2;第三次:k=36,n=00

HD解析:該函數(shù)用來使兩個字符串連接成為一個字符串。strcat(strl,

str2)將str2中的字符連接到strl的字符后面,并在最后加一個“\\0"。連

接后新的字符串存放在strl中。注意:用于字符串處理的函數(shù)。

12.D

13.D解析:在C語言中沒有邏輯類型,邏輯類型用整型來表示,故選

項A和選項C不正確,C語言中沒有集合類型,故選項B不正確。所

以,D選項為所選。

14.B

解析:本題主要考查的是函數(shù)的實參和形參之間的傳遞關系,C語言

中實參變量和形參變量之間的數(shù)據(jù)傳遞是單向的“值傳遞”方式。指針

變量作函數(shù)參數(shù)也要遵循這一規(guī)則。調(diào)用函數(shù)不可能改變實參指針變

量的值。所以X和y的地址并沒有改變,即p和q也沒有改變,因

此,選項B是正確的。

15.B

16.A

17.B

\n本題中要求輸出右上半角的數(shù),對角線上的數(shù)的下標相同,所以j=i。

\n

18.B

二維數(shù)組的定義有3種形式,第一種是分行為兩位數(shù)組賦值,即int

num[]={{12},{3,4},{5,6}},第二種是按照數(shù)組排列順序進行賦

值,BPintnum[]={l,2,3,4,5,6},第三種為對部分元素賦初值,

即intnum[]={{L2}什,{3,4},{5,6}},所以錯誤的為B。

19.B

20.D

21.fun(STUa[],STU*s)

(

inti;

*s=a[0];

for(i=0;i<N;i++)/*找出成績最高的學生記錄*/

if(s->s<a[i].s)<p=""x/a[i].s)<>

*s=a[i];

)

先使指針變量S指向第1名學生。通過循環(huán)語句遍歷所有學生的成

績,利用條件語句判斷當前學生成績是否最高。所以if條件表達式為

s->s

S,,等價于,,(*s).s”°

22.

【解析】通過要求把非素數(shù)的數(shù)放到xx數(shù)組中,檢查大于整數(shù)m的整

數(shù),將不是素數(shù)的整數(shù)放在數(shù)組xx中,直到個數(shù)大于k個結(jié)束。

23.1char*fun(char(*a)[81],intnum,char*max)

2{

3inti=0;

4max=a[0];

5for(i=0;i<num;i++)/*找出最長的一個字符串*/

6if(strlen(max)<strlen(a[i]))

7max=a[i];

8retummax;/*傳回最長字符串的地址*/

9)

<strlen(a[i]))

解答本題之前,首先應該明白ss是數(shù)組名,是指數(shù)組首元素的地址。

max是字符指針變量,可以指向一個字符串。假定max指向數(shù)組中第

1個字符串,它的長度最長。再使用循環(huán)語句遍歷字符串數(shù)組,使用條

件語句判斷該字符串的長度是否大于max指向的字符串的長度,如大

于,則max指向該字符串。保證max指向的字符串最長,并將其作為

函數(shù)值返回。</strlen(a[i]))

24.\n\tdoubleproc(intn)

\n{

\ninti;

\ndoubles=0.0;//s為其和的變量

\nfor(i=l;i<=n;i+十)

\nS=s+(l-0/(2*i-l)-l.0/(2*i));//計算s

\n=(l-l/z)+(l/3-1/4)+...+(l/(2n-l)-l/

\n2n)

\nreturns;//最后把所得到的和返回到主函數(shù)中

5}

\n【解析】由題目中所給表達式可知,多項式的值為n項表達式的

和??梢岳胣次循環(huán)求出n項表達式的值,求和放在變量s中。最

后將多項式的值返回到主函數(shù)當中。\n

25.

【解析】根據(jù)題意,所寫函數(shù)要用for循環(huán)實現(xiàn)對整數(shù)1?1000的遍歷;

通過if語句找出能被7或11整除,但不能同時被7和11整除的所有整

數(shù),因為同時被7和11整除的整數(shù)一定能被77整除,且不能被77整

除的數(shù)不一定就是能被7或11整除,可得出表達式“(i%7==0||i%ll==O)

&&i%77!=0";再按題目要求,將找出來的整數(shù)放在a所指的數(shù)組中,

通過n返回這些數(shù)的個數(shù)即可。

26.

voidfun(STREC*a)

inti:

a->ave=0.0:

fbr(i=O;i<N;i++)a->ave=a—>ave+-->s[i];/*求各門成績的總和}

a->ave/=N

溫馨提示

  • 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

提交評論