2022年陜西省榆林市全國計(jì)算機(jī)等級考試C語言程序設(shè)計(jì)真題(含答案)_第1頁
2022年陜西省榆林市全國計(jì)算機(jī)等級考試C語言程序設(shè)計(jì)真題(含答案)_第2頁
2022年陜西省榆林市全國計(jì)算機(jī)等級考試C語言程序設(shè)計(jì)真題(含答案)_第3頁
2022年陜西省榆林市全國計(jì)算機(jī)等級考試C語言程序設(shè)計(jì)真題(含答案)_第4頁
2022年陜西省榆林市全國計(jì)算機(jī)等級考試C語言程序設(shè)計(jì)真題(含答案)_第5頁
已閱讀5頁,還剩35頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

2022年陜西省榆林市全國計(jì)算機(jī)等級考試

C語言程序設(shè)計(jì)真題(含答案)

學(xué)校:班級:姓名:考號:

一、2.填空題(10題)

1.在面向?qū)ο蠓椒ㄖ?,【】描述的是具有相似屬性與操作的一組對象。

2.下面程序的運(yùn)行結(jié)果是:[]o

typedefunionstudent

{charnameflO];

longsno;

charsex;

floatscore[4];

}STU;

main()

{STUa[5];

Printf("%d\n",sizeof(a));

)

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

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

4.以下程序的輸出結(jié)果是【】。

#include<stdlib.h>

main()

{char*sl,*s2,m;

s1=s2=(char*)malloc(sizeof(char));

*sl=15;*s2=20;m=*sl+*s2;

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

)

5.下列程序的輸出結(jié)果是【】。

main()

{inta=l,b=2;

a-a+b;b=a-b,a=a-b;

printf("%d,%d\n",a,b);

)

6.有以下程序段,且變量已正確定義和賦值

for(s=1.0,k=l;k<=n;k++)s=s+1.0/(k*(k+1));

printf("s=%f\n\n",s);

請?zhí)羁眨瓜旅娉绦蚨蔚墓δ芘c之完全相同

s=1.0;k=l;

while([]){s=s+1.0/(k*(k+l));[];)

printf("s=%f\n\n",s);

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

/\\\O

8.排序是計(jì)算機(jī)程序設(shè)計(jì)中的一種重要操作,常見的排序方法有插入排

序、【】和選擇排序等。

9.以下程序的運(yùn)行結(jié)果是【】°

main()

{inta=2,b=7,c=5;

switch(a>0)

(

case1:

switch(b<0)

{casel:printf("@");break;

case2:pnntf("!");break;

)

case0:

switch(c==5)

{case0:pnntf("*");break;

casel:printf("#");break;

case2:printf("$");break;

)

default:printf("&");

)

printf("\n");

)

10.以下程序運(yùn)行的結(jié)果是【】。

#include<conio.h>

#include<stdio.h>

#defineM100

voidfun(intm,int*a,int*n)

{inti,j=0;

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

if(i%7==0IIi%ll==O)

a[j++l=i;

*n=j;}

main()

{intaa[M],n,k;

clrscr();

fun(10,aa,&n);

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

if((k+1)%20==0)printf("\n");

elseprintf("%4d",aa[k]);

printf("\n");}

二、單選題(10題)

11.有以下程序:

#include<stdio.h>

#include<string.h>

main()

(

printf("%d\n",strlen("0\t\n\0C01

)

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

A.3B.13C.lD.O

12.在數(shù)據(jù)庫設(shè)計(jì)中,將E-R圖轉(zhuǎn)換成關(guān)系數(shù)據(jù)模型的過程屬于

()。

A.需求分析階段B.概念設(shè)計(jì)階段C.邏輯設(shè)計(jì)階段D.物理設(shè)計(jì)階段

13.輸入序列為(A,B,C,D),不可能得到的輸出序列是

A.(A,B,C,D)B.①,C,B,A)C.(A,C,D,B)D.(C,A,B,D)

(37)以下程序的輸出結(jié)果是().

#includc<stdio.h>

voidprt(int*x,int*y,int*z)

{primfC%d,%d,%d\n?*xry,*(zz));}

main()

(inta=10,b=40tc=20;

prt(&a,&b.&c);

prt(&a.&b,&c);}

A)11,42,31B)11,41,20

12,22,4112,42,20

C)11,21,40D)11,41,21

14.11,21,2112,42,22

15.以下說法正確的是()。

A.C語言只接受十進(jìn)制的數(shù)

B.C語言只接受二進(jìn)制、八進(jìn)制、十六進(jìn)制的數(shù)

C.C語言只接受二進(jìn)制、十進(jìn)制、十六進(jìn)制的數(shù)

D.C語言只接受八進(jìn)制、十進(jìn)制、十六進(jìn)制的數(shù)

16.如果最常用的操作是取第i個(gè)結(jié)點(diǎn)及其前驅(qū),最節(jié)省時(shí)間的存儲方式

是()。

A.單鏈表B.雙向鏈表C.單循環(huán)鏈表D.順序表

