2021年山西省陽泉市全國計算機等級考試C語言程序設(shè)計真題(含答案)_第1頁
2021年山西省陽泉市全國計算機等級考試C語言程序設(shè)計真題(含答案)_第2頁
2021年山西省陽泉市全國計算機等級考試C語言程序設(shè)計真題(含答案)_第3頁
2021年山西省陽泉市全國計算機等級考試C語言程序設(shè)計真題(含答案)_第4頁
2021年山西省陽泉市全國計算機等級考試C語言程序設(shè)計真題(含答案)_第5頁
已閱讀5頁,還剩35頁未讀 繼續(xù)免費閱讀

付費下載

下載本文檔

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

文檔簡介

2021年山西省陽泉市全國計算機等級考試

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

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

一、2.填空題(10題)

1.Jackson方法是一種面向[]的結(jié)構(gòu)化方法。

2.有以下程序:

#include<string.h>

structSTU

{charname[10];

intnum;};

voidf(char*name,intnum)

{structSTUs[2]={{"SunDan",20044},{"Penghua",20045)};

num=s[0].num;

strcpy(name,s[0].name);

}

main()

{structSTUs[2]={{"YangSan",20041},{"LiSiGuo",20042}},*p;

p=&s[l];f(p->name,p->num);

printf("%s%d\n",p->name,p->num);

)

程序運行后的輸出結(jié)果是【】。

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

5,7}),則初始化后,得到的初值是o

4.表示“整數(shù)x的絕對值大于5”時值為“假”的C語言表達式是

5.在面向?qū)ο蠓椒ㄖ?,類之間共享屬性和操作的機制稱為o

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

main()

{inta=l,b=2;

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

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

)

7.在一個容量為15的循環(huán)隊列中,若頭指針front=6,尾指針Year

9,則該循環(huán)隊列中共有【】個元素。

8.以下程序運行后的輸出結(jié)果是____o

main()

charc;intn=100;

floatf=10;doublex;

x=f*=n/=(c=50);

printf("%d%An",n,x);

9.以上程序運行后的輸出結(jié)果是【】。

main()

{inti=10,j=0;

do

{j=j+i;i-;)

while(i>2);

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

10.有以下程序

intfa(intx){returnx*x;}

intfb(intx){returnx*x*x;}

intf(int(*fl)(),int(*f2)(),intx)

{returnf2(x)-fl(x);}

main()

{inti;i=f(fa,fb,2);printf("%d\n",i);)

程序運行后,輸出結(jié)果是【】。

二、單選題(10題)

11.有以下程序:

main

{intx,i;

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

{x=i:

if(x%2=0)

if(x%3=0)

if(X%7=0)

printf("%d,i)”;

}

)

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

A.28B.27C.42D.41

12.以下選項中,能用作用戶標識符的是()。

A._0_B.8_8C.voidD.unsigned

13.以下敘述中錯誤的是()。

A.C語言的可執(zhí)行程序是由一系列機器指令構(gòu)成的

B.用C語言編寫的源程序不能直接在計算機上運行

C.通過編譯得到的二進制目標程序需要連接才可以運行

D.在沒有安裝C語言集成開發(fā)環(huán)境的機器上不能運行C源程序生成

的.exe文件

14.以下關(guān)于指針的說法錯誤的是()。

A.可以向指針中寫入任意數(shù)據(jù)

B.可以向指針所指內(nèi)存單元中寫入數(shù)據(jù)

C指針可以指向與其基類型相同的普通變量

D.可以通過加法運算,使指針指向下一個內(nèi)存單元

15.有以下程序:

#include<stdio.h>

main()

(

chars[]="abcde”;

s+=2;

printf(“%d\n”,s[O]);

}

程序的運行結(jié)果是OO

A.輸出字符c的ASCII值B.程序出錯C.輸出字符cD.輸出字符a的

ASCII值

16.若有定義語句:char*sl="OK",*s2="ok";,以下選項中,能夠輸

出"0K"的語句是

A.A.if(strcmp(sl,s2)==0)puts(sl);

B.if(strcmp(sl,s2)!=0)puts(s2);

C.if(strcmp(sl,s2)==l)puts(sl);

D.if(strcmp(sl,s2)!=0)puts(sl);

17.下列程序的運行結(jié)果是()。

auin<)

wiide<+!■(,一?1),

A.2,3,2B.2,3,1C.l,3,3D,3,1,2

18.用二進制來編碼字符串“abcdabaa",需要能夠根據(jù)編碼,解碼回原來

的字符串,最少需要。長的二進制字符串

A.12B.14C.18D.24

19.有說明語句“inta,b;",如果輸入111222333,使得a的值為111,b

的值為333,則以下正確的語句是()。

A.scanf("%3d%*3d%3d",&a,&b);

B.scanf("%*3d%3d%3d",&a,&b);

C.scanf("%3d%3d%*3d",&a,&b);

D.scanf("%3d%*2d%3d",&a,&b);

20.計算機硬件組成中,CPU包含____o

A.控制器和存儲器B.控制器和運算器C.控制器、運算器和存儲器D

內(nèi)存儲器和外存儲器

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

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

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

數(shù),用來刪除字符串中的所有空格。例如,輸入asdafaaz67,則輸出為

asdafaaz670注意:部分源程序在文件progl.c中。請勿改動主函數(shù)

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

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

#include<stdio.h>

#include<ctype.h>

#include<conio.h>

#include<stdlib.h>

voidfun(char*str)

)

