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

下载本文档

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

文档简介

2023年河南省鹤壁市全国计算机等级考试

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

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

一、2.填空题(10题)

1.数据独立性分为逻辑独立性与物理独立性。当数据的存储结构改变时,

其逻辑结构可以不变,因此,基于逻辑结构的应用程序不必修改,称为

[]o

2.以下程序的功能是求下列算式中A、B、C的值,请填空。

ABC

+ABA

348

#include<stdio.h>

main()

{inta,b,c,k,t=348;

for(a=0;a<10;a++)

for(b=0;b<10;b++)

for(c=0;【];c++)

{k=[];

if(k==t)

printf("A=%dB=%dC=%d\n",a,b,c);

3.【】是数据库设计的核心。

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

#include<stdio.h>

voidswap(int*a,int*b)

{int*t;

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

)

main()

{inti=3,j=5,*p=&i,*q=&j;

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

)

5.软件生命周期可分为多个阶段,一般分为定义阶段、开发阶段和维护

阶段。编码和测试属于【】阶段。

6.以下函数的功能是计算s=l+l/21+l/3!+…+l/n!,请填空。

doublefun(intn)

{doubles=0.0,fac=1.0;

inti,k=l;

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

{[];

fac=fac/k;

s=s+fac;

7.以下程序中,函数SumColumMin的功能是:求出M行N列二维数

组每列元素中的最小值,并计算它们的和值,和值通过形参传回主函数

输出。请填空,

#include<stdio.h>

#defineM2

#defineN4

voidSumColumMin(inta[M][N],int*sum)

{inti,j,k,s=O;

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

k=O;

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

if(a[k][i]>a[j][i])k=j;

s+:【】;

)

[]=s;

}

main()

{intx[M][N]={3,2,5,l,4,l,8,3),s;

SumColumMin([]);

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

)

8.设有以下定义和语句,则*(*(p+2)+l)的值[lo

inta[3][2]={10,20,30,40,50,60},(*p)[2];

P=a;

9.下面的程序可对指定字符串中的字符串进行从大到小排序,请将程序

填完整。(注:程序采用了冒泡排序算法)

#include<stdio.h>

#include<string.h>

main()

{char*str="ABCDabcd",temp;

intn,i;

n=strlen(str);

while(n->1)

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

if(str[i]<str[i+l])

{temp=[];

str[i]=str[i+l];

[]=temp;

)

printf([]);

)

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

main()

{charb[]="Helloyou";

b[5]=0;

printf("%s\n",b);

二、单选题(10题)

11.若有以下的说明和语句,则在执行for语句后,’(*(pt+l)+2)表示的数

组元素是0。intt[3][3],*pt[3],k;for(k=0;k<3;k++)pt[k]=&t[k][O];

A.t[2][0]B.t[2][2]C.t[l][2]D.t[2][l]

12.设已包含头文件<string.h>,下列程序段的运行结果是()。char

sl[]={"ACDEF");chars2[]="ABC";strcpy(sl,s2);printf("%d",strlen(sl));

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

13.有以下程序:

#include<stdio.h>

#defineS(x)x*x/x

main()

{intk=6,j=3;

printf("%d,%d\n”,S(k+j+2),S(j+k+2);

}

程序运行后的输出结果是()O

A.11,11B,29,29C,26,29D.121,121

14.以下不正确的叙述是

A.A.在C程序中,逗号运算符的优先级最低

B.在C程序中,APH和aph是两个不同的变量

C.若a和b类型相同,在计算了赋值表达式a=b后b中的值将放入a中,

而b中的值不变

D.当从键盘输入数据时,对于整型变量只能输入整型数值,对于实型变

量只能输入实型数值

15.若希望下列的程序运行后输出25,程序空白处的正确选项是()。

main()

{inti,j=5O,a[J={7,4,10,5,8);

for()

j+=a[i];

primf("%d,j-40);

A.i=l;i<4;++iB,i=l;i<3;++iC,i=4;i>2;i-D,i=2;i<4;++i

16.排序方法中,将整个无序序列分割成若干小的子序列并分别进行插

入排序的方法,称O

A.希尔排序B.冒泡排序C.插入排序D.选择排序

17.

(14)下列定义变量的语句中错误的是().

A)int_int;B)doubleint_;C)charFor;D)floatUSS:

18.已知一叉树后序遍历序列是dabec,中序遍历序列是debac,它的刖

序遍历序列是()

A.cedbAB.acbeDC.decaBD.deabC

19.printf函数中用到格式符%5s,其中数字5表示输出的字符串占用5列。

如果字符串长度大于5,则输出按方式()。

A.从左起输出该字串,右补空格B.按原字符长从左向右全部输出C.右

对齐输出该字串,左补空格D.输出错误信息

20.下列叙述中正确的是()。

A.在赋值表达式中,赋值号的左边既可以是变量,也可以是任意表达式

B.实型变量中允许存放整型数

C.若a和b类型相同,在执行赋值a=b后,b中的值将放入a中,但b

中的值不变

D.在C程序中,求余算符“%”两边的类型相同时才能进行运算

三、程序设计题(10题)

21.实现字符串拷贝的函数strcpy为()。

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

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

该函数的功能是将s所指字符串中ASCII值为偶数的字符删除,字符串

中剩余字符形成一个新字符串并将其存放在t所指的数组中。

例如,若s所指字符串中的内容为“ABCDEFG123456",其中字符B

的ASCII值为偶数,字符2的ASCII值为偶数,都应当删除,其他依

此类推。最后t所指的字符串中的内容应是“ACEG135”。

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

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

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

试题程序:

#include<stdlib.h>

#include<stdio.h>

#include<string.h>

#include<conio.h>

voidfun(char*s,chart[])

(

)

voidmain()

chars[100],t[100];

system,,CLS,,);

printf("\nPleaseenterstrings:");

scanf("%s",s);

fun(s,t);

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

23.请编写函数proc(),对长度为9个字符的字符串,除首、尾字符外,

将其余7个字符按ASCII码值降序排列。例如,原来的字符串为

HabcdefA,则排序后输出为HfedcbaAo注意:部分源程序给出如下。

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

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

£includeVari%.

第includeVMdbbub>

修laclutWVAidio.

aiticlmirh>

*mdudr<como.h>

voidptoc<char•m»ifun«mJ

voidiwainC)

duir

•yuteoiC*CLS*)t

prin市•■人9个字符的字找$Jh

proc(t»9)t

pnntR

24.有N个学生,每个学生的信息包括学号、性别、姓名、四门课的成

绩,从键盘上输入N个学生的信息,要求输出总平均成绩最高的学生信

息,包括学号、性别、姓名和平均成绩。

25.

请编写一个函数intproc(int*s,intt,int*k),用来求出数组的最小元素

在数组中的下标并存放在k所指的存储单元中。例如,输入如下整数:

27393445362489342111831527246则输出结果为4,89O注意:部

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

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

£mclvdrVadbh

=MKludr

9includr<Ndio.

midproHi.i•t*int•

eMfiMiitiC)

