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

下载本文档

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

文档简介

2023年河北省廊坊市全国计算机等级考试

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

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

一、2.填空题(10题)

1.在关系数据库中,将数据表示成二维表,每一个二维表称为

2.算法的复杂度主要包括时间复杂度和复杂度。

3.若有程序

main()

{inti,j;

scanf("i=%d,j=%d",&i,&j);

printf("i=%d,j-%d\n

)

要求给i赋10,给j赋20,则应该从键盘输入o

4.数据结构分为逻辑结构和存储结构,循环队列属于结构。

5.以下程序的输出结果是12.00,请将空白处填写完整。

main()

{inta=9,b=2;

floatx=[],y=l.l,z;

z=a/2+b*x/y+l*2;

printf("%52f\n",z);

6.设有定义:FILE*fw;,请将以下打开文件的语句补充完整,以便

可以向文本文件readme.txt的最后续写内容。

fw=fopen("readme.txt",【]);

7.【】(黑箱或白箱)测试方法完全不考虑程序的内部结构和内部特征。

8.若定义#definePI3.14159,则执行完下列程序后输出结果是____。

#definePI3.14159;printf("PI=%P",PI);

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

doublerun(intn)

{doubles=0.0,fac=1.0;

inti,k=l;

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

{[];

fac=fac/k;

s=s+fac;

)

)

10.有以下程序片段,请问执行后的输出结果是【】。

intn=10;

while(n>7)

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

二、单选题(10题)

11.下列程序的输出结果是#include"stdio.h,,nmain(){inti,a=0,b=0;

for(i=l;i<10;i++){if(i%2==0){a++;continue;}b++;}printf("a=%d,

b=%d",a,b);)

A.a=4,b=4B.a=4,b=5C.a=5,b=4D.a=5,b=5

12.a、b和c都是int型变量,且a=3,b=4,c=5,则下面的表达式

中,值为0的表达式是()

A.'a'&&'b

B.a<=b

C.ab+c&&b-c

D.!((a<b)&&!cl)

13.若有定义语句:“intx=10;”,则表达式x-=x+x的值为()。

A.-20B.-10C.0D.10

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

A.54321

B.12345

C.12345

D.543210main(){intw=5;fun(w);printf("\n");}fun

(intk){if(k>0)fun(k-l);printf("%d"",k);)

15.设有一个10阶的对称矩阵A,采用压缩存储方式,以行序为主存储,

all为第一元素,其存储地址为1,每个元素占一个地址空间,则a85的

地址为()。

A.13B.33C.18D.40

16.向一个栈顶指针为H的链栈中插入一个s所指向的结点时,需执行

Oo

A.H->link=s

B.s->link=H->link;H->link=s;

C.s->link=H;H=s;

D.s->link=H;H=H->link;

17.下列4个关于C语言的结论中错误的是()。

A.可以用do…while语句实现的循环一定可以用while语句实现

B.可以用for语句实现的循环一定可以用while语句实现

C.可以用while语句实现的循环一定可以用for语句实现

D.do...while语句与while语句的区别仅是关键字“while”出现的位置不

18.数据在计算机存储器内表示时,物理地址与逻辑地址相同并且是连续

的,称为0。

A.存储结构B.逻辑结构C.顺序存储结构D.链式存储结构

19.有以下程序:

#include<stdio.h>

main()

{charb[]="happynewyear”,k;

for(k=0;b[k];k++)

print/%c”,b[k]-'a'+'A');

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

A.hAppynewyeArB.HappynewyearC.HAPPYNEWYEAR

D.HaPPYNEWYEaR

20.有以下程序

#include<stdio.h>

#include<string.h>

main()

{chara[10]=,,abcd,,5

printf("%d,%d\n”,strlen(a),sizeof(a));

)

程序运行后的输出结果是()oA.7,4B.4,10C.8,8D.10,10

三、程序设计题(10题)

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

/2)+(1/3+1/4)+...+(1/(2n-l)+1/2n)例如,若输入10,

则输出为S=3.597740。n的值要求大于1但不大于100。注意:部分

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

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

sincludeVh.

dkxiMcproc«mtn)

*OMIniin<)

iniMI

double

pr«fitf<*\nlnputtige)i

KAfd(aMdM«&*n>i

procin)I

pntM((a\ft»*Hl\n*•a)<

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

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

该函数的功能是判断字符串是否为回文,若是,则函数返回1,在主函

数中输出“YES”,否则返回。,在主函数中输出“NO”。回文字符串是指顺

读和倒读都一样的字符串。例如,字符串LEVEL是回文,而字符串

123312就不是回文。注意:部分源程序在文件progl.c中。第3部分无纸

化考武题庠请勿改动主函数main()和其他函数中的任何内容,仅在函数

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

1#include2#defineN8O3intfun(char*str)4{56}7main()8{9chars[n];10FILE*o

ut;llchar*test[]={"1234321","123421","123321","abcdCBA");12inti;13pri

ntf("Enterastring:");14gets(s);15printf("\n\n");16puts(s);17if(fun(s))18printf(

"YES\n");19else20printf("NO\n");2]/******************/22out=fopen("

out.dat","w");23for(i=0;i<4/i++)24if(fun(test[i]))25fprintf(out,"YES\n");26e

lse27fprintf(out,"NO'n");28fclose(out);29/******************/30}

23.

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

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

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

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

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

Umcludeh>

HiftcludeVtidlikh>

9defineM8

(doubt9»।

■12C1Umi•nr%ii

11

lypedrfMnadsli«tSTKEK.**

doublepcoc(STRBC•h)

STREC•cmi•■)

STREC•h«•p«•q*

iaii™Oi

h-p*»(STREC•)m*Uoc<sinof(STREC>)i

♦1M

〃户,H个・\豺・*•的》■•中

IIMHDC,BUMOI,STftBU)).

