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

下载本文档

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

文档简介

2021年江西省抚州市全国计算机等级考试

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

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

一、2.填空题(10题)

1.需求分析的最终结果是产生【】。

2.设有定义:intn,*k=&n;以下语句将利用指针变量k读写变量n中

的内容,请将语句补充完整。

scanf("%d”,);

printf("%d\n",);

3.若x,y和z均是血型变量,则执行下面表达式后的x值为【】。

x=(y=4)+(z=2)

4.在面向对象方法中,属性与操作相似的一组对象称为【】。

5.在面向对象的方法中,描述的是具有相似属性与操作的一组

对象。

6.下列程序的运行结果是____o

main()

{intx=l,y=2,z=3;

printf("%d,",x<y?y:x);

printf("%d,",z<y?x++:y++);

printf("%d,%d",x,y);

7.某二叉树中度为2的结点有18个,则该二叉树中有【】个叶子结

点。

8.表达式l/2*(int)3.7/(int)(2.4*(1.5+2.5))值的数据类型为。

9.以下程序的输出结果是()。

#include<stdio.h>

main()

fintx=0;

sub(&x,16,2);

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

)

sub(int*a,intn,intk)

{if(k<=n)sub(a,n/2,2*k);

*a+=k;

)

10.以下程序运行后的输出结果是____O

main()

{inta[4][4]={{l,2,3,4},{5,6,7,8},{11,12,13,14},{15,16,17,18)};

inti=O,j=O,s=O;

while(i++<4)

{if(i==2||i==4)continue;

j=0;

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

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

}

二、单选题(10题)

IL设计软件结构是在软件生命周期的()o

A.软件定义期B.软件开发期C.软件维护期D.以上3个都不是

12.设有序顺序表中有n个数据元素,则利用二分查找法查找数据元素

X的最多比较次数不超过()。

A.log=+1

B.log2(n-1)

C.logn

D.log2(n+1)

13.下列对于线性链表的描述中正确的是()。

A.存储空间不一定连续,且各元素的存储顺序是任意的

B.存储空间不一定连续,且前件元素一定存储在后件元素的前面

C.存储空间必须连续,且前件元素一定存储在后件元素的前面

D.存储空间必须连续,且各元素的存储顺序是任意的

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

A.C语言函数中定义的自动变量,系统不自动赋确定的初值

B.在C语言的同一函数中,各复合语句内可以定义变量,其作用域仅限

于本复合语句内

C.C语言函数中定义的赋有初值的静态变量,每调用一次函数为其赋一

次初值

D.C语言函数的形参不可以说明为static型变量

15.设变量已正确定义并赋值,以下正确的表达式是()。

A.x=y+z+5.++yB.int(15.8%5)C.x=y*5=x+zD.x=25%5.0

16.有以下程序

#include<stdio.h>

structtt

(intx;structtt*y;)*P;

structtta[4]={20,a+1,15,a+2,30,a+3,17,a);

main

{inti;

p=a;

for(i=l;i<=2;i++){printf("%d,”,p->x);P=p->y;}

)

程序的运行结果是()。A.20,30,B.30,17,C.15,30,D.20,15,

17.已知字母a的ASCII码为十进制数97,下面程序的输出结果是()。

#include<stdio.h>main(){charcl,c2;cl='a'+'6'-'O';c2='a'+'3'-'0';

printf("%c,%c\n",cl,c2);}

A.输出无定值B.d,eC.e,fD.g,d

18.若变量已正确定义,则语句“s=32;s八=32;printf("%d”,s);”的输出结果

是()O

A.-lB.OC.lD.32

19.判断一包含n个整数的数组a口中是否存在i、j、k满足a[i]+a[j]+a[k]=O

的时间复杂度需要0

A.0(nA2)B.O(nA21ogn)C.0(nA3)D.O(nlogn)

20.若a是数值类型,则逻辑表达式“(a==l)||(a!=l)”的值是()。

A.1B.0C.2D.不知道a的值,不能确定

三、程序设计题(10题)

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

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

数,其功能是从传入的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[],"****")==o)/*用4个星号作为结束输入的标志

*/

20{

21i++;

22gets(ss[i]);

24puts(ss[i]);

25}

26n=i;

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

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

29/********************/

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

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

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

33fclose(wf);

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

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

案的项目中包含一个源程序文件progl.Co程序中将m个人的成绩存放

在score数组中,请编写函数fun(),它的功能是将低于平均分的人数

作为函数值返回,将低于平均分的分数放在below所指的数组中。

例如,当score数组中的数据为10、20、30、40、50、60、70、80、

90时,函数返回的人数应该是4,below中的数据应为10、20、30、

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

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

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

试题程序:

1#include<conio.h>

2finclude<stdio.h>

3#include<string.h>

4#include<stdlib-h>

5intfun(intscore[],intm,int

翳below[])

6{

7

8)

9voidmain()

W(

11FILE*wf;

12inti,n,below[9];

13intscore[9]={10,20,30,40,

50,60,70,80,90};

14system(MCLSM);

15n=fun(score,9,below);

16printf(M\nBelowtheaverage

scoreare:w);

17for(i=O;i<n;i-t-+)

18printf(M%dbelow[i]);

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

20wf=fopenCout.datMwM);

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

22fprintf(wfzbelow[i]);

23fclose(wf);

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

25

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

Uincl«Mir<Mdhk.

includeVcotuo.

・tticlude

=includrVgnh,

doubleproc<mlm)

voedowuM>

■尸dS>|

prmt{(*KAn**proc(30>>i

24.

编写函数fun,其功能是:从字符串中删除指定的字符:,同字母的大、小写按不同字符处理。

例如,若程序执行时输入字符串为:

“hirborandBorlandc++'

从键盘上输入字符n,.则输出为:

“turbocad)>orkdC++”

如果输入的字符在字符串中不存在,则字符串照原样输出。

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

请勿改动主函数main和其他函数中的任何内容,仅在函数Gn的花括号中填入你编写的若干语句

试题程序:

include<sldio.h>

voidfun(chars(]jntc)

(

I.

main()

(staticcharstrfJ="turhocandbodan<|e++”;

charch:

charch:

printfT原始字符串:%s\n,,.slr);

printfT输入一个字符An");

scanfT%c,&ch);

ftm(str.ch);

printf(hstr[]=%3\n"vStr):

Jitrcpy(str,,rturbocandIxirland(:++'*);

fun(strja"):

25.学生的记录由学号和成绩组成,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),

{"GA012",66},{"GA014”,82),

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

{"GA018",64),{"GA016",86}};

STRECh[M];

inti,n,low,heigh,t;

printf("Enter2integernumberlow&

heigh:");

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

if(heigh<low)9

(,

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

)

26.

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

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

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

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

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

语句。试题程序:

8mcludtV'idl4k

衽includeVadid

*tncludrVenao.h)

IltMitproHfloath)

voidtntinC)

float||

*01^")i

prifit(<*Eni«r(te>i

Kani<eKP«&•£)i

pntitfC*Tlxonginalin:>>i

phxii(<*Mf\n\n*•()i

pnn<f<*TbemuluMAn**proHO)i

27.程序定义了MxM的二维数组,并在主函数中自动赋值。请编写函

数proc(inta口[M],intn),该函数的功能是使数组左下半三角元素中的

值加上n。例如,a数组中的值为:

I|234SI

«7S910

1•II1213141$

1417181920

2122U24t5

后f>的假”2••举网上“小扃•教M中的值力।

32345

S9S910

|13141S1415

1819202120

123242526271

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

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

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

试题程序:

StnclutieVtime.Ii>

SincludeVwtdao.h>

3inrludeVcoaio.h>

9inriiide<Ndl,hh>

9S

roidpfoc<mtU][M,・witn>

voidtBAin()

itif”,?♦Uji

mtarr[S](5■」・2.3・4・5・6・7・,・,.IQ・11J2・I3・

14U$.I€J7«18,2,23.24.2Slg

■yaE«yf》i

pnmf(*••••Thearray••••\w->»

pniwtf("n"K4d\fie«ci>i

proc(arr»n)i

t>nntf<*••••THFRPilJI.T••••\n*>■

fort1**0|i〈Mil++)

(or(j™0ij<?M(♦)

*%4di

pctotfC*\o")i

28.使用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("Enterastring:\n^^);

gets(s);

fun(s);

printf("Thestringafterdeleted:\n^^);

puts(s);

29.

规定箱人的字符申中只包含字母和*号c请编写函数fun.其功能是:将字符串尾部的*号全部删除.

前面和中间的♦号不动。

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

A*BC*DEF"Tc在编写单数时,不得使用C语言提供的字符串函数.

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

请勿的动土函敷nuin和其他所微中的任何内容,仅在函教firn的花括号中填入你煽鸟妁若干语句“

试题程序:

#incb)de<stdio.h>

#incltidr<conio.h>・

voidfjn(char•«)

voidmain()

{?hars(81k

?rintfl["Enlerastrin!::\n。:

arictfC^Thcstringafterdeleted:\nw);

putt(附

30.从键盘上输出10个整数存入一维数组中,按由大到小的顺序输出。

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

31.在主函数中从键盘输入若干个数放入数组中,用。结束输入并放在

最后一个元素中。下列给定程序中,函数fun()的功能是计算数组元素中

值为负数的平均值(不包括0)。

例如:数组中元素的值依次为43,47,-21,53,-8,12,0,则程序的

运行结果为-25.333333。

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

doublefun(intx口)

(

doublesum=0.0;

intc=0,i=0;

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

while(x[i]==0)

(

if(x[i]<0)

(

sum=sum+x[i];

C++;

i++;

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

sum=sum\c;

returnsum;

)

main()

(

intx[1000];

inti=0;

clrscr();

printf("\nPleaseentersomedata(endwith

0):”);

do

(

scanf("%d",&x[i]);

}while(x[i++]!=0);

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

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

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

位。

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

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

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

[试题源程序]

#include<stdio.h>

voidfun(longs,longt)

longsl=10;

s/=10;

*t=s%10;

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

while(s<0)

(

s=s/100;

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

sl=sl*10;

}

)

msin()

(

longs,t;

printf("\nPleaseenters:");

scanf("%ld",&s);

fun(s,&t);

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

)

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

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

JC,—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

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

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

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

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

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

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

注意:不要改动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

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

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

37.下列给定程序中,函数fun()的功能是;求S的值。设

S=(22/l*30))*(42/(3*5))*(62/(5*7))*...*(2k)2/((2k-l)*(2k+l))

例如,当k为10时,函数的值应为1.533852。

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

#include<math.h>

fun(intk)

{ihtn;floats,w,p,q;

n=l;

s=1.0;

while(n<=k)

{w=2.0*n;

p=w-1.0;

q=w+1.0;

s=s*w*w/p/q;

n++;

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

returns

main()

{clrscr();

printf("%nn",fun(10));

38.下列给定程序是建立一个带头结点的单向链表,并用随机函数为各

结点赋值。函数fun()的功能是:将单向链表结点(不包括头结点)数据域

为偶数的值累加起来,并作为函数值返回。

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

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

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

[试题源程序]

#include<stdio.h>

#include<stdiib.h>

typedefstructaa

intdata;

structaa*next;

JNODE;

intfun(NODE*h)

intsum=0;

NODE*P;

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

P=h;

while(P->next)

if(p->data%2==0)

sum+=p->data;

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

p=h->next;

)

returnsum;

}

NODE*creatlink(intn)

(

NODE*h,*p,*s,*q;

inti,x;

h=p=(NODE*)malloc(sizeof(NODE));

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

(

s=(NODE*)malloc(sizeof(NODE));

s->data=rand()%16;

s->next=p->next;

p->next=s;

p=p->next;

)

p->next=NULL;

returnh;

outlink(NODE*h,FILE*Pf)

(

NODE*p;

p=h->next;

fprintf(Pf,"\n\nTHELIST:\n\nHEAD");

while(P)

(

fprintf(Pf,>%d",p->data);p=p->next;

)

fprintf(pf,"\n");

}

outresult(ints,FILE*pf)

(

fprintf(Pf,"\nThesumofevennumbers:%d\n",s);

)

main()

(

NODE*head;inteven;

head=creatlink(12);

head->data=9000;

outlink(head,stdout);

even=fun(head);

printf("\nTheresult:\n");outresult(even,stdout);

)

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

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

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

intfun(intm)

{inti,k;

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

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

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

if(i%k!=0)

break;

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

if(k<i)

return(i);

)

)

main()

{intn;

clrscr();

printf("\nPleaseentern:");

scanf("%d",&n);

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

40.给定程序M0D11.C中函数fun的功能是:根据以下公式求兀值,

并作为函数值返回。

例如,给指定精度的变量eps输入0.0005时,应当输出Pi=3.141480。

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

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

1•*include<math.h>

2!finclude<stdio.h>

3jdoublefun(doubleeps)

4•{doubles,t;intn-1;

5s-0.0;

6।/found…………

7t-0;

8while(Ceps)

9(s*-t;

10;t»t♦n/(2*n*l);

11!n

12)

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

14return(s);

15|)•・

16;main()

17;(doublex;

18!printf(w\nPleaseentera

jprecision:scanf(w%lf&x);

19jprintf("\neps«%lfr

w

Pi»%lf\n\nrxffun(x));

20•}

五、程序改错题(2题)

41.

下列给定程序中,函数proc()的功能是:将长整型数中为偶数的数依

次取出,构成一个新数放在t中。高位仍在高位,低位仍在低位。例如,

当s中的数为87653142时,t中的数为8642。请修改程序中的错误,

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

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

#isirludr

修ifirludrVcoiiio.Ii>

•isicludr<"di6ll)

<roidptocCIcxig«*iong•O

mldi

longB1*li

•t*Oi

wliW(.>0)

//♦•••(owmi••••

i((dXl*O>

••••found••••

9«divuiifiC)

(long

»ywirm(*CLS*)i

prwiifl"\APICOMenterHi*>•acanf

proeO.&ih

『E・“'TherrMjhi«t

42.下列给定程序中,函数proc()的功能是:对M名学生的学习成绩,

按从低到高的顺序找出m(mS10)名学生来,并将这些学生数据存放在

一个动态分配的连续存储区中,此存储区的首地址作为函数值返回。

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

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

构。

试题程序:

夕include<widlikh>

Siocludr<cocUo.h>

9includeVsinnft.h>

9inrludrVzdidh>

,include<mdk>c.h>

gdrfirwM10

trpctielMrwi»*

(

duiT

bit»!

\STU.

STU•procCSTU•[].irnm)

I

STVb[ML*u

tntuj・lu

//•♦••found♦•••

•・■calhHm.MMU(STU)>&

foKi-OtKMii*

lor€h*Otli<iniki+)

(or《I-LO8YM“++)

附2工,<2].»)i-H

//••••loutid••••

•[kJ.num-b(j).aumi

•till»•

2]..-iooi

r«<uraii

rod(MitreHtlt(STU*[]•FILE•pO

mtI*

fprwitf<p4.*NoMark"Xd\n*•

a[i].num*山工«)i

fpnn«(<p4«"\H\II*>i

voadnuiin<)

(STUZM]=ICADI\8lhCAD:%MF.

\S4I.CAO4*.an.

CAOS\ni.CAD«•.«>>.

(•A07-.TthCAM•・6”・

CM9-.TOKCAW.riHi

STUepOrdrri

pn!M«e«•••THERESULT••••"・九

OUlfVMlltC>I

pniM«thefMimbrrolthrwtiedmt*whohave

fewerMtirei*>»

•canf(NKr.^m)i

whik(m>10>

pnntl(a\iiGivethenumbera(theUudrm.whohaw

lowertcorvt*>i

»CMU<•aOi

p(>rdrr-proc<»tu.ni>i

phM<(*••••THERESULT•••

pnn<f(vTbrwpAns)»

for<j-0iYoM2♦)

pnntf(aK»X4\n*«p(>rdef{i].num*f<Mrr{i]»9)>

free(p(>r<kr)i

六、操作题(2题)

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

S=(l-1/2)+(1/3-1/4)+...+(1/(2n-l)-l/2n)

例如,若主函数从键盘给n输入20后,则输出为S=0.680803o

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

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

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

试题程序:

#includet:stdio.h>

doubleproc(intn)

(

)

voidmain

(

intn;

doublesum;

printf("\nlnputn:");

scanf("%d",&n);

sum=proc(n)。

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

)

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.k*kk*k解析:本题考查的知识点是scarf()函数和printf()函数的用法。

scanf()函数有两个参数,第一个参数是格式控制部分(格式控制部分是字

符串,主要由“%”号和格式字符组成)第二个参数是一地址列表(地址列

表是由多个地址组成,可以是变量的地址,也可以是字符串的首地址)。

而第一个空格处位于scanf()函数的第二个参数处,所以,第一个空应该

填地址k。printf()函数有两个参数,第一个参数是输出格式字符串(输出

格式字符串是由控制输出格式的字符和非格式字符组成的,通常是字符

常量。非格式字符作为输出数据的间隔,输出时原样输出)第二个参数为

一输出表达式表(输出表达式表是由若干个需要计算和输出的表达式组

成的,表达式之间用逗号分隔开)。而第;个空位于printf()函数的第二

个参数处,所以应该填*K。

3.6

4.类类解析在面向对象方法中,类描述的是具有相似性质的一组对象。

所以,属性与操作相似的一组对象称为类。

5.类类解析:在面向对象的方法中,把具有相同属性和方法的对象称为

类,类是对象的抽象,对象是类的实例。

6.22132,2,1,3解析:本题考查运算符和条件运算符的使用。

“表达式1?表达式2:表达式3”的功能是:表达式1的值若非0,则计

算表达式2的值,且表达式2的值为最终结果;若表达式1的值为0,

则计算表达式3的值,且为最终结果。

本题中,x=l,y=2时,x<y成立,输出y的值2;y=2,z=3时,z<y

不成立,执行y++,输出2后y值增1,所以最后一个输出x的值不变

为1,y的值为增加后的3。

7.1919解析:根据二叉树的性质:在任意一棵二叉树中,度为。的结点

(即叶子结点)总是比度为2的结点多一个。本题中度为2的结点数为18,

故叶子结点数为18+1=19个。

8.整型整型解析:上面的表达式中,通过强制类型转换把最后参与运算

的数据都转换成了int型,所以最后得到的结果也是int类型。

9.1414解析:本题考查递归函数的调用。在主函数中调用sub(&x,16,2)

函数,此时n=16,k=2,if语句的控制的条件k<=n成立,所以执行下

面的语句,调用sub(x,8,4),此时n=8,k=4,if语句的控制条件k<=n

成立,所以执行下面的语句,调用sub(x,4,8),此时n=4,k=8,if语句

控制的条件k<=n不成立,因此,最后得x=2+4+8=14。

10.92

n.BB。【解析】设计软件结构,是在软件概要设计阶段进行的,而概要

设计属于软件开发期。

12.A

13.A解析:在链式存储结构中,存储数据的存储空间可以不连续,各数

据结点的存储顺序与数据元素之间的逻辑关系可以不一致,数据元素之

间的逻辑关系,是由指针域来确定的。由此可见,选项A的描述正确。

因此,本题的正确答案为A。

14.CA选项描述正确,自动变量未被赋初值,为随机值;B选项描述正

确,除在函数开始位置定义变量外,在复合语句内也可以定义变量;C

选项描述错误,函数内的静态变量只在第1次调用时赋值,以后调用保

留上次的值;D选项描述正确,形参属于局部变量,占用动态存储区,

而static型变量占用静态存储区。故本题答案为C选项。

15.A

[解析]B)与D)选项中取模运算符%的左右两个操作数均应为整数,所

以B)、D)错误。C)选项中不能将x+z的值赋给表达式y*5.所以C)错

、口

沃。

16.D

程序的结构体数组a的元素形成了一个单向的循环链表,每个元素的

指针成员都指向下一个元素的地址。

17.D解析:C语言规定,所有字符常量都可以化为整型常量来处理,因

而字符常量也可以参与算术运算。注:字符常量参与算术运算时,其实

是使用其对应的ASCII码值进行计算。本题中,区对应的ASCII码值是

97o题中虽然没有给6和O的ASCII码值,但应该知道是将字符6

转换成整数6的表达式,所以cl=,a,+6-O=103,c2=1a'+'3'-10'=100,按照

字符型输出分别是g和d。

18.B异或运算只有在两个比较的位不同时其结果为1,否则结果为0。

题目中两个值相同,所以结果为0。故本题答案为B选项。

19.A

20.A逻辑或“||”要求两边的运算对象有一个非零值,结果就为真。变量a

的值不确定,但是若a为1,则左边运算对象的值为1;若a不为1,

则右边运算对象的值为1,所以总能保证一边为非零值。故本题答案为

A选项。

21.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];

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

9}

<strlen(a[i]))

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

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

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

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

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

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

22.1intfun(intscore[],intm,intbe-low[])

2{

3inti,j=O;

4floatav=0.0;

5for(i=0;i

<m;i++)

6av=av+score[i]/m;/*求平均值*/</m;i++)

<m;i++)

7for(i=0;i<m;i++)

gif(score[i]</m;i++)

</m;i++)

<m;i++)

<m;i++)

<av)p*如果分数<>8低于平均分,则将此分数放入below数::组中

*/</av)p*如果分数<></m;i++)

</m;i++)

<m;i++)

<m;i++)

<av)p*如果分数<>9below[j++]=score[i];</av)p*如果分数<></m;i++)

</m;i++)

<m;i++)

<m;i++)

<av)p*如果分数<>10returnj;/*</av)p*如果分数<></m;i++)

</m;i++)

<m;i++)

<m;i++)

<av)p*如果分数。返回低于平均分的人数*/U}要计算低于平均分的人