main()

(

charstr[81];

charMsg[]="Inputastring:n;

intn;

FILE*out;

printf(Msg);

gets(str);

puts(str);

fun(str);

printf(?****str:%s\nn,str);

out=fopen("out.dat”,;

fun(Msg);

fprintf(out,'*%sn,Msg);

fclose(out);

)

22.

編寫函數(shù)fun(),其功能是:求SS所指字符串中指定字符的個數(shù),并

返回此值。例如,若輸入字符串“123412132",輸入字符為“1”,則輸出

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

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

題程序:

Stnclu<WVzdhbu

*tficlu4e<como.

更includeVvldia

SdefineM8)

mi(UA(char?ch&rc>

midnitin()

char〈M].chi

wywtvfli(-C?LS")?

prwii(<?\nPloutemtefaxrifigi*)?

<?>?

<?\nPI?awEitr.chart")s

ch-<)?

print1<<\nThenumberoftbechar舟/d\?*<(an

ch))i

23.編寫函數(shù)fun,其功能是:將s所指字符串中除了下標為奇數(shù),同時

ASCH碼值也為奇數(shù)自q字符之外。

其余所有字符全部刪除,串中剩余字符所形成的一個新串放在所指的數(shù)

組中。

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

碼值為奇數(shù),但所在元素的

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

中的下標也為奇數(shù),因此不應(yīng)當(dāng)刪除,

其他依此類推。最后t所指數(shù)組中的內(nèi)容應(yīng)為“135”。

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

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

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

試題程序:

#1ncltide<stdio.k>

#include<3tring.h>

voidfun(char*s,chart[D

I

)

main()*

(

chars(100],t[100];

printff'XnPIeaseenterstrings:n);

scanf("%s",§X

加n(s,0;

printf(n\n,nieresultid:%s\n,f4);

I

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

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

函數(shù)fun(),它的功能是將ss所指字符串中所有下標為奇數(shù)的字母轉(zhuǎn)換

為大寫字母(若該位置上不是字母,則不轉(zhuǎn)換)。

例如,若輸入“abc4Efg",則應(yīng)輸出“aBc4EFg”。

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

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

試題程序:

1#include<conio.h>

2#include<stdio.h>

3tinclude<string.h>

4#include<stdlib.h>

5voidfun(char*ss)

6{

7

8}

9voidmain()

10{

11FILE*wf;

12char81],s[81]="abc4Efg”;

13system(℃LSM);

14printf(H\nPleaseenteranstring

within80characters:\nM);

15gets(tt);

16printf(n\n\nAfterchanging,

w

thestringXn%srtt);

17fun(tt);

18printf(?'NnbecomesXn;

19/

20wf=fopen("out?dat","w");

21fun(s);

n

22fprintf(wfJ*srs);

23fclose(wf);

24/??????#??????***?/

251

25.

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

是:使字符串中前部的*號不得多余m個;若多余m個,則刪除多余的

*號;若少于或等于m個,則什么也不做,字符串中間和尾部的*號不刪

除。例如,字符串中的內(nèi)容為****A*BC*DEF*G****,若m的值為2,

刪除后,字符串中的內(nèi)容則應(yīng)當(dāng)是**A*BC*DEF*G****;若m的值為

4,則字符串中的內(nèi)容仍為****A*BC*DEF*G****°n的值在主函數(shù)中輸

入。在編寫函數(shù)時,不得使用c語言提供的字符串函數(shù)。注意:部分源

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

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

FmclockVadidh>

*曲CIMJTVCOCUD.h>

midproc<char?n)

voidmainf>

(char

M

*Efitrr*Mnngz\n>igru(?tr)i

prinr?*Enitrni|?

proc<

pnntfC*Tbf?Afterdelrtrd:\n*)t

iMitwCstrH

26.

請編寫函數(shù)fun(),其功能是:找出2M整型二維數(shù)組中最大元素的值,

并將此值返回調(diào)用函數(shù)。注意:部分源程序給出如下。請勿改動main

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

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

Sdr6ncM4

sincludeVzdicx.h>

iiMfun<inta£J£M]>

voidRMin()

initrr[2][M]-IS.B.3.45?7C.-4.12.2>i

prttii"?fnAx-,d\na?fwn<arr>)4

27.

請編寫一個函數(shù)proc(),它的功能是:比較2個字符串的長度(不得

調(diào)用C語言中求字符串長度的函數(shù)),函數(shù)返回較長的字符串。若2個

字符串長度相等,則返回第1個字符串。例如,若輸入jiangxiv;Enter>;

beijing<;Enter>;則函數(shù)返回jiangxio注意:部分源程序給出如下。

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

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

8ktldiMWb>

rh*r?prodclur?n?char?t)

moidmain<)

chara(20j?b[10j??p??qa

pnnih*InputlihMnng:")i

A)I

prindCwlapM<2th3rm(,*)t

IRtMb),

pnntt(>K?n?p|roc<a?b))i

28.請編寫一個函數(shù),用來刪除字符串中的所有空格。例如,輸入

abcdefgh,則輸出為abcdefgho注意:部分源程序給出如下。請勿改

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

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

£EclwicVwtdlO.h>

3mrludr<<1ypc-b>

<>t)clu<l*VconitKh>