17.遞歸式的先序遍歷一個(gè)n節(jié)點(diǎn),深度為d的二叉樹,則需要??臻g的

大小為()

A.O(logn)B.O(nlogn)C.O(n)D.O(d)

18.下列關(guān)于宏的敘述中正確的是()。

A.宏替換沒有數(shù)據(jù)類型限制

B.宏定義必須位于源程序中所有語句之前

C.宏名必須用大寫字母表示

D.宏調(diào)用比函數(shù)調(diào)用耗費(fèi)時(shí)間

19.設(shè)棧S和隊(duì)列Q的初始狀態(tài)為空,元素el,e2,e3,e4,e5和e6依

次通過棧S,一個(gè)元素出棧后即進(jìn)隊(duì)列Q,若6個(gè)元素出隊(duì)的序列是e2,

e4,e3,e6,e5,el,則棧S的容量至少應(yīng)該是()。

A.6B.4C.3D.2

20.若有下列定義(設(shè)int類型變量占2個(gè)字節(jié)):

inti=8,j=9;

則下列語句:

printf("i=%%d,j=%%d\n",i,j);

輸出的結(jié)果是()。

A.i=8,j=9B.i=%d,j=%dC.i=%8,j=%9D.8,9

三、程序設(shè)計(jì)題(10題)

21.請編寫函數(shù)proc(),函數(shù)的功能是求出二維數(shù)組周邊元素之和,作

為函數(shù)值返回。二維數(shù)組中的值在主函數(shù)中賦予。

例?.苦:?曾用中的一為,

01234

597?$

4383,

38?87

則函數(shù)值為59。

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

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

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

試題程序:

3include<襁疝&hJ>

*indudeVcociio.h>

Mithelud*

SdefineM4

0drfinrNS

UMpmr(mi.

void)

miMCMXN]?((

M?t,?j.

?p4cm<"CLS*>i

pniMf(*Tbeorminal<kubi\n*>i

(oKiM0iYMii**)

Itor沁Nij++)

pnntf<e%6d?

prinil<*\n*)>

ywpcoc<ae)?

pniuf(*\nTheH<f\???>>?

prmd<*\ne)i

22.規(guī)定輸入的字符串中只包含字母和*號。請編寫函數(shù)fun,其功能是:

除了字符串前導(dǎo)的。號之外,將串中其他*號全部刪除。在編寫函數(shù)時(shí)不

得使用C語言提供的字符串函數(shù).

例如.字符串中的內(nèi)容為????A.BC.DEF?G????*?除后,字符串中的內(nèi)容應(yīng)當(dāng)

是:“????ABCDEFG”。

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

請勿改動主函數(shù)nuin和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。

tindude<stdio.h>

voidfun(char?a)

main()

Ichar>[81];voidNONO();

prinlf('Enterastring:\nn);geto(t);

fun(>);

printf("Thestringafterdeleted:\nN);pulfl(a);

NONO();

I

voidNONO()

1/?本?效用于打開文件,輸入數(shù)據(jù).調(diào)用函數(shù),輸出數(shù)據(jù),關(guān)閉文件。./

FILE■in..out;

inti;chari[81];

m=fopen(-in.M,T);

ouKxfbpen(Moul.dat","ww);

far<i=0;i<10;i??)

I

w

bcanf(in/%8v8);

Ma

^pnntf(out,%s\n9?);

I

fdme(in);

fcloae(oul);

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

的項(xiàng)目中包含一個(gè)源程序文件progl.c。在此程序中,學(xué)生的記錄由學(xué)號

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

函數(shù)fun(),其功能是把指定分?jǐn)?shù)范圍內(nèi)的學(xué)生記錄存放在b所指的數(shù)

組中,分?jǐn)?shù)范圍內(nèi)的學(xué)生人數(shù)由函數(shù)值返回。

如輸入的分?jǐn)?shù)是60、69,則應(yīng)當(dāng)把分?jǐn)?shù)在60?69的學(xué)生記錄輸出,包

含60分和69分的學(xué)生記錄。主函數(shù)中把60放在low中,把69放在

high中o

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

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

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

試題程序:

#include<stdio.h>

#defineN16

typedefstruct

(

charnum[10];

ints;

}STREC;

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

voidmain()