mi273,934.4S3・624・N・342.111

M.527.246).ln

>yw(etn("CLS")।

proc<<rr«IO・6-k)t

pnni(<%d\ti"•ktirr(lL]>i

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

结构体数组S中,请编写函数proc(),它的功能是:把分数最高的学生

数据放在h所指的数组中。注意:分数最高的学生可能不止一个,函

数返回分数最高学生的人数。

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

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

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

试题程序:

0MirlmlrV.3

UdrfinrMIS

lypecir,Mfur

ctuiftimnTi

mi*j

STREC,

mtprocCSTRGl'••«STREC■b)

voedmatn(>

STREl'3HM:・(<・GA0O$・.aS)J・GADO3,“)・

I>GAW・,9>•<-GA004"・85)・<*GA001M«9l1.

I"GAOO?v•T21•(aGA(XXa,541«rGA0<X*»S7|・

(PAOIS*・B5).("GAOir*・9lI・CGAOU-.Ml«

CGAOI4mliGA01r・6S)・<・GAObM・

LGAW・84)•《"GAO"J2)h

STRECb[M]s

Mil■,Bt

■・prucX*iu»h>i

prmtf(*TheXdhigkrsi•cor*八nJn),

for(imOiYaui++)

pnntf(aK*X4d\nB>*

〃■楙■!!分,生的学号W

pnntf(*\n>>i

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

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

其功能是根据以下公式求兀的值(要求精度0.0005,即某项小于0.0005

时停止迭代)O

ITA1X2,1x2x31x2x3x4

233x53x5x73x5x7x9

1x2xxn

3x5x…x(2几+1)

程序运行后,若输入精度0.0005,则程序应输出为3.140578。

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

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

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

试题程序:

#include<stdio.h>

#include<conio.h>

#include<math.h>

doublefun(doubleeps)

(

)

voidmain()

(

doublex;

printf('Inputeps:");

scanf("%lf',&x);

u,,

printf(\neps=%lf,PI=%lf\n5x,fun(x));

)

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

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

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

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

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

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

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

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

试题程序:

0mclu3fVihnw.h>

kncludrV»t<Uib,h>

9mciude<C*t<bo.h>

voidprocXiatarr[J*tiMn*iai•max*mt•d>

void)

mtLan{20^•ma*»indea*•*IO|

*rand<(uMgned)(ime(NULDli

+)

arr[i]arandt>MSOt

pnntlC-K4d*)i

,・设一个■机■小

pricitf<*\n*)i

prod,rr・0.&max・&index)B

pruitheMax«KSd.lndex^H4d\n"(max«index)।

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

回此值。

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

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

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

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

Minrludr<Mtdio.h>

^include<string.ii>

UdefineM81

intfun(rhar•M.charc)

main()

|churMI.ch;

voidNONO();

printf(**\nPl«B»eenterastring:°);grts(n);

printf(**\nPleaseenterachar:");ch=grlchar();

printf(**\nThenumberoflh<?chnris:%d\nH.fun(9・ch));

NONO():

voidNONO()

|/«本函数用于打开文件.输入测试数据.利用fun函数.检出数据.关闭文件。•/

inti;

FILE*if,•M1

char.(Mj.b(M],rh;

rf工fbprn(**in.<lat*'rH);

wf=fopcn("out.dal"w");

fbr(is0;i<10•i♦4-)|

GcAnf(rf.M%«**.a);

f»canf(rf,M%sM,b);

ch=*b;

fpnntf(wf.M%c=%d\n*.ch.fun(n,ch));

fc!<»e(ff)j

fcl(»e(wf);

30.编写函数fun(),其功能是:实现两个字符串的连接(不要使用库函

数strcat),即把p2所指的字符串连接到pl所指的字符串的后面。例

如,分别输入下面两个字符串:“FirstString——”“SecondString”程序

输出:“FirstString-.SecondString”注意:部分源程序给出如下。请

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

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

#includeVsldlib.h>

4includeVntdio.h>

#includeVconio.h>

voidfun(charpl[].charp2[])

voidmain()

chars2[4O]i

printfC"Enteraods2i\n*>i

*canf("%5%»"•si.s2)i

primf("si=%s\nM•si)।

primfC=%x\nw•*2)i

printf("Invokefun(si•s2)j\n**)t

fun(sl«»2>i

printf(**Afterinvoking:\nM):

print""%s\n"•M1):

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

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

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

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

试题程序:

#include<stdio.h>

doublefun(intn)

doubleresult=L0;

whil(n>l&&n<170)

/**************foun

result*=—n;

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

return;

main()

{int.n;

clrscr();

printf("Enteraninteger:");

scanf("%dt&n);

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

32.给定程序M0D11.C中函数fun的功能是:先将s所指字符串中的

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

接到t所指串的后面。

例如:当s所指的字符串为:“ABCDE”时,则t所指的字符串应为:

“EDCBAABCDE”。

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

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

*include<stdio.h>

2♦include<string.h>

3voidfun(char*srchar*t)

4(

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

6int1;

7si«strlen(s);

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

9/…………"und…………/

10t[i]•s(sl-i];

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

12t■s[i];

13t[2*sl]-^O1;

14)

15main()

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

17printf("\nPleaseenterstring

Mw

s:);scanf(%s°rs);

18fun(srt);

19printf("Theresultis:tsXn",t);

20

33.下列给定程序中,函数fun()的功能是:根据整型形参n,计算如下

公式的值。

Al=l,A2=l/(5+Al),A3=l/(5+A2),An=l/(5+A(n-l))

例如,若n=10,则应输出0.192582。

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

floatfun(intn)

intA=1;

inti;

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

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

A=1.0/(5+A);

returnA;

main()

intn;

clrscr();

printf("\nPleaseentern:");

scanf("%d",&n);

printf("A%d=%lf\n”,n,fun(n));

34.给定程序M0D11.C中函数fun的功能是:应用递归算法求形参a

的平方根。求平方根的迭代公式如下:

xl=—(x0+—)

2xO

例如,a为2时,平方根值为:1.414214O

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

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

1#include<stdio.h>

2#include<math.h>

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

4doublefun(doublea,dounlexO)

5{doublexlry;

6xl«(x0>a/xO)/2.0;

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

8if(fabs(xl-xo)>0.00001)

9y=fun(a,xl);

10elsey-xl;

11returny;

12}

13main()

14{doublex;

15printf("Enterx:*);scanf

16printf("Thesquarerootof%lf

w

is%lf\nrxrfun(xr1.0));

17

35.下列给定程序中,函数fun()的功能是:求整数x的y次方的低3位

值。例如,整数5的6次方为15625,此值的低3位值为6250

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

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

试题程序:

#include<stdio.h>

longfun(intx,inty,long*p)

{inti;

longt=l;

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

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

t=t*x;

*p=t;

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

t=t/1000;

returnt;

main()

{longt,r;intx,y;

printf("\nlnputxandy:");scanf

("%ld%ld",&x,&y);

t=fun(x,y,&r);

printf("\n\nx=%d,y=%d,r=%ld,last=

%ld\n\n",x,y,r,t);

36.给定程序M0D11.C中函数fun的功能是:求整数x的y次方的低

3位值。例如,整数5的6次方为15625,此值的低3位值为625。

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

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

;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

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

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

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

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

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

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

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

试题程序:

#include<string.h>

#include<stdio.h>

#defineN80

voidinsert(char*aa)

(

inti,j,n;charch;

n=strlen(aa);

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

(

ch=aa[i];

j=i-l;

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

while((j>=0)||(ch>aa[j]))

(

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

j-/

aa[j]=ch;

main()

(

chara[N]="JRTYDFKLIOPQWEGHMNBVCUASXZ";

inti;

printf("Theoriginalstring:%S\n",a);

insert(a);

printf("Thestringaftersorting:%S\n\n",a);

)

38.下列给定程序中,函数fun()的功能是计算并输出high以内的素数

之和。high由主函数传给fun()函数。

例如:若high的值为100,则函数的返回值为1060o

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

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

[试题源程序]

#include<conio.h>

#include<stdio.h>

#include<math.h>

intfun(inthigh)

(

intsum=0,n=0,j,yes;

while(high>=2)

(

yes=l;

for(j=2;j<=high/2;j++)

ifhigh%j==O

yes=O;

break;

if(yes==O)

('

sum+=high;

n++;

)

high-;

}

returnsum;

)

main()

(

clrscr();

printf("%d\n",fun(lOO));

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

的数依次取出,构成一个新数放在冲。高位仍在高位,低位仍在低位。

例如当s中的数为87653142时,t中的数为753lo

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

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

试题程序:

#include<stdio.h>

#include<conlo.h>

voidfun(longs,long*t)

{intd;

longsl=l;

t=0;

while(s>0)

{d=s%10;

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

if(d%2==0)

{*t=d*sl+*t;

sl*=10;

}

s/=10;

)

)

main()

{longs,t;

clrscr();

printf("\nPleaseenters:");scanf("%ld",&s);

fun(s,&t);

printf("Theresultis:%ld\n",t);

)

40.给定程序MOD11.C中函数fun的功能是:从n(形参)个学生的成绩

中统计出低于平均分的学生人数,此人数由函数值返回,平均分存放在

形参aver所指的存储单元中。

例如,若输入8名学生的成绩:80.5607290.59851.58864则低于

平均分的学生人数为:4(平均分为:75.5625)。

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

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

1♦include<stdio.h>

2tdefineN20

3intfun(float*srintn,float

*aver)

4(floatave#t»0.0;

5intcount»0rk/i;

6for(k-0;k<n;k++)

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

8t=s[k];

9ave«t/n;

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

11if(s[i]<ave)countf+;

12/found

13*aver=Ave;

14returncount;

15}

16main()

17{floats[30]raver;

18intm,i;

19printf(H\nPleaseenterm:

scanf&m);

20printf("\nPleaseenter%dmark:

\n",m);

21for(i=0;i<m;i++)scanf

HR

(%frs+i);

22printf(R\nThenumberofstudents:

w

%d\nrfun(s,m,&aver));

wM

23printf(Ave«%f\nraver);

24

五、程序改错题(2题)

41.下列给定程序中,函数proc的功能是根据整型形参n,计算如下公式

的值:

Y=l-1/(22)+1/(33)-1/(44)+...+(-l)(n+l)/(nn)

例如,n中的值为10,则应输出0.817962O

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

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

试题程序:

#include<stdlib.h>

#include<conio.h>

#include<stdiOh>

doubleproc(intn)

(

doubley=l.0;

〃****jpQund****

intJ=l;.

inti;

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

(

j二_]*j•II****found****

y+=l/(i*i);

)

return(y);

)

voidmain

(

intn=10:

system("CLS"):

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

42.

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

6个能被7或11整除的自然数之和。m的值由主函数传人。例如,若m

的值为600,则函数的值为3515。请修改程序中的错误,使它能得到

正确结果。注意:不要改动main()函数,不得增行或删行,也不得

更改程序的结构。试题程序:

gtndudeVadbK

#mcludr

Hmcludr!*>

mtproHmik)

//•••♦found••••

while(■[)&&<«(BC<6)

//••••found••••

//••••(ouni••••

IBWhi

IBr++|

k--i

rvtwrvimi

voidnuitnC)

*ywtem(*CLS*)।

prifitfca«pfoc(S00)>>

六、操作题(2题)

43.下列程序利用指针将2个数按从大到小的顺序输出o

main()

{inta,b,[];

printf("inputa,b:");

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

[];

p2=&b;

if(a<b)

{P=pl;

pl=p2;

P2=P;

)

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

printf("max=%dmin=%d\n",【]);

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

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

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

例如,若学生的成绩是85.5,76,69.5,85,91,72,64.5,87.5,则

他的平均分应当是78.875。

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

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

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

试题程序:

#include<stdio.h>

#defineN8

typedefstruct

{charnum[10];

doubles[N];

doubleave;

}STREC;

voidfun()

main()

(

STRECs={"GA005",85.5,76,69.5,85,91,72,64.5,87.5);

inti;

fun(&s);

printf("The%s'sstudentdata:\n",s.num)//*输出学号*/

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

printf("%4.1An",s.s[i]);

/*输出各科成绩*/

printf("\nave=%7.3f\n",s.ave);

/*输出平均分*/

参考答案

1.物理独立性物理独立性解析数据独立性分为逻辑独立性与物理独立

性。当数据的存储结构改变时,其逻辑结构可以不变,因此,基于逻辑

结构的应用程序不必修改,称为物理独立性。

2.c<10或c<=9(a*100+b*10+c)+(a*100+b*10+a)c<10或c<

=9\r\n(a*100+b*10+c)+(a*100+b*10+a)解析:本题使用穷举法,用一个

3重循环穷举A、B、C可以组合成的所有三位数,对每种情况来判断是

否满足题目要求,满足则输出3个值。因为A、B、C分别代表一位数,

所以C的取值范围是0~9,故第一空应该填C<10或c<=9。根据下面

输出的判断条件k==t可知,k应该为每种情况下ABC+ABA的值,故

应该填写(a*100+b*10+c)+(a*100+b*10+a)或者其他等价表达式。

3.数据模型数据模型

4.3535解析:函数swap(int*a,int*b)的功能是实现*a和*b中两个数

据的交换,在主函数中调用swap(p,q)后,形参指针变量a和b分别指

向i和j,在swap(int*a,int*b)执行完后,指针变量a和b分别指向j

和i,而指针变量P,q所指向变量的值没有发生变化,所以输出结果为

35O

5.开发开发解析:软件生命周期(SDLC,软件生存周期)是软件的产生

直到报废的生命周期,周期内有问题定义、可行性分析、总体描述、系

统设计、编码、调试和测试、验收与运行、维护升级到废弃等阶段,其

中的编码和测试属于开发阶段。

6.k=k*ik=k*i解析:本题中遗过for循环求s表达式中每一项的和,表

达式“fac=fac/k;”求的是每一项的值,所以k的值应为n!,在求n!的时

候,可以用上次循环阶乘的值乘i,就可以直接得此次n!,故本题填k=k*io

7.a[k][i]*sumx&sa[k][i]\r\n*sum\r\nx,&s解析:程序段for(j=lj<M;j++)

if(a[k][i]>a[j][i]))k=j;是找出第i列的最小值,第一处应该是每列最小

值累加,所以填a[k][i];和值要通过形参传回主函数,第二处应该填

*sum;根据形参可以确定第三处应该填x,&so

8.6060解析:*(*(p+2解1)相当于访问的是的值。*(p[2]+l)、p⑵[1]

以及(*(p+2))[l]表达的含义都是a⑵[1]的值。

9.str[i]str[i+l]"%s"strstr[i]\r\nstr[i+l]\r\n'%s',str解析:本题要求将字符串

str中的字符用冒泡排序算法从大到小排列,其实现过程是将相邻两个

字符进行比较,如果当前字符小于下一个字符,则通过中间变量temp将

字符两两交换,所以第一空应填:str[i],第二空应填:str[i+l]o最终打

印输出得到的字符串str,所以第三空应填:%s;str。

lO.HelloHello解析:执行b[5]=0;是给数组的第6个元素赋值为0,即

将Hello后的空格变为0。当输出字符串时遇到0终止输出。

11.C

从for循环可知pt是指向行的首地址的指针变量,因此由指针的表示

方法可知:*(*(pt+l)+2)=pt[l][2]=t[l][2]0

12.A解析:头文件<string.h>是字符串处理函数对应的头文件,要想调

用C语言的库函数时,都要在程序中嵌入该函数对应的头文件,否则无

法使用库函数。

strcpy(sl,s2)把s2中的字符串复制到si中,所以结果就为s2的长度。

13.B#define命令是C语言中的一个宏定义命令,为了区分其他标识符,

标识符一般使用大写。将标识符定义为一个字符串,该标识符被称为宏

名,被定义的字符串称为替换文本。宏定义不进行其他操作,仅仅只是

替换标识符。题目中的S(k+j+2)=k+j+2*k+j+2/k+j+2”,经计算可得29。

“S(j+k+2)=j+k+2*k+j+24+k+2”,经计算可得29。因此输出为29,29。故

本题答案为B选项。

14.D解析:在C语言所有的运算符中,逗号运算符的优先级最低。C

语言中区分大小写,所以APH和aph是两个不同的变量。赋值表达式

a=b表示将b的值付给a,而b本身的值保持不变;通过键盘可以向计

算机输入允许的任何类型的数据。选项D)中当从键盘输入数据时,对于

整型变量可以输入整型数值和字符,对于实型变量可以输入实型数值和

整型数值等。

15.D解析:要想使程序输出是25,则j-40=25,j=65,而j初值是50,

所以填入for循环中的语句,使引用的数组元素累加为65-50=15即可。

16.A解析:希尔排序法的基本思想是:将整个无序列分割成若干小的子

序列分别进行插入排序。

17.D

18.A

19.B

20.D

选项A,在赋值表达式中,赋值号的左边只能是变量或者是代表某个

存储单元的表达式,不能是任意表达式,右边也不得出现表达式;选

项8中,整型变量中只能存放整型数,但实型变量中能存放实型数,

也能存放整型数;选项C,表达式a=b的意思是把变量b的值赋给变

量a,从而覆盖a中原来值;选项D,要求取余运算符"%"两边的类型

均为整型。

21.

voidstrcpy(char*s,char*t)/*copyttos*/,

{while((*sH=*t++)!=,\0,))|

}

22.voidfun(char*s,chart[])

inti=0;

for(;*s!=,\(F;s++)/*找出ASCII值为奇数的字符依次存入数组t

中*/

if(*s%2==l)

t[i++]=*s;

t[i]=c\O,;/*在字符串的末尾加上字符串结束标志*/

)

本题要求将s所指字符串中ASCII值为偶数的字符删除,因此本题要求

采用一个for循环来找出ASCII值为奇数的字符,将其依次存入数组t

中,并使用if条件语句来判断s所指字符串中ASCII值是否为奇数。将

'\\0'加在字符串的末尾来表示字符串的结束。要删除ASCII值为偶数的

字符,也就是要留下ASCII值为奇数的字符。由于最终要求出剩余字符

(即ASCII值为奇数)形成的新字符串,因此本题程序的算法是对原字符

串从头到尾扫描,找出ASCII值为奇数的字符,并将其依次存入数组t

中。此外,还要注意数组t的下标变化和下标的初值(初值必须为0,即

i=0),t[i++]的作用是先使用t[i],然后再使i自增1。

23.

【解析】按照题目中要求,求除首、尾字符外,将其余7个字符按ASCII

码值降序排列。首先需要判断除首、尾字符之外,其余7个字符ASCII

码值的大小,将不符合顺序要求的字符互换。

24.\n#include'stdio.h'

\n#defineN3

\nstructstudent

\n{longstu_num;charsex;

\ncharname[15];intscore[4];

\nfloataverage;};

\nmain

\n{inti,j,index;floatsum,max;

\nstructstudentstuarr[N];

\nfor(I=0;I{printf('pleaseinput%dstudentinformation:\\n',I+l);

\nscanf('%ld,%c,%s',&stuarr[I].stu_num,&stuarr[I].sex,stuarr[I].name);

\nfor(j=0;j<4;j++)

\nscanf('%d',&stuarr[I].score。]);}

\nfor(I=0;I{sum=0.0;

\nfor(j=0;j<4;j++)

\nsum+=stuarr[I].score[j];

\nstuarr[I].average=sum/4.0;}

\nmax=stuarr[0].average;

\nindex=0;

\nfor(I=1;Iif(stuarr[I].average>max)

\n{max=stuarr[I].average;

\nindex=I;}

\nprintf('总平均成绩最高的学生信息是学号=%ld,性别=%c,姓名=%s,平

均成绩

=%4.1f\\n',stuarr[index].stu_num,stuarr[index].sex,stuarr[index].nam

e,stuarr[index].average);

\n}\n

25.

【解析】要求出数组中最小的数,需要比较数组中的每一个元素。将最

小的元素的下标存放在变量k中,通过形参返回到主函数中。

26.

mt^*TR6C••・StBEL'•

i*tmax••。分数

(oK•mOit^Mn'^-+>

«!•nwii-a[it)m*lmil*,-•>IC5tB0ftH

♦£♦■・&||修布的鼠■中

lofiM.i♦♦)

mat—,4<i分数■局

的今牛”■不止一个

Ftiunijd

【解析】要得到分数最高的学生数据,首先应检查每一个学生的数

据,得到学生的最高成绩。成绩最高的学生不止一个,将每一个学生

的成绩与最高成绩相比较,得出最高成绩学生的个数,将成绩最高的

学生记录放在指定数组中通过形参返回。成绩最高的学生个数由函数

值返回给主函数。

27.doublefun(doubleeps)

(

doubles=0.0,sl=1.0;

intn=l;

while(sl>=eps)/*当某项大于精度要求时,继续求下一项*/

{s=s+sl;/*求和*/

sl=sl*n/(2*n+l);

/*求多项式的每一项*/

n++;

)

return2*s;

)

该题考核的是通过迭代法求给定多项式的值。迭代法是让计算机对一组

指令(或一定步骤)进行重复执行,在每次执行这组指令(或这些步骤)时,

都从变量的原值推出它的一个新值。需要注意变量的数据类型和赋初值

操作。

定义double类型变量s,并为其赋初值,用来存放多项式的某一项和

最后的总和。从第2项开始,以后的每一项都是其前面一项乘以

n/(2*n+l)o程序用si来表示每一项,用s表示求和后的结果。需注意

变量si和s的初值都为1.0,因为循环变量从第2项开始累加。

28.

niidproc<mtanf'«n»mt•山1•dl

inti>

•//max

•d-Otd■山箕■太的值斯均应的下怀

loe(i-0,y!>—♦♦)

if<•anVarr£ij)

•cDax*arrii]i•<|・”)

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

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

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

量do

29.

【考点分析】

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

是否结束。

【解题思路】

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

历字符串,循环条件为字符串没有结束,即当前字符不是、(F,判断

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

30.

【解析】本题考查字符串连接函数的实现。本题通过两个for循环完成

功能。第一个循环的作用是计算出字符串的长度,如果pl是’\0'(即

此字符是字串尾),退出循环,i中保存的数值即是字串长度。第二个循

环的作用是循环遍历字串p2的字符,利用语句“pl[i++]=p2[JL•”将p2中

的字符逐个插到字串pl后。

31.(1)错误:result*=-n;正确:result*=n-;⑵错误:return;正确:

returnresult;(1)错误:result*=-n;正确:result*=n-;\r\n(2)错误:retum;

正确:returnresult;解析:该题采用循环语句计算n的阶乘。当n大于

1且小于170时,令result与n相乘,同时n自动减1,循环至n=2(n=l

时无需相乘):注意:。和1的阶乘都等于1,可用条件语句和循环语句

实现上述功能。

32.(l)intisl;(2)t[i]=sx[sl-i-1];(l)inti,si;(2)t[i]=s.[sl-i-1];解析:

本题中函数的功能是先将字符串s中的字符按逆序存放到t串中,然后

把s中的字符按正序连接到t串的后面。解题思路是首先对字符串进行

逆序存放,然后再把字符串正序连接在串后。

33.⑴错误:intA=1;正确:floatA=1(2)错误:for(i=l;i<=n;i++)正

确:for(i=2;i<=n;i++)⑴错误:intA=1;正确:floatA=l\r\n(2)错误:

for(i=l;i<=n;i++)正确:for(i=2;i<=n;i++)解析:错误1:A为实

型数,应定义为float类型。错误2:由题意,AI=1,从A2开始,

An=l/(5+A(n-l)),所以循环应从2开始。

34.(l)doublefun(doubleadoublex0)(2)if(fabs(xl-x0)>0.0

0001)(l)doublefun(doublea,doublex0)(2)if(fabs(xl-x0)>0.00001)

解析:⑴主函数中“fiin(x,1.0)”,x是double型变量,1.0是浮点数,

可知fun有两个double型参数,而第一标识下“dounle"不是C语言关键

字,所以应将“doublefun(doublea,dounlex0)"改为"doublefun(double

a,doublex0)”。

(2)第二个标识下的if语句是判断进行递归运算的条件,第二标识下变

量x0没有定义,根据题意,这里是判断xl和x0的差值的绝对值是否

比0.00001

温馨提示

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

评论

0/150

提交评论