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

下载本文档

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

文档简介

2021年河北省保定市全国计算机等级考试

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

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

一、2.填空题(10题)

1.下面程序的输出结果是____O

main()

{staticchara[]="language",bf]="program";

char*ptrl=a,*ptr2=b;

intk

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

if(*(ptrl+k)==*(ptr2+k))

printf("%c",*(ptrl+k));}

2.以下程序的运行结果为【】°

#defineFORMAT"%u,%u"

main()

{inta[3][4]={l,3,5,7,9,11,13,15,17,19,21,23};

printf("\n");

printf(FORMAT,**a,*a[0]);

printf(FORMAT,*(a[0]+l),*&a[0][l]);

printf(FORMAT,a[l][0],*(*(a+l)+0));

)

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

#include<stdio.h>

main()

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

if(a<b)

if(b<0)c=0;

elsec++;

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

)

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

voidfun()

{staticinta;

a+=2;

printf("%d",A);

}

main()

{intcc;

fbr(cc=1;cc<=4;cc++)fun();

printf("\n");

)

5.下列程序的输出结果是o

#defineP(A)printf("%d,",(int)(A))

#definePRINT(A)P(A);printf("theend")

main()

{inti,a=0;

for(i=1;i<5.i++)

PRINT(a+i);

printf("\n");

)

6.若已经定义inta=25,b=14,c=19;,以下三目运算符(?:)所构成的语句

的执行结果是【】。

a++<=2&&b—<=2&&c++?printf("***

a=%d,b=%d,c=%d\n",a,b,C):printf("a=%d,b=%d,c=%d\n",

a,b,C);

7.Jackson方法是一种面向【】的结构化方法。

8.写出下列程序的执行结果。swap(pl,p2)int*pl,*p2;{intp;p=*pl;

*pl=*p2;*p2=p;}main(){inta,b,*pl,*p2;scanf("%d%d",&a,

&B};pl=&a;p2=&b;if(a<B)swap(pl,p2);printf("\na=%d,b=%d\n",

a,B);}若a=7,b=8,则程序的运行结果为()。

9.在深度为7的满二叉树中,度为2的节点个数为()。

10.以下程序的作用是:从名为filea.dat的文本文件中逐个读入字符并显

示在屏幕上。请填空。

#include<stdio.h>

main()

{FILE*fp;charch;

fp=fopen(【]);

ch=fgetc(fp);

while(!feof(fp)){putchar(ch);ch=fgetc(fp);}

putchar('\n');fclose(fp);

二、单选题(10题)

(4)对下列二叉树进行中序遍历的结果是().

A)ABCDEFGHB)ABDGEHCFC)GDBEHACFD)GDHEBFCA

12.具有n个顶点的完全有向图的弧数为0。

A.n(n-l)/2B.n(n-l)C.n2D.n2-1

13.

(7)数据流图用于抽象描述一个软件的逻辑模型,数据流图由一些特定的图符构成。下列图

符名标识的图符不属于数据流图合法图符的是().

A)控制流B)加工C)存储文件D)源和潭

14.以下关于结构化程序设计的叙述中正确的是()。

A.一个结构化程序必须同时由顺序、分支、循环三种结构组成

B.结构化程序使用goto语句会很便捷

C.在C语言中,程序的模块化是利用函数实现的

D.由三种基本结构构成的程序只能解决小规模的问题

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

A.算法的执行效率与数据存储结构无关

B.算法的空间复杂度是指算法程序中指令(或语句)的条数

C.算法的有穷性是指算法必须能在执行有限个步骤之后终止

D.以上3种描述都不对

16.对n个元素的有序表A[L.n]进行顺序查找,其成功查找的平均查找

长度(即在查找表中找到指定关键码的元素时,所进行比较的表中元素

个数的期望值)为()

A.nB.(n+l)/2C.log2nD.nA2

17•一个二维数组的定义语句为“inta[3][4]={{3,4},{2,8,6}};”,则元素

a[l]⑵的值为()。

