2023年甘肃省嘉峪关市全国计算机等级考试C语言程序设计真题(含答案)_第1页
2023年甘肃省嘉峪关市全国计算机等级考试C语言程序设计真题(含答案)_第2页
2023年甘肃省嘉峪关市全国计算机等级考试C语言程序设计真题(含答案)_第3页
2023年甘肃省嘉峪关市全国计算机等级考试C语言程序设计真题(含答案)_第4页
2023年甘肃省嘉峪关市全国计算机等级考试C语言程序设计真题(含答案)_第5页
已阅读5页,还剩34页未读, 继续免费阅读

付费下载

下载本文档

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

文档简介

2023年甘肃省嘉峪关市全国计算机等级考

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

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

一、2.填空题(10题)

1.若有以下定义,则使指针p指向值为35的数组元素的语句是____o

inta[10]={14,27,47,29,35,21,49,71},*p;

2.数据库系统在三级模式之间提供了两层映像,这两层映像是外模式/

模式映像和【】。

3.以下程序运行后的输出结果是____o

main()

(

inti,m=0,n=0,k=0;

for(i=9;i<=11;i++)

switch(i/10)

(

case0:m++;n++;break;

case10:n++;;break;

default:k++;n++;

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

4.表达式pow(2.8,sqrt(float(x)))值的数据类型为____型。

5.以下程序的运行结果是【】。

#include<stdio.h>

main()

{intx=l,y=O,a=O,b=O;

switch(x)

{case1:

switch(y)

{case0:a++;break;

case1:b++;break;

)

case2:a++;b++;break;

case3:a++;b++;

}

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

)

6.测试的目的是暴露错误,评价程序的可靠性;而的目的是发现

错误的位置并改正错误。

7.设i,j,k均是int型变量,则执行以下for循环后,k的值为【】。

for(i=0,j=10;i<=j;i++,j—)

k=i+j;

8.以下程序的输出结果是____o

main()

{inta=1,b=2;

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

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

9.下列程序的运行结果是____o

main()

{inta=l,b=10;

do

{b-=a;a++;}while(b—<0);

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

)

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

main()

(

inta[4][4]={{1,2,3,4},{5,6,7,8},{11,12,13,14},{15,16,17,18)};

inti=0,j=0,s=0;

while(i++<4)

(

if(i==2||==4)continue;

j=0;

do

(

s+=a[i][j];

j++;

}while(j<4);

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

二、单选题(10题)

11.用二分法查找长度为10的、排好序的线性表,查找不成功时,最多

需要比较多少次?()

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

12.给定数列(541,132,984,746,518,181,946,314,205,827)按

照从小到大的顺序排列,采用快速排序(以中间元素518为基准)的第一

趟扫描结果是()

A.(541,132,827,746,518,181,946,314,205,984)

B.(205,132,314,181,518,746,946,984,541,827)

C.(132,541,746,984,181,518,314,946,205,827)

D.(132,541,746,518,181,946,314,205,827,984)

13.判断一个单向链表中是否存在环的最佳方法是0

A.两重遍历B.快慢指针C.路径记录D.哈希表辅助

14.对于静态表的顺序查找法,若在表头设置监视哨,则正确的查找方

式为0

A.从第0个元素往后查找该数据元素

B.从第1个元素往后查找该数据元素

C.从第n个元素往开始前查找该数据元素

D.与查找顺序无关

15.若有定义“inta=3,*p=&a,**q=&p;",则以下叙述中错误的是()。

A.q是指针变量,*q就是变量a

B.p是指针变量,p指向变量a

C.q指向变量p,所以*q指向变量a

D.*p与**q都代表变量a

16.有以下程序:

#include<stdio.h>

main()

{intx=l,y=0,a=0,b=0;

switch(x)

{case1:

switch(y)

{case0:a++;break;

case1:b++;break;

)

case2:a++;b++;break;

case3:a++;b++;

}

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

)

程序的运行结果是()O

A.a=2,b=2B.a=2,b=lC.a=l,b=lD.a=l,b=0

17.一个栈的入栈序列是a,b,c,d,e,f,则栈的不可能的输出序列为0

A.fedcbB.defbcC.defcbD.abcdef

18.函数fread(buffer,size,count,fp)中buffer代表的是()。

A.一个存储区,存放要读的数据项

B.一个整数,代表要读入的数据项总数

C一个文件指针,指向要读的文件

D.一个指针,指向读入数据要存放的地址

19.存储以下数据,占用存储字节最多的是()。

A.OB.OC."0"D.0.0

20.有如下程序该程序的输出结果是().

intfunc(inta,intb)

{return(a+b);}

voidmain()

{intx=2,y=5,z=8,r;

r

=fMQC(^unc(xJy),z);

printf("%d'n",r);}

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

三、程序设计题(10题)

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

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

fun(),它的功能是计算下列级数和,和值由函数值返回。

n

c.Xxx

一■2!3!n!例如,当n=10,x=0.3时,函数值为

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

main。和其他函数中的任何内容,仅在函数fun()的花括号中填入你编

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

Ilinclude<conio.h>

2tinclude<stdio.h>

3tinclude<math.h>

4tinclude<stdlib.h>

5doublefun(doublex,intn)

6(

7

8}

9voidmain()

10{

11FILE♦wf;

12system(MCLSW);

13printf(H%ffun(0.3,10));

14/*****************/

15wf*fopen("'out.dat","w");

16fprintffun(0.3,10));

17fclose(wf);

18/*****************/

19)

22.

请编写fun()函数,其功能是:计算并输出3〜m所有素数的平方根之

和。例如,若主函数从键盘给m输入50后,则输出为s=63.665791。

注意:m的值要大于2但不大于100o部分源程序给出如下。请勿改动

main()函数与其他函数中的任何内容,仅在函数fun()的花括号中

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

:mdudeh>

MincludeVMdMKh>

doubiefi«n<intm)

voidrnntiiC)

iaiHU

douMr.|

FILE•ouii

prtnif<*\n\nlAputmi*)•

•canl<*Kd**&*RI)।