#MirludrVwdhh

midprocKchar?MI)

char?tr[8lJi

*CLS*)t

pruiiR*Input??tnngs*)?

r〃

Mr>t

prodMT》i

prwitfC*???Mr?KAn*?str)?

29.

請編寫一個函數(shù),用來刪除字符串中的所有空格。

例如,輸入asdafaaz67,則輸出為asdafaaz67o

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

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

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

試題程序:

#i^lude<stdK.h>

#i)iclude<ctype.h>

#iiiclude<conio.h>

vodfun(char*stz)

(

)

main()

{char$tr[81];

charMsgf]=uInputastring:7';

intn;

printf(Msg);gets(str);puts(str);{un(str);

printfC****str:%8\nM,str);

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

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

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

函數(shù)獲得,并放入主函數(shù)的age數(shù)組中。要求函數(shù)把。?9歲的人數(shù)存

放在d[0]中,把10?19歲的人數(shù)存放在d[l]中,把20?29歲的人數(shù)存

放在d[2]中,依此類推,把100歲(含100歲)以上年齡的人數(shù)都存放在

d[10]中。結(jié)果在主函數(shù)中輸出。

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

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

試題程序:

1#include<stdio.h>

21defineN50

3tdefineM11

4voidfun(int?a,int?b)

51(

6

7)

8doublernd()

