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

下载本文档

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

文档简介

2022年河南省开封市全国计算机等级考试

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

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

一、2.填空题(10题)

1.下列程序的输出结果是______O

main()

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

int*pl=&a,*p2=&b,*p;

*(p=&c)=*p1*(*p2);

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

}

2.现有两个C程序文件T18.C和myfun.c同在TC系统目录(文件夹)下,

其中T18.C文件如下:

#include<stdio.h>

#include"myfun.c"

main()

{fun();printf("\n");}

myfun.c文件如下:

voidfun()

{chars[80],c;intn=0;

while((c=getchar())!=\n')s[n++]=c;

n--;

while(n>=0)printf("%c",s[n--]);

)

当编译连接通过后,运行程序T18时,输入Thank!,则输出结果是【】。

3.\13,在内存中占1个字节,”\12"在内存中占____个字节。

4.数据的逻辑结构在计算机存储空间中的存放形式称为数据的【】。

5.没有chara,b;,,若要通过a&b运算屏蔽掉a中的其他位,只保留第2

位和第8位(右起为第1位),则b的二进制是【】。

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

#include<stdio.h>

main()

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

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

while(i++<4)

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

j=0;

do{s+=a[i][j];j++;}while(j<4);

)

pdnff("%d'\n",s);

)

7.在软件测试中,动态测试和静态测试手段只能发现程序中的错误,而

不能证明程序中不存在错误,只有【】证明才有可能证明程序的正确

性。

8.以下程序的运行结果是【】°

#include<stdio.h>

#defineMAX(a,b)(a>b?a:b)+l

main()

{inti=6,j=8,k;

printf("%d\n",MAX(i,j));

)

9.与结构化需求分析方法相对应的是【】方法。

10.以下程序的功能是调用函数fun计算:m=l-2+3-4+…+9-10,并输出

结果。请填空。

intfun(intn)

