2023年辽宁省丹东市全国计算机等级考试C语言程序设计测试卷(含答案)_第1页
2023年辽宁省丹东市全国计算机等级考试C语言程序设计测试卷(含答案)_第2页
2023年辽宁省丹东市全国计算机等级考试C语言程序设计测试卷(含答案)_第3页
2023年辽宁省丹东市全国计算机等级考试C语言程序设计测试卷(含答案)_第4页
2023年辽宁省丹东市全国计算机等级考试C语言程序设计测试卷(含答案)_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

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

文档简介

2023年辽宁省丹东市全国计算机等级考试

C语言程序设计测试卷(含答案)

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

一、2.填空题(10题)

1.下面程序的功能是:从输入的正整数中选3个数进行输出,要求这些

数都是2的倍数,请填空。

main()

{intaJ=0;

scanf("%dH,&A);

do

{if(a>0&&a%2==0)

{printf(u%d\nM,A);i+-;}

if(i!=3)

{scanf(u%dH,&A);}

}while(());

)

2.下列程序的功能:对输入的一行字符中的数字字符的字面值累加,输

出此累加和,请填空。

#include<stdio.h>

#include<ctype.h>

main()

{charc;

inta,s=0;

while()

if(isdigit(c))

{a=c-'0';s+=a;}

printf("s=%d';s);

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

main()

{char*p[]={“BOOL“,“OPK“,”H“,“SP”};

inti;

for(i=3,i>=0;i-,i-)printf(1,%cn,*p[i]);

printf(n\nH);

)

4.下面程序的运行结果是【

voidswap(int*a,int*b)

(

int*tp;

t=a;a=b;b=t;

1

main()

(

intx=3,y=5,*p=&x,*q=&y;

swap(p,q);

printf(n%d%d\n",*p/q);

)

5.以下程序运行后的输出结果是()。

#include<stdio.h>

main()

{intx=20;

printf("%d",0<x<20);

printf("%d\nu,0<x&&x<20);

6.有以下程序:

#include<stdio.h>

main()

{intt=l,i=5;

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

printf(n%d\nu,t);

)

执行后的输出结果是【

7.若输入字符串:(图片),则以下while循环体将执行【】次。

while((ch=getchar())=='e')printf("*");

8.若有如下结构体说明:

structSTRU

{inta,b;charc:doubled;

stmctSTRU*p1,*p2;

);

请填空,以完成对t数组的定义,t数组的每个元素为该结构体类型。

[]t[20]

9.软磁盘最外边的磁道数是【】号磁道。

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

#include<stdio,h>fun(inta)

{intb=0;staticintc=3;

b++;c++;

return(a+b+c);

main()

inti,a=5;

for(i=0;i<3;i++)prinff(n%d%d",i,fun(a));

printf(M\nH);

二、单选题(10题)

11.有如下程序main(){charch⑵[5]={”6937“,“8254”},*p[2];inti,

j,s=0;for(i=0;i<2;++)p[i]=ch[i];for(i=0;i<2;i++)for(j=0;p[i][j]

>'\0';j+=2)s=10*s+p[i]叶O;printf("%d\n\s);}该程序的输出结果

A.69825B.63825C.6385D.693825

12.程序调试的任务是()。

A.设计测试用例B.验证程序的正确性C.发现程序中的错误D.诊断和

改正程序中的错误

13.

(2)已知二义树后序遍历序列是CDABE,中序遍历序列是CADEB,看的前序遍历序列是

().、

A)ABCDEB)ECABDC)EACDBD)CDEAB

14.有以下程序

#include<stdio.h>

intfun(intx,inty)

{if(x==y)return(x);

elsereturn((x+y)/2);

main()

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

printf("%d\n”,fun(2*a,fun(b,c)));

)

程序运行后的输出结果是

A.3B.6C.8D.12

15.对十移动平均算法,是计算某变量之前n个数值的算术平均,正确的

说法是()

A.空间复杂度是0(1)B.空间复杂度是O(n)C.空间复杂度是O(logn)D.

空间复杂度是O(nlogn)

16.有以下程序:

#include<stdio.h>

main()

{intb[3][3]=(0,1,2,0,1,2,0,1,2},i,j,t=l;

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

for(j=l;j<=i;j++)t+=b[i][b|j][i]];

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

)

程序运行后的输出结果是()oA.lB.3C.4D.O

17.有如下程序:

main

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

switch(x)

case0:b++;

case1:a++;

case2:a++.b++;

)

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

}

该程序的输出结果是()。

A.a=2,b=lB.a=l,b=lC.a=l,b=0D.a=2,b=2

18.有以下程序:

#include<stdio.h>

main()

(

inty=9;

for(;y>0;y-)

if(y%3==0)

printfCu%d,,,-y);

}

程序的运行结果是()o

A.852B.963C.741D.875421

19.对长度为n的线性表进行顺序查找,在最坏情况下需要比较的次数

为()。

A.125B.n/2C.nD.n+1

20.带有头节点的单向链表head,其3个数据节点A、B、C的连接关

系如下图所示:

p

headdtnextdtnextdtnext

头节点ABC

节点类型的定义为

structlink

{doubledt;

structlink*next;

};

若指针P指向A节点,在不改变P指向的前提下,以下选项中不能访

问C节点数据成员dt的表达式是()O

A.*(*p).next->next->dt

B.p->next->next->dt

C.(*(*(*p).next),next),dt

D.(*(p->next->next)).dt

三、程序设计题(10题)

21.

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

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

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

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

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

&iacludeh>

"MineMII

trtiedrfstruct

chari»uinLIO]i

mt

STRIX,.

vodproc<STREl**])

mti«ji

STRECti

for(i-INVM,++)/,州・立法按从♦■IL

樽序•/

Cor(j"Oij<M-)

««4J1•<•[•+H•)/•核》散的昌・梅列伊4

的记*・高分住■•/

)

voidmain<)