9(

10statict?29,c=217,m=1024,r=0;

11r=(r*t+c)%m;

12return((double)r/m);

13J

14voidmain()

i.

16FILE?wf;

17intage[N]rird[MJ;

18intb(N]-[32,45,15,12,86,49,

97,3,44,52,17,95,63);

19for(i-0;i<N;i)

20age[i]-(int)(115*rnd());

/?產(chǎn)生一個隨機的年齡教組*/

21printf(**rheoriginaldata

22for(i-0;i<N;i**)

23printf((i+1)*10=0?

4dw,age[i]);/*每行*出10冷敏?/

24printf(??\n\nw);

25fun(age,d);

26for(i=0;i<10;i++)

H

27printf(-%4d--%4d:%4d\nr

i?10,i^l0^9.d[i]);

M

28printf("Over100:^4d\nrd[10]);

29/***???******?????/

30wf-fopen(Mout.datMww);

31fun(brd);

32for(i=0;i<10;1??+)

w

33fprintf(wf.^d—Md:%4d\nri

-10,

34fprintf(wfr'KXrer100:%4dn,d[10]);

35fclose(wf);

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

31.給定程序MODU.C中函數(shù)fun的功能是:比較兩個字符串,將長

的那個字符串的首地址作為函數(shù)值返回。

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

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

1tinclude<stdio.h>

2/****?*****foundw*********/

3charfun(char*srchar*t)

4{intsl?0rtl?0;char*ss,*tt;

5ss-s;tt?t;

6while(*ss)

7{sl++;

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

9(*ss)

10

11while(*tt)

12{tl++;

13/***?*?****found**********/

14

15}

16if(tl>sl)returnt;

17elsereturns;

18)

19main()

20{chara[80]rb[80);

21printf(w\nEnterastring:w);

gets(a);

22printf("\nEnterastringagain:

;gets(b);

23printf(w\nThelongeris:\n\n\

fun(arb));

24

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

小到大的順序進行排序。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

#defineMAXLINE20

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

fun(char*pstr[6])

{inti,j;

char*p;

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

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

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

{if(strcmp(*(pstr+i),pstr+j)>0)

p=*(pstr+i);

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

*(pstr+i)-pstr+j;

*(pstr+j)=p;

main()

{inti;

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

clrscr();

for(i=0;i<6;i++)pstr[i]=str[i];

printf("\nEnter6string(lstringateach

line):\n");''

for(i=0;i<6;i++)scanf("%s",pstr[i]);

fun(pstr);

printf("Thestringsaftersorting:\n");

for(i=0;i<6;i++)printf("%s\n",pstr[i]);

)

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

值。

例如,若m中的值為5,則應(yīng)輸出:1.463611。

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

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

[試題源程序]

#include<stdiO.h>

doublefun(intm)

(

doubley=1.0;

inti;

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

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

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

y+=l/(i*i);

retum(y);

1.

main()

(

intn=5;

printf("\nTheresultis%lf\n",fun(n));

}

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

字符按逆序存放到t所指字符串中,然后把s所指串中的字符按正序連

接到t所指串的后面。

例如:當(dāng)S所指的字符串為:“ABCDE”時,則t所指的字符串應(yīng)為:

“EDCBAABCDE”。

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

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

finclude<stdio.h>

2?include<string.h>

3voidfun(char*srchar*t)

4(

5/?**??***??**found***??**????*/

6inti;

7si?strlen(s);

8for(i-0;i<sl;i++)

9/?………??found…………/

10t[i]?s[sl-i];

11for(i-0;i<sl;i++)

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

13t[2*sl]-?XO';

14

15main()

16{chars[100],t(100];

17printf(w\nPleaseenterstring

Mwn

s:);scanf(%srs);

18fun(srt);

wn

19printf(Theresultis:%s\nrt);

20

35.下列給定程序中,函數(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[i][i]+xx[i][n-i-1];

return(sum);

main()

{intaa[M][M]={{1,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));

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

大到小的順序進行排序。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

#defineMAXLINE20

voidfun(char*pstr[6])

(

inti,j;

char*p;

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

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

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

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

p=*(pstr+i);

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

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

*(pstr+j)=*p;

main()

inti;

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

clrscr();

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

pstr[i]=str[i];

printf("/nEnter6string(lstringateachline):\n");

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

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

fun(pstr);

printf("Thestringsaftersorting:\n");

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

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

)

37.給定程序中,函數(shù)fun()的功能是:求輸入的兩個數(shù)中較小的數(shù)。

例如:輸入510,結(jié)果為minis5O

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

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

試題程序、

#include<stdio.h>

#include<conio.h>

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

intfun(intx,y)

{intz;

z=x<y?x:y;

return(z);

}

main()

{inta,b,c;

scanf("%d,%d\n",&a,&b);

c=fun(a,b);

printf("minis%d",c);

)

38.給定程序中函數(shù)fun的功能是:將一個由八進制數(shù)字字符組成的字

符串轉(zhuǎn)換為與其值相等的十進制整數(shù)。規(guī)定輸入的字符串最多只能包含

5位八進制數(shù)字字符。

例如,若輸入:77777,則輸出將是:32767。

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

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

[試題源程序]

#include<stdio.h>

#include<string.h>

#include<stdlib.h>

intfun(char*p)

(

intn;

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

n=*p-'o';

P++;

while(*p!=0){

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

n=n*8+*p-'o';

P++;

)

returnn;

)

main()

(

chars[6];inti;intn;

printf("Enterastring(Ocataldigits):");

gets(s);

if(strlen(s)>5)

(

printf("Error:Stringtoolonger!\n\n");

exit(O);

}

for(i=0;s[i];i++)

if(s[i]<'O'||s[i]>7)

(

printf("Error:%cnotisocataldigits!\n\n",s[i]);

exit(O);

printf("Theoriginalstring:");

puts(s);

n=fun(s);

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

39.下列給定程序中,函數(shù)fun()的功能是:從s所指字符串中,找出t

所指字符串的個數(shù)作為函數(shù)值返回。例如,當(dāng)s所指字符串中的內(nèi)容為

abcdabfab,t所指字符串的內(nèi)容為ab,則函數(shù)返回整數(shù)3。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

#include<string.h>

intfun(char*s,char*t)

{intn;char*p,*r;

n=0;

while(*s)

{P=s;

r=t;

while(*r)

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

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

elsebreak;

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

if(r=='\O')

n++;

s++;

)

returnn;

main()

{chars[100],t[100];intm;

clrscr();

printf("\nPleaseenterstrings:");

scanf("%s",s);

printf("\nPleaseentersubstringt:");

scanf("%s",t);

m=fun(s,t);

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

40.給定程序MODE.C中函數(shù)fun的功能是:求整數(shù)x的y次方的低

3位值。例如,整數(shù)5的6次方為15625,此值的低3位值為625。

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

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

;linclude<stdio.h>

2!longfun(intxrintlong*p)

3i{inti;

4longt?l;

5\/**?****??****found***?**??*****/

i

6for(i-1;i<y;i++)

7

8*p-t;

9i/…?………found…………?/

10!t-t/1000;

11?returnt;

12;}

13!main()

?

14i{longt,r;intxry;

15;printf(w\nlnputxandy:

!scanf(M%ld%ldw,&x,iy)

i

16it?fun(x,v,&r);

w

17!printf(\n\nx-%dry?%d,

w

(last-%ld\n\nrxry#rrt);

18;1

五、程序改錯題(2題)

41.

下列給定程序中,函數(shù)proc()的功能是:用下面的公式求兀的近似值,

直到最后一項的絕對值小于指定的數(shù)(參數(shù)num)為止。71/4^1-1/

3+1/5-1/7+…例如,程序運行后,輸入0.0001,則程序輸出3.1414。

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

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

二includeh>

include<math.h>

s*includeVstdio.h>

floatproc(floatnum)

(

inisi

floatn.t?DI:

t011pinO,n=liN=11

found?***

whileC4num)

(

pi=pt+11

n=n4-2j

//????found?■??

t=x%m

>

pi=pi*4$

returnph

J

voidm^inC>

floatnl?n2i

sy5teni<-€LSH)s

print(("Enterafloatnumber:")i

scanf(*%P.&?nl)i

n2,fcproc(nl)i

printfC*%6,4f\n*.n2>i

42.

下列給定的程序中,函數(shù)proc()的功能是:計算并輸出k以內(nèi)最大的

10個能被13或17整除的自然數(shù)之和。k的值由主函數(shù)傳人,若k的值

為600,則函數(shù)的值為5671。請修改程序中的錯誤,使它能得出正確的

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

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

sindudcli>

$inciuorVcooio.b>

Sinriude<C*tdliKIC>

iniproc<mt

initn-0/fnc-0?ji

win*(lO*,2J&&(ntr^I0M

//????found????

if<(kKlSMO)H(kKn?O>>

I1????+hime++“

k--i

//????found????

returnmi

voidmBin(>

sy?tctn(*CLS*)?

pnoi((*^id\n*?proc(600>>;

六、操作題(2題)

43.請補充main()函數(shù),該函數(shù)的功能是:從鍵盤輸入一個長整數(shù),如

果這個數(shù)是負數(shù),則取它的絕對值,并顯示出來。例如,輸入>123456,

結(jié)果為:123456o注意:部分源程序給出如下。請勿改動main()函

數(shù)和其他函數(shù)中的任何內(nèi)容,僅在橫線上填入所編寫的若干表達式或語

句。試題程序:

3mdudeV-tdlihb>

生includrVh>

更ificludeVconio.h2>

voi4m*in()

loci,ininutni

*C*KS*>?

printfC*Knierthe<kiiai\ii0)?

?can(<|l))i

prmtf(????theobaolvic“Is???\?*)?

if(num*CO)

■】

prtntf(13]>i

44.有以下程序:

intfa(intx){returnx*x;}

intfb(intx){retumx*x*x;}

intf(int(*fl)(),int(*f2)(),(intx)

{returnf2(x)-fl(x);}

main()

{inti;i=f(fa,fb,2);printf("%d\n",i);}

程序運行后,輸出結(jié)果是【】。

參考答案

1.數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)解析:Jackson方法是一,種面向數(shù)據(jù)結(jié)構(gòu)的結(jié)構(gòu)化

方法。

2.SunDan20042SunDan20042解析:f函數(shù)中形參1用的是顯式傳地址

的方式,因此p->name的值發(fā)生改變,而形參2用的傳值的方式,在

調(diào)用時不改變實參的值,因此p->num的值不發(fā)生變化。

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

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

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

素為a[0][0]、a[0][l]xa[0][2]sa[0][3]o

4.(x>-5)&&(x<5)(x>-5)&&(x<5)解析:本題考查基本邏輯表達,“整

數(shù)x的絕對值大于5”時值為“假”,即整數(shù)x的絕對值小于等于5,也就

是整數(shù)x要大于等于-5且要小于等于5。這里“且”用“與(&&)”表示,所

以C語言表達式為:(x>-5)&&(x<5)o

5.繼承繼承

6.21

7.3

8.220.0或220或220.或220.000000220.0或220或220.或2

20.000000解析:所有的賦值運算符的優(yōu)先級都相同,它們的結(jié)合性為

從右至左,它們返回的表達式值為賦給變量的值.所以,語句

x=f*=n/=(c=50):—x=#=n/=50;-x=#=2;(n的值變成2)-x=20;o故

最終輸出的結(jié)果應(yīng)該是:220.000000

9.5252解析:do...while語句的形式為:

do

(

語句;

}while(條件表達式)

當(dāng)條件表達式為非零時,繼續(xù)執(zhí)行循環(huán)體,直到條件表達式為零時退出

循環(huán)。

10.44解析:在主函數(shù)中調(diào)用函數(shù)f,函數(shù)f有三個參數(shù),形參fl與f2

分別是兩個指向函數(shù)的指針。在f中執(zhí)行f2(x)-fl(x),實際上是執(zhí)行了

32

fb(2)-fa(2),故執(zhí)行i=(fa,fb,2)后i的02-2=4o

11.C

只有當(dāng)3個if條件同時成立,即能夠同時被2、3、7整除時,才輸出i

的值,而從。到50能夠同時被2、3、7整除的數(shù)只有42,故選擇C

選項。

12.AC語言的標識符由字母、數(shù)字、下劃線組成,且第1個字符必須是

字母或下劃線。另外,關(guān)鍵字不能作為標識符。B選項中以數(shù)字8開頭,

所以錯誤。C選項與D選項中用的是關(guān)鍵字“void”與“unsigned",所以錯

誤。故本題答案為A選項。

13.D

c語言的可執(zhí)行程序是由一系列機器指令組成的。用C語言編寫的源

程序必須經(jīng)過編譯生成二進制目標代碼,再經(jīng)過連接才能運行,并且

可以脫離c語言集成開發(fā)環(huán)境。故答案為D)。

14.A指針變量必須區(qū)分基類型,可以向指針所指內(nèi)存單元寫入與基類型

相同的數(shù)據(jù),而不能寫入任意數(shù)據(jù),選項A錯誤,選項B正確;指針可

以指向與其基類型相同的普通變量,選項C正確才旨針是一個內(nèi)存地址,

它是一個整數(shù),可以通過加法運算,使指針指向下一個內(nèi)存單元,選項

D正確。故本題答案為A選項。

15.B在C語言中,數(shù)組名類似于一個指向數(shù)組首地址的指針常量,一

旦定義就不能修改其內(nèi)容。所以本題中的“s+=2;”語句讓數(shù)組名S的內(nèi)

容加2是錯誤的,編譯無法通過。故本題答案為B選項。

16.D

解析:strcmp(sl,s2)的作用是比較字符串si和s2。參數(shù)strl,str2如

果相同,則返回0,如果strl大于str2則返回一個正整數(shù),如果str1小

于str2則返回一個負整數(shù)。本題中si,s2不相同,A)選項不會輸出任

何字符,B)選項輸出ok,C)選項不輸出任何字符,D)選項會輸出

OKo

17.D本題考查while循環(huán)。第一次循環(huán),y=y-l,y=2,循環(huán)條件成立,

X=l,X++后值為1,x自加變成2,進入循環(huán),a=a+l=l,判斷if語句條

件是否成立,y<x不成立,接著執(zhí)行下一次循環(huán)。第二次循環(huán),x=2,y-

1=1.循環(huán)條件成立,進入循環(huán),a=a+l=2,判斷if語句的控制條件是否

成立,y<x成立,執(zhí)行break語句。退出循環(huán)。結(jié)果為D。

18.B

19.A

根據(jù)題意,要使a的值為111,b的值為333,必須在讀入時指定a的

讀入寬度為3,b的讀入寬度為3,且a和b的控制字符之間必須額外

增加%*控制符,用于跳過中間的3位輸入數(shù)字,選項A正確。本題答

案為A選項。

20.B

21.1voidfun(char*str)

2{

3inti=O;

4char*p=str;

5while(*p)

61

7if(*p!=")/*刪除空格*/

8{

9str[i++]=*p;

10)

11P++;

12}

13str[i]=N(y;/*加上結(jié)束符*/

14)

本題要求刪除所有空格,即保留除了空格以外的其他所有字符。由于

C語言中沒有直接刪除字符的操作,因此對不需要刪除的字符采用“保

留”的操作。用指針P指向字符串中的每一個字符,每指向一個字符都

判斷其是否為空格,若不是空格則將其保存到數(shù)組Str。

22.

【解析】此題考查用for循環(huán)遍歷字符串和通過條件表達式*ss!='\0

'來判斷字符串是否結(jié)束。給字符串加上結(jié)束標識‘\0',通過for循

環(huán)遍歷字符串中每一個字符,在遇到結(jié)束標識前,如果遇到指定(即用戶

輸入)字符,變量i加1,最后將變量i返回,即用戶輸入字符在字符串

中出現(xiàn)的次數(shù)。

23.

I答案】

voidfun(('har*s,chart[J)

I.

inti.j=0.n;

n=stricn(s);

fbr(isO;i<n;i++)

呻%2!以>&&#[%2]刈

{tbM>J;/*將下標為奇數(shù)同時ASCII碼值為奇數(shù)的字符放人數(shù)組t中*/

J++;

)

tfi]=w;產(chǎn)最后加上結(jié)束標識符*/

)

【解析】

用循環(huán)遍歷字符串,通過if語句將下標和ASCII碼都為奇數(shù)的字符保

存到數(shù)組中,在字符串末尾加上結(jié)束標識符。

24.1voidfun(char*ss)

2{

3inti;

4for(i=O;ss[i]!='\\0';i++)/*將ss所指字符串中所有下標為奇數(shù)的字母

轉(zhuǎn)換為大寫字母*/

5if(i%2==l&&ss[i]>='a'&&ss[i]<='z')

6ss[i]=ss[i]-32;

7)

本題要求將給定字符串ss中下標為奇數(shù)的字母轉(zhuǎn)換為大寫字母。需要

先判斷下標為奇數(shù)的字母是否是小寫字母,如果是再通過其轉(zhuǎn)換方法

進行轉(zhuǎn)換。從C語言的學(xué)習(xí)中知道,只要將小寫字母減去32即轉(zhuǎn)換成

大寫宇母,將大寫字母加上32即換轉(zhuǎn)成小寫字母。本程序用if語句實

現(xiàn)轉(zhuǎn)換功能。

25.

【解析】題目中要求字符串前部的*不得多于m,首先要計算出字符串

前部的*號的個數(shù),與變量m進行比較。當(dāng)字符串前部的*多于m個時,

刪除多余的*。規(guī)定不能用字符串函數(shù)處理,可以通過移動字符串的首

指針來實現(xiàn)。

26.

【解析】此題考查的是數(shù)組的查找算法。使用for循環(huán)嵌套完成對二維

數(shù)組的遍歷。題目要求出最大值,則應(yīng)采用將所有元素遍歷一遍,逐個

比較的方式完成。定義變量max,將第一個元素賦值max,然后通過for

循環(huán)將元素逐個與max比較,遇到比max大的則賦值max,替換原有

數(shù)據(jù),當(dāng)嵌套的for循環(huán)結(jié)束后,max即為二維數(shù)組中的最大值。

27.

【解析】題目中要求不能用C語言中提供的求字符串長度的函數(shù),可以

通過移動字符串指針來計算字符串的長度。定義2個變量分別存放2個

字符串的長度,最后比較2個字符串的長度,返回相對較長的那一個字

符串。

28.

【解析】根據(jù)題目中要求刪除字符串中所有的空格,需要檢查字符串中

的每一個字符。將不是空格的字符放入原來的字符串中,形成新的字符

串。在新的字符串的末尾加上結(jié)束符。

29.[答案]

voidfun(char*str)

{inti=(h

char

whi砥*遍歷字符串*/

(

/*如果當(dāng)前元素不為空格*/

)--

/*將當(dāng)前元素保存到市中*/

蛔十";

.收.

)

P++;

}

s用戶字符串最后加上結(jié)束標記符幅力

[解析]

題目要求刪除空格,也就是重新保存空格以外的其他字符。通過循環(huán)刪

除字符串中的每一個空格,將非空格字符進行重新保存。

30.1voidfun(int*a,int*b)

2{

3inti,j;

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

5b[]==0;/*_且b初始化為0*/

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

7if(a[i]>=100)

8b[10]++;/*如果年齡大于等于100,b[lo]自增1*/

9else

10b[a[i]/10]++;/*如果年齡小于100,則將其分別統(tǒng)計到b[a[i]/10]中*/

11}

<m;j++)

<n;i++)

本題是一個分段函數(shù)的問題,用兩個循環(huán)來完成。第1個循環(huán)的作用

是使數(shù)組b中的所有元素值都為0。這個循環(huán)不能省略,因為若未對數(shù)

組b中的元素賦初值,則它們的值將是不可預(yù)測的。第2個循環(huán)的作

用是分別統(tǒng)計數(shù)組a中各年齡段的人數(shù)。當(dāng)a[i]>100時,按題意要將

其統(tǒng)計到b[10]中。else的作用是如果年齡小于100,則將其分別統(tǒng)計到

b[a[i]/10]中。由運算優(yōu)先級可知先進行a[i]/10的運算,所得結(jié)果作為b

的下標。若a用為0~9,a[i]/10的值為0,且0?9歲的人數(shù)正好存入b[0]

中。若a國為10?19,a[i]/10的值為1,且10?19歲的人數(shù)正好存入

b[l]中,依此類推。</n;i++)

</m;j++)

31.(l)char*fun(char*schar*t)(2)ss++;(3)tt++;(1)char*fun(char*s,

char*t)(2)ss++;(3)tt++;解析:本題中函數(shù)的功能是比較兩個字符串,

將長的那個字符串的首地址作為函數(shù)值返回。解題思路是對調(diào)試過程中

產(chǎn)生的錯誤提示進行跟蹤,也就是題干中給出的錯誤標識符號下的語句。

32.(1)錯誤:fun(char*pstr[6])正確:voidfun(char*pstr[6])(2)錯誤:

if(strcmp(*(pstr+i)pstr+j)>0正確:if(strcmp(*(pstr+i)*(pstr+j))>0(3)錯

誤:*(pstr+i)=pstr+j;正確:*(pstr+i)=*(pstr+j);(l)錯誤:fun(char*pstr[6])

正確:voidfun(char*pstr[6])\r\n(2)錯誤:if(strcmp(*(pstr+i),pstr+j)

溫馨提示

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

評論

0/150

提交評論