A.2B.4C.6D.8

18.若有以下定义:

chara;intb;

floatc;doubled;

则表达式a*b+b-c值的类型为()。

A.floatB.intC.charD.double

19.

(19)下列不能正确计算代数式;sin2(g)值的C语言表达式是().

A)1/3*sin(l/2)*sin(l/2)B)sin(0.5)*sin(0.5)/3

C)pow(sin(0.5),2)/3D)l/3.0*pow(sin(1.0/2),2)

20.以下不能对二维数组a进行正确初始化的语句是()。

A.inta[2][31={0};

B.inta[2][3]={{l,2},{3,4),{5,6}};

C.inta[][3]={{l,2},{0});

D.inta[][3]={l,2,3,4,5,6);

三、程序设计题(10题)

21.假定输入的字符串中只包含字母和*号。请编写函数proc,它的功

能是:将字符串中的前导*号全部删除,中间和后面的*号不删除。

例如,若字符串中的内容为****a*bc*de/g****,删除后,字符串中

的内容则应当是a*bc*def*g****。

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

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

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

试题程序:

#include<stdio.h=:{>

#include<conio.h>

woidproc(char*str)

)

voidmain

charstr[81];

printf("Enterastring:\n");

gets(str);

proc(str):

printf("Thestringafterdeleted:\n");

puts(str);}

22.

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

是:将字符串中的前导*号全部删除,中间和后面的*号不删除。例如,

若字符串中的内容为****a*bc*def*g****,删除后,字符串中的内容则

应当是a*bc*def*g****。注意:部分源程序给出如下。请勿改动main

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

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

#vftclwlrVadicuJ

&ificludrVcomo.h>

roidproc<ciuir•sir>

wvtdtnainC)

rharJi

prifid<*Enfcf•

proc<MT>I

praitR*TbeRtnngaiierdeletedt\n*)i

MillI

23.学生的记录由学号和成绩组成,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,STREC*b,int1,inth)

(

)

voidmain