■,fun<m)i

pncit(<%(\n\n*•>)«

out—lopeaC•gtfik.&H,・)i

(or《in,Ojni<10tn4(+)

fprm・f《out♦,%f\n'・fun《m十SO)》“

(<|QAC<out>i

23.

某学生的记录由学号、8门课成绩和平均分组成,学号和8门课的成绩

已在主函数中给出。请编写proc()函数,它的功能是:求出该学生的

平均分并放在记录的ave成员中。请自己定义正确的形参。例如,若

学生的成绩是65.5,75,88,90,90.5,66,64,5,89.5,则他的

平均分应当是78.625。注意:部分源程序给出如下。请勿改动main

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

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

u:ndudtVttdio.

3drfmrM8

rypedef*tn»rt

tcharmmi[)Oji

double»[M]t

douHravei

STRIXi

voidproc«STKEC•p)

eidmam(>

STKW”3・*GA005・・,5・5,?$.M・>O・X・S・

“■•4SS9.Sh

tatit

pfoc<&»tu)|

flTbcXstudentdhUi\n*«

«tu.n«im>i/"出学号

for(i-OjKMii4*>)

/"由各科唆嬉

p<rifit«•、<!>♦e-S7.3(\B*•Mu.ave)>

,•出手均分

24.请编写一个函数proc(),它的功能是:找出一维数组元素中最大的

值和它所在的下标,最大值和它所在的下标通过形参传回。数组元素

中的值已在主函数中赋予。

主函数中arr是数组名,n是arr中的数据个数,max存放最大值,

index存放最大值所在元素的下标。

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

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

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

试题程序:

Smclude<ltttne.h>

kncludrV.uUh

9include<C*t<bah>

voidprociintirr[a*i.i•a.,NU•d>

voidmaif)()

mii«>rf(20].nuix*ihdea*»*IOI

“■nd<(uAM<f>ed)(ifne(NULL>>i

forH,OiY■■,1++>

arr(i]mrandC>K$Oi

prmtfCaK4da«an{i]>i

,・楙一个・机教也

proc«arr・a•&max・&index)B

K5d.lnde&~SlcfXn***Buixtmdex)।

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

的项目中包含一个源程序文件progl.co在此程序中,请编写函数fun(),

其功能是将M行N列的二维数组中的数据,按列的顺序依次存放到一

维数组中,将一维数组中数据的个数存放在形参n所指的存储单元中。

例如,若二维数组中的数据为

33333333

44444444

55555555

则一维数组中的内容应是

33445533445533445533

4455

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

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

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

试题程序:

#include<stdio.h>

voidfun(int(*s)[10],int*b,int*n,intmm,intnn)

)

main()

