2022年江苏省南京市全国计算机等级考试C语言程序设计真题(含答案)_第1页
2022年江苏省南京市全国计算机等级考试C语言程序设计真题(含答案)_第2页
2022年江苏省南京市全国计算机等级考试C语言程序设计真题(含答案)_第3页
2022年江苏省南京市全国计算机等级考试C语言程序设计真题(含答案)_第4页
2022年江苏省南京市全国计算机等级考试C语言程序设计真题(含答案)_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2022年江苏省南京市全国计算机等级考试

C语言程序设计真题(含答案)

学校:班级:姓名:考号:

一、2.填空题(10题)

1.请在以下程序第一行的下划线处填写适当内容,使程序能正确运行。

(double,double);

main()

{doublex,y;

scanf("%lf%lf,&x.&y);

printf("%lf\n...,max(x,y));

)

doublemax(doublea,doubleB)

{return(a>b?a=B);}

2.以下程序中,函数fun的功能是计算x2-2x+6,主函数中将调用fun函

数计算:

yl=(x+8)2-2(x+8)+6

y2=sin2(x)-2sin(x)+6

请填空。

#include"math.h"

doublefun(doublex){retum(x*x-2*x+6);}

main()

{doublex,yl,y2;

printf("Enterx:");scanf("%lf',&x);

yl=fun([]);

y2=fun([]);

printf("y1=%lf,y2=%lf\n",y1,y2);

)

3.执行下面程序段后,k的值是【】。

r=l;n=203;k=l

do{k*=n%10*r;n/=10;r++;}while(n);

4.以下程序的输出结果是【】。

#include<stdio.h>

main()

{inti;

fbr(i=,a,;i<T;i++,i++)printf("%c",i-,a,+,A,);

printf("\n");

5.在使用putchar和getchar函数处理字符时,必须在程序的开头出现包

含头文件的命令行是【】。

6.设函数findbig已定义为求3个数中的最大值,以下程序将利用函数

指针调用findbig函数。请填空。

main()

{intfindbig(int,int,int);

int(*f)(),x,y,z,big;

f=[]o

scanf("%d%d%d",&x,&y,&z);

big=(*f)(x,y,z);

printf("big=%d\n",big);

7.若x=3,y=2,z=l,表达式z-=x<y?x++:++y的值为

8.软件测试是保证软件质量的重要手段,而软件测试的主要和重要的测

试方法是通过测试数据和【】的设计来实现。

9.下列程序的输出结果是【】°

intt(intx,inty,ntcp,intdp)

{cp=x*x+y*y;

dp=x*x-y*y;

)

main()

{inta=4,b=3,c=5,d=6;

t(a,b,c,d);

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

)

10.以下程序的输出结果是【】。

#include<stdio.h>

voidfun()

{staticinta=0;

a+=2;printf("%d",a);

)

main()

{intcc;

for(cc=l;cc<4;cc++)fun();

printf("\n");

二、单选题(10题)

11.有以下程序:#includeMain(){charel.c2;.

cl='A'+8」4';c2='A'+'8'」5';.printf("%c,%d\n",,cl.c2);}

已知字母A的ASCI码为65.程序运行后的输出结果是()。

A.E.68B.D.69C.E,DD.输出无定值

12.

(14)下列选项中,不能作为合法常量的是().

A)1.234e04B)1.234e0.4C)1.234e+4D)1.234e0

13.设初始输入序列为123,4,5,利用一个栈产生输出序列,下列()序列

是不可能通过栈产生的。

A.1,2,3,4,5B.5,3,4,1,2C.4,3,2,1,5D.3,4,5,2,1

14.下列叙述中,不正确的是

A.数据库技术的根本目标是要解决数据共享的问题

B.数据库系统中,数据的物理结构必须与逻辑结构一致

C.数据库设计是指设计一个能满足用户要求,性能良好的数据库

D.数据库系统是一个独立的系统,但是需要操作系统的支持

15.设有6个结点的无向图,该图至少应有()条边才能确保是一个连通图。

A.5B.6C.7D.8

16.下列叙述中错误的是()。

A.C程序可以由多个程序文件组成

B.一个C语言程序只能实现一种算法

C.C程序可以由一个或多个函数组成

D.一个C语言函数可以单独作为一个C语言程序文件存在

17.数据的存储结构是指o

A.数据所占的存储空间量B.数据的逻辑结构在计算机中的表示C.数

据在计算机中的顺序存储方式D.存储在外存中的数据

18.下面程序输出的结果是main(){intx;x=-3+4*5-6;printf("%d",

x);x=3+4%5-6;printf("%d",x);x=-3+4%6/5;printf("%d",x);

x=(7+6)%5/2;printf("%d",x);}

A.ll1-31B.ll-321C.12-321D.ll121

19.设有定义inta=2,b=3,c=4;,则以下选项中值为。的表达式

是o

A.(!a==l&&(!b==O)

B.(a<b)&&!c||l

C.a&&b

D.a||(b+b)&&(c-a)

20.有下列程序:

#include<stdio.h>

main()

I

charv[4][10]=|"efg","abed","mnopq"hijkl"|,*p[4],t;

inti,j;

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

p[>]=v[i];

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

for(j=i+1;j<4;j++)

if(*p[i]>*p[j])

It=*p[i];*p[i]=*p[j];*p[j]=t;}

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

printf("%s",v[i]);

I

程序执行后的输出结果是0。

A.abcdefghijklmnopq

B.afgebedhnopqmijklhnopqmijkl

C.efgabedmnopqhijkl

D.mijklhnopqebedafg

三、程序设计题(10题)

21.使用VC++2010打开考生文件夹下progl中的解决方案。此解决方案

的项目中包含一个源程序文件progl.co此程序定义了NXN的二维数

组,并在主函数中自动赋值。请编写函数该函数的功能是使数组下三角

元素中的值乘以no

例如,若n的值为3,a数组中的值为

197

238

456

则返回主程序后,a数组中的值应为

397

698

121518

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

请勿改动函数main。和其他函数中的任何内容,仅在函数fun()的花括

号中填入你编写的若干语句。

试题程序:

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

#defineN5

voidfun(inta[][N],intn)

(

)

main()

(

inta[N][N],n,i,j;

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

for(i=0;i<n;i++)<p=""x/n;i++)<>

(

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

(

a[i][j]=rand()%10;

printf("%4d”,a[i皿);

)

printfC4\n^^);

)

n=rand()%4;

printf(<<n=%4d\n,,,n);

fun(a,n);

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

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

{

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

printf("%4d”,a[i皿);

printf(t4\n^^);

22.

请编写一个函数voidproc(chara[],charbE3,intn),其功能是:删除

一个字符串中指定下标的字符。其中,a指向原字符串,删除后的字符

串存放在b所指的数组中,n中存放指定的下标。例如,输入一个字符

串student,然后输入5,则调用该函数后的结果为studet。注意:部分

源程序给出如下。请勿改动main()函数和其他函数中的任何内容,

仅在函数proc的花括号中填入所编写的若干语句。试题程序:

#includeVstdlib.h>

冬include<stdio.h>

#include<conio.h>

5defineN20

voidproc(char],charb[].intn)

(

}

voidmain()

(

charstr![N].»tr2[N];

intni

systemCHCI-S*,)i

printf("Enterthestrings\n")i

gets(Mrl)i

printf(*EnterthepositionoftheMrtngdeleted:

")i

scan1(-%d*•i

proc(strl•str2«n)t

printf("Thenewstringis:%*\n"."r2》t

I

23.

学生的记录由学号和成绩组成,M名学生的数据已在主函数中放人结构

体数组stu中,请编写函数proc(),其功能是:按分数的高低排列学生

的记录,高分在前。注意:部分源程序给m如下。请勿改动main()

函数和其他函数中的任何内容,仅在函数proc()的花括号中填入所编

写的若干语句。试题程序:

=includeViU&kh>

4defineMIt

tvtwdrffttrurt

rharnuanLIO]s

ml

KTRfX,.

BidprocXSTKECa[}>

mii»ji

STREXrt«

forti-l•2MII++)/•

I•岸“

for(jflBOij<ZMIij■♦-4-)

M•0工Ya[,+11N八被分散的离低礴“学4

*记录•高分在••/

《♦•6】,山】•《0+5山+1]78)

voidfMIB()

STRECMULM]-(<•GAOO5".t5l.<*GA003*

7".

(•<;AO(>2*.69|.<'GA004•・85)♦(•(;Aoo广«9H.

(•(;A007".72HCGAOOR*・,0・(eGAOO4".B7).

《•<;AOlS..a5l・<・(;A<M3..91).,・(;AOlZ"・e4)・

《•GAOlL.6CGAO16..72”i

HMii

pror(«tn>i

pnnt(("Thedataaffet«ortrdt\n*)i

for<1**OgyM।♦♦+)

寓,%4=«0>

〃・行・出W个学生id1

print”*\n")।

(Mifiifi*Mu%4d°num.,lM(i}<.)i

24.

编写一个函数,该函数可以统计一个长度为2的字符串在另一个字符串

中出现的次数。例如,假定输入的字符串为abcdefabcdeabceabcdef,子

字符串为cd,则应当输出3。注意:部分源程序给出如下。请勿改动

主函数main和其他函数中的任何内容,仅在函数proc的花括号中填入

所编写的若干语句。试题程序:

Uinclude<b>

includeVenio*k>

Minclude<stdto.ii>

"iocludr<Mring.h>

intprocCchax•«tr.char•»utmtr)

voidmamC)

charMr[8l]»uibs<r[3]i

m<m

)।

prrnM'・人主字句*.•!!

get»(»tr)।

字椅事,>>.

p«t*(ntr)s

pvt»(»ulMtr>i

ti*pror<9itr«Mibstr)i

pm»f(*nmKAB*«n)i

25.使用VC++2010打开考生文件夹析下progl中的解决方案。此解决

方案的项目中包含一个源程序文件progl.c。在此程序中,请编写一个

函数fun(),它的功能是将ss所指字符串中所有下标为奇数的字母转换

为大写字母(若该位置上不是字母,则不转换)。

例如,若输入“abc4E虑”,则应输出“aBc4EFg”。

注意:部分源程序在文件progl.c中。请勿改动主函数main。和其他函

数中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。

试题程序:

1#include<conio.h>

2tinclude<stdio.h>

3tinclude<string.h>

4linclude<stdlib.h>

5voidfun(char*ss)

6{

7

8}

9voidmain()

10{

11FILE♦wf;

nM

12chartt[81]zs[81]«abc4Efg;

13system(MCLSM);

14printf(H\nPleaseenteranstring

within80characters:\nM);

15gets(tt);

16printf(H\n\nAfterchanging,

thestringVn,s”,tt);

17fun(tt);

MM

18printf(\nbecomes\n%s\nrtt);

19//

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

21fun(s);

22fprintf(wfr-%s”,s);

23fclose(wf);

24/♦♦♦••♦♦♦♦♦*♦♦*♦♦♦/

25)

26.

假定输入的字符串中只包含字母和*号。请编写函数proc(),它的功能

是:使字符串中前部的*号不得多余m个;若多余m个,则删除多余的

*号;若少于或等于m个,则什么也不做,字符串中间和尾部的*号不删

除。例如,字符串中的内容为****A*BC*DEF*G****,若m的值为2,

删除后,字符串中的内容则应当是**A*BC*DEF*G****;若m的值为

4,则字符串中的内容仍为****A*BC*DEF*G****°n的值在主函数中输

入。在编写函数时,不得使用c语言提供的字符串函数。注意:部分源

程序给出如下。请勿改动main()函数和其他函数中的任何内容,仅

在函数proc()的花括号中填入所编写的若干语句。试题程序:

8mdud*Va矗<x

佑include<cofiio.

midpTuc<ctuir•••min)

voidfBain(>

(HuifJtifiion

IKIRIK*Fnirr•Mrtnfl:\i>a>*tr)i

pnmKm.a)"Kdwi

proc(

priDtfC,ThrMrttigA(lrf<ir!rt«d:\na)i

27.请编一个函数intfun(inta),它的功能是:判断a是否是素数,若a是

素数,返回1;若不是素数,返回0°A的值由主函数从键盘读入。

28.规定输入的字符串中只包含字母和*号。请编写函数fun,其功能是:

除了字符串前导的*号之外,将串中其他*号全部删除。在编写函数时,

不得使用c语言提供的字符串函数。

例如,字符串中的内容为:****A*BC*DEF*G*******,删除后,字符

串中的内容应当是:

****ABCDEFG。

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

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括

号中填入你编写的若干语句。

tinclude<stdin,h>

voi<]fun(rhjir*a)

main()

char81];voidNONO();

pnntffHEnterAstring:\n**);gete(B);

fun(3):

printf("Thestringafterdeleted:\n");puta(>);

NONO();

voidNONO()

|/・本函数用于打开文件,输入数据,调用函数,输出数据.关闭文件,•/

FILE•in,•out;

inti;chars[81];

in=fopcn("in.dat*f**r**);

out=fopcn("out.dal**,Mw");

for(is0$i<I

(»canf(int**%•*,•);

fun(i):

fpnnlf(out.*%«\n**,5);

fcloec(in);

lcloBe(out);

29.请编一个函数fun(ohlr*str),该函数的功能是把字符串中的内容逆置。

例如,字符串中原有的字符串为asdf9,则调用该函数后,串中的内容为

9fdsao

请勿改动main函数和其他函数中的任何内容,仅在函数proc的花括号

中填人所编写的若干语句。

试题程序:

#include<string.h>

#include<conio.h>

#include<stdio.h>

#defineN100

voidfun(char*str)

(

)

voidmain

{

chara[N];

FILE*out:

printf("Enterastring:");

gets(a);

printf("Theorigiralstringis:");

puts(a);

fun(a):

printf("Thestringaftermodified:");

puts(a);

strcpy(a,"Welcome!");

fun(a);

ut=fopen("outfile.dat","w");

fprintf(out,"%s".a);

fclose(out);

30.请编一个函数voidproc(inttt[M][N],intpp[N]),tt指向一个M行N

列的二维数组,求出二维数组每行中最大元素,并依次放入pp所指的

一维数组中。二维数组中的数已在主函数中给出。

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

请勿改动main。函数和其他函数中的任何内容,仅在函数proc。的花括

号中填入所编写的若干语句。

试题程序:

UmcludlcV

=includeVconio.h>

5include<Mdbkb>

8defineM3

ssdefineN4

gidproctini.inf

voidmainC>

mt(34・54.M.7中•

IB*乂.93.ltl«

int—NJ.G小lu

n)mt«tn<.<:]£)i

pnnif("TheriginaldatahtX**)t

lor<i-0,yMii*♦)

+>

printfc*।

print“'iT】,

pror(Mr»p)i

prtniff*\nThe

foe(k-<hltVM$k-♦)

pnnif("c'<d*.pTkw;)i

pravlf(e\*B)t

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

31.下列给定程序中,函数fun()的功能是,・计算函数F(x,y,z)=(x+y)/(x-

y)+(z+y)/(z-y)的值。其中x和y不相等,z和y不等。例如,当x的值

为9,y的值为11,2的值为15时,函数值为-3.50。

请改正程序中的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

试题程序:

#include<stdio.h>

#include<math,h>

/*********不不不*不f^)und•不不不*不不不*字不不*******/

#defineFU(m,n)(m/n)

floatfun(floata,floatb,floatc)

{floatvalue;

value=FU(a+b,a-b)+FU(c+b,c-b);

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

return(Value);

}

main()

{floatx,y,z,sum;

printf("Inputxyz::");

scanf("%f%f%f,&x,&y,&z);

printf("x=%f,y=%f,z=%f\n",x,y,z);

if(x==y||y==z){printf("Dataerror!\n");

exit(0);}

sum=fun(x,y,z);

printf("Theresultis:%5.2f\n",sum);

)

32.给定程序M0D11.C中函数fun的功能是:交换主函数中两个变量

的值。例如:若变量a中的值原为8,b中的值为30程序运行后a中的

值为3,b中的值为80请改正程序中的错误,使它能计算出正确的结

果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

1*include<stdio.h>

2/………found………•/

3voidfun(intx,inty)

4(

5intt;

6/………found…•……/

7t-x;x»y;y»t;

8}

9main()

10(

11inta,b;

12a«8;b«3;

13fun(&a,&b);

w

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

15

33.下列给定程序中,函数fun()的功能是:先从键盘上输入一个3行3

列的矩阵的各个元素的值,然后输出主对角线元素之和。

请改正函数fun()中的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

试题程序:

#include<stdio.h>

intfun()

(

inta[3][3],sum;

inti,j;

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

sum=l;

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

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

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

scanf("%d",a[i][j]);

)

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

sum=sum+a[i][i];

printf("Sum=%d\n",sum);

)

main()

{

fun();

)

34.给定程序M0D11.C中函数fun的功能是:比较两个字符串,将长

的那个字符串的首地址作为函数值返回。

请改正函数fun中指定部位的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

tinclude<stdio.h>

2/***♦*♦****found**********/

3charfun(char*srchar*t)

4{intsl«0rtl«0;char*ssr*tt;

5ss«s;tt-t;

6while(*ss)

7{sl++;

8/♦*♦♦**♦*♦♦found*♦*****♦♦♦/

9(*ss)

10}

11while(*tt)

12(

13/***♦*♦****found****♦♦*♦♦♦/

14(*tt)**;

15)

16if(tl>sl)returnt;

17elsereturns;

18)

19main()

20{chara[80],b[80];

21printf(R\nEnterastring:H);

gets(a);

22printf("XnEnterastringagain:

");gets(b);

23printf(R\nThelongeris:\n\n\

fun(a,b));

24

35.给定程序MODU.C中函数fun的功能是:将十进制正整数m转换

成k(2WkS9)进制数,并按高位到低位顺序输出。

例如,若输入8和2,则应输出1000(即十进制数8转换成二进制表示

是1000)o

请改正fun函数中的错误,使它能得出正确的结果。

注意:不要改动main函数。不得增行或删行,也不得更改程序的结构!

1finclude<conio.h>

2♦include<stdio.h>

3voidfun(intm,intk)

4(

5intaa[20]9i;

6for(i-0;m;

7(

8/**********found********♦♦/

9aa[i]-m/k;

10m/-k;

11)

12for(;i;i-)

13/**********found***ww****♦/

ww

14printf(%draa[i]);

15}

16main()

17(

18intb;n;

19!printf(w\nPleaseenteranumber

•andabase:\nR);

wM

20iscanf(%d%dr&n,6b);

21•fun(n,b);

22!printf(w\nw);

23i)

36.下列给定程序中,函数fun()的功能是:求出以下分数序列的前n项

之和。

2/1,3/2,5/3,8/5,13/8,21/13...........

和值通过函数值返回main。函数。例如,若输入n=5,则应输出8.391667。

请改正程序中的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

试题程序:

#include<conio.h>

#include<stdio.h>

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

fun(intn)

{inta=2,b=l,c,k;

doubles=0.0;

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

{s=s+1.0*a/b;

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

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

)

return(s);

)

main()

{intn=5;

clrscr();

printf("\nThevalueoffunctionis:

fun(n));

37.下列给定程序中,函数fun()的功能是读入一个字符串(长度<20),

将该字符串中的所有字符按ASCII码降序排序后输出。

例如:输入dafhc,则应输出hfdcao

请改正程序中的错误,使它能得到正确结果。

注意:不要改动main函数,不得增行或删行,敢不得更改程序的结构。

试题程序:

#include<conio.h>

#include<stdio.h>

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

intfun(chart口)

charc;

血i,j;

for(i=0;i<strlen(t)-l;i++)

for(j=i+l;i<strlen(t);j++)

if(t[i]<tU])

c=t[j];

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

t[i]=t[i++];

t[i]=c;

main()

chars[81];

clrscr();

printf("\nPleaseenteracharacter

string:");

gets(s);

printf("\n\nBeforesorting:\n%S",s);

fun(s);

printf("\nAftersortingdecendingly:\n

%s",s);

38.给定程序M0D11.C中函数fun的功能是:在字符串的最前端加入

n个*号,形成新串,并且覆盖原串。

注意:字符串的长度最长允许为79o

请改正函数fun中指定部位的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

1•include<stdio.h>

2*include<string.h>

3voidfun(chars[],intn)

4(

5chara[80],*p;

6inti;

7/found***,•**★*★*/

8s«p;

9for(i-0;i<n;i++)a[i]-**

10do

11{a[i]«*p;

12i++;

13

14//………found…••……/

15while(*p++)

16a[i]-0;

17strcpy(sra);

18)

19main()

20(intn;chars[80];

21printf(M\nEnterastring:w);

gets(s);

22printf(w\nThestring\"%s\w\nw;

23printf(w\nEntern(numberof*):

wH

");scanf(%dr;

24fun(s,n);

25printf(w\nThestringafterinsert:

\w%s\w\nw,s);

26

39.给定程序MOD11.C中函数fun的功能是:判断一个整数是否是素

数,若是返回1,否则返回0。

在mai()函数中,若fun返回1输出YES,若fun返回。输出NO!。

请改正程序中的错误,使它能得出正确的结果。

注意:不要改动main函数。不得增行或删行,也不得更改程序的结构!

1«include<stdio.h>

2intfun(intm)

3{intk-2;

4while(k<-m&&(m%k))

5/…………"und…………/

6k++

7/…………found•♦………♦/

8if(m-k)

9return1;

10elsereturn0;

11)

12main()

13{intn;

14printf(w\nPleaseentern:"

w

scanf("%dr&n);

15if(fun(n))printf(MYES\nw);

16elseprintf(nNO!\n°);

17

40.下列给定程序中函数fun()的功能是计算1/n!的值。

例如:给n输入5,则输出0.0083330

请改正程序中的错误,使它能得到正确结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

试题程序:

#include<stdio.h>

#include<conio.h>

/******+****found*************/

intfun(intn)

{doubleresult=1.0;

if(n==0)

return1.0;

while(n>1&&n<170)

result*=n++;

result=l/result;

returnresult;

)

main()

{

intn;

printf("InputN:");

scanf("%d",&n);

printf("\nl/%d!=%If\n",n,fun(n));

}

五、程序改错题(2题)

41.已知一个数列从。项开始的前3项为0,0,1,以后的各项都是其

相邻的前3项之和。下列给定的程序中,函数proc的功能是:计算并

输出该数列前n项的和sum。n的值通过形参传人。例如,当n=20

时,程序的输出结果应为42762.0000000

请修改程序中的错误,使它能得到正确结果。

注意:不要改动maiil函数,不得增行或删行,也不得更改程序的结

构。

试题程序:

#include<stdlib.h>

#include<conio.h>

#include<stdio.h>

doubleproc(intn)

(

doublesum,sO,si,s2,s;

intk;

sum=l.0;

if(n<=2)

sum=0.0;

s0=0.0;

sl=0.0;

s2=l.0;

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

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

)

(

s=s0+sl+s2;

sum+=S:

sO=sl;

sl=s2;

//***und****

s2=s;

returnsum;

)

voidmain

(

intn;

system("CLS");

printf("InputN=");

scanf("%d",&nJ;

printf("%f\n",proc(n));

)

42.下列给定的程序中,函数proc()的功能是:计算并输出k以内最大

的10个能被15或18整除的自然数之和,k的值由主函数传人。若k

的值为800,则函数的值为7605。

请改正程序中的错误,使它能得出正确的结果。

注意:不要改动main。函数,不得增行或删行,也不得更改程序的结

构。

试题程序:

=rncludrVzdicx.

ginclM<ic<coeio.h>

8iadudrVstdlihh>

mtproc<mtk)

mtm-0・mc・0・ji

id

//••••found••••

♦-m♦htfMr-4(♦.)

k-i

//••••(o«md••••

rwtum

voidm*in(>

»ysiem(*CLS*)i

pra>tf<*Xd\ft•.peoc(S00》八

六、操作题(2题)

43.若变量x、y已定义为int类型且X的值为33,y的值为3,请将输

出语句printf((),x/y);补充完整,使其输出的计算结果形式为:x/y=llo

44.下列给定程序中,函数fun()的功能是:按顺序给s所指数组中的元

素赋予从2开始的偶数,然后再按顺序对每5个元素求一个平均值,并

将这些值依次存放在w所指的数组中。若s所指数组中元素的个数不是

5的倍数,多余部分忽略不计。例如,s所指数组有14个元素,则只对

前10个元素进行处理,不对最后的4个元素求平均值。

请改正函数fun()中的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

试题程序:

#include<stdio.h>

#defineSIZE20

fun(double*s,double*w)

{intk,i;doublesum;

for(k=2,i=0;i<SIZE;i++)

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

sum=0.0;

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

{sum+=s[i];

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

if(i+l%5==0)

{w[k]=sum/5;Sum=0;k++;}

)

returnk;

)

main()

{doublea[SIZE],b[SIZE/5];

inti,k;

k=fun(a/b);

printf("Theoriginaldata:\n");

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

{

if(i%5==0)printf("\n");

printf("%4.0f7a[i]);

)

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

for(i=0;i<k;i++)prmtf("%6.2f',b[i]);

printf("\n\n");

参考答案

1.doublemax或externdoublemaxdoublemax或externdoublemax解析:

函数声明是对所用到的函数的特征进行必要的声明,编译系统以函数声

明中给出的信息为依据,对调用表达式进行检测,以保证调用表达式

与函数之间的参数正确传递.函数声明的一般格式为:类型标识符函

数名(类型标识符形参,…);这些信息就是函数定义中的第一行的内容。

本题中main()函数需要调用max()函数,在main()之前就需要声明函数

max。,并且可以用extern说明符使变量的作用域扩充到需要用到它的

函数,所以,填写doublemax(或externdoublemax)。

2.x+8sin(x)x+8,sin(x)解析:考查考生对函数调用相关知识的了解。用

x+8代替函数fun(doublex)中形式参数x;用sin(x)代替函数fun(double

x)中形式参数xo

3.00解析:本题考查的是do和hile循环。第一次执行循环体,因为

k=],r=l,n=20,所以k=1*20%10*1=0,n=20/10=2,r=2;第二次执行循环

体,k=0*2%10*2=0,n=10/10=1,r=3;第三次执行循环

体,k=0*l%10*3=0,n=1/10=0,r=4,所以k的值为0。

4.ACEACE解析:在本题中,for循环体每执行完一次,变量i的值自加两

次。i的初值为\'a\;执行一次循环后变为\七\;之后再变成Ve\;当其变为\陵

时,循环条件若不满足,循环终止,故本题共输出3个字符。表达式1

Va\=\ue008\AV\ue009,即表示输出i对应的大写字母,结果为ACEO

5.#include"stdio.h"#include'stdio.h'解析使用putchar和getchar函数时,

必须在程序的开头出现包含头文件#include,stdio.h'的命令行。putchar的

函数调用形式为:putchar(字符变量或字符常量);getchar函数的调用形

式为:变量=getchar();getchar后的一对圆括号内没有参数,但这一对圆

括号不可少。

6.findbigfindbig解析:f是指向函数的指针变量,根据题意要求,空格

处应填入findbigo

本题目考查:C语言中指向函数的指针变量定义的一般形式为;

数据类型标识符(*指针变量名)();

“数据类型标识符”表示函数返回值的类型。

函数的调用可以通过函数名调用,也可以通过函数指针调用。在给函数

指针变量赋值时,只需给出函数名而不必给出参数。(*p)()表示定义一个

指向函数的指针变量,专门用来存放函数的入口地址,可以先后指向不

同的指针变量。用函数指针调用函数时,只需要将(*p)代替函数名即可,

在(*仅之后的括号中,根据需要写上参数。

7.-2。-2O解析:表达式z-=x<y?x++:++y相当于先执行++y,再执行z-

=x<y?x:y,最后执行x++,其中z-=x<y?x:y等价于z=z-(x<y?x:y),由

于x值为3,y值为3,x<y不成立,返回y的值,z-y的值为-2,赋给

zo

8.测试实例测试实例解析:进行软件测试时,应精心设计测试实例和选

择测试数据,以对系统进行全面测试。

9.5656解析:本题中a,b,c,d是实参,x,y,cp,dp是形参。C语

言规定,实参变量对形参变量的数据传递是“值传递”,即单向传递,只

由实参传给形参,而不能由形参传回来给实参。在内存中,实参单元与

形参单元是不同的单元。在调用函数时,给形参分配存储单元,并将实

参对应的值传递给形参,调用结束后,形参单元被释放,实参单元仍保

留并维持原值。因此,程序的输出结果是56。

10.246246解析:本题考查静态(static)局部变量的使用。fun函数中的静

态局部变量a所占用的存储单元在程序运行过程中始终不释放,即当下

一次调用该函数时,该变量仍然保留上一次函数调用结束时已有的值,

3次调用fun函数分别得到2,4,6。

11.A

[解析]本题目中字符变量cl是字符A的ASCII码加上4.即69所对应

的字符E。字符变量c2是字符A的ASCII码加上3.即68所对应的字

符D:但是打印输出时,cl以%c的格式输出,所以是E,c2以%d

的格式输出,所以是68.

12.B

13.B

14.B解析:B选项错误,原因是,数据库应该具有物理独立性和逻辑独

立性,改变其一而不影响另一个。

15.A:在一个无向图G中,若从顶点Vi到顶点Vj有路径相连,则称Vi

和Vj是连通的。连通图是指任意两个结点之间都有一个路径相连。6个

节点的无向图,至少要5个边才能确保是任意两个节点之间都有路径相

连。下图是一种可能的连接方式:故本题选A°

16.B在一个C语言程序中可以实现多种算法,所以B选项错误。故本

题答案为B选项。

17.B解析:数据元素在计算机存储空间中的位置关系与它们的逻辑关系

不一定是相同的,而且一般不可能相同。数据的逻辑结构在计算机存储

空间中的存放形式称为数据的存储结构,也称数据的物理结构。

18.A解析:本题考查的是算术运算符的各种运算,x=-3+4*5-6=-3+20-

6=11;x=3+4%5-6=3+4-6=l;x=-3+4%6/5=-3+4/5=-3+0=-3;

X=(7+6)%5/2=13%5/2=3/2=1。故正确答案为选项A)o

19.A解析:选项A中(!a==l)&&(!b==0)7(!2=

=l)&&(!b==O).(O==l)&&(!b==O)-0&&(!b==0)-0(&&右边表达式

(!b==0)被“短路”):选项B中(a<b)&&!c||l-(2<

3)&&!4||1->1&&0||1->0||1->1;选项C中a&&b—2&&3-1;选项

Da||b+b)&&(c-a)一2||(b+b)&&(c-a)一1(11右边表达式(b+b)&&(c-a)被“短

路”)。所以本题选A。

20.B

程序首先定义二维字符数组v,使用4个字符串初始化,另外定义字符

指针数组Po通过第1个for循环,将v的4个字符串的首地址赋给

po第2for循环通过两层内嵌循环将p中元素指向的字符串首字母进行

排序交换。规则是将指向的字符串的首字母字符按照字母表中的顺序

排序后交换。注意,这里交换的是首字母,而不是整个字符串,所以

程序输出:afgebcdhnopqmijklo本题答案为B选项。

21.voidfun(inta[][nl,intn)

{

inti,j;

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

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

/*矩形的下三角时,积相乘*/

a[i][j]=a[i][j]*n;

)

首先从数组中找出要乘以n的元素。这其实就是找出将被挑出的元素在

原数组中的分布规律的过程。通过观察得出,要被处理的元素下标的范

围是从每行中第1个元素开始,直到列数等于该行行数为止。即数组下

三角元素的列下标①小于等于(<=)行下标①。找到这个规律后,依次从

数组中取得符合要求的元素,然后乘以n°

22.

【解析】按照题目中的要求,删除一个字符串中指定下标的字符。首先,

将指定下标之前的字符放入字符数组b中,然后将指定下标之后的字符

也放入字符数组b中,最后为新的字符数组b添加结束符。

23.

【解析】要按分数的高低排列学生的记录,可以使用冒泡排序法。将每

一个学生的成绩与其他学生的成绩相比较,对不符合要求的记录交换位

置。

24.

【解析】要计算出主字符串中包含子字符串的个数,应该检查主字符串

中从第一个到最后一个字符。每出现一个计数变量加1,最后将得到的

个数返回给主函数。

25.1voidfun(char*ss)

2{

3inti;

4for(i=0;ss[i]!='\\0';i++)/*将ss所指字符串中所有下标为奇数的字母

转换为大写字母*/

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

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

7}

本题要求将给定字符串ss中下标为奇数的字母转换为大写字母。需要

先判断下标为奇数的字母是否是小写字母,如果是再通过其转换方法

进行转换。从C语言的学习中知道,只要将小写字母减去32即转换成

大写宇母,将大写字母加上32即换转成小写字母。本程序用if语句实

现转换功能。

26.

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

前部的*号的个数,与变量m进行比较。当字符串前部的*多于m个时,

删除多余的*。规定不能用字符串函数处理,可以通过移动字符串的首

指针来实现。

27.\n#include,,stdio.h"

\nintfun(inta)

\n{intI;

\nif(a==2)return1;1=2;

\nwhile((a%I)!=01<=sqrt((float)a))

\nl++;

\nif(a%I==O)

\n{printf("%disnotaprime!,5,a);

\nreturn0;}

\nprintf("%disaprime!”,a);

\nreturn1;}

\nmain

\n{intx;

\nprintf(€t\\npleaseenteranumber:");

\nscanf("%d",&x);

\nprintf("%d\\n'',fim(x));}

\n

28.

程序设计题解析:

【考点分析】

本题考查:指针型变量定义;while循环语句;if语句条件表达式;字

符串结束标识'\\0'。

【解题思路】

函数fun的功能:除了字符串前导的*号之外,将串中其他。号全部删

除。解答本题,(1)定义一个临时指针P,初始指向原串首地址;(2)利

用循环语句把字符串前导*号拷贝到原串;(3)继续移动指针,把串中和

串尾的非*号字符拷贝到原串;(4)为修改后的字符串赋结束字符,NT。

【解题宝典】

要删除字符串中的指定字符,通常采用保留非指定字符的方法。可以

将非指定字符保留在原串,即将需要保留的字符从原串的起始位置重

新赋值;也可以保留到新串,即新建一个字符串,存放要保留的字

符。

29.\n\tcharch;

\ninti,m,n;

\ni=O:

\nm=n=strlen(str)-1;//求字符串str长度

\nwhile(i<(n+l)/2)//循环逆置交换

\n{

\nch=str[i];

\nstr[i]=str[m];

\nstr[m]=ch:

\ni++;

\nm—;

\n}

\n【解析】在fun函数中,首先求行字符串的长度,然后通过循环进行

字符交换。要注意的是,如果字符串长度是奇数,则最中间的元素在

逆置前后的位置是没有改变的。\n

30.

【解析】按照题目中要求,求出二维数组每行中最大元素,并依次放

入pp所指的一维数组中。首先比较二维数组中每一行的元素,然后找

出每一行中的最大元素,放入一维数组pp中,最后返回到主函数当

中。

31.(1)错误并defineFU(mn)(m/n)正确井defineFU(mn)(m)/(n)⑵错误:

return(Value);正确:return(value);⑴错误;#

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论