{

STRECs[N]={{"GA005”,85},{“GA003”,76},

{“GA002”,69},{“GA004”,

85},{uGA001”,96},{“GA007”,72},{“GA008”,64},{“GA006”,87},{“GAO1

5”,85},{“GA013”,

94},{“GA012”,64},{“GAO14”,91},{“GAO11”,90},{“GAO17”,64},{“GAO

18”,64},{“GAO16”,72}};

STRECh[N];

inti,n,low,high,t;

printf("Enter2integernumberlow&high:,,);

scanf("%d%d”,&low,&high);

if(high<low)

{t=high;high=low;low=t;}

n=fun(s,h,low,high);

printf("Thestudent'sdatabetween%d--%d:\n”,low,high);

for(i=0;i<=""p="">

printf(4t%s%4d\n”,h[i].num,h[i].s);

printf(4t\n^^);

)

24.請編一個(gè)函數(shù)voidproc(intintppfN]),tt指向一個(gè)M行N

列的二維數(shù)組,求出二維數(shù)組每行中最大元素,并依次放入pp所指的

一維數(shù)組中。二維數(shù)組中的數(shù)已在主函數(shù)中給出。

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

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

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

試題程序:

Umcludc<C9tdao.

=includrVconio.h>

Sinclude<Mdbb.

9drGneM3

ddefineN4

2dpfocCinttt[M3[N2pptNj)

void>

mi34.54?84.78?

(23.12l?

(28.M.39.93F)i

mt

*ywietn<*CIJI*)?

prmlfCThefiginaldata

hr(L0“V、,j++>

pnotf(

pnnff(

prodMr*p)i

primf<*\nTherr&uh

k-O&k<TM』一?)

pnnifL;4d".pTkl><

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

案的項(xiàng)目中包含一個(gè)源程序文件progl.c。在此程序中,編寫函數(shù)fun(),

其功能是根據(jù)以下公式求兀的值(要求精度0.0005,即某項(xiàng)小于0.0005

時(shí)停止迭代)O

^=l+±+|2Sa+12<22<3+12S2x32<4++

233x53x5x73x5x7x9

Ix2x…X”

3x5x???x(2n+1)

程序運(yùn)行后,若輸入精度0.0005,則程序應(yīng)輸出為3.140578。

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

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

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

試題程序:

#include<stdio.h>

#include<conio.h>

#include<math.h>

doublefun(doubleeps)

(

}

voidmain()

(

doublex;

printf("Inputeps:");

scanf("%lF',&x);

u,,

printf(\neps=%lf,PI=%lf\n5x,fun(x));

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

案的項(xiàng)目中包含一個(gè)源程序文件progl.c。在此程序中,編寫函數(shù)fun(),

其功能是實(shí)現(xiàn)B=A+A5即將矩陣A加上A的轉(zhuǎn)置,結(jié)果存放在矩陣

B中。計(jì)算結(jié)果在main()函數(shù)中輸出。

舉例如下。

輸入如下的矩陣:其轉(zhuǎn)置矩陣如下:

123147

456258

789369

程序輸出:

26

610

1014

注意:部分源程序給出如下。請勿改動主函數(shù)main。和其他函數(shù)中的

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

試題程序:

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

voidfun(inta[3][3],intb[3][3])

(

)

voidmain()

(

inta[3][3]={{1,2,3},{4,5,6},{7,8,9}},t[3][3];

inti,j;

system(“CLS”);

fun(a,t);

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

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

printf("%7r,t[i][j]);

printf("\n");

)

)

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

案的項(xiàng)目中包含一個(gè)源程序文件progl.c。在此程序中,編寫函數(shù)fun(),

其功能是將兩個(gè)兩位數(shù)的正整數(shù)a、b合并成一個(gè)整數(shù)放在c中。合并

的方式是將a中的十位數(shù)和個(gè)位數(shù)依次放在c數(shù)的十位和千位上,b中

的十位數(shù)和個(gè)位數(shù)依次放在c數(shù)的百位和個(gè)位上。

例如,當(dāng)a=45,b=12時(shí),調(diào)用該函數(shù)后,c=5142o

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

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

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

試題程序:

#include<stdlib.h>

#include<conio.h>

#include<stdio.h>

voidfun(inta,intb,long*c)

{'

)

main()

(

inta,b;

longc;

printf("Inputa,b:^^);

scanf("%d%d”,&a,&b);

fun(a,b,&c);

printff'Theresultis:%ld\n,,,c);

28.編寫fun()函數(shù),它的功能是:利用以下所示的簡單迭代方法求方程

cos(y)-y=0的一個(gè)實(shí)根。

yn+l=cos(yn)

迭代步驟如下:

⑴取yl初值為0.0;

(2)y0=yl,把yl的值賦給y。;

(3)y1=cos(y0),求出一個(gè)新的y1;

(4)若y0=yl的絕對值小于0.000001,則執(zhí)行步驟

(5),否則執(zhí)行步驟(2);

(5)所求yl就是方程COS(y)-y=0的一個(gè)實(shí)根,作為函數(shù)值返回。

程序?qū)⑤敵鼋Y(jié)果Result=0.7390850

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

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

部分源程序給出如下。

試題程序:

BinclwirVcomoih>

includeVounh.h>

4ifirltMlrVktdm.h>

HoelfaM>

voidRMtaC>

I

FILE

AMIM-,《*<》■

pnfiiK■Re*?ih?HI\B*.CI?)I

ou<?fope?i<<Ui*?ew*)i

fpnntl(oui?*Kr?c<M)i

(done<ou?><

29.請編寫函數(shù)proc(),該函數(shù)的功能是:將M行N列的二維數(shù)組中的

字符數(shù)據(jù),按列的順序依次放到一個(gè)字符串中。例如,若二維數(shù)組中

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

WWW

SSS

HHH

III

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

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

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

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

試題程序:

#tncludeVzdtd

林WineM4

8dtfitwN3

voidproc<ckmr<??>[N)?clur?b>

M>ldmatn(>

char41003?W[MXN]M(IW.W?W).

3'S\S\I.CH\*H\1H4.)?(T?'

r.THi

inii小

print"'The

(or(i-“yMX*4?)

<lor《?)

pnrn((aHlc*.w£iltj]h

peoc<w?a)i

prmtf<"TheA

pm*<a)s

pnnrf<<\n\n")i

30.

假定輸入的字符串中只包含字母和*號。請編寫函數(shù)proc(),它的功能

是:將字符串中的前導(dǎo)*號全部刪除,中間和后面的*號不刪除。例如,

若字符串中的內(nèi)容為****a*bc*def*g****,刪除后,字符串中的內(nèi)容則

應(yīng)當(dāng)是a*bc*def*g****。注意:部分源程序給出如下。請勿改動main

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

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

svAcludk*Vadia

Smcludr<como,h>

voidproc<ciwir??tr>

VUidHNliB()

rtuir?tr{Sl

prmdCvEnter■?thngt\n*H

proc<Mr>i

prail(<*TheMI”delrtedt\B*><

Mt)sI

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

31.下列給定程序中,函數(shù)fun()的功能是:判斷一個(gè)整數(shù)m是否是素

數(shù),若是返回L否則返回0。在main。函數(shù)中,若fun()返回1則輸出

YES,若fun()返回0則輸出NO!

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

intfun(intm)

{intk=2;

while(k<=m&&(m%k))

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

k++

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

if(m=k)

return1;

elsereturnO;

)

main()

{ihtn;

clrscr();

printf("\nPleaseentern:");

scanf("%d",&n);

if(fun(n))printf("YES\n");

elseprintf("NO!\n");

32.給定程序MODH.C中fun函數(shù)的功能是:求出以下分?jǐn)?shù)序列的前

n項(xiàng)之和。

23581321

I*293959T*13*

和值通過函數(shù)值返回main函數(shù)。

例如,若n=5,則應(yīng)輸出:8.391667o

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

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

1*include<stdio.h>

2…?…吉??一found

3fun(intn)

4(inta-2,b-1.c,k;

5doubles-0.0;

6for(k?1;k<=n;k++)

7(s?s>1.0*a/b;

8/found★***???★★★★**/

9c-a;a?=b;b+,c;

10}

11return(s);

12}

13main()

14(intn?5;

15printf(w\nThevalueoffunction

w

is:%lf\nrfun(n));

16

33.下列給定程序中,函數(shù)fun()的功能是:找出一個(gè)大于給定整數(shù)m且

緊隨m的素?cái)?shù),并作為函數(shù)值返回。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

intfun(intm)

{inti,k;

for(i=m+l;;i++)

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

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

if(i%k!=0)

break;

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

if(k<i)

retum(i);

)

)

main()

{intn;

clrscr();

printf("\nPleaseentern:");

scanf("%d",&n);

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

}

34.以下程序可把輸入的十進(jìn)制數(shù)以十六進(jìn)制數(shù)的形式輸出。

請?jiān)跈M線上填上適當(dāng)?shù)膬?nèi)容并把橫線刪除,使它能得出正確的結(jié)果。

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

試題程序;

main()

charb[17]={"0123456789ABCDEF"};

intc[64],d,i=0,base=16;

longn;

printf("Enteranumberin'');

scanf("%ld",&n);

do{

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

c[i]=;i++;n=n/base;}

while(n!=0);

printf("Transmitenewbase:\n");

for(—i;i>=0;—i)

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

{d=cfi];printf("%c",b);}

printf("\n");

35.下列給定程序中,函數(shù)fun()的功能是:計(jì)算s所指字符串中含有t

所指字符串的數(shù)目,并作為函數(shù)值返回。

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

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

試題程序:

#include<conio.h>

#include<string.h>

#include<stdio.h>

#defineN80

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***************/

if(*r==O)

n++;

s++;

)

returnn;

)

main()

{chara[N],b[N];intm;

clrscr();

printf("\nPleaseenterstringa:");

gets(a);

printf("\nPleaseentersubstringb:");

gets(b);

m=fun{a,b);

printf("\nTheresultis:m=%d\n",m);

)

36.下列給定程序中函數(shù)fun()的功能是;先將在字符串s中的字符按逆

序存放到t串中,然后把s中的字符按正序連接到t串的后面。例如:

當(dāng)S中的字符串為ABCDE時(shí),則t中的字符串應(yīng)為EDCBAABCDEo

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

#include<string.h>

voidfun(char*s,char*t)

(

inti,sl;

sl=strlen(s);

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

t[i]=s[sl-l];

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

/*********不*不*found***不*不*不*不*不**

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

t[2*sl]-'\0';

)

main()

{chars[100],t[100];

clrscr();

printf("\nPleaseenterstrings:");

scanf("%s",s);

fun(s,t);

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

}

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

母,形成新的字符串,并取代原字符串。

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

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

試題程序:

#include<stdio.h>

#include<conio.h>

voidfun(char*S)

(

inti,j;

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

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

if((s[i]>='A'&&s[i]<='Z')&&(s[i]>='a'&&S[i]<="z',))

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

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

s[j]="\O'';

)

main()

charitem[80];

clrscr();

printf(t4\nEnterastring:");

gets(item);

printf(t4\n\nThestringis:\%S\n",item);

fun(item);

printf("\n\nThestringofchanging

is:\%S\n",item);

38.下列給定程序中,函數(shù)fun()的功能是:輸出M行N列整數(shù)方陣,

然后求兩條對角線上的各元素之和,返回此和數(shù)。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

#defineM5

ihtfun(intn,intxx[][])

{inti,j,sum=0;

printf("\nThe%dx%dmatrix:\n",M,M);

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

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

printf("%4f',xx[i][j]);

printf("\n");

)

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

sum+=xx[il[i]+xx[i][n-i-l];

return(sum);

)

main()

{intaa[M][M]={{l,2,3,4,5},{4,3,2,1,0),

{6,7,8,9,0},{9,8,7,6,5},{3,4,5,6,7}};

clrscr();

printf("\nThesumofallelementson2

diagnalsis%d",fun(M,aa));

39.給定程序M0D11.C中函數(shù)fun的功能是:計(jì)算n!。

例如,給n輸入5,則輸出120.000000。

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

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

1*include<stdio.h>

2doublefun(intn)

3{doubleresult-1.0;

4/found*…

5ifn-?0

6return1.0;

7while(n>1n<170)

8/???foundf**********/

9result*■n--

10returnresult;

11)

12main()

13{intn;

14printf(HInputN:w);

15scanf(w%dw,&n);

ww

16printf(\n\n%d!-%lf\n\nrn,fun(n));

17

40.給定程序MOD11.C中函數(shù)fun的功能是:將s所指字符串中的字

母轉(zhuǎn)換為按字母序列的后續(xù)字母(但z轉(zhuǎn)換為A,z轉(zhuǎn)換為a),其他字符

不變。

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

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

1finclude<stdio.h>

2*include<ctype.h>

3voidfun(char*s)

4(

5/**?******wfound*******??**/

6while(*s!-"e')

7{if(*s>-,A,||*s>-,a,

&&*s<?1z?)

8{if(*s-12')WA,

9elseif(*3?=,z1)*s**a1;

10else*s+■1;

11

12;/………Found?…★……/

13!Cs)++;

14;1

151

16main()

17{chars(80);

18printf(w\nEnterastringwith

length<80.:\n\n");gets(s);

19printf(w\nThestring:\n\nw);

puts(s);

20fun(s);

21printf(w\n\nTheCords:\n\nw);

puts(s);

22

五、程序改錯題(2題)

41.

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

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

中的頭2個(gè)元素進(jìn)行排序,然后把第3個(gè)字符插入到前2個(gè)字符中,插

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

序的字符串已在主函數(shù)中賦予。請修改程序中的錯誤,使它能得出正

確的結(jié)果。注意:不要改動main()函數(shù),不得增行或刪行,也不得

更改程序的結(jié)構(gòu)。試題程序:

5mclu4cVari”

Umdudc<Mduxb>

9defineM80

voidprocCdur?arv)

(mtt?j?mcharchi

n*Mrhe(arr)?

(or<i?l.ynii++)

//????€O?MI????

Ic"?rrtGi

whiiet<j>-0)&&(cb<.nfi])]

?rr£j-^

一—t

■n£j+lj-cbi

void>

char4M]-?QWERTYUK>PASI)FGHJKLMNB

VCXZ%

pnntf(eTheongiiMilMs\ne?a>i

proc(a)i

*TheMringafter8rtz.

KAn\n*??)i

42.

下列給定程序中,proc()函數(shù)的功能是:根據(jù)形參m,計(jì)算下列公式

的值。t=l+l/2+1/3+1/4+...+1/m例如,若輸入10,則應(yīng)輸出

2.928968。請修改程序中的錯誤,使它能計(jì)算出正確的結(jié)果。注意:

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

題程序:

5include<sldlib.h>

二include<con?o.h>

5includeVstdio.h>

doubleproc(intm)

(

doublet=1.0;

iniit

for(i=2ii<=mn-F+)

//***?found????

t+=1.O/ks

//????found????

returnis

}

voidnuin()

{ini

sy5tem("CI.S*),

pnnifCw\nPlca>renterintegernumber:w>i

prinifC*\nTheresultis%lf\nH?proc(m))(

六、操作題(2題)

43.以下函數(shù)用來求出數(shù)組的最大元素在數(shù)組中的下標(biāo)并存放在k所指

的存儲單元中。請?zhí)羁铡?/p>

#include<conio.h>

#include<stdio.h>

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

{inti;

*k=0;

【】

if(s[*k]<s[i])*k=i;

return【】;}

main()

{inta[10]={876,675,896,101,301,401,980,431,451,777),k;

fun(a,10,&k);

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

44.以下程序運(yùn)行后的輸出結(jié)果是[]0

#include<string.h>

voidfun(char*s,intP,intk)

{inti;

fbr(i=p;i<k-l;i++)s[i]=s[i+2];

main()

{chars[]="abcdefg";

fun(s,3,strlen(s));puts(s)

)

參考答案

1.類類解析:在面向?qū)ο蠓椒ㄖ校惷枋龅氖蔷哂邢嗨茖傩耘c操作的一

組對象。

2.8080解析:數(shù)組a是共用體變量,共用體類型變量所占的內(nèi)存長度為

最大成員的長度,即單精度數(shù)組的長度,為4x4=16,因此,數(shù)組a所占

的內(nèi)存長度為5x16=80,所以最后輸出的s的值為80。

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

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

4.40

40解析:本題中指針si和s2都指向同一個(gè)內(nèi)存中的地址。因此語句

“*s2=20;”執(zhí)行后,*\u3000sl=*s2=20。所以m最后的值為40。

5.21

6.k<=nk++k<=n\r\nk++解析:本題要求將—for循環(huán)改成while

循環(huán)。首先要保證循環(huán)條件相同,在for循環(huán)中,每次執(zhí)行循環(huán)之后,

循環(huán)控制變量k都會加1,而while循環(huán)則沒有,故需在循環(huán)體中增加

改變k數(shù)值的語句“k++

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

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

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

8.交換排序交換排序解析:常見的排序方法有插入排序(包括簡單插入

排序法和希爾排序法等)、交換排序(包括冒泡排序和快速排序法等)和選

擇排序(包括簡單選擇排序和堆排序等)。注意:常見的排序方法及其作

用機(jī)制和區(qū)別。

9.#&#&解析:首先看最外面的switch,其表達(dá)式為a>0,結(jié)果為真(即

1),從easel:標(biāo)號處開始執(zhí)行。這里又是一個(gè)switch語句,其表達(dá)式為

b<00,結(jié)果為假(即0),由于沒有case。:或default:標(biāo)號,所以直接跳

過此switch語句。因?yàn)闆]有遇到break;語句,所以繼續(xù)執(zhí)行進(jìn)入內(nèi)部

第2個(gè)switch語句,其表達(dá)式為c==5,結(jié)果為真,從easel:標(biāo)號處開

始執(zhí)行,輸出一個(gè)#,遇到break;語句,跳出該內(nèi)部switch語句,最后

執(zhí)行default:標(biāo)號后的輸出語句輸出一個(gè)&后,整個(gè)外部switch語句執(zhí)行

完畢。程序最后輸出的換行符不會顯示,所以本題應(yīng)該填#&。

10.77解析:解答本題的關(guān)鍵是要讀懂程序,要找出能被7或11整除

的所有整數(shù),注意數(shù)學(xué)中的“或”和C語言中的“或”的區(qū)別,但在此處,

if條件語句中用了“H”運(yùn)算符,若要找能同時(shí)被7和11整除的所有整

數(shù)則在if的條件中應(yīng)使用“&&”運(yùn)算符。

當(dāng)然,如果m的值輸入50,即表達(dá)式fun(10,aa,&n);為fun(50,

aa,&n);時(shí)輸入結(jié)果為:711142122283335424449。

11.AC語言中的轉(zhuǎn)義字符也是一個(gè)字符。字符串“0\\t\\n\\0C011\\l",共有

字符U、Nt,、Nn,3個(gè)字符。strlen遇到\\0,字符計(jì)數(shù)結(jié)束,因此計(jì)數(shù)為

3O故本題答案為A選項(xiàng)。

12.CE-R圖轉(zhuǎn)換成關(guān)系模型數(shù)據(jù)則是把圖形分析出來的聯(lián)系反映到數(shù)據(jù)

庫中,即設(shè)計(jì)出表,所以屬于邏輯設(shè)計(jì)階段。

13.D

14.B

15.DC語言中,整型常量可以用十進(jìn)制、八進(jìn)制和十六進(jìn)制表示。故本

題答案為D選項(xiàng)。

16.D

17.D

18.A宏定義寫在函數(shù)的花括號外,作用域?yàn)槠浜蟮某绦?,通常在文件?/p>

最開頭,所以B選項(xiàng)錯|誤。宏名一般用大寫字母,但不是必須用大寫字

母,所以C選項(xiàng)錯誤。宏展開不占運(yùn)行時(shí)間,只占編譯時(shí)間,函數(shù)調(diào)用

占運(yùn)行時(shí)間(分配內(nèi)存、保留現(xiàn)場、值傳遞、返回值),所以D選項(xiàng)錯

誤。故本題答案為A選項(xiàng)。

19.C

20.B

本題考查函數(shù)的輸出格式。在printf函數(shù),格式說明符中有兩個(gè)“%”說

明;將第1個(gè)%后面的字符原樣輸出,并不輸出其對應(yīng)r的變量值。

21.

【解析】要求二維數(shù)組周邊元素之和,首先應(yīng)該判斷數(shù)組中的每一個(gè)

元素是否是周邊元素。找出所有的周邊元素后求和,返回給主函數(shù)。

周邊元素的下標(biāo)特點(diǎn)為行或列的下標(biāo)為?;騈—1。根據(jù)此特點(diǎn),找出

所有的周邊元素然后求和。

22.

程序設(shè)計(jì)題解析:

【考點(diǎn)分析】

本題考查:指針型變最定義;wh丑e循環(huán)語句;語句條件

表達(dá)式;字符串結(jié)束標(biāo)識

【解題思路】

函數(shù)fun的功能:除了字符串前導(dǎo)的*號之外,將串中其他+號全部刪

除。

【解答本題】

(1)定義一個(gè)臨時(shí)指針P,初始指向原串首地址;(2)利用循環(huán)語句把字

符串前導(dǎo)*號拷貝到原串;(3)繼續(xù)移動指針,把串中和串尾的非*號字

符拷貝到原串;(4)為修改后的字符串賦結(jié)束字符,、0\

【解題寶典】

要刪除字符串中的指定字符,我們通常采用保留非指定字符的方法。

可以將非指定字符保留在原串,即將需要保留的字符從原串的起始位

置重新賦值;也可以保留到新串,即新建一個(gè)字符串,存放要保留的

字符。

23.intfun(STREC*a,STREC*b,int1,inth)

inti,j=0;

for(i=0;i<=""p="">

if(a[i].s>=l&&a[i].s<=h)

/*將分?jǐn)?shù)高于1,低于h的學(xué)生記錄存入結(jié)構(gòu)體數(shù)組b中*/

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

returnj;/*返回分?jǐn)?shù)范圍內(nèi)的學(xué)生人數(shù)*/

)

本題使用循環(huán)判斷結(jié)構(gòu)實(shí)現(xiàn)題目要求。循環(huán)語句用于遍歷結(jié)構(gòu)體數(shù)組;

條件語句用于判斷當(dāng)前元素是否符合條件,若符合條件則將其存入結(jié)構(gòu)

體數(shù)組b中。變量j為數(shù)組b元素下標(biāo),最后變量j+1為學(xué)生人數(shù),作

為函數(shù)值返回。

24.

【解析】按照題目中要求,求出二維數(shù)組每行中最大元素,并依次放

入pp所指的一維數(shù)組中。首先比較二維數(shù)組中每一行的元素,然后找

出每一行中的最大元素,放入一維數(shù)組pp中,最后返回到主函數(shù)當(dāng)

中。

25.doublefun(doubleeps)

(

doubles=0.0,sl=1.0;

intn=l;

while(sl>=eps)/*當(dāng)某項(xiàng)大于精度要求時(shí),繼續(xù)求下一項(xiàng)*/

{s=s+sl;/*求和*/

sl=sl*n/(2*n+l);

/*求多項(xiàng)式的每一項(xiàng)*/

n++;

)

return2*s;

該題考核的是通過迭代法求給定多項(xiàng)式的值。迭代法是讓計(jì)算機(jī)對一組

指令(或一定步驟)進(jìn)行重復(fù)執(zhí)行,在每次執(zhí)行這組指令(或這些步驟)時(shí),

都從變量的原值推出它的一個(gè)新值。需要注意變量的數(shù)據(jù)類型和賦初值

操作。

定義double類型變量s,并為其賦初值,用來存放多項(xiàng)式的某一項(xiàng)和

最后的總和。從第2項(xiàng)開始,以后的每一項(xiàng)都是其前面一項(xiàng)乘以

n/(2*n+l)o程序用si來表示每一項(xiàng),用s表示求和后的結(jié)果。需注意

變量si和s的初值都為1.0,因?yàn)檠h(huán)變量從第2項(xiàng)開始累加。

26.voidfun(inta[3][3],intb[3][3])

(

inti,j;

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

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

b[i][j>a[i]rj]+a[j][i];

/*把矩陣a加上a的轉(zhuǎn)置,存放在矩陣b中*/

)

行列數(shù)相等的二維數(shù)組的轉(zhuǎn)置就是行列互換。即轉(zhuǎn)置后的第i行第j列

正好對應(yīng)原矩陣的第j行第i歹本題使用兩層循環(huán)實(shí)現(xiàn)矩陣的轉(zhuǎn)置,

并將計(jì)算結(jié)果存入矩陣b中,外層循環(huán)控制矩陣的行下標(biāo),內(nèi)層循環(huán)控

制矩陣的列下標(biāo)。

27.voidfun(inta,intb,long*c)

(

/*b%10獲取b的個(gè)位數(shù),a/10獲取a的十位數(shù),a%10獲取a的個(gè)位

數(shù),b/10獲取b的十位數(shù)*/

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

)

本題主要考核如何取出a和b的個(gè)位數(shù)和十位數(shù),取出后如何將其表示

成C中相應(yīng)的位數(shù)。由于a和b都是只有兩位的整數(shù),因此分別對它們

除以10可得到它們的十位數(shù),分別用10對它們求余可得到它們的個(gè)位

數(shù)。將得到的數(shù)對應(yīng)乘以1000、10。、10、1,即可得到c的千位數(shù)、百

位數(shù)、十位數(shù)、個(gè)位數(shù)。注意使用c時(shí)要進(jìn)行指針運(yùn)算。

28.

【解析】進(jìn)入fun()函數(shù),根據(jù)題中給出的求解步驟,首先yl初值為

0.0;若yO-yl的絕對值大于0.000001就循環(huán)進(jìn)行迭代,即“yO-yl;

yl-cos(yO);",直到滿足題目中的要求,返回yl,即實(shí)根。本題考查

了do-while用法。

29.

(2)錯誤:if(*r==0)

正確:if(*r=='\0')

【解析】由于后面的語句控制變量r是指向字符串t的指針,而不是指

向字符串str的指針,因此,“r=p;”應(yīng)改為“r=t;while循環(huán)結(jié)束

后,如果r指向字符串t的結(jié)束符,證明字符串str中包含一個(gè)t字符

串,因此,“if(*r=O)”應(yīng)改為“if(*『='\0')”。

30.

【解析】題目中要求將字符串中的前導(dǎo)*號全部刪除,首先將指針P移

動到第一個(gè)不是*的字符,將指針P之后的字符放入原來的字符串中,

并為新的字符串添加結(jié)束符。

31.(1)錯誤:k++正確:k++(2)錯誤:if(m=k)正確:if(m==k)(l)錯誤:

k++正確:k++\r\n(2)錯誤:if(m=k)正確:if(m==k)解析:函數(shù)fun()的

功能是判斷m是否為素?cái)?shù):m從2開始作為除數(shù),并對m取余,若不