{int

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

m+=i*f;

f=[1;

returnm;

)

main()

{printf("m=%d\n",[]);}

二、单选题(10题)

11.判定一个顺序栈st(最多元素为MaxSize)为空的条件是()。

A.st->top!B.st->top!C.top==-1D.top==MaxSize

12.若某二叉树的前序遍历访问顺序是abdgcefh,中序遍历访问顺序是

dgbaechf,则其后序遍历的结点访问顺序是()。

A.bdgcefhaB.gdbecfhaC.bdgaechfD.gdbehfca

13.在以下的叙述中,正确的是()。

A.线性表的顺序存储结构优于链表存储结构

B.二维数组是其数据元素为线性表的线性表

C.栈的操作方式是先进先出

D.队列的操作方式是先进后出

14.若要求从键盘读入含有空格字符的字符串,应该使用函数o

A.getc()B.gets()C.getchar()D.scanf()

15.在单链表中,增加头结点的目的是____o

A.方便运算的实现B.使单链表至少有一个结点C.标识表结点中首结

点的位置D.说明单链表是线性表的链式存储实现

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

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

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

C.数据库设计是指在已有数据库管理系统的基础上建立数据库

D.数据库系统需要操作系统的支持

17.已知一个有序表为(15,19,30,33,49,50,65,88,93,126,164),当二分查找值

为126的元素时,检索成功需进行的比较次数为()。

A.1次B.2次C.3次D.4次

18.有以下程序:

#include<stdio.h>

main()

{chara=H;

a=(a>=Aa<=2)?(a-A+a):a;

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

}

程序运行后的输出结果是()oA.AB.aC.HD.h

19.设有以下函数f(inta){intb=0;staticintc=3;b++;

C++;retum(a+b+c);)如果在下面的程序中调用该函数,则输出

结果是______omain(){inta=2,i;for(i=0;i<3;

i++)printf("%d\n"f(a));}

A.789B.7911C.71013D.777

20.以下叙述中正确的是____o

A.C语言比其他语言高级

B.C语言可以刁;用编译就能被计算机识别执行

C.C语言以接近英语国家的自然语言和数学语言作为语言的表达形式

D.C语言出现的最晚,具有其他语言的一切优点

三、程序设计题(10题)

21.请编写函数proc(),其功能是:计算并输出下列多项式的值。

S=l+1/(1+2)+1/(1+2+3)+...+1/(l+2+3+...+m)

例如,若主函数从键盘给m输入20后,则输出为s=l.904762c

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

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

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

试题程序:

「includeVsudio.h〉

doubleproc(intm)

(

}

voidmain()

(

intms

doublest

prinl«"\nlnputm:")i

scan"・&m)i

proc(m)।

printfC"XnXn5,--%f\n\n*•«)i

\

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

案的项目中包含一个源程序文件progLc。在此程序中,规定输入的字符

串中只包含字母和*号。编写函数fun(),其功能是除了字符串前导和尾

部的*号外,将字符串中其他的*号全部删除。形参h指向字符串中第一

个字母,形参P指向字符串中最后一个字母。在编写函数时,不得使用

C语言提供的字符串函数。

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

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

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

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

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

试题程序:

#include<stdio.h>

#include<conio.h>

#include<string.h>

voidfun(char*a,char*h,char*p)

{

)

main()

{

chars[81],*t,*f;

printf("Enterastring:\n");

gets(s);

t=f=s;

while(*t)

t++;

t—;

while(*t=='*')

t—;

while(*仁=>*,)

f++;

fun(s,f,t);

printf("Thestringafterdeleted:\n^^);

puts(s);

)

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

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

其功能是根据以下公式计算S,并将计算结果作为函数值返回,通过形

参传入。

5=1+-?—+--?—+...+---------[

1+21+2+31+2+3+・・・十几

例如,若n的值为11时,函数的值为1.833333。

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

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

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

试题程序:

#include<stdlib.h>

#include<conio.h>

#include<stdio.h>

#include<string.h>

floatfun(intn)

voidmain()

(

intn;

floats;

system("CLS”);

printffAnPleaseenterN:");

scanf("%d”,&n);

s=fun(n);

printff'Theresultis:%f\n”,s);

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

案的项目中包含一个源程序文件progl.c。在此程序中,已知学生的记

录由学号和学习成绩构成,N名学生的数据已存入a结构体数组中。

请编写函数fun(),该函数的功能是找出成绩最低的学生记录,通过形

参将其返回主函数(规定只有一个最低分)。已给出函数的首部,请完成

该函数。

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

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

试题程序:

1#include<stdio.h>

2#include<string.h>

3#include<conio.h>

4#include<stdlib.h>

5#defineN10

6typedefstructss

7{charnum[10];

8ints;

9}STU;

10fun(STUa[],STU*s)

H(

12

13)

14voidmain()

15{

16FILE*wf;

17STUa[N]={{"A01",81},{"A02",89},{"A03",66},{"A04",87},{"

A05",77},{"A06",90},{"A07",79},

{"A08",61},{"A09",80},{"A10",71}),m

18inti;

19system("CLS");

20printf("*****Theoriginaldata*****\n");

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

22printf("No=%sMark=%d\n",a[i],num,a[i].s);

23fun(a,&m);

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

25printf("Thelowest:%s,%d\n",m.num,m.s);

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

28fprintf(wf,"%s,%d",m.num,m.s);

29fclose(wf);

25.请编写函数proc,其功能是将两个两位数的正整数a、b合并形成一

个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数

个位和十位上,b数的十位和个位数依次放在c数的百位和千位上。例

如,当a=25,b=43,实际输入时个数之间以Enter键分隔,调用该函数

后,c=3452。注意:部分源程序给出如下。请勿改动main()函数和

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

干语句。试题程序:

9mcludr<Mdio.b>

voidproe<b.long•c>

voidtwain(>

ml

IOMJ

>y«tctn(aCLS*)i

pnntf(*Input

proc(a«b«6-c>s

pnntf(*TbcEuhIB>Kld\n*»c)«

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

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

数fun(),用来求出数组中值最大的元素在数组中的下标并将其存放在

k所指向的存储单元中。

例如,输入如下整数:

876675896101301401980431451777则输出结果为6,980。

注意:部分源程序在文件progl.c中。

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

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

1#include<conio.h>

2linclude<stdio.h>

3#include<stdlib.h>

4intfun(int♦s,intt,int♦k)

5{

6

7}

8voidmain()

9{

10FILE*wf;

Ilinta[10]={876,675,896,101,

301,401,980,431*51,777},k;

12system(MCLSM);

13fun(a,10,&k);

14printf(M%d,%d\n",k,a[k]);

15/

16wf=fopen("out"w");

.17fprintf(wf,”%d,%d",k,a[k]);

18fclose(wf);

19/*****************/

20}

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

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

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

23」

S=1+…+红

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

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

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

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

1#include<conio・h>

2tinclude<stdio.h>

3linclude<math.h>

4finclude<stdlib.h>

5doublefun(doublex,intn)

61

7

i}

9voidmain()

10{

11FILE♦wf;

12system(MCLSW);

w

13printf(%ffun(0.3r10));

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

15wfhfopen("out・dat","w");

16fprintf(wffun(0.3,10));

17fclose(wf);

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

19)

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

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

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

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

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

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

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

fun(),其功能是统计s所指字符串中的数字字符个数,并将其作为函

数值返回。例如,s所指字符串中的内容是

2def35adh253kjsdf7/kj8655x,函数fun()返回值为11注意:部分源程序在

文件progl.c中。请勿改动主函数main。和其他函数中的任何内容,仅在

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

#include<stdio.h>

2voidNONO();

3intfun(char*s)

鬻(

5

6)

7main()

8{char*s»M2def35adh253kjsdf

7/kj8655xM;

9printf(•,%s\n*\s);

M,,

10printf(%d\n/fun(s));

11NONO();

12)

13voidNONO()

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

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

15FILE*fp,♦wf;

16inti;

17chars[256];

nHnn

18fp=fopen(in.datrr);

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

20for(i-0;i<10;i++){

21fgets(s,255,fp);

22fprintf(wf,"%d\n",fun(s));

23)

24fclose(fp);

25fclose(wf);

26

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

31.给定程序中函数fun的功能是:根据整型形参m,计算如下公式的

值。

例如,若m中的值为5,则应输出:1.463611。

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

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

[试题源程序]

#include<stdiO.h>

doublefun(intm)

(

doubley=1.0;

inti;

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

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

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

y+=l/(i*i);

return(y);

)一

main()

(

intn=5;

printf("\nTheresultis%1f\n",fun(n));

)

32.给定程序M0D11C中函数fun的功能是输出M行M列整数方阵,

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

#inClude<coMo.h>

#inClude<stdio.h>

#dehneM5

/************fOUnd************/

intfun(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++)

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

printf("%f',xx[i][j]);

printf("\n");

)

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

sum+=xx[i][i]+XX[i][[n-i-l];

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("\nThesumOfallelementsOn2diagnalsis%d."fun(M,aa));

33.下列给定程序中,函数fun()的功能是:用递归算法计算斐波拉契级

数列中第n项的值。从第一项起,斐波'拉契级数序列为1,1,2,3,

5,8,13.21...........例如,若给n输入7,

该项的斐波拉契级数值为13。

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

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

试题程序:

#include<stdio.h>

longfun(intg)

{..........‘...............................................

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

switch(g);

{case0:return0;

switch(g)

case1;case2:return1;

)

return(fun(g-1)+fun(g-2));

)

main()

(

longfib;intn;

printf("Inputn:");scanf("%d",&n);

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

fib=fun(n);

printf("fib=%d\D\n",fib);

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

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

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

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

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

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

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

1linclude<stdio.h>

2fdefineN20

3intfun(float*srintn,float

*aver)

(floatavert-0.0;

5intcount=0,k,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)count++;

12/……•……found…………•/

13*aver»Ave;

14returncount;

15)

16main()

17{floats[30]9aver;

18intm,i;

19printf(H\nPleaseenterm:w);

scanf&m);

20printf(H\nPleaseenter%dmark:

\n”,m);

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

Mw

(%frs+i);

22printf(R\nThentimberofstudents:

w

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

23printf("Ave«%f\n”,aver);

24}

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

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

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

的输出结果应为96.000000。

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

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

试题程序:

#include<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;

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

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

(

S=S0+Sl+s2;

Sum+=s;

S0=sl;

Sl=s2;

S2=S;

returnsum;

)

main()

(

intn;

clrscr();

printf("InputN=");

scanf("%d",&n);

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

)

36.下列给定函数中,函数fun()的功能是:统计字符串中各元音字母(即

A,E,I,O,U)的个数。注意:字母不分大小写。例如,输入THISis

aboot,则应输出是10220。

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

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

fun(char*s,intnum(51)

{intk,i=5;

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

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

num[i]=0;

for{;*s;s++)

{i=-l;

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

switch(s)

{case'a':case'A':{i=0;break;}

case'e':case'E':{i=l;break;}

case'i':caseT:{i=2;break;}

case'o':case'O':{i=3;break;}

case'u':case'U':{i=4;break;}

)

if(i>=0)

num[i]++;

)

)

main()

{charsl[81];intnuml[5],i;

clrscr();

printf("\nPleaseenterastring:");

gets(si);

fun{sl,numl);

for(i=0;i<5;i++)prmtf("%d",numl[i]);

printf("\n");

)

37.下列给定程序中,函数fun()的功能是;求出两个数的最大公约数,

并作为函数值返回。例如,若给numl和num2输入49和21,则输出

的最大公约数为7:若给numl和num2分别输入27和81,则输出最大

公约数为27。

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

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

试题程序:

#include<stdio.h>

intfun(inta,intb)

{intr,t;

if(a<b)

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

{t=a;b=a;a=t;}

r=a%b;

while(r!=0)

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

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

retum(a);

)

main()

{intnuml,num2,a;

printf("Inputnumlnum2:");scanf("%d%d",&numl,&num2);

printf("numl=%dnum2=%d\n\n",numl,num2);

a=fun(numl,num2);

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

)

38.下列给定程序中,函数fun()的功能是::求k!(k<13),所有阶乘的

值作为函数值返回。例如:若k=10,则应输出3628800。

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

注意:不要改动main函数,不得增行或删行,也不得更

改程序的结构。

试题程序:

#include<conio.h>

#include<stdio.h>

longfun(intk)

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

ifk>0

return(k*fun(k-1));

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

elseif(k=0)

return1;

)

main()

{intk=10;

clrscr();

print,("%d!=%ld\n",k,fun(k));

)

39.下列给定程序中,函数fun()的功能是:通过某种方式实现两个变量

值的交换,规定不允许增加语句和表达式。例如变量a中的值原为8,

b中的值原为3,程序运行后a中的值为3,b中的值为8。

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

intfun(int*x,inty)

(

intt;

/*******不***不***^Qund*不***不*********/

t=x;x=y;

/********不***不**fk)und**不***不********/

retum(y);

}

main()

{inta=3,b=8;

clrscr();

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

b=fun(&a,b);

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

)

40.下列给定程序中,函数fun()的功能是:根据形参m的值(2WmW9),

在m行m列的二维数组中存放如下所示的数据,由main。函数输出。

例如,若输入2,则输出12

24

输入4,则输出1234

2468

36912

481216

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

#defineM10

intaiM][MI={0};

/*******不***不***nd*不***不************不/

fun(int**a,intm)

{intj,k;

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

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

/***************^Qund*******************/

a[j][k]=k*j;

)

main()

{inti,j,n;

clrscr();

printf("Entern\n");scanf("%d",&n);

fun(a,n);

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

{for(j=O;j<n;j++)

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

printf("\n");

)

五、程序改错题(2题)

41.下列给定程序中,函数proc()的功能是:传人一个整数n,计算如

下公式的值。t=l/2-l/3-…-1/n例如,若输入3,则应输出0.166667。

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

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

£mHudr

/includeVcomo.h>

SindudrV•他d

liotiblcproc<mtti)

double1*LOa

intli

//••••found••••

1.0-I

//••••(outid••••

VOMInuim<)

(ifiiMi

prm<«enter1integernumbcr»i\n*)>

XAtdf*・&m>s

pnmi(w\n\nTlbrroultis%ll\n*.peoc(ni))i

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

有小写字母C。请修改程序中的错误,使它能得出正确的结果。注意:

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

题程序:

=includeL>

voidprocichar♦Mr>

iltlji

for(i*>»0i、(>'-♦*)

*C*)

//••••found••••

zrG]i

〃••••found••••

s

voidnbain(>

duirMrftOji

pnntf(e\nRftieraMruifJ).

print((wThrongttuil»crtn<t"

pvtuC«tr)t

proc<»lr>B

pfiuM'ThcMrtti<afterdrifted.-)i

p««tft(str)iprtmfC*\B\B*)<

六、操作题(2题)

43.有以下程序:

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

程序运行后,输出结果是【】。

44.请编写函数fun,函数的功能是:将大于形参m且紧靠m的k个素

数存入xx所指的数组中。例如,若输入17,5,则应输出:19,23,

29,31,37o

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

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

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

tinclude<stdio.h>

2Voidfun(intm,intk,intxx(])

3

4

5

6Main()

7(

8intm,n,zz[1000];voidNONO();

9printf(w\nPleaseentertwo

integers:;

10scanf("%d%d”,&m,&n);

11fun(m,n,zz);

12for(m■0;m<n;m++)

13printf(w%d”,zz(m));

14printf(w\nH);

15NONOO;

16

17VoidNONO()

18{/*本函数用于打开文件,输入测试数据,

调用fun函数,输出数据,关闭文件.•/

19intm,n,zz[1000]9i;

20FILE*rfr*wf;

Rw

21rf-fopen(in.dafr"r);

HRM

22wf■fopen("out.dat#w);

23ford-0;i<10;i++){

24fscanf(rf,"%d%d"r&m,&n);

25fun(m,n,zz);

26for(m-0;m<n;fprintf

(wf,"%d”,zz[m]);

27fprintf(wf,w\nH);

28}

29fclose(rf);

30fclose(wf);

31

参考答案

1.88解析:本程序定义了3个指针变量pl、p2、p,并且将,、b的地址

分别赋给Pl、p2,则*pl=a=2,*p2=b=4,所以表达式*pl*(*p2)的值是

8。在赋值语句的左边是*(p=&c),即使指针p指向了变量c,因而*(p)代

表了c的存储单元,赋值语句“*(p=&c尸*pl*(*p2);”是把整数8赋给了

变量c。

2.!knahT!knahT解析:此程序是一道次序颠倒题,即输入'Thank!1则输出

'!knahT'o

3.22解析:N13,:表示八进制数13表示的ASCII字符,是一个字符,

占一个字节;而“W12”是个字符串,除了八进制数12表示的ASCII字符

占一个字节外,还有在字符串的末尾加上串结束标志所以共有2

个字节。

4.模式或逻辑模式或概念模式模式也称逻辑模式或概念模式,是数据库

中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图,例

如数据记录由哪些数据项构成,数据项的名字、类型、取值范围等。

5.1000001010000010解析:运算的规则是只有当两个相应的二进制

位都为1时,该位的结果才为lo要保留第2、8位,只要将其与二进制

数10000010相与。

6.9292解析:本题考查循环的嵌套。

①当i=0时执行while语句,i++<4成立,这时i=l,不执行continue语

句,继续执行j=0;然后执行do-while语句,共循环4次:

a万=0时,s=0+a[l]⑼=5,j=j+l=l0

b才=1时,s=5+a[l][l]=5+6=ll,j=j+l=2o

c)j=2时,s=ll+a[l][2]=ll+7=18,j=j+l=3o

d)j=3时,s=18+a[l][3]=18+8=26,j=j+l=4o终止循环。

②当i=l时执行while语句,i++<4成立,这时i=2,执行continue语

句,结束本次循环。

③当i=2时执行while语句,i++<4成立,这时i=3,不执行continue语

句,继续执行j=0;然后执行do-while语句,共循环4次:

a)s=26+a[3][0]=26+15=41,j+l=lo

b)s=41+a[3][l]=41+16=57,j+l=2o

c)s=57+a[3][2]=57+17=74,j+l=3o

d)s=74+a[3][3]=74+18=92,j+l=4o终止循环。

④i=3时,执行while语句,i++<4成立,这时i=4,执行continue语句,

结束本次循环。

⑤当i=4时,执行while语句,i++<4不成立,结束while循环。输出s

的结果92。

7.程序正确性程序正确性

8.99解析:本题考查宏定义与三目运算符的综合应用。宏定义是原样替

换,本题中,如果a>b成立,则a+1的值为整个表达式的值,否则b+1

的值为整个表达式的值(应注意后面的加1)。

9.结构化设计结构化设计解析与结构化需求分析方法相对应的是结构

化设计方法。结构化设计就是采用最佳的可能方法设计系统的各个组成

部分以及各个成分之间的内部联系的技术。

10.-f或PM或-l*f或f*(-l)或GD*ffun(10)-f或f*-l或-l*f或/(-1)或(-

l)*f\r\nfun(10)解析:调用fun()函数计算m的值,在主函数中的空格处

应该填调用fun()函数的语句。fun()函数有一个形参n,为每次参加计

算的值的个数,故在主函数中的空格处应该填fun(10),回到fun()函数,

函数用到了一个for循环,共循环n次,当循环第i次的时候,m的值

等于m=l-2+.......+[(-1)的M次方]*i,所以在fun()函数的空格处应该填

使f改变符号的语句,故应填-f或#-1或-l*f或/(-1)或(-l)*f。

11.B

12.D解析:中序遍历的递归算法定义:①遍历左子树;②访问根结点;

③遍历右子树。前序遍历的递归算法定义:①访问根结点;②遍历左子

树;③遍历右子树。后序遍历的递归算法定义:①遍历左子树;②遍历

右子树;③访问根结点。根据前序遍历的结果可知,a是根结点。由中

序遍历的结果dgbaechf可知,d、g、b是左子树的结点,e、c、h、f是

右子树的结点。再由前序遍历的结果bdg可知,b是a左边子树的根,

由cefh可知,c是a右边子树的根。再由中序遍历的结果dgb可知,d、

g是b左边子树的结点,b右边子树无结点。再由前序遍历结果dg可

知,d为b左子树的根,g是以d为根的子树的右结点。至此,a的左子

树已完全弄清楚了。同样的道理,可以弄清楚以c为根的子树的结点位

置。所以可知后序遍历的结果是D。

13.B

14.B

解析:函数getchar()的作用是从终端(或系统隐含指定的输入设备)输入

一个字符,且只能接受一个字符(回车符也算是一个字符),所以

getchar()不能用宋读入字符串。scanf()函数要求按一定的格式来输入,

若同时输入多个字符串,则以空格或回车分割,所以空格不能被识别

为一个字符,也就无法读入空格字符。函数gets。的作用是从终端输入

—个字符串\u3000(包括空格)至字符数组,直到遇到换行符为止,所以

可以用来键盘读入空格字符。

15.A\nA。【解析】头结点不仅标识了表中首结点的位置,而且根据单链

表(包含头结点)的结构,只要掌握了表头,就能够访问整个链表,因此

增加头结点的目的是为了便于运算的实现。

\n

16.A

解析:本题考查数据库系统的基本概念和知识。数据的逻辑结构,是

数据间关系的描述,它只抽象地反映数据元素之间的逻辑关系,而不

管其在计算机中的存储方式。数据的存储结构,又叫物理结构,是逻

辑结构在计算机存储器里的实现。这两者之间没有必然的联系。因

此,选项A的说法是错误的。

数据库可以看成是长期存储在计算机内的、大量的、有结构的和可共

享的数据集合。因此,数据库具有为各种用户所共享的特点。不同的

用户可以使用同一个数据库,可以取出它们所需要的子集,而且容许

子集任意重叠。数据库的根本目标是要解决数据的共享问题。因此,

选项B的说法是正确的。

数据库设计是在数据库管理系统的支持下,按照应用的要求,设计一

个结构合理、使用方便、效率较高的数据库及其应用系统。数据库设

计包含两方面的内容:一是结构设计,也就是设计数据库框架或数据

库结构;二是行为设计,即设计基于数据库的各类应用程序、事务

等。因此,选项C的说法是错误的。

数据库系统除了数据库管理软件之外,还必须有其他相关软件的支

持。这些软件包括操作系统、编译系统、应用软件开发工具等。对于

大型的多用户数据库系统和网络数据库系统,还需要多用户系统软件

和网络系统软件的支持。因此,选项D的说法是正确的。因此,本题

的正确答案是选项A。

17.C

18.D

多元运算符问号前面表达式为真,所以(a-A+a)赋值给a,括号里的运

算是把大写字母变成小写字母,所以答案应为选项D。

19.A解析:本题考查静态变量的问题。函数f中c是静态变量存放在静

态存储区,在程序的整个运行期间都不释放占据的存储单元。函数f被

调用3次,调用过程如下。

第1次调用;a=2、b=0、c=3,执行b++和C++后b=l、c=4,

f(a)=a+b+c=2+1+4=7

第2次调用:a=2、b=0、c-4.执行b++和c++后b=l、c=5,

f(a)=a+b+c=2+1+5=8

第3次调用:a=2、b=0、c=5,执行b++和c++后b=l、c=6,

f(a)=a+b+c=2+1+6=9

所以输出结果为选项A。

20.C解析:计算机语言分为低级语言、汇编语言和高级语言,C语言属

于高级语言,但并不是说C语言比其他语言高级,所以选项A错误;

除了低级语言外,其他各种语言都必须译成能被计算机识别的二进制数

才能执行,选项B错误;C语言出现从1972年到1973年间,并不是出

现最晚的语言,所以选项D也是错误的。

21.

【解析】由题目中所给公式可知,多项式的值为m项的和。多项式每

一项的分子均为1,第i项的分母为1〜i所有整数的和。根据这个特

点,通过m次循环求出多项式的每一项并求和。最后将多项式的和返

回到主函数中。

22.voidfun(char*a,char*h,char*p)

(

inti=0;

char*q=a;

/*将前导*号保存到a中*/

while(q<h)<p=""x/h)<>

(

a[i]=*q;q++;i++;

)

/*继续遍历数组*/

while(q<=""p="">

if(*q!='*')

(

/*如果不是*则保存到a中*/

a[i]=*q;i++;

)

q++;

}

/*将末尾*号保存到a中*/

while(*q)

(

a[i]=*q;i++;q++;

)

a[i]='\0’;

本题的重点是选择好判断条件。首先需要判断前导*号的结束,然后判

断是否指向最后一个字母,最后补充尾部*号,只要思路对了即可正确

解答。

23.floatfun(intn)

(

inti,sl=0;

floats=0.0;

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

(

sl=sl+i;/*求每一项的分母*/

s=s+1.0/s1;/*求多项式的值*/

)

returns;

)

首先需要根据题意分析表达式的规律,得出通项,然后再完成程序语句。

本题中公式的规律类似于求1+2+…+n的倒数之和。可以通过for循环

语句来实现第1项到第n项的变化。先根据题目要求定义变量,注意

该变量的数据类型。然后对其进行初始化操作,因为该变量相当于累

加器,所以初值应为0(或0.0,根据变量数据类型来确定),再通过for

循环语句来完成累加过程。

本题中si用来表示每一项的分母,每一项的分母都是由前一项分母加

项数得到的。注意,由于si定义成一个整型,因此在s=s+1.0/sl语句

中不能把1.0写成lo

24.1fun(STUa[],STU*s)

2{

3inti;

4*s=a[0];/*假设第1个元素值最小*/

5for(i=0;i<N;i++)/*如果在循环的过程中再发现比第1个元素值更小的

元素则赋给*s*/

6if(s->s>a[i].s)

7*s=a[i];

8)

题目要求找出结构体数组元素中的最小值。假设数组中第1个元素值

最小,即*s=a[O];,如果在循环的过程中发现比第1个元素值更小的,

就将指针s指向该元素,直到找到值最小的元素。另外,本题还涉及

结构体中的指向运算符。

25.

【解析】按题目中的要求,要得到整数c,首先要得到整数a和b的个

位和十位上的数,可以通过取余和整除来实现,再将其分别乘以1。00,

100,10,1就可以得到所要求的整数c。

26.1intfun(int*s,intt,int*k)

2{

3Inti;

4*k=0;/*k所指的数是数组的下

5标*/

6for(i=0;i<t;i++)hif(s[*k]<s[i])*k=i;/*找到数组中值最大的元素,把该元

素的下标赋给k所指的数*/

7returns[*k];/*返回数组的最大元素*/

8)

<t;i++)

<>本题中使用指针变量k作为值最大的元素的下标。使用时要注意对

k进行指针运算。程序一开始让k指向数组中的第1个元素,即

*k=0。通过for循环与数组各个元素比较,找到最大值。<></t;i++)

27.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次方的值。

28.\n#include"stdio.h"

\nintfun(inta)

\n{intI;

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

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

\nl++;

\nif(a%I==0)

\n{printf(u%disnotaprime!”,a);

\nreturn0;}

\nprintf(u%disaprime!,5,a);

\nreturn1;}

\nmain

\n{intx;

\nprintf(u\\npleaseenteranumber:");

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

\nprintf(t4%d\\n,,,fun(x));}

\n

29.\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].scorefj]);}

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

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

\nsum+=stuarr[I].scorefj];

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

\nmax=stuarr[0].average;

\nindex=0;

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

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

\nindex=I;}

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

均成绩

=%4.lf\\n',stuarr[index].stu_num,stuarr[index].sex,stuarrfindex].nam

e,stuarrfindex].average);

\n}\n

30.intfun(char*s)

2;{intn=0;

3char*p;

4:;for(p=s;*p!=,\\0';p_L+)

if((*p>,o,)&&(<,9,))

6n++;

7returnn;

8}要统计字符串中数字字符的个数,首先应定义变量n,并将其初始化

为0,然后遍历字符串,逐个判断字符是否为数字字符,判断条

温馨提示

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

评论

0/150

提交评论