数,首先应该求出数组score中各元素的平均值。然后通过for循环语

句和if条件语句找出低于平均值的分数。该题第1个循环的作用是求

出平均值av,第2个循环的作用是找出数组score中低于平均值的成

绩记录并存入below数组中。</av)p*如果分数<></m;i++)

</m;i++)

23.

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

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

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

24.

【答案】

vni(ifun(cha-s[],intc)

I,

inti=O;.

char*p;

P=s;

while(*p)/*判断是否为结束标识符*/

{,

if(*p!=c)/*判断字符串中字符是否与指定字符相同*/

(•

-s(i>*P;"如不同,将重新组合字符串*/

i++;

}/•如相同,则处理下一个字符*/

p++;}

)

【解析】

通过循环将非指定字符重新保存,字符串末尾加上结束标识符。

25.\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之外的数\n

\n

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

\n

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

\n

\n\t}\n

\n

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

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

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

26.

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

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

最后再除100来实现。

27.

【解析】使数组左下半三角元素中的值加上n,首先要找出数组中下半

三角元素。数组中下半三角元素的特点是,其列下标小于等于行下

标。根据这个特点找出所有的下半三角元素再加上n放在原来的位置

上。

28.voidfun(char*a)

(

inti,j=0;

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

if(a[i]!=V,)

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

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

a[j]='\0';

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

)

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

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

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

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

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