存在一個(gè)數(shù)使得余數(shù)為。,則m為素?cái)?shù),程序的錯誤在于if(m=k)語句

中的邏輯表達(dá)式寫成了賦值表達(dá)式。

32.(l)doublefun(intn)(2)c=a;a+=b;b=c;(l)doublefun(intn)(2)c=a;a+=b;

b=c;解析:本題中函數(shù)的功能是求出分?jǐn)?shù)序列的前n項(xiàng)之和。首先根

據(jù)題干中給出的公式推出每一項(xiàng)之間的關(guān)系,求出每一項(xiàng)的表達(dá)式,然

后求得數(shù)列的和。每一項(xiàng)的分母是前一項(xiàng)的分子,分子是前一項(xiàng)分子和

分母的和。

33.⑴錯誤:if(i%k!=O)正確:if(i%k=O)(2)錯誤:if(k<i)正確:if(k>=i)(l)

錯誤:if(i%k!=O)正確:if(i%k=O)\r\n⑵錯誤:if(k<i)正確:if(k>=i)解

析也許剛接觸C語言的學(xué)習(xí)者對素?cái)?shù)的概念不清楚,在這里說明一下,

素?cái)?shù)就是質(zhì)數(shù),本題的任務(wù)是隨便輸入一個(gè)整數(shù)m,然后在m的后面尋

