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

下載本文檔

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

文檔簡(jiǎn)介

2021年山西省陽(yáng)泉市全國(guó)計(jì)算機(jī)等級(jí)考試

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

學(xué)校:班級(jí):姓名:考號(hào):

一、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);

)

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

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

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

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

5.在面向?qū)ο蠓椒ㄖ?,?lèi)之間共享屬性和操作的機(jī)制稱(chēng)為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.在一個(gè)容量為15的循環(huán)隊(duì)列中,若頭指針front=6,尾指針Year

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

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

main()

charc;intn=100;

floatf=10;doublex;

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

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

9.以上程序運(yùn)行后的輸出結(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);)

程序運(yùn)行后,輸出結(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.以下選項(xiàng)中,能用作用戶標(biāo)識(shí)符的是()。

A._0_B.8_8C.voidD.unsigned

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

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

B.用C語(yǔ)言編寫(xiě)的源程序不能直接在計(jì)算機(jī)上運(yùn)行

C.通過(guò)編譯得到的二進(jìn)制目標(biāo)程序需要連接才可以運(yùn)行

D.在沒(méi)有安裝C語(yǔ)言集成開(kāi)發(fā)環(huán)境的機(jī)器上不能運(yùn)行C源程序生成

的.exe文件

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

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

B.可以向指針?biāo)竷?nèi)存單元中寫(xiě)入數(shù)據(jù)

C指針可以指向與其基類(lèi)型相同的普通變量

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

15.有以下程序:

#include<stdio.h>

main()

(

chars[]="abcde”;

s+=2;

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

}

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

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

ASCII值

16.若有定義語(yǔ)句:char*sl="OK",*s2="ok";,以下選項(xiàng)中,能夠輸

出"0K"的語(yǔ)句是

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.下列程序的運(yùn)行結(jié)果是()。

auin<)

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

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

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

的字符串,最少需要。長(zhǎng)的二進(jìn)制字符串

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

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

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

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.計(jì)算機(jī)硬件組成中,CPU包含____o

A.控制器和存儲(chǔ)器B.控制器和運(yùn)算器C.控制器、運(yùn)算器和存儲(chǔ)器D

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

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

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

案的項(xiàng)目中包含一個(gè)源程序文件progl.c。在此程序中,請(qǐng)編寫(xiě)一個(gè)函

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

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

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

寫(xiě)的若干語(yǔ)句。試題程序:

#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.

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

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

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

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

題程序:

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.編寫(xiě)函數(shù)fun,其功能是:將s所指字符串中除了下標(biāo)為奇數(shù),同時(shí)

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

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

組中。

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

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

下標(biāo)為偶數(shù),因此需要?jiǎng)h除;而字符1的ASCII碼值為奇數(shù),所在數(shù)組

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

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

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

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

號(hào)中填入你編寫(xiě)的若干語(yǔ)句。

試題程序:

#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打開(kāi)考生文件夾析下progl中的解決方案。此解決

方案的項(xiàng)目中包含一個(gè)源程序文件progl.c。在此程序中,請(qǐng)編寫(xiě)一個(gè)

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

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

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

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

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

試題程序:

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.

假定輸入的字符串中只包含字母和*號(hào)。請(qǐng)編寫(xiě)函數(shù)proc(),它的功能

是:使字符串中前部的*號(hào)不得多余m個(gè);若多余m個(gè),則刪除多余的

*號(hào);若少于或等于m個(gè),則什么也不做,字符串中間和尾部的*號(hào)不刪

除。例如,字符串中的內(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ù)中輸

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

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

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

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.

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

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

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

編寫(xiě)的若干語(yǔ)句。試題程序:

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.

請(qǐng)編寫(xiě)一個(gè)函數(shù)proc(),它的功能是:比較2個(gè)字符串的長(zhǎng)度(不得

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

字符串長(zhǎng)度相等,則返回第1個(gè)字符串。例如,若輸入jiangxiv;Enter>;

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

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

花括號(hào)中填入所編寫(xiě)的若干語(yǔ)句。試題程序:

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.請(qǐng)編寫(xiě)一個(gè)函數(shù),用來(lái)刪除字符串中的所有空格。例如,輸入

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

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

中填入所編寫(xiě)的若干語(yǔ)句。試題程序:

£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.

請(qǐng)編寫(xiě)一個(gè)函數(shù),用來(lái)刪除字符串中的所有空格。

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

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

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

號(hào)中填入你編寫(xiě)的若干語(yǔ)句。

試題程序:

#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打開(kāi)考生文件夾下progl中的解決方案。此解決方

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

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

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

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

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

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

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

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

試題程序:

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)生一個(gè)隨機(jī)的年齡教組*/

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的功能是:比較兩個(gè)字符串,將長(zhǎng)

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

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

注意:不要改動(dòng)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()的功能是:用冒泡法對(duì)6個(gè)字符串按由

小到大的順序進(jìn)行排序。

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

注意:不要改動(dòng)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,計(jì)算如下公式的

值。

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

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

[注意]不要改動(dòng)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”時(shí),則t所指的字符串應(yīng)為:

“EDCBAABCDE”。

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