(

STRECstu[M]={{"GA005",55),{"GA003",96},

{"GA002",80),{"GA004",68),

{"GA001",88},{"GA007",74},

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

{"GA015",90),{"GA013",53),

{"GAO12",66},{"GAO14”,82),

{"GAOH",73},{"GAO17",69),

{"GAO18",64),{"GAO16",86}};

STRECh[M];

inti,n,low,heigh,t;

printf("Enter2integernumberlow&

heigh:");

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

if(heigh<low)5

(

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

)

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

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

数,其功能是从传入的num个字符串中找出最长的一个字符串,并通

过形参指针max传回该字符串的地址(用****作为结束输入的标识)。

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

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

试题程序:

1#include<conio.h>

2#include<stdio.h>

3#include<string.h>

4#include<stdlib.h>

5char*fun(char(*a)[81],intnum,char*max)

6{

7

8}

9voidmain()

10{

11FILE*wf;

12charss[10][81],*ps=NULL;

13chars[3][81]={"abed","deg","diegns"),*p=NULL;

14inti=0,n;

15system("CLS");

16printf("输入若干个字符串:");

17gets(ss[i]);

18puts(ss[i]);

19while(!stremp(ss[i],"****")==0)/*用4个星号作为结束输入的标志

*/

20{

21i++;

22gets(ss[i]);

24puts(ss[i]);

25)

26n=i;

27ps=fun(ss,n,ps);

28printf("\nmax=%s\n",ps);

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

31p=fun(s,3,p);

32fprintf(wf,"%s",p);

33fclose(wf);

25.请编写函数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()的花括号中填入所编写的若干语句。试题程序:

ainclo^r<ZMdbkb>

fincludeVcocuo,h>

Mmdudeh>

itwlude<n»ikk>

doubleproc<UMm)

vo«dnwm<>

*yslefn<>s

pnf»i{(aXI\n*»proc(30))a

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

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

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

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

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

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

试题程序:

「includeVsudi。.h>

doubleproc(intm)

(

i

voidmain()

(

inims

doublest

printf(*\nlnputms*)i

scanf(w%d",&m);

proc(m)।

printf("\n\n5-1-%f\n\n".s)i

\

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

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

28.

请编写函数proc(),该函数的功能是:将放在字符串数组中的M个字

符串(每串的长度不超过N).按顺序合并组成一个新的字符串。例如,

若字符串数组中的M个字符串为:ABCDBCDEFGCDEFGHI则合并

后的字符串内容应该是:ABCDBCDEFGCDEFGH1o注意:部分源程

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

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

£todvdeh>

■isiclude<eoftao.h>

9defmeM3

0dcGtwrN20

aidproc<charirr[Mj[N.clur•b>

gtdnuim<)

charMr[M][Nj•(*A!KT)B.•K'DER;*.-

CKFCJHD.u

cUr■N£I8]I《•

■■■■・•),

ptwt(<*TheNinn(ii\i>")।

(or<i",0iKMii4-,)

pot»<

praiiR*\n*>i

proc(»tr»arr>i

prwvft"TheA»tnng:\n*)«

prmtf(*Hs

pnmf("\n\n"><

29.

编写一个函数,该函数可以统计一个长度为2的字符串在另一个字符串

中出现的次数。例如,假定输入的字符串为abcdefabcdeabceabcdef,子

字符串为cd,则应当输出3。注意:部分源程序给出如下。请勿改动

主函数main和其他函数中的任何内容,仅在函数proc的花括号中填入

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

8mcludehJ>

#MiclwdrVcoato.

*IBcIttd*<BtdKKk>

9iarlwdrV,icng.

atpmiclmr•Mftchar•sobirtrI

*oidMMIH>

cliav)}•

MMfll

•yulMnl*ClJBT)t

e)i

g#(»(B(F)I

pnMf<attAfV,

*<t.(•i«bstr)e

pwts(»ub»tr>«

■-prac<Mr.MiiMr>s

prauR'■=KW\B*•■)!

30.

请编一个函数floatproe(doubleh),函数的功能是对变量h中的值保留

2位小数,并对第3位进行四舍五人(规定h中的值为正数)。例如,

若h值为7.32596,则函数返回7.33;若h值为7.32496,则函数返

回7.32。注意:部分源程序给出如下。.请勿改动main()函数和其

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

语句。试题程序:

SmcludeV.i曲hh>

tsmdudeV3idio.

*mdudrVemo.h>

IkMtproHHofttb)

voidmaifiC)

floatI|

*y«trm(eCI^*)i

prtfii(<(t>>i

pntit(<*Th<ongicMildaUtut*)•

pnntK*%f\n\n*«()i

praitf<*Therwoli:Ml\n*•pror(f))»

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

31.下列给定程序中函数fun()的功能是:求出字符串中最后一次出现的

子字符串的地址,通过函数值返回,在主函数中输出从此地址开始的字

符串;若未找到,则函数值为NULL。例如,当字符串中的内容为

abcdabfabcdx,t中的内容为ab时,输出结果应是abcdx。当字符串中的

内容为abcdabfabcdx,t中的内容为abd时,则程序输出未找到的信息:

Notfound!

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

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

试题程序:

#include<stdio.h>

#include<conio.h>

#include<string.h>

char*fun(char*s,char*t)

char*p,*r,*a;

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

a=Null;

while(*s)

{p=s;r=t;

while(*r)

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

if(r==p){r++;p++;}

elsebreak;

if(*r=='\0')a=s;

s++;

)

returna;

)

main()

{chars[100],t[100],,*p;

clrscr();

printf("\nPleaseenterstringS:");

scanf("%s",s);

printf("\nPleaseentersubstringt:");

scanf("%s",t);

p=fun(S,t);

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

elseprintf("\nNotfound!\n");

32.下列给定程序中,函数fun()的功能是:找出一个大于给定整数m且

紧随m的素数,并作为函数值返回。

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

intfun(intm)

{inti,k;

for(i=m+l;;i++)

{for(k=2;k<i;k++)

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

if(i%k!=O)

break;

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

if(k<i)

return(i);

)

)

main()

{intn;

clrscr();

printf("\nPleaseentern:");

scanf("%d",&n);

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

)

33.给定程序MODH.C中函数fun的功能是:首先把b所指字符串中

的字符按逆序存放,然后将a所指字符串中的字符和b所指字符串中的

字符,按排列的顺序交叉合并到c所指数组中,过长的剩余字符接在c

所指数组的尾部。例如,当a所指字符串中的内容为“abcdefg”,b所指

字符串中的内容为“1234”1时,c所指数组中的内容应该为“a4b3e2dlefg”;

而当a所指字符串中的内容为“1234”,b所指字符串中的内容为“abedefg”

时,c所指数组中的内容应该为“lg2f3e4dcba”。

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

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

1*include<stdio.h>

2finclude<string.h>

3voidfun(charchar*brchar*c)

4

5intirj;charch;

6i=0;j»strlen(b)-1;

************found************

8while(i>j)

9{ch«b[i];b[i]-b[j];b(j]-ch;

10i..;j一;

11}

12while(*a|I*b){

13/…………found…………/

14If(*a)

15(*c■*a;c..;a++;)

16if(*b)

17(*cm*b;C++;b.+;}

18)

19*c»0;

20}

21main()

22(

23charsl[100]rs2[100]rt(200];

24printf(R\nEntersistring:R);

nw

scanf(%srsi);

25printf(R\nEnters2string:R);

ww

scanf(%srs2);

26fun(si,s2,t);

n

27printf(\nTheresultis:%s\n"rt);

28

34.给定程序M0D11.C中函数fun的功能是:将字符串中的字符按逆

序输出,但不改变字符串中的内容。

例如,若字符串为abed,则应输出:deba。

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

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

1*include<stdio.h>

2/…………found…………/

3fun(chara)

4{if(*a)

5{fun(a*l);

6/…•……★•found/

7printf("%c**a);

8

9

10main()

11(chars(10]«"abcdw;

12printf("处理前字符申=*s\n处理后字

符串s);

13fun(s);printf(w\nw);

14

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

式的值。

y=1-l/(2x2)+1/(3x3)-l/(4x4)+...+(-l)(m+l)/(mxm)

例如:m中的值为5,则应输出0.838611o

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

doublefun(intm)

{doubley=1.0;

/**********fiound*************/

intj=l;

inti;

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

/****************f^)und*******+******/

y+=l/(i*i);

)

return(y);

)

main()

{

intn=5;

clrscr();

printf("\nTheresultisfun(n));

)

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

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

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

80.5607290.59851.58864

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

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

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

试题程序:

#include<stdio.h>

#include<conio.h>

#defineN20

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

{floatave,t=0.0;

intcount=0,k,i;

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

t=s[k];

ave=t/n;

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

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

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

*aver=&ave;

returncount;

)

main()

{floats[30],aver;

intm,i;

clrscr();

printf("\nPleaseenterm:");scanf

("%d",&m);

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

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

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

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

)

37.给定程序M0D11.C中函数fun的功能是:在字符串的最前端加入

n个*号,形成新串,并且覆盖原串。

注意:字符串的长度最长允许为79o

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

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

1*include<stdio.h>

2linclude<string.h>

3voidfun(chars[],intn)

4(

5chara[80],*p;

6inti;

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

8s»p;

9for(i»0;i<n;i++)a[i]*

10do

11{a[i]-*p;

12i++;

13)

14found………★•/

15while(*p++)

16a(i]-0;

17strcpy(sra);

18

19main()

20{intn;chars[80];

21printf(w\nEnterastring:n);

gets(s);

22printf(w\nThestring

23printf(w\nEntern(numberof*):

wH

");scanf(%dr&n);

24fun(s,n);

25printf("\nThestringafterinsert:

\w%s\w\nw,s);

26

38.给定程序中,函数fun()的功能是:使数组中的元素的值增加10倍。

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

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

试题程序:

#include<stdio.h>

#include<conio.h>

ihtm[10];

voidfun(void)

(

intj;

printf("Insubfuncaftercalling\n");

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

{

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

printf("%3d",m[j]*10);

}

)

main()

{inti;

printf("Inmainbeforecalling\n");

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

m[i]=i;

printf("%3d",m[i]);

)

fun();

printf("\nlnmainaftercalling\n");

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

printf("%3d",m[i]);

getch();

39.给定程序M0D11.C中函数fun的功能是:先从键盘上输入一个3

行3列矩阵的各个元素的值,然后输出主对角线元素之和。

请改正函数fun中的错误或在横线处填上适当的内容并把横线删除,使

它能得出正确的结果。

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

1♦include<stdio.h>

2tinclude<string.h>

3voidfun()

4(

5inta[3][3],sum;

6intj;

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

8!;

9jprintf("Inputdata:w);

10;for(i-0;i<3;i*+)

11{for(j・0;j<3;j++)

12*********/

wR

13scanf(%dra[i](jj);

14

15for(i-0;i<3;

16sum-sum*a(i)[i];

Hw

17printf(Sum»%d\nrsum);

18}

19main()

20(

21fun();

22

40.下列给定程序中函数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

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

if(d%2!=0)

(

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

t=d*sl+t;

sl*=10;

)

S=S%i;

i=i/10;

)

)

main()

(

longS,t;

clrscr();

printf("\nPleaseenterS:");

scanf("%ld",&s);

fun(S,&t);

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

五、程序改错题(2题)

41.

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

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

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

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

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

丹includeVM&OIh>

■mcludrh>

mtproe<mtk>

mttn-O.fnc-O]

//••••found••••

<

//••••found••••

1(

//••••louftd••♦•

h"—•

)

rvturvimt

voidnuiinC)

*CLS*>i

pnmfL%小。a«proc(^00)>i

42.下列给定程序中函数fun的功能是:从整数10到55之间,查找能被

3整除且有一位上的数值是5的数,把这些数放在b所指的数组中,这

些数的个数作为函数值返回。规定函数中al放个位数,a2放十位数。

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

注意:部分源程序在文件MODH.C中,不得增行或删行,也不得更改

程序的结构!

IKnclude<»t(Eo.h>

intfun(int•b)

|intk,al.a2.i=0;

for(k=10;k<=55;k+♦)

I

/found・•・••・••••・•/

•2=k/!0:

al=k-a2♦10;

if((k%3==0&&a2;=5)ll(k%3==0&&al==5))

I兄i]:k;i♦♦;|

tnain()

Iinta[100],k.m;

m=fun(a);

printf("Theresultis:\n");

fbr(k=0;k<m;k.♦)

printf("%4d-.a[k]);

printf(*\n");.

六、操作题(2题)

43.若变量x、y已定义为int类型且X的值为33,y的值为3,请将输

出语句printf((),x/y),•补充完整,使其输出的计算结果形式为:x/y=ll°

44.请编写fun函数,其功能是:计算并输出3〜m所有素数的平方根

之和。

例如,若主函数从键盘给m输入50后,则输出为s=68.665791c

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

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

注意:m的值要大于2但不大于100。部分源程序给出如下。

试题程序:

#include<math.h>

#include<stdio.h>

doublefun(intm)

(

)

voidmain

(

intm;

doubles;

FILE*out:

printf("\n\nlnputm:");

scanf("%d",&m);

s=fun(m);

printf("\n\ns=%f\n\n",s);

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

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

fprintf(out,"%f\n",fun(m+80));

felose(out);

参考答案

2.113399

3.22解析:分析程序,a=2,b-1,c=2时,if语句的表达式a<b不成

立,不再往下判断,直接退出if语句,执行后面的输出语句,程序结束。

在这个程序中a、b、c的值没做任何改变。

4.2468

5.1234theendl,2,3,4,theend解析:本题考查带参数的宏的定义。第1

次循环,i=l时,调用PRINT⑴,P⑴输出1;第2次循环,i=2时,调

用PRINT(2),P⑵输出2:第3次循环,i=3时,调用PRINT⑶,P⑶输

出3:第4次循环,i=4时,调用PRINT(4),P(4)输出4,theend。

6.a=26b=14c=19a=26,b=14,c=19解析:这种条件表达式的一般形式为:

表达式1?表达式2:表达式3,三目运算符的执行顺序,先求解表达式

1,若非0则求解表达式2,此时表达式2的值就作为整个表达式的值,

若表达式1的值为0,则求解表达式3,此时表达式3的值就作为整个

表达式的值。C语言在做一系列表达式相与时,从左到右分别计算各表

达式的值,一旦遇到一个表达式为false,则剩余的表达式都不再进行运

算。该题中,a++<=2的值为false,则b-<=2和C++就都不再运算再运

算。

7.数据结构数据结构解析:Jackson方法是一,种面向数据结构的结构化

方法。

8.a=8b=7

9.6363解析:满二叉树的第k层上有2k-1个结点,度为k的满二叉树

一共有2k-l个结点,由二叉树的性质可知:除去第k层上的结点,其他

所有结点都是度为2的结点,所以度为2的结点数为2k-l-2k-l,即27-

1-27-1=63o

10.“filea.dat”“r”“filea.dat”,“r”解析:fopen函数的调用方式通常为

fopen(文件名,使用文件方式)。本题中要求程序可以打开filea.dat文件,并

且是要读取文件中的内容,所以空白处应当填入,filea.dat','r'o

11.C

12.B

13.A

14.C

解析:结构化程序设计是指将待开发的软件系统划分为若干个相互独

立的模块,与具体的语句结构无关。Got。语句的滥用会导致程序的可

读性降低。三种基本结构构成的程序依然可以解决大规模的问题,只

是不利于复用。

15.C在程序设计中,算法执行效率与数据的存储结构密切相关。算法的

空间复杂度是指算法执行过程中所需存储空间。

16.B

17.C

18.D

在表达式a*b+d-c中,double的类型最高,C语言中,由低类型自动向

高类型转换,所以最后的结果一定是double型。

19.A

20.B

选项A中,将二维数组a的6个元素都赋值为0,正确;选项B中,

由于a包含2个元素,每个元素都是包含3个元素的一维数组,初始

化列表中包含3个元素,每个元素是包含2个元素的数组,错误;选

项C中,a的每个元素是包含3个元素的一维数组,初始化列表将a[0]

的3个元素初始化为1,2,0,将a[l]的3个元素初始化为0,0,0,

正确;选项D中,将a[0]初始化为1,2,3,将a[l]初始化为4,5,

6,正确。本题答案为B选项。

21.\n\tvoidproc(char*str)\n

\n

\n\t{\n

\n

\n\tchar*p=str:\n

\n

\n\twhile(*p==*)p++;//通过P的移动来达\n

\n

\n\t到使P指向第一个不是*号的字符\n

\n

\n\tfor(;*p!=\0;p++,str++)//把从第一个\n

\n

\n\t不是*号的字符放到a中4\n

\n

\n\t*str=*P:\n

\n

\n\t*str=\0;//最后用\0作为字符串结束标志\n

\n

\n\t}\n

\n

\n\t【解析】题目中要求将字符串中的前导*号全部删除首先将指针p

移动到第一个不是*的字符,将指针P之后的字符放入原来的字符串

中,并为新的字符串添加结束符。\n

22.

【解析】题目中要求将字符串中的前导*号全部删除,首先将指针P移

动到第一个不是*的字符,将指针P之后的字符放入原来的字符串中,

并为新的字符串添加结束符。

23.\n\tintproc(STREC*a,STREC*b,inti,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之外的数5

\n

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

\n

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

\n

\n\t}\n

\n

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

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

将符合要求的学生个数返回给主函数。\n

24.1char*fun(char(*a)[81],intnum,char*max)

2{

3inti=0;

4max=a[0];

5for(i=0;i<num;i++)/*找出最长的一个字符串*/

6if(strlen(max)<strlen(a[i]))

7max=a[i];

8retummax;/*传回最长字符串的地址*/

9)

<strlen(a[i]))

解答本题之前,首先应该明白ss是数组名,是指数组首元素的地址。

max是字符指针变量,可以指向一个字符串。假定max指向数组中第

1个字符串,它的长度最长。再使用循环语句遍历字符串数组,使用条

件语句判断该字符串的长度是否大于max指向的字符串的长度,如大

于,则max指向该字符串。保证max指向的字符串最长,并将其作为

函数值返回。</strlen(a[i]))

25.

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

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

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

26.

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

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

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

回到主函数中。

27.\n#include,,stdio.h"

\nintfun(inta)

\n{intI;

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

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

\nl++;

\nif(a%I==O)

\n{printf(4t%disnotaprime!,5,a);

\nreturn0;}

\nprintf("%disaprime!,,,a);

\nreturn1;}

\nmain

\n{intx;

\nprintf("\\npleaseenteranumber:^^);

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

\nprintfCt%d\\n,,,fun(x));}

\n

28.

【解析】字符串数组中每一行都是一个完整的字符串,其结束标志为‘

\0'。因此,通过字符串的结束标志来判断每一个字符串是否结束,将

字符串数组中的所有字符串均赋值给新的一维数组b来完成字符串的

合并。

29.

【解析】要计算出主字符串中包含子字符串的个数,应该检查主字符串

中从第一个到最后一个字符。每出现一个计数变量加1,最后将得到的

个数返回给主函数。

30.

【解析】要实现对变量的值保留2位小数。并对第3位小数进行四舍五

入,可以通过先将其小数点后3位变为正数后加5,所得到的数除10,

最后再除100来实现。

31.(1)错误:a=NuLL;正确:a=NULL;(2)错误;if(r==p){r++;p++;}正

确if(*r==*p){r++;p++;}(l)错误a=NuLL;正确:a=NULL;\r\n(2)错误;

if(r==p){r++;p++;}正确:if(*r==*p){r++;p++;}解析:题目要求将最后

一次出现的输入字符后面的字符串做一复制处理,并在主函数中输出从

此地址开始的字符串。a=NuLL;是明显的常识性错误。题目中已经定

义了指针变量chaf*p,*r,*a;,循环条件应该是if(*r==*p){r++;p++;},而

非iRf(r==p){r++;p++;)。

32.⑴错误:if(i%k!=0)正确:if(i%k=0)(2)错误:if(k<i)正确:if(k>=i)(l)

错误:if(i%k!=0)正确:if(i%k=0)\r\n(2)错误:if(k<i)正确:if(k>=i)解

析也许刚接触C语言的学习者对素数的概念不清楚,在这里说明一下,

素数就是质数,本题的任务是随便输入一个整数m,然后在m的后面寻

找紧跟m的一个质数,作为函数值返回。

for(i=m+l;;i++){

是从m后面的一位开始循环,将m后面一位的值赋予io然后;我们依

次判断m后面的一位是否为素数。

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

if(i%k==0)

是一个简单的数学判断问题,判断i被赋予的值与k的余数是否为零。

33.(l)while(i<j)或while。>i)⑵if(*a)(l)while(i<j)或while。>i)(2)if(*a)

解析:本题中函数的功能是首先把b所指字符串中的字符按逆序存放,

然后将a所指字符串中的字符和b所指字符串中的字符,按排列的顺序

交叉合并到c所指数组中,过长的剩余字符接在c所指数组的尾部。其

中,对于字符串的逆序过程,分别用变量i和j代表字符串中开始和末

尾字符的下标,把下标i和j元素中的值对调后,i++和j-直到i的值大

于j时逆序操作完成。

34.(l)voidfun(char*a)(2)printf("%c"*a)

(

温馨提示

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

评论

0/150

提交评论