找緊跟m的一個(gè)質(zhì)數(shù),作為函數(shù)值返回。

for(i=m+1;;i++){

是從m后面的一位開始循環(huán),將m后面一位的值賦予io然后;我們依

次判斷m后面的一位是否為素?cái)?shù)。

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

if(i%k==0)

是一個(gè)簡單的數(shù)學(xué)判斷問題,判斷i被賦予的值與k的余數(shù)是否為零。

34.(1)錯誤:缺少語句正確:應(yīng)填入n%base或%16(2)錯誤:缺少語句

正確:應(yīng)填入[d](l)錯誤:缺少語句正確:應(yīng)填入n%base或%16\1"\11(2)

錯誤:缺少語句正確:應(yīng)填入回解析:在該程序中,字符數(shù)組b存儲

十六進(jìn)制的16個(gè)數(shù)字符,整型數(shù)組c存儲譯出的十六進(jìn)制數(shù)的各位數(shù)

值。從整數(shù)n譯出它的各位十六進(jìn)制數(shù)值,需采用除16取余的方法,

即求n除16的余,得到它的十六進(jìn)制的個(gè)位數(shù),接著將n除以16。在

n不等于0的情況下循環(huán),能順序求出n的十六進(jìn)制的個(gè)位數(shù)、十位數(shù)、

百位數(shù)等。程序中變量base已預(yù)置16,所以在第1個(gè)空框處可填代碼

n%base或n%16。當(dāng)n的十六進(jìn)制數(shù)的個(gè)位、十位、百位等依次存

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論