符串结束标志、0,

29.

【答案】

voidfun(char*t)

I

whilM•心⑼

a++;

/*指针a指向字符串的尾部,/

while(*ae'巧

a-;/•指针”指向最后一个字母•/

•(a+l)=W;/«在字符串最后加上结束标识符•/

)

(解析】

在字符串最后一个不是•号的字符后面加上结束符号惜,来删除其尾部的•号。先找到字符串的结尾.

往前逐个判断是否为♦号,直到找到最后一个字母为止,最后在该字符后面加上结束符号

30.\n#include'stdio.h'

\nmain

\n{inti,j,a[10];

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

\nscanf('%d',&a[i]);

\nfor(i=0;i<9=;i++)

\nfor(j=9;j>i;j-)

\nif(a[j-l]{t=a|j-l];

\na[j-l]=a[j];

\na[j]=t;}

\nfor(i=0;i<10;i++)

\nprintfC%d',a[i]);

\n}

\n

31.(1)错误:while(x[i]==O)正确:while(x[i]!=O)(2)错误:sum=sum\c;

正确:sum=sum/c;(l)错误:while(x[i]==O)正确:while(x[i]!=0)\r\n(2)错

误:sum=sum\\c;正确:sum=sum/c;解析:错误1:此处考查的是对循

环条件的理解,当被判断的数组元素为。时,说明这是数组的最后一个

元素,此时要跳出循环。错误2:C语言中的除法运算符是“/”,而不是

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

while(s<0)

温馨提示

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

评论

0/150

提交评论