2023年内蒙古自治区呼伦贝尔市全国计算机等级考试C语言程序设计测试卷(含答案)_第1页
2023年内蒙古自治区呼伦贝尔市全国计算机等级考试C语言程序设计测试卷(含答案)_第2页
2023年内蒙古自治区呼伦贝尔市全国计算机等级考试C语言程序设计测试卷(含答案)_第3页
2023年内蒙古自治区呼伦贝尔市全国计算机等级考试C语言程序设计测试卷(含答案)_第4页
2023年内蒙古自治区呼伦贝尔市全国计算机等级考试C语言程序设计测试卷(含答案)_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

2023年内蒙古自治区呼伦贝尔市全国计算

机等级考试C语言程序设计测试卷(含答

案)

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

一、2.填空题(10题)

1.软件工程的出现是由于【】。

2.算法的基本特征是可行性、确定性、【】和拥有足够的情报。

3.下列程序的输出结果是____o

#include<stdio.h>

intfun(intx)

{intp;

if(x==0IIx==l)

return3;

else

p=x-fun(x-2);

returnp;

)

voidmain()

{printf(H\n%d",fun(ll));

)

4.下述函数统计一个字符串中的单词个数,单词是指处在空格之间的字

符序列,请填空。

intword(char*s)

{intnum=0,flag=0;

while(*s)

{if([]==")flag=O;

elseif([]){flag=l;num++}

return[];)

5.下列程序的运行结果是_____o

#definePOW(r)(r)*?

main()

{intx=3,y=2,t;

t=POW(x+y);

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

)

6.C语言中用表示逻辑值为“真、用数字“0”表示逻辑值为“假工

7.当循环队列非空且队尾指针等于队头指针时,说明循环队列已满,不

能进行入队运算。这种情况称为【】。

8.下面程序的输出走【

main()

{enumem{eml=3,em2=1,em3};

,,n,,MnH

char*aa[]={"AA1BBI"CC,DD};

printf("%s%s%s\n",aa[emI],aa[em2],aa[em3]);

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

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

main()

{intx,a=l,b=2,c=3,d=4;

{intx,a=l,b=2,c=3,d=4;

x=(a<B)?a:b;x=(a<C)?x:C;x=(d>x)?x:d;

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

)

二、单选题(10题)

11.有以下程序:

#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][bU][i]];

printf("%d\nH,t);

)

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

12.若有运算符:>、=、<<、%、sizeof,则它们按优先级(由高至低)

的正确排列顺序为()

A.%、sizeofx>、

18.

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

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

19.对于长度为n的线性表,在最坏情况下,下列各种排序法所对应的比较次数中正确的是

(

A.冒泡排序为n/2B.冒泡排序为nC.快速排序为nD.快速排序为n(n-l)/2

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

A.有一个以上根结点的数据结构不一定是非线性结构

B.只有一个根结点的数据结构不一定是线性结构

C.循环链表是非线性结构

D.双向链表是非线性结构

三、程序设计题(10题)

21.使用VC++2010打开考生文件夹下progl中的解决方案。此解决方案的项目中包含一个

源程序文件progl.c。在的程序中,请编写函数fun(),其功能是找出2xM整型二维数组中

最大元素的值,并将此值返回调用函数。

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

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

填入你编写的若干语句。

试题程序:

ttdefineM4

ttincludc<stdio.h>

intfun(inta[][n])

(

)

voidmain()

(

intarr[2][M]={5,8,3,45,76,-4,12,82);

printf(amax=%d\nw,fun(arr));

)

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

源程序文件progl.c。在此程序中,规定输入的字符串中只包含字母和*号。编写函数fun(),

其功能是删除字符串中所有的*号。编写函数时,不得使用C语言提供的字符串函数。

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

容应当是“ABCDE是”。

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

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

填入你编写的若干语句。

试题程序:

#include<conio.h>

#include<stdio.h>

voidfun(char*a)

(

)

voidmain()

(

chars[81];

printf("Enterastring:\n>,);

gets(s);

fun(s);

printf("Thestringafterdeleted:Xnn);

puts(s);

)

23.请编写函数fun(),其功能是计算并输出下列多项式的值:F=l+1/1!+1/21+1/31+1

/41+-+l/m!例如,若主函数从键盘给m输入5,则输出为F=2.716667。注意:m的

值要求大于1但不大于100。部分源程序给出如下。请勿改动main()函数与其他函数中

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

夕includeh>

(iouMe(un<mtm>

vu«dHMiat)

Imtm«

dcxibk(i

FILE•outi

prmif(aln(>ut孙

pnn«f("F•

out*fop«n<eovtliW.dat","**)(

(pnntf(out.*Kf\na«fun(m>)i

fclo»e(out)1

24.

编写函数proc(),它的功能是:根据公式求p的值,结果由函数值带回。m与n为两个正

数且要求m>;nop=m!/(n!(m-n)!),例如,m=20,n=10时,运行结果为184756.000C00e

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

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

ftmclud*Vcoem

ittnclu4e<.ubo.h>

Pinclude<stdlib.h>

(kMiproc(inim.in(•)

midmam(>

pruitfCp«S(\n*.proc(20.10))i

25.

假定输入的字符串中只包含字母和*号。请编写函数proc(),它的功能是:使字符串中前部

的*号不得多余m个;若多余m个,则删除多余的*号;若少于或等于m个,则什么也不做,

字符串中间和尾部的*号不删除。例如,字符串中的内容为****A*BC*DEF*G****,若m的值

为2,删除后,字符串中的内容则应当是**A*BC*DEF*G****;若m的值为4,则字符串中的

内容仍为****A*BC*DEF*G****。n的值在主函数中输入。在编写函数时,不得使用c语言提

供的字符串函数。注意:部分源程序给出如下。请勿改动main()函数和其他函数中的

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

*tnclud*<L««di<xh>

Smclud*<co»wo.h>

raidproc<char**>intn)

«nidm*in(>

(char

*Knirr•«tr)i

pnnifC*Enterm>i

prorC

'Tbr«tnngafter<M<trd:\n*)t

putnC»<r>t

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

数组stu中,请编写函数proc,它的功能是:把指定分数范围之外的学生数据

放在b所指的数组中,分数范围之外的学生人数由函数值返回。

例如,输入的分数是70和79,则应当把分数低于70和高于79的学生数据输

出,不包含70分和79分的学生数据。主函数中壬70放在low中,把79放在

heigh中。

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

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

所编写的若干语句。

试题程序:

#include<stdio.h>

#defineM16

typedefstruct

(

charnum[10];

ints:

}

STREC;

intproc(STREC*a,S^REOb,int1,inth)

(

)

voidmain

(

STRECstu[M]={{-GA005\55),{“GA003〃,96),

{〃GA002〃,80),{〃GA004〃,68),

(//GA001,/,88},{〃GA007〃,74),

{〃GA008〃,85),{〃GA006〃,89},

{〃GA015〃,90),rGAO13",53),

(〃GA012〃,66),{“GA014",82),

{“GA01T,73},{〃GA017〃,69),

{〃GA018〃,64),{〃GA016〃,86));

STRECh[M];

inti,n,low,heigh,t;

printf(,zEnter2integernumberlow&

heigh:〃);

scanf(〃%d%d〃,&low,&heigh);

if(heigh<low)'

{

t二heigh:

heigh=low;

low=t;

)

n=proc(stu,h,low,heigh);

printf("Thestudent'Sdataout

%d—%d:\n〃,low,heigh);

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

printf(〃%S%4d\n〃,h[i].num,h[i].s);

//输出指定分数范围内的学生记录

printf(〃\n〃);

}

27.

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

*号。编写函数时,不得使用C语言提供的字符串函数。例如,字符串中的内容为

“****A*BC*DEF*G****”,删除后,字符串中的内容应当是“ABCDEFG”。注意:部分源程

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

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

includeh>

void(un<char•a)

(

voidmam()

char

praith^Entcr■*<nn(:\B")«

printf("Thetinncih»f

pMlM(,)I

28.请编写函数proc(),其功能是;将str所指字符串中下标为偶数的字符删

除,串中剩余字符形成的新串放在t所指数组中。

例如,当str所指字符串中的内容为abcdefg,则在t所指数组中的内容应是

bdfo

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

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

入所编写的若干语句。

试题程序:

StincludehA

sincludeVemo.

=inciudrVzdra.h>

9include<*tnn<.Ii>

voidchar•Mr.cluirt£J)

VOMRMiflC)

chari»tf{iOO].i[100]।

ny«lcm(>i

pnni(<•\nPI«i!*<,MHCT*tn»c»tri")i

•c*nIC5*i»*.»tr)i

proc(fktr.t>i

pnntfl"\nTheresulttntSAn*»t)t

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

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

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

应当是“ABCDEFG”。

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

请勿改动maini)函数和其他函数中的任何内容,仅在函数fun的花括号中填入

你编写的若干语句。

试题程序:

#include<conio.h>

#includc<stdio.h>

voidfun(chara)

(

voidmain

(

chars[81];

print((''Enterastring:\n〃);

gets(s):

fun(S);

prinLfCThesiringafterdeleted:\n〃);

puts(s);

)

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

中包含一个源程序文件progl.c。在此程序中,请编写函数fun0,它的功能是

求出能整除x且不是偶数的整数,并将这些整数按从小到大的顺序放在PP所指

的数组中,总个数通过形参n返回。如x中的值为30,则有4个数符合要求,

它们是1、3、5、150注意:部分源程序在文件progl.c中。请勿改动主函数

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

干语句。试题程序:

1#include<conio.h>

2#include<stdio.h>

3#include<stdlib.h>

4voidfun(intx,intpp[]rint♦n)

5{

61

7)

8gvoidmain()

10FILE♦wf;

11intx,aa[1000],n,i;

12system(nCLSM);

13printf(M\nPleaseenteran

integernumber:\nM);

wn

14scanf(%dz&x);

15fun(x,aa,&n);

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

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

18printf(M\n");

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

20wf=fopen(wout.dat",MwM);

21fun(30,aa,&n);

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

nn

23fprintf(wfr%d,aa[i]);

24fclose(wf);

25/*********found*********/

26}

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

31.给定程序MODII.C中函数fun的功能是:从低位尸始取出长整型变量s中奇数位上的

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

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

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

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

tinclude<stdio.h>

2/*…*……*found

3voidfun(longs,longt)

4{longsl-10;

*t-s%10;

6while(s>0)

7{s-s/100;

8*t-s%10*si**t;

9/…………found*

10si=sl*100;

11

12

13main()

14{longs,t;

printf("\nPleaseenters:");

scanf&s);

16fun(s,&t);

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

18

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

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

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

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

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

试题程序:

//include<conio.h>

#include<stdio.h>

/nd***

fun(intn)

{inta=2,b=l,c,k;

doubles=0.0;

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

{s=s+l.0*a/b;

/★★★★★★★★★★★★★found**************/

c=a;a+=b;b+=c;

)

return(s);

)

main()

{intn=5;

clrscr();

printf("\nThevalueoffunctionis:

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

)

33.下列给定函数中,函数fun()的功能是:统计字符串中各元音字母(即A,E,I,0,U)的

个数。注意:字母不分大小写。例如,输入THIsisaboot,则应输出是10220o

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

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

试题程序:

//include<conio.h>

#include<stdio.h>

fun(char*s,intnum[5])

{intk,i=5;

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

/*************fQUQ(j**************/

num[i]=0;

for{;*s;s++)

{i=-l;

/*************fQ(Jp^|**************/

switch(s)

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

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

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

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

caseu':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++)printf("%c",numl[i]);

printf("\n");

)

34.给定程序MODII.C中函数fun的功能是;从低位尸始取出长整型变量s中偶数位上的

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

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

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

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

,include<stdio.h>

/…………found……*

3voidfun(longs,longt)

4(longsl-10;

5a/-10;

6*t-s%10;

7/…………found…•…

8while(s<0)

9{s■s/100;

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

si=si*10;

12

13

14main()

15(longs,t;

16printf("\nPleaseenters:;scanf

("Id”,&s);

17fun(s,&t);

MM

18printf(Theresultis:%ld\nrt);

19

35.给定程序MODIIC中函数fun的功能是:输出M行M列整数方阵,然后求两条对角线

上各元素之和,返回此和数。

//include<coMo.h>

#inClude<stdio.h>

#dehneM5

/[J

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

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

printf("\n");

)

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

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

return(sum);

)

main()

{intaa[M][M]={{1.2,3,4.5),(4,3,2,1,0).

{6,7,8,9.0},{9,876,5},{3,4,5,6,7}};

clrscr();

printf("\nThesumOfallelementsOn2diagnalsis%d."fLn(M1aa));

)

36.给定程序MODII.C中函数fun的功能是:将p所指字符串中的所有字符复制到b中,

要求每复制三个字符之后插入一个空格。

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

的内容则为:ABCDEFGHIJKo

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

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

tinclude<stdio.h>

voidfun(char*p,char*b)

3(inti,k-0;

4while(*p)

5{i-1;

6while(i<-36&*p)(

7found**********

8

9k+*;p++;

10)

11if(*P)

12

13♦♦♦♦found****

14b(k++)="R;

15

16

17b[k]-,\0,;

18}

19main()

20{chara(80]rb[80];

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

22printf("Theoriginalstring:");

puts(a);

fun(a,b);

printf(w\nThestringafterinsert

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

25

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

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

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

#defineN20

voidfun(int*a,intn)

(

inti,m,t,k;

nd********★★★★★★/

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

(

m==i;

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

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

/★★★★★★★★★★★★★found**************/

k=m;

t=a[i];

a[i]=a[m];

a[m]=t;

)

)

main()

(

intx.b[N]={ll,5,12,0,3,6,9,7,10.8},

n=10,i;

clrscr();

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

printf("%d",b[i]);

printf("\n");

fun(b,n);

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

printf("%d",b[i]);

printf("\n");

)

38.给定程序MODII.C=函数fun的功能是:应用递归算法求形参a的平方根。求平方根

的迭代公式如下:

xl=—(x0+-^-)

2xO

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

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

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

1;Iinclude<stdio.h>

2!finclude<math.h>

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

doublefun(doublea,dounlex0)

5{doublexl,y;

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

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

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

9y=fun(a,xl);

10elsey-xl;

returny;

12

13main()

14{doublex;

15printf("Enterx:w);scanf

16printf("Thesquarerootof%lf

H

is%lf\nrxrfun(x,1.0));

17

39.下列给定程序中,函数fun()的功能是;依次取出字符串中所有的数字字符,形成新的字

符串,并取代原字符串。

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

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

试题程序:

//include<stdio.h>

#include<conio.h>

voidfun(char*s)

{inti,j;

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

if(s[i]>='01&&s[i]<=9)

/nd★★★★★★****★★★★/

S[j]=S[i];

/★★★★★★★★★★★★★found

S[j]="\0";

)

main()

{charitem[80];

clrscr();

printf("\nEnterastring:");gets(item);

printf("\n\nThestringis:\%5\n",item);

fun(item);

printf("\n\nThestringofchangingis:

)

40.下列给定程序中,函数fun()的功能是找出100~n(n不大于1000)之间百位数字加十位

数字等于个位数字的所有整数,把这些整数放在s所指的数组中,个数作为函数值返回。

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

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

试题程序:

//include<stdio.h>

#defineN100

intfun(int*s,intn)

(

inti,j,k,a,b,c;

j=0,

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

(

/★★★★★★★★★★★★★found*********1**/

k=n;

a=k%10;

k/=10;

b=k%10,

c=k/10;

if(a==b+c)

)

returnj;

)

main()

(

inta[N],n,num=0,i;

do

(

printf("\nEntern(<=1000]:");

scanf("%d",&n);

)

while(n>1000);

num=fun(a,n);

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

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

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

printf("\n\n");

)

五、程序改错题(2题)

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

母F。

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

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

试题程序:

#includc<stdio.h>

voidproc(char*str)

(

inti,j;

//****fcnnd****

for(i=j=0;str[i]-0;i++)

if(str[i]!=F)

//****found****

str[i]=str[i];

str[j]=\0;

)

voidmain

(

charstr[80];

printf("AnEnterastring:〃);

gets(str);

printf("Theoriginalstring:〃);

puts(str);

proc(str);

printf(^Thestringafterdeleted:〃);

puts(str);

printf(,/\n\n/,);}

42.下列给定程序中,函数proc()的功能是:判断一个整数m是否是素数,若

是返回1,否则返回0。在main。函数中,若proc()返回1,则输出"YES";

若proc()返回0,则输出〃N0"!

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

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

试题程序:

;include<stdio.h>

ssinclude<conio.h>

5include<stdlib.h>

intproc(intm)

intk=2i

while=

//•■••found••••

k++

//••••found••••

i((mk)rcturn11

elsereturn01

voidn)Ain()

intm

system("CI.Sw)»

printf("XnPleflneentern:")»

5canf("%<r.&-n)j

if(proc(n)>printf("YES\n")i

elseprintf("NO!\n")»

六、操作题(2题)

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

main()

{inta,b,[];

printf("inputa,b:");

scant("%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.以下程序的输出结果是【】。

//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))

)

参考答案

1.软件危机的出现软件危机的出现

2.有穷性有穷性解析:算法有四个基本特征:可行性、确定性、有穷性和拥有足够的情报。

3.44解析:本题考查函数的递归调用.在主函数中第1次调用于函数是调用的funQlj,返

回ll-fun(9);第2次调用于函数是调用的fun(9),返回9-fun(7);第3次调用于函数是调用

的fun(7),返回7-fun⑸第4次调用子函数是调用的fun(5),返回5-fun⑶:第5次调用

于函数是调用的fun(3),返回3-fun(l):第6次调用于函数是调用的fun(l),返回3。总的返

回值是:11-(9-(7-(5-(3-3))))=4.

4*s।।flag==O或*(s-l)=="num*s।।\r\nflag==O或*(s-l)=="\r\nnum解析:在统计字

符串单词个数的算法中,本题的flag是为了记录一个单词是否结束。第18空应填*s++如果

某个字符不是空格,则必需判断它是否是单词,如是,则使得flag的标志为1,num的值加

lo本题判断方法是:先判断s所指向的字符是否为空格,如果是则使得flag=0,否贝।.判断

前一个字符是否是空格,如果是则说明这个字符是一个单词的开始,将flag标志为1,num

的值加1,如果不是,则不必记录。故第19空应flag==O或*(s-l)==";最后一个空格需填

写的是返回的单词的个数,即num。

5.解析:本题考查带参数的宏的定义及相关运算。运算过程为X=POW(x+y)=(2+3)*(2+3)=25o

6.非0非0解析:逻辑运算中,非。表示逻辑嗔”,乱表示逻辑“假”。

7.上溢上溢解析.入队运算是指在循环队列的队尾加入一个新元素。这个运算有两个基本

操作:首先将队尾指针进一(即rear=rear+l),并当rear=m+1时置rear=1;然后将新元素

插入队尾指针指向的位置,当循环队列非空(s=1)时且队尾指针等于队头指针时,说明循环队

列已满,不能进行入队运算,这种情况称为“上溢”。

8.DDBBCCDDBBCC解析:C语言对枚举的定义规定:在枚举中声明的各个枚举元素,如果

没有明确指出某个枚举元素的值,它的上一个元素存在并有明确值的情况下,这个枚举元素

的值为其上一个元素的值+1。在本题中,没有明确说明枚举元素em3的值,则

em3=em2+l=l+l=2,进而可知,在print%)打印函数中,要打印的数组元素是aa[3]、aa[l]、

aa[2],因此最后的打印结果应当为“DDBBCC”。

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

度,是指执行算法所需要的计算工作量“一个算法的空间复杂度,一般是指执行这个算法所

需要的内存空间。

10.11解析:条件运算表达式:“表达式1?表达式2:表达式3",但表达式1的值为非0

时,此时表达式2的值就是整个条件表达式的值,反之为表示式3的值。解析易知结果为

lo

11.C

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

用。

12.D解析:主要考查运算符的优先级。sizeof的优先级最高,后面的顺序是:%、<<、>,

优先级最低的是

13.B

14.D

本题考查逻辑运算符的使用。当的两个运算对象都是逻辑1时,表达式返

回值才是1;“II”的两个运算对象至少有一个是逻辑1时,表达式返回值也

是1,x<y为1,!z为0,10为1,011为1,因此,!1为0。

15.B

16.D解析:测试不是为了证明程序是正确的,而是在设想程序有错误的前提下进行的,其目

的是设法暴露程序中的错误和缺陷,一般应当避免由开发者测试自己的程序,因此,选项A

错误;测试是为了发现程序错误,不能证明程序的正确性,调试主要是推断错误的原因,从

而进一步改正错误,调试用例与测试用例可以一致,也可以不一致,选项B错误;测试发现

错误后,可进行调试并改正错误经过调试后的程序还需进行回归测试,以检查调试的效果,

同时也可防止在调试过程中引进新的错误,选项C错误,

17.A

解析:题中将函数fun的入口地址赋给了指针变量fl,这时fl和fun都指向

函数的开头,调用*fl就是调用函数fun。

18.D

19.D在最坏情况下,冒泡排序和快速排序的比较次数都是n(n—1)/2。【知识拓展】所谓

冒泡排序,就是将相邻的两个数据比较,如前面的数据大于后面的,则位置互换。这样不停

地比较、互换,其实就是把大的数往后排,小的数往前排(就像冒泡一样冒出来了)。

20.B

解析:如果一个非空的数据结构满足以下两个条件:(D有且只有一个根结点;

(2)每个结点最多有一个前件,也最多有一个后件。则称该数据结构为线性结

构。如果一个数据结构不是线性结构,则称之为非线性结构,故A项错误。有

一个根结点的数据结构不一定是线性结构,如二叉树,B项说法正确。循环链

表和双向链表都属于线性链表。故C、D项错误。

21.intfun(inta[][m])

(

inti,j,max=a[0][0];

/*对二维数组进行遍历*/

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

for(j=0;j<=p=?

if(max<a[i][j])<p=,//,X/a[i][j])<>

/*将最大值保存在max中*/

max=a[i][j];

returnmax;

)

因为数组是二维数组,所以应使用两层for循环嵌套。使用for循环语句时需注意循环变量

的取值范围。

此类求最大值或最小值的问题,可以采用逐个比较的方式。遍历数组中所有元

素,从中找出数组的最大值或最小值。首先定义变量max来存放数组的第1个

元素的值,然后利用for循环逐个找出数组中的元素,并与变量max比较。如

果元素值大于max,则将该值赋给max。循环结束后max的值即为数组最大值。

最后将该值返回。

该类题目考查较多,需要掌握逐个比较的方法。对于m*n二维数组,采用逐个

查找的方法,代码实现如下:

for(i=0;i<=p=?

for(j=0;j<="p=〃">

•••

22.voidfun(char*a)

(

inti,j=0;

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

if(a[i]!='\x')

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

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

a[j]='\0';

/*最后加上字符串结束标志'\0'*/

)

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

*,由此可以决定该程序应使用循环判断结构。

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

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

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

标志'\\0'。

23.

【解析】该程序的功能是计算并输出多项式的值。该题的解题思路是根据题干中给出的数列,

首先推出每一项的表达式,然后再对多项式进行累加求和。

根据题干中给出的数列,推出每一项是阶乘的倒数,所以首先在循环中求得每一项的阶乘。

其中阶乘的计算公式

定义为:

m!=m*(m=l)*(m=2)*-*l(Ti>l)

m!=l(m=l)

公式分为参数m是1和大于1的两种情况,例如.1的阶乘1!二1;5的阶乘5!二5*4*3*2*1。

然后求得阶乘分之一的累加和。

24.

【解析】由题目中所给公式,首先求出整数m的阶乘,然后求出m的阶乘除以n的阶乘,

最后再求出整个表达式的值。将整个表达式的值返回到主函数当中。

25.

【解析】题目中要求字符串前部的*不得多于m,首先要计算出字符串前部的*号的个数,与

变量m进行比较。当字符串前部的*多于m个时,删除多余的*。规定不能用字符串函数处

理,可以通过移动字符串的首指针来实现。

26.\n\tintproc(STREC*a,STREOb,int1,inth)\n

\n

\n\t{\n

\n

\n\tinti,j=0;\n

\n

\n\tfor(i=0;i<M;i++)\n

\n

\n\tif((a[i].s>=0&&a[i].s<l)||(a[i].s>h&&a\n

\n

\n\t[i].s<=100))//通过if语句,来判断指定范围\n

\n

\n\t之外的数\n

\n

\n\tb[j++]=a[i];//放到b数组中\n

\n

\n\treturnj;//最后把其个数返回到主函数中\n

\n

\n\t}\n

\n

\n\l【解析】题目要求把指定范围之外的数放到b中,将每一个学生的成绩与

指定的成绩相比较,将符合条件的学生成绩放在数组b中,并将符合要求的学

生个数返回给主函数。\n

27.

【解析】此题是删除字符串中的星号。思路是通过for循环来完成对字符串的遍历,通过if

判断,找到不是“短的字符,将其赋值到数组a中星号前的位置,下①也!二

)"4,a[j++]=a[ir.最后返回主函数将删除*后的字符串输出即可。

28.

voidproc(char•ncr.char«[3)

tn«是俄字符事的怅度

的量管

lor<i-I»i<kii*i>2)♦衷示为・1I

〃尼下钵为今放的数放用ttt

0中

iD]-*\o'.。典为t星字料率,因R©场用v作

【解析】题目要求将下标为偶数的字符删除,其余字符放在新的字符数组t

中。首先取出字符串str中下标为奇数的字符,将其赋值给新的字符串t,最

后用‘'0'作为字符串结束的标志。

29.\n\tvoidfun(char*a)

\n(

\ninti,j=0;

\nfor(i=0;a[i]!=\0;i++)

\nif(a[i]!=*)

\na[j++]=a[i];//若不是要删除的字符*则保留

\na[j]=\0;//最后加上字符串结束符\0

\n}

\n【解析】此题是删除字符串中的星号。思路是通过for循环完成对字符串的

遍历,通过if判断,找到不是“*”的字符,将其赋值到数组a中星号前的位

置,“if(a[i]!=*)”“a[i++]=a⑴",最后返回主函数将删除*后的字符串

输出即可。\n

30.lvoidfun(intx,intpp[],int*n)

2{

3inti,j=0;

4for(i=l;i<=x;i=i+2)/*i的初值为L步长为2,确保i为奇数

*/5if(x%i==0)/*将能整除x的数存入数组pp中x/6pp[j++]=i;7*n=j;/*传回满

足条件的数的个数*/81本题考查:偶数的判定方法;整除的实现。本题题干信

息:能整除X且不是偶数的所有整数。循环语句中变量i从1开始且每次递增

2,所以i始终是奇数。将能整除x的i值存放到数组PP中,整除采用求余运算

符符“,即"x%i=0"。最后将数据元素个数j保存到n中。

31.(l)voidfun(10ngslong*t)(2)sl=sl*10;(l)voidfun(lOngs,long*t)(2)sl=sl*10;

解析:本题中函数的功能是依次取出奇数位上的数。该题的解题思路主要是找出数字中的奇

数位上的数。

32.(1)错误:fun(intn)正确:doublefun(intn)⑵错误:c=a;a+=b;;b+=c;正确:c=a;

a+=b;b=c;⑴错误:fun(intn)正确:doublefun(intn)\r\n(2)错误:c=a;a+=b;;b+=c;

正确:c=a;a+=b;b=c;解析:该题题干是著名的斐波拉契分数序列,所以循环条件应该

是c=a;a+=b;b=co

33.⑴错误:fun(char*sintnum[5])正确:voidfun(char*sinthum[5])(2)错误:num[i]=0;正

确:num[k]=0;(3)错误:switch(s)正确:switch(*s"l)错误:fun(char*s,intnum[5])正确:void

fun(char*s,inthum[5])\r\n(2)错误:num[i]=0;正确:num[k]=0;\r\n(3)错误:switch(s)正确:

switch(*s)解析:switch语句说明:

(l)switch后的表达式,可以是整型或字符型,也可以是枚举类型的。在新的ANSIC标准中

允许表达式的类型为任何类型。

⑵每个case后的常量表达式只能是常量组成的表达式,当switch后的表达式的值与某一个

常量表达式的值一致时,程序就转到此case后的语句开始执行。如果没有一个常量表达式

的值与swish后的值一致,就执行default后的语句。

⑶各个case后的常量表达式的值必须互不相同,不然的话程序就不知该跳到何处开始执行。

⑷各个case的次序不影响执行结果,一般情况下,尽量使用出现机率大的case放在前面(为

什么,等学到《数据结构》就知道了)。

⑸在执行完一个case后面的语句后,程序流程转到下一个case后的语句开始执行。千万不

要理解成行完一个case后程序就转到switch后的语句大执行了。

在本例中,其他错误都比较简单,而且我们在前面已经介绍过了。

34.(l)voidfun(10ngslong*t)(2)while(s>

温馨提示

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

评论

0/150

提交评论