STRECMW[M]-<<-GA005".Ml.<*GA003"

7»・

(•GA002"<491.<*GAOO4\S5)•LGAOOI.・9I).

(•GAOO7".72ld*GAOO8*.«4).(•GA004".B7I.

<"GAOI$a.tS)•<*GAOI3*»I1)«CGA012M.MI.

CGAOU".9ll.rGAOir.M).CGAO|7".M).

<aGA0l8a.«4h<<GA01C*,7t)li

mtii

pffor(ntw>i

pnntf(aThrdata“1rfnoried>\a'')i

for<i**Oii<Mii++)

〃修行■由4个学生圮上

printK*\n*)(

pnnt(<<XM%4da«*tu(iXa)(

22.请编写函数proc(),它的功能是计算:s=(In(1)4-ln(2)+In(3)

4-…+ln(m))0.5在C语言中可调用log(n)函数求In(n)o例如,

若nl的值为30,则proc()函数值为8.640500o注意:部分源程序

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

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

Uinclu4rVzdlik.h>

9includeVcomo.h>

,includeVtldCh>

includr<OMth.k>

doubleprocCuMm)

)

voednwiatH>

»y«tefn(dS)i

pnntfCaHAn>«proc(30))i

23.

请编写函数proc(),该函数的功能是:将M行N列的二维数组中的数

据,按行的顺序依次放到一维数组中,一维数组中数据的个数存放在形

参n所指的存储单元中。例如,若二维数组中的数据为:13233343

1424344415253545则一维数组中的内容应该是1323334314243444

15253545O注意:部分源程序给出如下。请勿改动main()函数和

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

干语句。试题程序:

UincludeV・ididh>

BidprodUM("HM•b.im•n.mtmm.mtnn)

raidmain(>

totarril0][]0]«((33,33.33.33).(44.44.44.44).

{S$.SS.S5.5$H.«•ji

ui<«C100]-iO)・n・Oi

e

pnfM«"ThrnMtnxt\n>i

(or<iwOiiOt[+♦)

for♦>

pnM((*X3J*»«rr[iXj]H

pnntfC-Xn")।

pnx<*rr«a«6n«3«4)।

pnnth*ThcAamy.f).

IWO.YIHi*♦)

printf<*Yt3d.・*[i])i

pnnth

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

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

9fdsao

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

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

试题程序:

#include<string.h>

#include<conio.h>

#include<stdio.h>

#defineN100

voidfun(char*str)

(

)

voidmain

(

chara[Nl;

FILE*out:

printf(nEnterastring:");

gets(a);

printf("Theorigiralstringis:");

puts(a);

fun(a):

printf("Thestringaftermodified:");

puts(a);

strcpy(a,^Welcome!");

fun(a);

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

fprintf(out,n%sH.a);

fclose(out);

}

25.请编写函数proc(),该函数的功能是:计算n门课程的平均分,计

算结果作为函数值返回。例如,有6门课程的成绩是90.5,72,80.

61.5,55,60,则函数的值为69.83O注意:部分源程序给出女「下。

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

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

Sinclude<sfdio.h>

floatproc(float•a.intn>

voidmain()

float»core[30],sx{90.5.72.80.61,5.55.60).

aven

aver«-proc(stcore.6)t

print«"\nAveragescoreis:%5.2(\n".aver)j

26.学生的记录由学号和成绩组成,M名学生的数据已在主函数中放入

结构体数组stu中,请编写函数proc(),该函数的功能是:把高于等于

平均分的学生数据放在b所指的数组中,高于等于平均分的学生人数通

过形参n传回,平均分通过函数值返回。注意:部分源程序给出如下。

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

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

■inclvd*<MAQIIL>

・MMWMU

trpv4e4—

Ichar

40MMe•«

)

:TTKKl*i

doubleH«r(FnilX'•a.STItEt'.,■•«>

ruwlmaM<)

STRIT•««(M]•((*GAOS*.«1.(*GAM*.7«H

1"GAOZ.・•、・I・Gg..31・<*GA0l•・♦”・

<,GA07.g.].GAM,M.<*GWM.

(aGA09*.MKI>GAIIe.nu(*GAir.nK

(*GAI0*.90HI

STRECMM」

NMi

dOwMeavet

proH**«♦!»・A・)•

print”,TheS44etawWli.

b.h*r(KMXT.3(»\a*.auw>»

for<»«0«Yiu〉

pruM”・%・外,1V・1G1―NJa,

pnntl(

27.请编写函数proc,其功能是:将str所指字符串中除下标为偶数、同

时ASCII码值为奇数的字符外,其余的字符都删除,串中剩余字符所形

成的一个新串放在t所指的数组中。例如,若str所指字符串中的内容为

ABCDEFG12345,其中字符B的ASCII码值为偶数,所在元素的下标为

奇数,因此必须删除;而字符A的ASCII码值为奇数,所在数组中的下

标为偶数,因此不应当删除。依此类推,最后t所指的数组中的内容应

是ACEGO

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

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

中填人所写的若干语句。

试题程序:

#include<stdlib.h>

#include<conio.h>

#include<stdio.h>

#include<string.h>

voidproc(char*str,chart[])

(

}

voidmain

(

charstr[1001,t[100];

system(nCLS");

printf("\nPleaseenterstringstr:n);

scanf(n%Sn,str);

proc(str,t);

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

28.…请编写函数。fun能是:判断形参n中的正整数是几位数(输入数

据的位数不超过4位),并将结果通过函数值返回。例如:若输入的数

据为123,则输出结果为:输入的数字是3位。注意:部分源程序存在

PROG1.C中,请勿改动主函数main和其他函数中的任何内容,仅在函

数fun的花括号中填入所缩写的若干语句。试题程

•include<stdio.h>

voidNONOO;

intfun(intn)

main()

{intn,place;

do{

printf("请输入一个4位以内的正整数:");

scanf("id1,,&n);

>while(n<0IIn>9999);

place=fun(n);

printf(1"愉人的数字是1d位\n**,place);

NONOO;

)

voidNONOO

</•本语数用于打开文件,帖人数据,调用语数,输出数物,关闭文件。•/

FILE•fp,•wf;

inti,n,place;

fp-fopen("c:\test\in.dat","r");

wf-fopen("c:\fcest>put.datH,"w");

for(1-0;i<10;i*4)

(

fscanf(fp,"W",(n);

place-fun(n);

fprintf(wf,"W\n",place);

i

fclose(fp);

fclose(wf);

序:1

29.请编写一个函数,用来删除字符串中的所有空格.例如,输入

abcdefgh,则输出为abcdefgho注意:部分源程序给出如下。请勿改

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

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

£mclucfteh>

3mrlude<rtypc.h>

・includeVeftidb>

3Mirludr<*rd!ib.hA

«noidprocXHuir•»ir>

voidnuin<)

charatlCSIJ(

*CLS*>•

pruidCInput••«nngt")»

get«(»tr)i

|>roc<*rr>i

prtntfC*•••»lri/・\rT.wr)i

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

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

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

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

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

•include<stdio.h>

#include<献ring,h>

defineM81

intfun(char•ss,charc)

tnain()

Ichar•[M],ch;

voidNONO();

printf(0\nPle«Menterastring:**)•gels(a);

printf("\nPleaseenterachar:");ch=j(etchar();

printf(**\nThcnumberoftherharis:%d\n",fun(a,ch));

NONO();

I

voidNONO()

!/•本函数用于打开文件,It人测试数据,调用fun函数,输出数据,关闭文件。•/

inti;

FILE»rf.»wf;

chara[M],b[M],ch;

rf=fbpen("in.dat",*r");

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

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

I

fi«anf(rf,a);

ficanf(rf."%»*.b);

ch=•b;

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

I

fcloee(rf);

fcioee(wf):

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

31.下列给定程序中,函数fun()的功能是:根据输入的3个边长(整型

值),判断能否构成三角形:若能构成等边三角形,则返回3,若是等腰

三角形,则返回2,若能构成三角形则返回1,若不能,则返回0。

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

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

试题程序:

#include<math,h>

intfun(inta,intb,intc)

{if(a+b>c&&b+c>a&&a+c>b)

{if(a==b&&b==c)

//*************Icund1不不不不不不不不不不不不不不/f

return1;

elseif(a==b||b==c||a==c)

return2;

//*T**T**T**T**T**T**T**T**T**T**T**T**T*।11n0j个个个个个个个个-个k-个k-个k-个k-个k-个x/

elsereturn3;

elsereturn0;

main()

{inta,b,c,shape;

printf(H\nInputa,b,c:");

scanf("%d%d%dn,&a,&b,&c);

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

shape=fun(a,b,c);

printf(n\n\nTheshape:%d\nM,shape);

}

32.给定程序MOD11.C中函数fun的功能是:输出M行M列整数方

阵,然后求两条对角线上元素之和,返回此和数。

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

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

1♦include<stdio.h>

2♦defineM5

3/…………found…………/

4intfun(intn,intxx[][])

5(int1,j,sum«0;

HH

6printf(\nThe%dx%dmatrix:\nr

M,M);

7for(i-0;i<M;

8{for(j-0;j<M;

9/……*…**found…………/

10printf("if",xx(i][j]);

11printf("\n");

12}

13for(i-0;i<n;i++)

14sum+■xx[i](i]+xx[i][n-i-1];

15return(sum);

16

17main()

18{intaa[M][M]-({l#2r3,4r5)t

[4,3,2,1,0},[6,7,8,9,0},{9,8,7,6,5},

(3,4,5,6,7));

19printf("\nThesumofallelements

on2diagnalsis%d."rfun(M,aa));

20

33.下列给定程序中,函数fun()的功能是:从n个学生的成绩中统计出

低于平均分的学生人数,此人数由函数值返回,平均分存放在形参aver

所指的存储单元中。例如输入8名学生的成绩:

80.5607290.59851.58864

则低于平均分的学生人数为4(平均分为75.5625)0

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

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

试题程序:

#include<stdio.h>

#include<conio.h>

#defineN20

intfun(float*s,ihtn,float*aver)

{floatave40.0;

intcount=0,k,i;

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

/^1*^1*^1*1*1**X**1^/

/平不不不不不不不不不不不不rciinri不不不不不不不不不不不不不不/

t=s[k];

ave=t/n;

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

if(s[i]<ave)count++;

/*1**1*^1*^1**1*1*1**X**1^*1^«1**X*f

/斗不不不不不不不不不不不不rcnnri不不不不不不不不不不不不不不/

*aver=&ave;

returncount;

}

main()

{floats[30],aver;

intm,i;

clrscr();

printf("\nPleaseenterm:");scanf

(“%d”,&m);

printf("\nPleaseenter%dmark:\n",m);

for(i=0;iprintf(M\nThenumberofstudents:

%d\nH,fun(s,m,&aver));

printf("Ave=%f\nM,aver);

)

34.下列给定程序中函数fun()的功能是:将长整型数中每一位上为偶数

的数依次逆向取出,构成一个新数放在t中。高位在低位,低位在高位。

例如当s中的数为25846513时,t中的数为6482。请改正函数fun()

中的错误,使它能得出正确的结果。

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

试题程序:

#include<stdio.h>

#include<conio.h>

voidfun(longS,long*t)

(

intd;

longsl=l,i=l;

*t=0;

while(s/i>0)

i=i*10;

i=i/10;

while(s>0)

d=s/i

/*1**1**!<*1**!**!*1*!**!**!**!**!**!**!**!*、!•*!**!**!*/

/个个个个个个个个个个个个个T/~\I]nn个个个个个个个个个个个个个/

if(d%2!=0)

/木木木木木木木木木木木木木found木木木木木木木木木木木木木/

t=d*sl+t;

sl*=10;

)

S=S%i;

i=i/10;

}

)

main()

(

longS,t;

clrscr();

printf(n\nPleaseenterS:");

scanf(u%ldM,&s);

fun(S,&t);

printf(HTheresultis:%ld\n'\t);

}

35.给定程序MOD11.C中函数fun的功能是:计算n的5次方的值(规

定n的值大于2、小于8),通过形参指针传回主函数;并计算该值的个

位、十位、百位上数字之和作为函数值返回。

例如,7的5次方是16807,其低3位数的和值是15。

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

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

tfinclude<stdio.h>

linclude<math.h>

3intfun(intn,int*value)

4{intd,s,i;

5found……*

6d«0;s«0;

7for(i«l;i<*5;i*+).d*d*n;

8*value-d;

9for(i»l;i<«3;i++)

10{s-s+d%10;

************found*********1

12d«d\10;

13

14returns;

15

16main()

17(intntsum,v;

18do

19{printf(**\nEntern(2<n<8):w);

scanf("%d"r&n);)

20while(n<»211n>-8);

21sum-fun(n,4v);

22printf("\n\nTheresult:\nvalue-

%dsum«%d\n\n"rvrsum);

23

36.给定程序M0D11.C中函数fun的功能是:求出以下分数序列的前

n项之和。和值通过函数值返回到main函数。

23581321

T'293959T才……

例如,若n=5,则应输出:8.391667。

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

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

1•linclude<stdio.h>

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

3voidfun(intn)

4{inta,b,c,k;doubles;

5s・0.0;a-2;b«1;

6for(k-1;k<-n;k++){

7/…………found**………•

8s-s*(Double)a/b;

9c=a;a«a4-b;b-c;

10

11returns;

12

13main()

14(intn«5;

15printf(n\nThevalueoffunction

is:%lf\nw,fun(n));

16

37.已知一个数列从0项开始的前3项:0,0,1,以后的各项都是其相

邻的前3项之和。下列给定的程序中,函数fun()的功能是:计算并输出

该数列前n项的和sum。n的值通过形参传入。例如,当n=10时,程序

的输出结果应为96.0000000

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

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

试题程序:

#inckide<conio.h>

#include<stdio.h>

doublefun(intn)

(

doublesum,SO,SI,S2,S;

intk;

sum=1.0;

if(n<=2)

sum=0.0;

s0=0.0;

si=0.0;

s2=1.0;

/^j/

/个*T**T**T**T*个个*T*个*T*个个个TC]lt^ri*T**T**T**T**l**T**T**T**T**T**T**T**T*/

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

S=S0+S1+s2;

Sum+=s;

S0=sl;

Sl=s2;

/«1«•!«•!««1««14«f««f««f««f««1««1«•(««1*1*!»«£««f»«f»*X**1**X*«1««1«•!««1»«1»/

不**********10iir)ci不不不不不不不不不不不不不/

S2=S;

returnsum;

)

main()

(

intn;

clrscr();

printf(nInputN=");

scanf(u%d",&n);

printf(n%f\nn,fun(ni);

38.下列给定程序中,函数fun()的功能是:从3个红球,5个白球,6个

黑球中任意取出8个作为一组,进行输出。在每组中,可以没有黑球,

但必须要有红球和白球。组合数作为函数值返回。正确的组合数应该是

15。程序中i的值代表红球数,j的值代表白球数,k的值代表黑球数。

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

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

试题程序:

#include<stdio.h>

intfun()

{inti,j,k,sum=0;

printf(M\nTheresult:\n\n");

f7*7*7*7*7*7*7*7*7*£1*1*7,7.7.*1**1**1*7.*1*q./

/不不不不不不不不不不不不不不[()]]]]([不不不不不不不不不不不不不不不/

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

{for(j=l;j<=5;j++)

{k=8-i-j;

J/

/不不不不不不不不不不不不不不iintl不不不不不不不不不不不不不不不不不不/

if(k>=l&&k<=6)

{sum=sum+l;

printf(nred:%4dwhite:%4d

black:%4d\n",i,j,k);

)

)

)

returnsum;

)

main()

{intsum;

sum=fun();

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

)

39.下列给定程序中,函数fun()的功能是;利用插入排序法对字符串中

的字符按从小到大的顺序进行排序。插入法的基本方法是:先对字符串

中的头两个元素进行排序,然后把第3个字符插入到前两个字符中,插

入后前3个字符依然有序;再把第4个字符插入到前3个字符中,待排

序的字符串已在主函数中赋予。

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

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

试题程序:

#include<String.h>

#include<stdio.h>

#defineN80

voidinsert(char*aa)

{ihti,j,n;charch;

n=strlen(aa);

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

//

frTwrTwrTwrTwrTwrTwrTwrTwrTw»Tw»T«・[•・[•・[•・[•・[•・[•・[•»TwrTwrTwrTwrTw・[•・[•t

{c=aa[i];

j=i-l;

while((j>=0)&&(ch<aafjl))

{aa[j+l]=aa[j];

j-;

)

aa[j+l]=ch;

)

}

main()

{chara[NJ="QWERTYUIOPASDFGHJKIMNBVCXZM;

inti;

printf("Theoriginalsiring:%s\n'\a);

insert(a);

printf(HThestringaftersorting:

%s\n\nn,a);

40.在主函数中从键盘输入若干个数放入数组中,用。结束输入并放在

最后一个元素中。下列给定程序中,函数fun()的功能是计算数组元素中

值为负数的平均值(不包括0)。

例如:数组中元素的值依次为43,47,-21,53,-8,12,0,则程序的

运行结果为-25.333333。

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

doublefun(intx[])

doublesum=0.0;

intc=0,i=0;

t1/

/*I*n**I**I**T**T**T**r*T**T**T'*r*rrrA]]口][不不不不不不不不不不不不不/

while(x[i]==0)

if(x[i]<0)

sum=siim+x[il;

c++;

}

i++;

)

/*1**1**1**1**1**1*4,71/

/*T**T**T**T**7**T**T*****T**T**T**T*।11Fl/-1个个个个个个个个个个个/

sum=sum\c;

returnsum;

main()

(

intxllOOO];

inti=0;

clrscr();

printf("\nPleaseentersomedata(endwith

0):”);

do

(

scanf(u%dH,&x[i]);

}while(x[i++]!=0);

printf(,'%f\nH,fun(x));

)

五、程序改错题(2题)

41.

下列给定的程序中,函数proc()的功能是:将str所指字符串中出现

的tl所指字符串全部替换成t2所指字符串,所形成的新的字符串放在

w所指的数组中。在此处,要求U和t2所指字符串的长度相同。例如,

当str所指字符串中所指的内容为abcdabcdef9,tl所指字符串中的内容

为be,t2所指字符串中的内容为11时,结果在w所指的数组中的内容

应为alldalldefg。请修改程序中的错误,使它能得出正确的结果。注意:

不要改动main()函数,不得增行或删行,也不得更改程序的结构。试

题程序:

・mrltMi*<aiWhlkll>

■mrlvtir<••nag,b>

mlpforidiaf•«tr«cW**tl»dwr

Mrcpy<w«»rr>«

whir(®*>

whtlr<r>

ri«eb*raka

wtuie(•<)(•・・•r»«4-♦«r

ria*'+

<CLS*>>

prmii<*\mPV«w«•1**Mrw***tt>>•

KMU<

prwid<*\nP1e«*rc«Metwhstragtl(*>i

KMlf<>•

prwuK*\AP1MM«M*raMhurwgt2a*>•

if<»trica(ti>*-strimfG)

|Noc(atr«tl.U.w>«

ptnMf(*\aTWe/.・八

)

ebe*Enori«aria«<

42.

下列给定程序中,函数fun的功能是求两个非零正整数的最大公约数,

并作为函数值返回。

例如,若nmnl和num2分别为49和21,则输出的最大公约数为7;若

num1和num2分别为27和81,

则输也的最大公约数为27o

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

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

试题程序:

#tnclude<stdio.h>

fun(>ntajntb)

(int3

if(a<b)

Ega汨=t;

r=^a%b;

whi!e(r!=O)

{a=b;b=r;T=a%b;}

/********♦**■*学,*~训4,*******♦丰

return®;

)

voidmain()

|intnuml9num2fa;

printfCInputnumlnum2:M);

scanfC%d%d".&numL&num2);

printf(nnum1num2=%d\n\n*miml,nuni2);

a=<un(numl,num2);

prin出FiemaxfnrnncommOTdivisoris%d\n\n"㈤;

六、操作题(2题)

43.函数delete(s,i,n)是作用是从字符串s中删除从第i个字符开始的n

个字符,请填空。

voiddelete(charslJ,inti,intn)

{intj,k,length=O;

while(s[length])

[];

-i;

j=i

)

if(I])

{k=i+n;

if(i+n<=length)

while(k<length)

s|j++J=slk++J;

s[j尸\0';

}

44.以下fun函数的功能是在N行M列的整型二维数组中,选出一个

最大值作为函数值返回,请填空。(设M,N已定义)

intfun(inta[N][M])

{inti,j,row=0,col=0;

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

for(j=O;j<M;j++)

if(a[i][j]>a[row][col])(row=i;col=j;)

return();

}

参考答案

l.i<3

2.

分析题目可知,程序中运用函数c=getchar。从标准输入设备读取下一

个字符,而且是一行的字符(即没有换行),所以条件为

(c=getchar())!-\\n'o

\r\n

\r\n

3.S0

4.3535解析:在主函数中通过定义和赋初值使p和q分别指向了X和

y.执行函数调用“swap(p,q)1把p和q中的地址值传给了形参指针.变

量a和b,a和b分别指向了实参x和y。在函数sw叩()中交换了指针变

量a和b的值,并没有交换a和b指向的实参的值,所以函数调用返回

后x和y依旧是原来的值。

5.1010解析:表达式0<x<20,首先计算0<x,其值为1,再计算

20,其值为1,输出1;表达式0<x&&x<20,0<x为1,x<20为0,

再计算1&&0,其值为0,输出0。所以输出结果为10。

6.00解析:本题是计算5*4*3*2*1*0的值,结果为0。

7.00解析:函数getchar。是从键盘得到用户输入的一个字符。用户输入

的第1个字符是a,不管后面输入的是什么ch的值都是宣,因此条件

(ch=getchar())==©为假,这个循环不会被执行。

8.structSTRUstructSTRU解析:结构体类型是构造数据类型,是用户自

己定义的一种类型。

结构体类型的定义:

struct结构体类型名

成员项表;

定义结构体变量的的形式为:

struct结构体类型名变量1,变量2,……

其中变量包括:一般变量、指针变量、数组变量等。

9.0

10.1011121210111212解析:用static关键字声明的变量称为静态局部变

量。静态局部变量只在编译时赋一次初值,以后再次调用函数时不再重

新赋初值,而是保留上次函数调用结束时的值。程序中的变量c为静态

变量,当再次调用fun函数时,变量c不再被赋初值,变量c的值为上

次调用fun函数时所保留下来的值,具体在程序运行过程中的体现如下:

当i=0时,第一次调用fun(5),这时a=5,b=0,c=3,执行b++,c++,

得到b=l,c=4,则a+b+c=10,返回主函数输出010;当i=l时,第二

次调用fun(5),这时a=5,b=0,c=4,执行b++,C++,得到b=l,c=5,

贝IJa+b+c=ll,返回主函数输出111;当i=2时,第三次调用fun(5),这

时a=5,b=0,c=5,执行b++,C++,得到b=l,c=6,则a+b+c=12,返

回主函数输出212;当i=3时,循环结束,所以输出结果为:010111212o

1LC解析:该题稍微难一点°主要要搞清楚以下几点:①定义了一个

指针数组char*p⑵后,程序中第一个循环for(i=0;i<2;i++)p[i]=ch[i];

的作用,是使指针数组的p[0]元素(它本身是一个指针)指向了二维数组

ch的第一行字符串,并使指针数组的p[l]元素指向二维数组ch的第二

行字符串,这样,就使指针数组p和二维数组Ch建立起了一种对应关

系,以后对二维数组ch的某个元素的引用就有两种等价的形式:ch[i]|jl

或p[i][j]o②对二维数组Ch的初始化,使其第一行ch[O]中存入了字符

串“693

12.D程序调试的任务是诊断和改正程序中的错误。

13.C

14.B

15.A

16.C

本题考查了两层for循环。外层循环增量i的值作为内层循环执行次数

的值使用。

17.A

当x为1时,执行easel,a自加等于1,因为case1后没有break,接

着执行case2,此时a的值为2,b自加为1,故选择A选项。

18.A第1次for循环,y的值为9,“y%3”的值为0,满足if条件输出“•

・广即先自减后输出,所以输出8;第2次for循环,y的值为7,“y%3”

的值为1,不满足if条件,不执行printf语句;第3次for循环,y的

值为6,“y%3”的值为Q满足if条件输出即先自减后输出,所以

输出5;第4次for循环,y的值为4,不满足if条件,不执行printf语

句;第5次for循环,y的值为3,满足if条件,输出2;第6次for循

环,y的值为1,不满足if条件,不执行printf语句。故本题答案为A

选项。

19.CC。【解析】对线性表进行顺序查找时,从表中的第一个元素开始,

将给定的值与表中逐个元素的关键字进行比较,直到两者相符,查找到

所要找的元素为止。在最坏情况下,要查找的元素是表的最后一个元素

或查找失败,这两种情况都需要将这个元素与表中的所有元素进行比较,

因此比较次数为no

20.A

link结构体中的next是链表中下一个节点的地址。由于p当前指向节

点A,因此p->next是B的地址。p->next->next是C的地址,访问C

的节点数据成员dt可以使用C的地址访问,即p->next->next->dt,选

项B正确。或者使月解引用“*”运算符:(*p)表示节点A,(*p).next表

示B的地址,*((*p).next)表示节点B,(*((*p).next)).next表示C的地

址,*((*((*p).next)).next)表示节点C,所以C的数据成员dt可以表示

为(*((*(*p).next).next)).dt,因为“『运算符优先级高于“*”运算符,所以

也可以写为(*(*(*p).next).next).dt,选项C正确。同理,也可以既使用

指针运算符,又使用解引用运算符来访问C的节点数据成员出,即

(*(p->next->next)).dt,选项D正确。选项A中,*p表示A节点,

(*p).next表示节点B的地址,由于运算符的优先级高于“*”运算

符,因此先执行即表达式(*可.优*1・>11强1・〉出引用了(2节点的数

据成员dt,然后再执行解引用运算“*",这是错误的。故本题答案为A

选项。

21.

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

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

22.

【解析】由题目中所给表达式可知,表达式的值为m项表达式的和然后

开平方。可以首先通过m次循环求得m项表达式的和,然后将其和开

平方并返回到主函数当中。

23.

温馨提示

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

评论

0/150

提交评论