»—》•—&“,♦i,.>*■,■(|.•・■♦

>nni-、UU..

fV4Uffl|||

〃■■・!(立■・■

vod<MIIIIBI(STHEl,•h)

MTREC•pi

,.卜.

prtaili*hredaI.

do

■MI.(H*••一>•,4.・.—

〃■出6分。

w4i4e<>*.,!■NUL1.I•

pnntK*\B\B

VOMflnkMttf>

dloulilv.4S・,5・

85)•fMB(

STREC«lii

h・cfw*i(*ti>)।

OtltllM(h)S

tnAWBpror4h)i

gifg""a>-X,1(\B*.IMB>i

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

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

其功能是将放在字符串数组中的M个字符串(每个字符串的长度不超过

N),按顺序合并成一个新的字符串。

例如,若字符串数组中的M个字符串为|“AAAA”,“BBBBBBB”,

“CC”|,则合并后的字符串内容应该是“AAAABBBBBBBCC”。

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

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

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

试题程序:

#include<stdio.h>

#include<conio.h>

#defineM3

#defineN20

voidfun(chara[M][N],char*b)

(

}

voidmain()

(

char“CC”};

chara[100]={"##################"};

inti;

printf("Thestring:\n^^);

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

puts(w[i]);

printf("\n”);

fun(w,a);

printf("TheAstring:\n^^);

printf("%s”,a);

printfCt\n\n^^);

)

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

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

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

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

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

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

干语句。试题程序:

1(mducfttVzdLb.h>

9includeVudio.h>

voidproc<mt•«MIIb・kw^•c)

rotdmain(>

mta«b1

lo<i<ca

"CLS>>i

pnnt{("Input

&b),

proc(a»b«&-c)t

pnntf(*Therr»ultIB:Kld\n**c)i

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

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

串中只包含字母和*号。编写函数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("Enterastrmg:\n,5);

gets(s);

t=f=s;

while(*t)

t++;

t—;

while(*t=='*')

t—;

while(*

f++;

fun(s,f,t);

printf("Thestringafterdeleted:\n^^);

puts(s);

)

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

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

其功能是将ss所指字符串中所有下标为奇数的字母转换为大写(若该

位置上不是字母,则不转换)。

例如,若输入“abc4EFg",则应输出“aBc4EFg”。

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

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

#include<string.h>

voidfun(char*ss)

(

)

voidmain(void)

(

chartt[51];

printf("WPleaseenterancharacterstringwithin50characters:\n^^);

gets(tt);

printf^\n\nAfterchanging,thestring\n%s,5,tt);

fun(tt);

printf("\nbecomes\n%s,,,tt);

)

28.请编写函数proc,它的功能是计算:

s=(In(l)4+ln(2)4+ln(3)+...+In(m))0.5

在C语言中可调用log(n)函数求ln(n)o

例如,若m的值为30,则proc函数值为8.640500。

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

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

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

试题程序:

#include<stdlib.h>

#include<conio.h>

#inclllde<stdio.h>

#include<math.h>

doubleproc(intm)

(

)

voidmain

(

system("CLS");

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

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

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

intfun(),其功能是求出小于或等于lim的所有素数,将其存放在aa数

组中,并返回所求出的素数的个数。

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

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

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

试题程序:

1#include<conio.h>

2#include<stdio.h>

3#include<stdlib.h>

4#defineMAX100

5intfun(intlim,intaa[MAX])

6{

7

8}

9voidmain()

10{

11FILE*wf;

12intlimit,i,sum;

13intaa[MAX];

14system("CLS");

15printf("输入一个整数:");

16scanf("%d",&limit);

17sum=fun(limit,aa);

18for(i=0;i<sum;i++)

19{

20if(i%10==0&&i!=0)/*每行输出10个数*/

21printf("\n");

22printf("%5d",aa[i]);

23}

24/******************/

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

26sum=fun(15,aa);

27for(i=0;i<sum;i++)

28{

29if(i%10==0&&i!=0)/*每行输出10个数*/

30fprintf(wf,"\n");

31fprintf(wf,"%5d",aa[i]);

32}

33fclose(wf);

34/******************/

35}

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

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

串中只包含字母和*号。编写函数fun(),其功能是删除字符串中所有的

*号。编写函数时,不得使用C语言提供的字符串函数。

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

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

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

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

voidfun(char*a)

voidmain()

(

chars[81];

printf(c"Enterastring:\n");

gets(s);

fun(s);

printf("Thestringafterdeleted:\n^^);

puts(s);

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

31.给定程序MOD11.C中函数fun的功能是:用下面的公式求兀的近

似值,直到最后一项的绝对值小于指定的数(参数num)为止:

—Jt・.]——1—+1—1十・・・

4357

例如,程序运行后,输入0.0001,则程序输出3.1414。

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

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

1linclude<math.h>

2linclude<stdio.h>

3floatfun(floatnum)

4{ints;

5floatn,t9pi;

6

7/…………”ound…………"

8while(t>=num)

9(•

10pi=pi4t;

11n・n+2;

123

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

14t»s%n;

15

16pi«pi*4;

17returnpi;

18

19main(J

20{floattil,n2;

21printf("Enterafloatnumber:");

22scanf&nl);

23n2■fun(nl);

24printf(w%6.4f\nw,n2);

25

32.给定程序M0D11.C中函数fun的功能是:统计一个无符号整数中

各位数字值为零的个数,通过形参传回主函数;并把该整数中各位上最

大的数字值作为函数值返回。例如,若输入无符号整数30800,则数字

值为零的个数为3,各位上数字值最大的是8。

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

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

tinclude<stdio.h>

2intfun(unsignedn,int*zero)

3{intcount«0,max=0ft;

4do

5(t-n%10;

6

7if(t-0)

8counts*;

9if(max<t)max«t;

10n^n/lO;

11}while(n);

12/•••★★•found/

13zero«count;

14returnmax;

15}

16main()

17{unsignedn;intzero,max;

18printf(w\nlnputn(unsigned):

scanf&n);

19max-fun(n,&zero);

20printf(w\nTheresult:max=%dzero=

%d\n”,max,zero);

21

33.下列给定程序中,函数fun()的功能是:在字符串str中找出ASCII

码值最小的字符,将其放在第一个位置上,并将该字符前的原字符向后

顺序移动。例如,调用fun()函数之前给字符串输入fagAgBDh,调用后

宁符串中的内容为AfaggBDho

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

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

试题程序:

#include<stdio.h>

/*************foun(

voidfun(charp)

charmin,*q;

inti=0;

min=p[i];

while(p[i]!=O)

(

if(min>p[i])

(

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

p=q+i;

min=p[i];

)

i++;

)

while(q>p)

{*q=*(q-l);

q--;

)

p[0]=min;

)

main()

(

charstr[8O];

printf("Enterastring:");

gets(str);

printf("\nTheoriginalstring:");

puts(str);

fun(str);

printf("\nThestringaftermoving:");

puts(str);

printf("\n\n");

)

34.下列给定程序中,函数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++)

{c=aa[i];

j=i-l;

while((j>=0)&&(ch<aa[j]))

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

j-;

aa[j+l]=ch;

main()

{chara[N]="QWERTYUIOPASDFGHJKIMNBVCXZ";

inti;

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

insert(a);

printf("Thestringaftersorting:

%s\n\n",a);

35.给定程序中函数fun的功能是:从低位开始取出长整型变量s中偶

数位上的数,依次构成一个新数放在t中。高位仍在高位,低位仍在低

位。

例如,当s中的数为:7654321时,t中的数为:642。

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

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

[试题源程序]

#include<stdio.h>

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

voidfun(longs,longt)

(

longsl=10;

s/=10;

*t=s%10;

/************found************I

while(s<0)

s=s/100;

*t=s%10*sl+*t;

sl=sl*10;

)

}

mein()

(

longs,t;

printf("\nPleaseenters:");

scanf("%ld",&s);

fun(s,&t);

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

)

36.给定程序M0D11.C中函数fun的功能是:求三个数的最小公倍数。

例如,给主函数中的变量xl、x2、x3分别输入15n2,则输出结果应

当是:330o

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

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

1linclude<stdio.h>

2/6•・•••found6**

3fun(intx,y,z)

4{intj91.n

5j-1;

6

7m»j%y;

8n«j%z;

9while(t!»0||m!«0||n!«0)

10(j■j+1;

11t-j%x;

12m-j%y;

13n=sj%z;

14}

15

16returni;

17

18main()

19{intxl,x2,x3rj;

20printf(wInputxlx2x3:");

scant("*d*d*d”,&xl,&x2,&x3);

w

21printf("xl=*d,x2%drx37d\n",

xl,x2rx3);

22j«fun(xlrx2rx3);

23printf("Theminimalcommon

n

multipleis:%d\nrj);

24

37.给定程序MOD11.C中函数fun的功能是:将p所指字符串中的所

有字符复制到b中,要求每复制三个字符之后插入一个空格。

例如,在调用fun函数之前给a输入字符串:ABCDEFGHIJK,调用函

数之后,字符数组b中的内容则为:ABCDEFGHIJK。

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

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

1tinclude<stdio.h>

2voidfun(charchar*b)

3{inti,k-0;

4while(*p)

5{i-1;

6while(i<*3&&*p){

7/♦♦♦♦♦****wfound**********/

8b[k]-p;

9kz;pf

10)

11if(*p)

12(

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

14b[k++],**;

15)

16)

17b[k]-f\0f;

18)

19main()

20{chara[80]#b[80);

21printf("Enterastring:w);gets(a);

22printf("Theoriginalstring:");

puts(a);

23fun(arb);

24printf(w\nThestringafterinsert

space:puts(b);printf<R\n\n");

25

38.下列给定程序中,函数fun()的功能是求出数组中最小数和次最小数,

并把最小数和a[0]中的数对调,次最小数和a[l]中的数对调。

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

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

[试题源程序]

#include<stdio.h>

#include<conio.h>

#defineN20

voidfun(int*a,into)

inti,m,t,k;

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

m=i;

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

if(a[k]<a[m])

k=m;

t=a[i];

a[i]=a[m];

a[m]=t;

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

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

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

24

输入4,则输出1234

2468

36912

481216

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

#defineM10

intaiM][MI={0};

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

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

40.下列给定程序中,函数fun。的功能是:根据整型参数m,计算如下

公式的值。

y=l/(100xl00)+l/(200x200)+l/(300x300)+...+l/(mxm)

例如,若m=2000,则应输出0.000160。

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

fun(intm)

{doubley=0,d;

inti;

for(i=100,i<=m,i+=100)

{d=(double)i*(double)i;

y+=l.0/d;

)

return(y);

1

main()

{intn=2000;

clrscr();

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

五、程序改错题(2题)

41.

下列给定程序中,函数proc()的功能是:求S的值。设

S-<22/(1••(42)(3••(62(3•

•••••(2k>27<<2ii-1)•(2k•1>)

例如,当k为20时,函数的值应为1.551759。请修改程序中的错误,

使它能得出正确的结果。注意:不要改动main()函数,不得增行或

删行,也不得更改程序的结构。试题程序:

stfiduJeVstdio.h>

=mcludeVconeo.h>

9mclu4eVIL>

:includeVaih.h>

••found••

proHintk)

mtmfloat»•w«p.Q,

l.Ot

wtiikrCn<

2,0•m

p■■-LOi

q-w

w•wpqi

••found••

rrtum%

fvMMni*CI

ptmtlC

42.

下列给定程序中,函数proc()的功能是:用冒泡法对6个字符串按由

小到大的顺序进行排序。请修改程序中的错误,使它能得到正确结果。

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

构。试题程序:

・tnrludk!!>

■includeVadlib.h>

9mcludr<como.IO

0tneludrVfttdio,h>

备defineMAX20

voidprocKcluif•pstr£ftjI

Inii,ji

Huu•pi

(or<-Q“V5,l+>)

+)

;1••••ftMiftd♦•••

if<(pair4ki)»(patr-^*p)^0)

p・•(pirtr4-i>«

•<p»if+•(p«ir,j>i

//••••found••••

•(pwif*pi

wwdfiwitni>

ttitii

char•|i[6]actrl€](MAX:i

*CLS*)i

10rq~0.Y6—♦+)

pEK”.\.E<Mcf6t<ritig(IMnyatesehhoc11\

MV)«

,oZi=0.i〈6.i,♦)

MJHlf(">1)I

pnx(p)t

pntiifl*Th*atniypiaftrr«ontnigt\n"H

IoKi4a0ii<i|i4*+>

pnmlfeK»\i*[中,

六、操作题(2题)

43.给定程序中,函数fun的功能是:调用随机函数产生20个互不相同

的整数放在形参a所指数组中(此数组在主函数中已置0)o

请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确

的结果。

注意:源程序存放在考生文件夹下的BLANK1.C中。

不得增行或删行,也不得更改程序的结构!

1♦include<stdlib.h>

2tinclude<stdio.h>

3tdefineN20

4voidfun(int*a)

5(int1,x,n-0;

6x-rand()%20;

7/………,found/

8while(n<_1_)

9(for(i«0;i<n;i++)

10wwfouncj*«♦★★♦♦♦**/

11if(x-a[i])_2_;

12八………found………・/

13if(iM_3_){a[n]*x;n++;)

14x-rand()%20;

15

16

17main()

18(intx[N]«{01.i;

19fun(x);

20printf(wTheresult:\nw);

21for(i-0;i<N;i++)

ww

22(printf(%4drx[i]);

23if((i+1)%5««0)printf(w\nH);

24

25printf(R\n\nw);

26

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

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

intfun(inta[N][M])

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

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

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

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

return();

参考答案

1.关系或关系表关系或关系表解析:在关系模型中,把数据看成一个二

维表,每一个二维表称为一个关系.表中的每一列称为一个属性,相当

于记录中的一个数据项,对属性的命名称为属性名,表中的一行称为一

个元组,相当于记录值。

2.空间空间解析:算法的复杂度主要包括时间复杂度和空间复杂度。所

谓算法的时间复杂度,是指执行算法所需要的计算工作量。一个算法的

空间复杂度,一般是指执行这个算法所需要的内存空间。

3.i=0j=20i=0j=20解析:本题考核的知识点是scanf()数的使用.该函数

的第一个参数是格式字符串,主要由两类字符组成,一类是非格式符要

求原样输入,一类是格式符对应要输入的变量,所以说本题中应该原样

输入i=j=,后面分别给变量0和20,所以说空格处应该填入i=0,j=20o

4.存储或物理或存储结构或物理结构存储或物理或存储结构或物理结构

解析:数据的逻辑结构在计算机存储空间中的存放形式称为数据的存储

结构(也称数据的物理结构)。所谓循环队列,就是将队列存储空间的最

后一个位置绕到第一个位置,形成逻辑上的环状空间。供队列循环使用。

可知,循环队列应当是物理结构。

5.4.44.4解析:a/2=9/2=4,1/2=0,于是根据输出结果就有下列等式:

z=4+2*x/l.1=12.0,化简后,为x/l.l=4,x=4.4o

6.a

a解析:本题考查的是文件的打开方式。要向文本文件的末尾续写内

容,需要使用方式“a”(追加)打开文件。

7.黑箱黑箱解析:本题考查了软件测试中的黑箱测试。黑箱测试是根据

程序规格说明所规定的功能来设计测试用例,它不考虑程序的内部结构

和处理过程。常用的黑箱测试技术分为等价类划分、边界分析、错误猜

测以及因果图等。

8.PI=3.14159PI=3.14159解析:本题先定义了一个宏名PI,以后在程序

中出现PI都用3.14159替代,但是C语言规定:双引号中的宏名是不

进行替换的。

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

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

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

10.1098

11.B解析:continue语句的作用是跳过本次循环体中余下尚未执行的语

句,接着再一次进行循环条件的判定。当能被2整除时,a就会增1,

之后执行continue语句,直接执行到for循环体的结尾,进行i++,判断

循环条件。

12.D

13.B

表达式x-=x+X可以写成x=x-(x+x),所以X的值为-10。

14.B

15.B

16.C

17.D解析:本题考查几个循环语句的关系。①do...while语句、while语

句、for语句所实现的循环可以相互替代;②do...while语句和while语

句的区别是do...while语句至少执行一次。

18.C

19.C程序定义一个字符数组b,并使用字符串“happynewyeai”进行初始

化。然后通过for循环,遍历字符数组b中的每个字符,再将b中的字

符元素修改为大写字母。程序输出:HAPPYNEWYEAR。故本题答案为

C选项。

20.B

strlen是求字符串的长度,结果为4,sizeof是求数组的长度,而数据

在定义时已给出长度为10o

21.

【解析】首先定义一个变量来存放表达式的和,根据题目中提供的多项

式,通过n次循环来求出n项的和。最后把所求得的和返回到主函数当

中。

22.1intfun(char*str)2{3inti,n=0,fg=l;4char*p=str;5while(*p)/*将指针p指

向字符串末尾,并统计字符数*/6{7n++8P++;10}10for(i=0;i23.

【解析】要得到学生的最高分,需要将每一个学生的成绩进行比较。学

生的成绩存储在链表中,其结束标志为最后一个结点的next指针即

NULLO比较每一个学生的成绩,将最高分返回给主函数。

24.voidfun(chara[M][N],char*b)

(

inti,j,k=O;

for(i=0;i/*将字符串数组中的M个字符串,按顺序存入一个新的

字符串*/

for(j=0;a[i][j]!='V),;j++)

b[k++]=a[i][j];

b[k]=)(r;/*在字符串最后加上字符串结束标志*/

)

该题考核的是字符串连接操作。字符串数组相当于二维字符数组。字符

数组a是M行N列的二维数组。通过两层for循环遍历数组a,将数组

a中的元素保存到数组b中。在数组b的最后一个元素后添加字符串结

束标志、0"

25.

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

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

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

26.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’;

)

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

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

解答。

27.voidfun(char*ss)

(

inti;

for(i=0;ss[i]!=4\0,;i++)

/*将ss所指字符串中所有下标为奇数的字母转换为大写字母*/

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

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

)

将指定字符串中奇数位置的字母转换为大写字母,首先需要判断奇数位

置,再判断该位置字符是不是小写字母,如果是小写字母,则将小写字

母转换为大写字母。字母大小写转换操作中,只要将小写字母的ASCII

值减去32即可转换为大写字母。

28.doubleproc(intm)

\n(

\ninti;

\ndoubles=0.0;〃s是表示其和

\nfor(i=1;i<=m;i++)

\ns=s+log(i);//计算s=ln(l)+ln(2)+ln(3)+…+ln(m)

\nretumsqrt(s);〃最后将其开平方的值返回到主函数中

\n}

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

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

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

\n

29.1intfun(intlim,intaa[MAX])

2{

3inti,j,k=0;

4for(i=2;i<=lim;i++)/*求出小于或等于lim的全部素数*/

5{for(j=2;j<i;j++)

6if(i%j==0)break;

7if(J>=i)

8aa[k++]=i;/*将求出的素数放入数组aa中*/

9)

lOreturnk;/*返回所求出的素数的个数*/

11}

<i;jp++)<>如果一个数是合数,那么它的最小质因数肯定小于等于它的

平方根。本程序使用for循环语句查找小于lim的所有数,使用内嵌的

循环判断语句判断该数是否为素数。在做这道题时,需要重点掌握素

数的判定方法:for(j=2;j<sqrt(i);j++)if(i%j==0)break;...</i;jp++)<>

30.voidfun(char*a)

inti,j=0;

for(i=0;a[i]!='\O';i++)

if(a[i]!=V,)

a[j++]=a[i];

/*若不是要删除的字符'*'则保留*/

aU]

/*最后加上字符串结束标志、(T*/

)

该题考核的是删除字符串中所有*,需用循环语句遍历字符串,用判断

语句判断字符是否为*,由此可以决定该程序应使用循环判断结构。

用循环操作从字符串开始向后逐个进行比较,若不是要删除的字符(用

if(a[i**,)来控制)则保留。变量i和j用来表示原字符串的下标和删除

*后新字符串的下标。注意,下标变量j要从0开始,最后还要加上字

符串结束标志、0工

31.(l)while(fabs(t)>=num)⑵t=s/n;(l)while(fabs(t)>=num)(2)t=s/n;

解析:本题中函数的功能是利用公式计算兀的近似值,直到最后一项的

绝对值小于指定的数。本题解题过程参照一般公式题型的求解过程。

32.(l)if(t==0)(2)*zero=count;(l)if(t==O)(2)*zero=count;解析:本题中

函数的功能是统计一个无符号整数中各位数字值为0的个数。对无符号

数进行截取,然后对每个数字进行判断并统计。

33.(1)错误:voidfun(charp)正确:voidfun(char*p)(2)错误:p=q+i;

正确:q=p+i;⑴错误:voidfun(charp)\u3000\u3000正确:voidfun(char

*p)\r\n(2)错误:p=q+i;正确:q=p+i;解析:错误1:由于本题中函

数的功能是对字符串进行处理,而不是对单个字符进行处理,因此,函

数的参数应为字符串指针。错误2:使指针q指向ASCII码最小的字符

本题解答需要3个步骤:

(1)找到字符串中ASCII码值最小的字符,并保存。

(2)将该字符复制,并将该字符前面的字符串顺次后移。

(3)将ASCII码值最小的字符赋给字符串的第1个字符。找到ASCII码

值最小的字符可以通过定义一个字符min,该字符初始时等于字符串的

第1个字符,若字符串的下一个字符小于min,则将下一个字符赋给min,

如此循环到字符尾,即可得到ASCII码值最小的字符,同时令指针q指

向最小字符。之后对最小字符前面的子串顺次后移,可采用while语句

实现。

此题需要熟练掌握和灵活应用C语言的字符与整型变量的关系以及字

符中操作。

34.错误:c=aa[i]正确:ch=aa[i];错误:c=aa[i]正确:ch=aa[i];解析:

对长度为n的数组元素进行排列,可先对数组的前m-1项进行排序,之

后再对前m项进行排序,如此循环直到数组全部元素完成排序。对前m

项的子数列进行排序的方法是,将该子数列的末尾元素与前m-l项的元

素相比较,由于前m-l项已经完成排序,可以找到某一位置,使得将该

末尾元素插入该位置之后,前m项仍然保持升序。这样循环后,就可以

得到全部元素的排序。

35.(1)错误:voidfun(longslongt)正确:voidfun(longslong*t)(2)错误:

while(s<0)正确:while(s>0)

(

温馨提示

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

评论

0/150

提交评论