注意:不要改動(dòng)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ù)方陣,

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

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

注意:不要改動(dòng)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()的功能是:用冒泡法對(duì)6個(gè)字符串按由

大到小的順序進(jìn)行排序。

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

注意:不要改動(dòng)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()的功能是:求輸入的兩個(gè)數(shù)中較小的數(shù)。

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

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

注意:不要改動(dòng)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的功能是:將一個(gè)由八進(jìn)制數(shù)字字符組成的字

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

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

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

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

[注意]不要改動(dòng)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

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

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

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

注意:不要改動(dòng)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。

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

注意:不要改動(dòng)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

五、程序改錯(cuò)題(2題)

41.

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

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

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

請(qǐng)修改程序中的錯(cuò)誤,使它能得出正確的結(jié)果。注意:不要改動(dòng)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()的功能是:計(jì)算并輸出k以內(nèi)最大的

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

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

結(jié)果。注意:不要改動(dòng)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.請(qǐng)補(bǔ)充main()函數(shù),該函數(shù)的功能是:從鍵盤(pán)輸入一個(gè)長(zhǎng)整數(shù),如

果這個(gè)數(shù)是負(fù)數(shù),則取它的絕對(duì)值,并顯示出來(lái)。例如,輸入>123456,

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

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

句。試題程序:

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);}

程序運(yùn)行后,輸出結(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)用時(shí)不改變實(shí)參的值,因此p->num的值不發(fā)生變化。

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

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

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

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

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

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

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

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

5.繼承繼承

6.21

7.3

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

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

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

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

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

9.5252解析:do...while語(yǔ)句的形式為:

do

(

語(yǔ)句;

}while(條件表達(dá)式)

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

循環(huán)。

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

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

32

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

11.C

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

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

選項(xiàng)。

12.AC語(yǔ)言的標(biāo)識(shí)符由字母、數(shù)字、下劃線組成,且第1個(gè)字符必須是

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

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

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

13.D

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

程序必須經(jīng)過(guò)編譯生成二進(jìn)制目標(biāo)代碼,再經(jīng)過(guò)連接才能運(yùn)行,并且

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

14.A指針變量必須區(qū)分基類(lèi)型,可以向指針?biāo)竷?nèi)存單元寫(xiě)入與基類(lèi)型

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

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

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

D正確。故本題答案為A選項(xiàng)。

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

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

容加2是錯(cuò)誤的,編譯無(wú)法通過(guò)。故本題答案為B選項(xiàng)。

16.D

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

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

于str2則返回一個(gè)負(fù)整數(shù)。本題中si,s2不相同,A)選項(xiàng)不會(huì)輸出任

何字符,B)選項(xiàng)輸出ok,C)選項(xiàng)不輸出任何字符,D)選項(xiàng)會(huì)輸出

OKo

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

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

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

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

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

18.B

19.A

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

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

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

案為A選項(xiàng)。

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語(yǔ)言中沒(méi)有直接刪除字符的操作,因此對(duì)不需要?jiǎng)h除的字符采用“保

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

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

22.

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

'來(lái)判斷字符串是否結(jié)束。給字符串加上結(jié)束標(biāo)識(shí)‘\0',通過(guò)for循

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

輸入)字符,變量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;/*將下標(biāo)為奇數(shù)同時(shí)ASCII碼值為奇數(shù)的字符放人數(shù)組t中*/

J++;

)

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

)

【解析】

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

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

24.1voidfun(char*ss)

2{

3inti;

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

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

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

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

7)

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

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

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

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

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

25.

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

前部的*號(hào)的個(gè)數(shù),與變量m進(jìn)行比較。當(dāng)字符串前部的*多于m個(gè)時(shí),

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

指針來(lái)實(shí)現(xiàn)。

26.

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

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

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

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

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

27.

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

通過(guò)移動(dòng)字符串指針來(lái)計(jì)算字符串的長(zhǎng)度。定義2個(gè)變量分別存放2個(gè)

字符串的長(zhǎng)度,最后比較2個(gè)字符串的長(zhǎng)度,返回相對(duì)較長(zhǎng)的那一個(gè)字

符串。

28.

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

的每一個(gè)字符。將不是空格的字符放入原來(lái)的字符串中,形成新的字符

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

29.[答案]

voidfun(char*str)

{inti=(h

char

whi砥*遍歷字符串*/

(

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

)--

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

蛔十";

.收.

)

P++;

}

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

[解析]

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

除字符串中的每一個(gè)空格,將非空格字符進(jì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)計(jì)到b[a[i]/10]中*/

11}

<m;j++)

<n;i++)

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

是使數(shù)組b中的所有元素值都為0。這個(gè)循環(huán)不能省略,因?yàn)槿粑磳?duì)數(shù)

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

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

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

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

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

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

b[l]中,依此類(lèi)推。</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ù)的功能是比較兩個(gè)字符串,

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

產(chǎn)生的錯(cuò)誤提示進(jìn)行跟蹤,也就是題干中給出的錯(cuò)誤標(biāo)識(shí)符號(hào)下的語(yǔ)句。

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

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

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

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

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論