{

intw[l0][10]={{33,33,33,33},{44,44,44,44},{55,55,55,55}},i,j;

inta[100]={0},n=0;

printff'Thematrix:\n");

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

(

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

printf("%3d”,w[i][j]);

printf("\n");

)

fun(w,a,&n,3,4);

printffTheAarray:\n,,);

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

printf(44%3d,,,a[i]);

)

26.

编写函数fun(),其功能是:根据以下公式求的值(要求精度。.0005,

即某项小于0.0005时停止迭代)o

t3353573S793sM0)/

程序运行后,若输入精度0.0005,则程序应输出为3.14..,o注意:

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

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

Siacludeh>

,mcltMic<CO(M(Kh>

WincludeVmatk.

doublelun(doubleep*)

voidmain()

double*i

pnmf("Inputep«i*>i

•cwni(*K1(*«&.>>•

pnnW'nep**K1(•PIm•

«•fun(B))t

27.

M名学生的成绩已在主函数中放人一个带头结点的链表结构中,h指向

链表的头结点。请编写函数proc(),它的功能是:找出学生的最高分,

由函数值返回。注意:部分源程序给出如下。请勿改动main()函数

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

若干语句。试题程序:

WMirludrVXJICLb>

缉iurludeVzdkbh.*

召dvfifMM8

structnk«t

dnuM.«(

Mfwt•nrMi

lypcdrfMri川皿STBEl"»

iuvHrpracCSTREX.•li>

4TKfOT•emitidouiilr••)

STRIX,•lie•pe•

mtim0«

h.p.<STItEl'•>iMUor<»«ero4<^TMlv>>B

>a*Os

wktlrfr<M)

<q-(5THR'•>MBUOC<・9CI,(STKE1'>>>

p->,,《GL心♦.Lq.

p->nr»lwNULLi

munih>

«titd<wth»i(STREX'•h)

STRW

p-lu

pnaih■|M4a>〃

do

pmn(<*—>M2.<M一>・r®i.

/・楙善》■

whilHp—>a!1,■NULL》,

pewiiff*\n\n*>»

VCMIIMNI<>

douMc(IO・lO.lO.tO・<5・T5H・tM・

OMMl

STRETehi

hKrrrat(Mti)i

outIM<h>>

vnaxmproc<h)!

St,ll\»*«mas)s

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

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

funO,其功能是将形参s所指字符串放入形参a所指的字符数组中,

使a中存放同样的字符串。说明:不得使用系统提供的字符串函数。

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

函数中的任何内容,仅在函数fun()指定的部位填入所编写的若干语

句。试题程序:

finclude<stdio.h>

#defineN20

3voidNONO();

4voidfun(char♦a,char*s)

5

6

7

8main()

9(charsl[N],="abcdefghijk";

10fun(si,s2);

IIprintf("%s\n",si);

12printf("%s\n",s2);

13NONO();

)

voidNONO()

{/*本函数用于打开文件、榆入数据、调

用函数、输出数据及关闭文件*/

FILE♦fp,♦wf;

inti;

14charsi[256],s2[256];

15

fp=fopen("in.datw••r*1);

16r

17wf-fopen(Hout.dat"\r,ww);

18

19for(i=0;i<10;i++){

20fgets(s2,255,fp);

21

22fun(si,s2);

n

23fprintf(wf#%s”,si);

24

25}

26fclose(fp);

27

28fclose(wf);

29

29.

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

除字符串中所有的。号。编写函

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

“****A*BC*DEF*G*******”

例如,字符串中的内容为,删除后,

字符串中的内容应当是“ABCDEFG”。

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

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

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

试题程序:

#include<stdioJi>

voidlun(char*a)

(

}

voidriainf)

[chars[81J;

printff1Enterastrin&S');

gets(s);fun⑥;

printf(MThestringafterdeleted:\n°);

30.编写函数fun,其功能是:求ss所指字符串中指定字符的个数,并返

回此值。例如,若输入字符串123412132,输入字符为1,则输出3。

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

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

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

tinclude<stdio.h>

tinclude<string,h>

*defineM81

intfiui(char•ss,charc)

main()

Ichara[M],ch;

voidNONO();

printf("\nP!easeenterastring:*);ge<»(a);

printf("\nP1eoeenterachar:");ch=gdchar();

printf(w\nThenumberofthecharis:%d\nw,£un(a,ch));

NONO();

I

voidNONO()

!/•本函数用于打开文件,幢人测试数据,网用fun函数,输出数据.关闭文件。*/

imi;

FILE•rf,♦wf;

char”M],b[M],ch;

rf=fbpen(Hm.dat"/r*);

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

for(i=0;i<10;i>4-)

I

&canf(rf,,*%»",a);

focanf(rftb);

chs•b;

fjprintf(wf.w%c«%d\n",ch.fun(a,ch));

I

fck»e(rf);

fcloee(wf):

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

31.下列给定程序中,函数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++)printf("%6.2f',b[i]);

printf("\n\n");

)

32.给定程序M0D11.C中函数fun的功能是:统计字符串中各元音字

母(即:A、E、I、0、U)的个数。注意:字母不分大、小写。

例如:若输入:THIsisaboot,则输出应该是:1、0、2、2、0o

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

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

*include<stdio.h>

2voidfun(charintnum(5])

3(intk,i-5;

4for(k-0;k<i;k++)

5/…•……found………♦/

6num(i)«0;

7for(;*s;s++)

8{i«-1;

9/♦*♦♦*♦*♦**found**♦♦****♦*/

10switch(s)

11(case•a*:casefA*s{i«0;break;)

12case•e*:case•£•:(i-l;break;}

13case,i1:case•I•:(i-2;break;}

14case'o':case,01:{i-3;break;}

15case•u1:case,U1:(i»4;break;}

16)

17if(i>-0)

18

19

20}

21main()

22(charsi(81];intnuml[5]ri;

23printf(w\nPleaseenterastring:

w);gets(si);

24fun(si,numl);

25for(i-0;i<5;i++)printf(w%d

numl(i]);printf(R\nw);

26

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

之和。

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

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

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

注意:不要改动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:

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

}

34.下列给定的程序中,函数hn()的功能是为一个偶数寻找两个素数,

这两个素数之和等于该偶数,并将这两个素数通过形参指针传回主函数。

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

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

试题程序:

#include<stdio.h>

#include<math.h>

voidfun(inta,int*b,int*c)

{inti,j,d,y;

for(i=3;i<=a/2;i=i+2)

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

{y=0;

for(j=2;j<=sqrt((double)i);j++)

if(i%j==0)y=0;

if(y==l)

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

{d=i-a;

for(j-2;j<=sqrt((double)d);

j++)

if(d%j==O)y=0;

if(y=-i)

{*b=i;*c=d;}

)

)

main()

{inta,b,c;

do

{printf("\nlnputa:");

scanf("%d",&a);}

while(a%2);

fun(a,&b,&c);

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

35.下列给定程序中,函数fun()的功能是:计算整数n的阶乘。

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

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

试题程序:

#include<stdio.h>

doublefun(intn)

doubleresult=1.0;

whil(n>l&&n<170)

result*=—n;

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

return;

main()

{int.n;

clrscr();

printf("Enteraninteger:");

scanf("%d",&n);

printf("\n\n%d!=%lg\n\n",n,fun(n));

36.以下程序可把输入的十进制数以十六进制数的形式输出。

请在横线上填上适当的内容并把横线删除,使它能得出正确的结果。

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

试题程序;

main()

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

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

longn;

printf("Enteranumberin'');

scanf("%ld",&n);

do{

/****************ound****************/

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

while(n!=0);

printf("Transmitenewbase:\n");

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

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

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

printf("\n");

37.已知一个数列从第。项开始的前三项分别为0,0,1,以后的各项

都是其相邻的前三项之和。给定程序MODH.C中函数fun的功能是:

计算并输出该数列前n项的平方根之和。n的值通过形参传入。

例如,当口=10时,程序的输出结果应为:23.197745o

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

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

1;finclude<stdio.h>

!linclude<math.h>

2i

3;/found…………/

4;fun(intn)

doublesum,sO,si,s2,s;intk;

6•sum-1.0;

7iif(n<-2)sum,0.0;

8\sO=0.0;si=0.0;s2=1•0;

9!for(k«4;k<-n;ki)

I

10i(s•sO♦si+s2;

njsum+■sqrt(s);

12!sO»si;si=s2;s2-s;

i

13•}

14***********•found*♦♦*♦****♦♦♦/

15!returnsum

i

16J)

।

17;main()

18iintn;

19}printf("InputN«n);

ww

20jscanf(%dr&n);

21jRw

printf(%f\nrfun(n));

22!

38.给定程序MOD11.C中函数fun的功能是:将字符串中的字符按逆

序输出,但不改变字符串中的内容。

例如,若字符串为abed,则应输出:deba。

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

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

1*include<stdio.h>

2/…………found…………/

3fun(chara)

4{if(*a)

5{fun(a*l);

6/…•……★•found/

7printf("%c**a);

8

9

10main()

11(chars(10]«"abcdw;

12printf("处理前字符申=*s\n处理后字

符串s);

13fun(s);printf(w\nw);

14

39.下列给定程序中,函数fun()的功能是:从字符串s中,删除所有小

写字母七,。

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

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

试题程序:

#include<stdio.h>

voidfun(char*s)

{inti,j;

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

if(sill!='c')

s[j]=s[i];

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

s[i]='\0';

)

main()

{chars[80];

printf("\nEnterastring:");

gets(s);

printf("Theoriginalstring:")

puts(s);

fun(s);

printf("Thestringafterdeleted:");

puts(s);printf("\n\n"):

40.给定程序MODII.C中函数fun的功能是:把主函数中输入的3个

数,最大的放在a中,最小的放在c中,中间的放在b中。

例如,输入的数为:551234,输出结果应当是:a=55.0,b=34.0,

c=12.0o

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

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

finclude<stdio.h>

voidfun(floatfloat*b#float*c)

(

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

float*k;

if(*a<*b)

{km*a;*a-*b;*b»k;}

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

if(*a>>c)

{k-wc;*c-*a;*a«k;}

if(*b<wc)

{k-*b;*b-*c;*c-k;}

13

14main()

15{floata,b.c;

16printf("Inputabc:scanf

ww

(%f%f%fr4ar&b,«c);

H

17printf(a-%4.Ifrb•%4.Ifrc

H

-%4.1f\n\nrarbrc);

18fun(&a,&c);

w

19printf(a-%4.Ifrb-%4.If,c

-%4.lf\n\n”,a,b,c);

20

五、程序改错题(2题)

41.

由N个有序整数组成的数列已放在一维数组中,下列给定程序函数fun

()的功能是:利用折半查找法查找整数m在数组中的位置。若找到,

返回其下标值;否则,返回-1。折半查找的基本算法是:每次查找前先

确定数组中待查的范围low和high(10w%high)o然后用m与中间位

置(mid)上元素的值进行比较。如果m的值大于中间位置元素的值,

则下一次的查找范围落在中间位置之后的元素中;反之,下一次的查找

范围落在中间位置之前的元素中,直到low>;high,查找结束。请改

正程序中的错误,使它能得出正确的结果。注意:不要改动main()

函数,不得增行或删行,也不得更改程序的结构!试题程序:

sincludeVzdio.h>

「defineN10

//••••found•■••

void(un(inta[1.inim>

(intlow=0.high二N-I・mid:

whilZlowV=high)

{mid=(low+high)/2:

i((m<a[mid])

high=mid-11

//••••found••♦•

elxeif<m>a[mid]>

low川mid+11

elserctum(mid)i

I

returnC-1)।

>

voidmain()

(mti.a[N]«I-3.4.7,9.13.45.67.89.100.

180}•k.mi

print!(-•数组中的数据如下,・)i

for(i=*0:i<Nji4-+)

printf(*%d।

printf("Enterm:">j

scan(("%d",&m)i

kafun(A.m>«

if(k>*0)

prin!f(*,m=%d・index=%d\nH.m.k>i

elsepnntf("Notbefound!\n")i

42.下列给定程序中,函数proc()的功能是:从字符串str中,删除所有

大写字母F。

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

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

构。

试题程序:

WincludeV,idg.h>

voidproc<char•»tr)

itMi»ji

//••••found••••

foKi*)*Oi'<>'41++]

水F/)

//♦♦♦♦fntAlMi•••e

wrU]l\03

midmaint>

HUB.Zf{M/

W”"'■EmeraZftn*J)Q

grvn(«tr>i

pnntK*TbrongifwiJ*)i

p«it*<«tr)।

proc<»<r)i

*TbeMrttigafterddrirdt>)<

put*«tr)t

DTintfC*\n\ti*)»)

六、操作题(2题)

43.若有以下程序:

main()

{int,p,a=5;

if(P=a!=0)

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

else

printf("%d\n",p+2);

)

执行后输出结果是【】。

44.以下程序的功能是输出如下形式的方阵:

13141516

9101112

5678

1234

请填空。

main()

{inti,j,x;

for(j=4;j>0;j-)

{for(i=l;i<=4;i++)

{x=(j-l)*4+【】;

printf("%4d",x);

)

printf("\n");

)

参考答案

l.p=a+4或p=&a[4]。p=a+4或p=&a[4]0解析:可以直接将数组元素

a[4]的地址(即&a[4])赋给指针变量p,也可以用数组名加偏移量的形式

(即a+4)表示数组元素a[4]的地址,并赋给指针变量p。

2.模式/内模式映像模式/内模式映像解析:映像即一种对应规则,指出

映像双方如何进行转换。数据库系统在三级模式之间提供了两层映像,

这两层映像是外模式/模式映像与模式/内模式映像。

3.132132解析:本题考核的知识点是for循环与switch语句的综合运

用。主函数中用了一个for循环,for循环里嵌套了一个switch语句,for

循环了三次,当i=9时,i/10=0,执行switch语句中case。分支,m和n

的值各加1,变为1和1,然后遇到breake语句,退出switch语句;当

i=10,i/10=l,执行switch语句中default分支,使k和n的值各加1,

变为1和1,退出switch语句:当i=ll时,i/10=l,执行switch语句中

default分支,k和n的值各加1变,为2和3,退出switch语句,循环

结束。故该空格处应该填132O

4.floatfloat解析:在此表达式中x是float类型的变量,经过开方所得到

的结果仍是float类型,再和2.8进行运算时,应该先将2.8转换成float

类型再运算,最后结果仍是float型。

5.a=2b=la=2,b=l解析:本题考查了switch结构的内容。C语言中,程序

执行完一个case标号的内容后,如果没有break语句,控制结构会转移到

下一个case继续执行,因为case常量表达式只是起语句标号作用,并不

是在该处进行条件判断。本题程序在执行完内部switch结构后,继续执

行了外部switch结构的case2:分支,最后a和b的值分别为2和1。

6.调试调试

7.10

8.21

9.282,8解析:do…while语句的功能是:首先执行循环体语句,然后检

测循环控制条件表达式的值,若为真,则重复执行循环体语句,否则退

出循环。这里程序初始时a=l,b=10,经过操作b-=a;a++后b=9,a=2,

判断条件b-<0不成立,退出循环,但b的值被减1,因此结果为:

a=2,b=8o

10.9292解析:主函数中首先定义了一个4行4列的二维数组,然后执

行一^while循环,该循环中又嵌套了一个do-while循环。现看while

循环,该循环通过i++的值来判断是否结束循环当i++的值为4的时候

结束循环,当i=0时,执行while的循环体,显然if语句条件不满足不

执行,接着让i=。,然后执行do-while循环体,我们不难看出do-whilo

循环的功能是将第i+1行的所有元素加起来,所以这时s的值为

s=a[l][O]+a[l][l]+a[l]⑵+a[l][3)=26,当i=l时,i+l=2,uf后面括号里的

表达式的值为真执行后面的continue语句,结束该次循环;当i=2时,

i加1变为3,把第3+1行的所有元素的加到s上,此时

s=s+a⑵⑼+a[2][l]+a⑵⑵+a⑵[3]=92,当i=3时,3+1=4,if后面括号里

的表达式的值为真执行后面的continue语句,结束该次循环,当i=3时,

if后面括号里的表达式的值为真执行后面的continue语句,结束该次循

环当i=4时while循环结束,所以最后输出的s的值为92。

U.B

12.B

13.B

14.C

15.A由题意可知:指针变量p指向变量a,p的值是a的地址;指针变

量q指向变量P,q的值是p的地址。q是指针变量,q指向p,*q是变

量P,选项A错误;p是指针变量,p指向变量a,选项B正确;由于q

指向P,因此*q指向a,选项C正确;*p和**q都代表变量a,选项D

正确。故本题答案为A选项。

16.Bcase常量表达式只是起语句标号作用,并不进行条件判断。在执行

switch语句时,根据switch的表达式,找到与之匹配的case语句,就从

此case子句执行下去,不再进行判断,直到碰到break或函数结束为止。

所以执行内层“switch(y)”时只执行了“a++;”,此时a的值为1,然后执行

外层case2语句的“a++;b++;”,a值为2,b值为1。故本题答案为B

选项。

17.B

18.Dfread函数用来读二进制文件,其中buffer是数据块的指针,它是内

存块的首地址,输入的数据存入此内存中;size表示每个数据块的字节

数;count用来指定每读一次读入的数据块个数;fp是文件指针,指向要读

的文件。选项A、B、C错误。本题答案为D选项。

19.D

20.D

21.1doublefun(doublex,intn)

2(

3inti;

4doubles=1.0,sl=1.0;

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

6{si=si*i;/*各项中的阶乘*/?s=s+pow(x,i)/si;/*按公式求出*"Returns;10}

程序定义了变量S1和s,si表示每项的分母(即各项的阶乘),S存放累

加和。循环语句控制累加的次数,在循环体中进行阶乘和累加操作,

将累加的结果存入S中。此处使用了求乘方函数pow(X,i),其含义是

求X的i次方的值。

22.

【解析】首先判断循环中n是否为素数,如果不是素数,求其平方根的

累加和,并返回计算结果,否则跳出判断循环。其中,对于平方根的求

解可以使用C语句中的sqrt()函数。

23.

【解析】要求该学生的平均成绩,首先要求出其各科成绩之和,然后求

出其平均成绩并放在成员变量ave中。

24.

ITIKIpnr<imn»mt•mi•dl

tntii

•max"•rr£o]ia簸・大的fit

•d-Oe”・俄★■大的值所财应的下怀

(oe(i*OeYn.i*4)

ii<•m&«<arr[ij)

(•ma*,trf£iL•d・i,)

【解析】要得到数组中元素的最大值,需要比较数组中的每一个元

素。首先将最大值赋值为数组中的第一个元素,再将其与数组中的其

他元素相比较,将值最大的元素赋给变量max,并将其下标赋值给变

量d。

25.voidfun(int(*s)[10],int*b,int*n,intmm,intnn)

(

intij;

for(j=0;j<nn;j++)/*将二维数组中的数据按列的顺序依次存入一维数

组中*/

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

(

b[*n]=*(*(s+i)+j);

*n=*n+l;/*通过指针返回元素个数*/

)

)

题目要求实现将二维数组元素存入一维数组。使用for循环语句来控制

二维数组元素的下标,同时使用指针变量配合操作。

可以用两个循环来处理问题,由于是按列的顺序取出,因此第1个循

环用于控制列下标,第2个循环用于控制行下标。

26.

【解析】此题考查的是用迭代法求多项式的值。通过观察题目中给出的

数学公式可知,后面一项是前面一项乘以n/(2*n+l),发现这个规律后,

问题迎刃而解。通过定义double类型变量,并且赋初值,用来存放多项

式的总和。此题中需要注意的是,表示每一项的si和表示多项式之和

的s,两者的初值都是1.0。

27.

【解析】要找出学生的最高分,就要比较所有学生的成绩。定义一个变

量max用来存放学生的最高分,初始化为第一个学生的成绩,依次与其

后的学生成绩相比较,最后将得到的最高分返回主函数。

28.1voidfun(char*a,char*s)

2{while(*s!:'o1)

3{*a=*s;4a++;5s++;}7*a=N(T;}要将指针变量s所指的字符串存入指针

变量a所指的字符串中,程序要求不能使用系统提供的字符串函数。

本题可以使用循环语句,依次取出a所指字符串中的元素,将其存入s

所指的字符串中,最后为s所指的字符串添加字符串结束标志NO:

29.

【答案】

voidfun(charaa)

(

inti«

啊甲=由

吨“7小产若不是要剜除的字符中则保国•/

电片•%・;a・后加上字符串结束符M

I解析】

用楣环操作从第一个字符开始.往后逐个与要删除的字符比较,保留要删除字符以外的字符。变fiti表

示原字符串的下标.变量j表示IM除"号后新字符申的下标,且j从o开始,循环结束后给字符串加上结束

府吹

30.

intfun(char*ss,charc)

inti=O;

for(;*ss!='\O';ss++)if(}ss==c

i++/*求出*所指字符串中指定字符的个数*/

returni;

【考点分析】

本题考查:for循环语句遍历字符串,并通过if条件语句,判断字符串

是否结束。

【解题思路】

从字符串中查找指定字符,需要使用循环判断结构,循环语句用来遍

历字符串,循环条件为字符串没有结束,即当前字符不是'\0',判断

语句用来判断当前字符是否为指定字符。最后返回指定字符的个数。

31.错误:if(i+l%5==0)正确:if((i+l)%5==0)错误:if(

温馨提示

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

评论

0/150

提交评论