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

下载本文档

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

文档简介

2021年湖南省岳阳市全国计算机等级考试

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

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

一、2.填空题(10题)

1.软件维护活动包括以下几类:改正性维护、适应性维护、【】维护和

预防性维护。

2.对软件是否能达到用户所期望的要求的测试称为【】。

3.若有以下程序:

main()

(

inta=4,b=3,c==5,t=0;

if(a<b)t=a;a=b;b=t;

if(a<c)t=a;a=c;c=t;

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

)

执行后输出结果是【】。

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

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

5.已有定义如下:

structnode

{intdata;

structnode*next;

)*P;

以下语句调用malloc函数,使指针p指向一个具有structnode类型的动

态存储空间。请填空。

p=(structnode*)malloc([]);

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

main()

{inti,a[10];

a[0]=a[l]=l;

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

a[i]=a[i-2]+a[i-l];

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

{if(i%2==0)printf("\n");

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

)

)

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

voidreverse(inta[],intn)

{inti,t;

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

{t=a[i];a[i]=a[n-l-i];a[n-l-i]=t;}

)

main()

{intb[10]={l,2,3,4,5,6,7,8,9,10);inti,s=0;

reverse(b,8);

for(i=6;i<10;i++)s+=b[i];

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

8.函数mycmp(char*s,char*t)的功能提比较字符串s和t的大小,当s等

于t时返回0,当s>t返回正值,当s<t时返回负值。请填空。

mycmp(char*s,char*t)

{while(*s==*t)

{if(*s=='\0')return0;

++s;++t;

)

return([])

)

9.在面向对象方法中,类之间共享属性和方法的机制称为o

10.关系代数是关系操作语言的一种传统表示方式,它以集合代数为基

础,它的运算对象和运算结果均为()。

二、单选题(10题)

11.有以下程序段

#include<stdio.h>

voidfun(char*fname,char*st)

{FILE*myf;

inti;

myf=fopen(fname,"w");

for(i=O;i<strlen(st);i++)iputc(st[i],myf);

fclose(myf);

main()

{fun("test.t","newworld");

fun("test.t","hello,");}

程序执行后,文件test.t中的内容是

A.A.hello,

B.newworldhello,

C.newworld

D.hello,rld

12.下面程序的输出结果是o#include<stdio.h>

main(){char*p[]={"BOOL","OPK","H","SP"};inti:for(i=3;i>

=0;i-,i-)printf("%c",*p[i]);printf("\n");!

A.SOB.SPC.SPOPKD.SHOB

13.

(5)数据库设计的四个阶段是:需求分析、概念设计、逻辑设计和().

A)编码设计B)测试阶段C)运行阶段D)物理设计

14.有以下程序:

intfun(intx)

{intp;

if(x==0||x==l)return(3);

p=x-fun(x-2);

returnp;

mam

{printf("%d\n",fun(7));}

执行后的结果是()。

A.7B.3C.2D.O

15.关于C语言中数的表示,以下叙述中正确的是()o

A.只有整型数在允许范围内能精确无误地表示,实型数会有误差

B.只要在允许范围内整型数和实型数都能精确地表示

C.只有实型数在允许范围内能精确无误地表示,整形数会有误差

D.只有用八进制表示的数才不会有误差

16.给出以下定义:charx止"abcdefg";chary口={宜,};则正确

的叙述为()。

A.数组x和数组y等价B.数组x和数组y的长度相同C.数组x的长度

大于数组y的长度D.数组x的长度小于数组y的长度

17.有以下程序(提示:程序中fseek(fp-2L*sizeof(int),SEEK_END);语

句的作用是使位置指针从文件末尾向前移2*sizeof(ing)字节)#include

<stdio.h>main(){FILE*fp;inti,a[4]={l,2,3,4},b;

fp=fopen("data.dat","wb");for(i=0;i<4;i++)fwrite(&a[i],sizeof(int),l,fp);

fclose(fp);fp=fopen("data.dat","rb");fseek(fp,-2L*sizeof(int),SEEK_END);

fread(&b,sizeof(int),l,fp);/*从文件中读取sizeof(int)字节的数据到变量

b中*/fclose(fp);printf("%d\n",B);}执行后输出结果是

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

18.在一个无向图中,所有顶点的度数之和等于所有边数的()倍。

A.1/2B.1C.2D,4

29)有以下程序:

/include<stdio.h>

intf(intt[],intn);

main()

{inta[4]={l,2,3,4J,s;

s=f(a,2);printf(,'%d\n,,,s);

}

intRintt[],intn)

{if((n>0)&&(n<5))returnt[n+1]+f(t,n-l);

elsereturn0;

}

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

19.A)4B)7C)10D)6

20.函数filecopy的功能是,将fin所指文件中的内容输出到fout所指文

件中,但函数不完整:

voidfilecopy(FILE*fin,FILE*fout)

{charch;

ch=getc(fin);

while()

{putc(ch,fout);

ch=getc(fin);

)

)

其中下划线处应填入的是OO

A.!feof(fin)B.!feof(fout)C.feof(fin)==lD.feof(fout)==l

三、程序设计题(10题)

21.

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

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

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

main()函数与其他函数中的任何内容,仅在函数fun()的花括号中

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

9b>

3tncliMleVitdio.h>

cicMiblciatm>

voidm*in()

UMMII

douMv*|

FILE•ouu

*\n\nlnpuim.*)i

*on”-%d.•&■》.

fun<in)a

pnfi<R*\n\n»wK(\n\n**>>«

out■fop<flk(e<MtGW.dat-»*w*》।

lor(tn-OimVl(hnB++)

fpnniftour♦•%f\«*«(un<m十SO))3

kkuc^out11

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

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

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

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

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

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

与includeVwtd*o.h>

winclwicVcomcKh>

voidproHehar•*tr)

voednuam<>

rluif*C,I

pnntfea&)vcr•MrifmAti*)i

l>roc<»>i

phnt(<*Th«**trmgaftrrdelrtr(ii\f>)t

put><*><

23.请编一个函数fun(ohlr*str),该函数的功能是把字符串中的内容逆置。

例如,字符串中原有的字符串为asdf9,则调用该函数后,串中的内容为

9fdsao

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

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

试题程序:

#include<string.h>

#include<conio.h>

#include<stdio.h>

#defineN100

voidfun(char*str)

(

)

voidmain

(

chara[N];

FILE*out:

printf("Enterastring:");

gets(a);

printf("Theorigiralstringis:");

puts(a);

fun(a):

printf("Thestringaftermodified:");

puts(a);

strcpy(a,"Welcome!");

fun(a);

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

fprintf(out,"%s".a);

fclose(out);

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

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

其功能是将s所指字符串中ASCII值为奇数的字符删除,将剩余字符形

成的新字符串放在t所指数组中。

例如,若s所指字符串中的内容为“ABCDEFG12345”,其中字符A的

ASCII值为奇数,字符1的ASCII值也为奇数,都应当删除,其他依

此类推。最后t所指的数组中的内容应是“BDF24”。

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

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

#include<string.h>

voidfun(char*s,chart[])

(

)

main()

(

chars[100],t[100],Msg[]=cTleaseenterstrings:";

printf(Msg);

scanf("%s”,s);

fun(s,t);

printf("\nTheresuit

)

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

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

其功能是找出一维整型数组元素中最大的值及其所在的下标,并通过形

参传回。数组元素中的值已在主函数中赋予。

主函数中x是数组名,n表示x中的元素个数,max存放最大值,

index存放最大值所在元素的下标。

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

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

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

试题程序:

#include<time.h>

#include<stdlib.h>

#include<stdio.h>

voidfun(inta[],intn,int*max,int*d)

(

)

voidmain()

(

inti,x[20],max,index,n=10;

srand((unsigned)time(NULL));

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

(

x[i]=rand()%50;

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

/*输出一个随机数组*/

)

printf(n\nH);

fun(xfnf&max,&index);

printf("Max=%5d,Index=%4d\n^^,max,index);

}

26.编写函数proc(),它的功能是求m以内(不包括m)同时能被5与11

整除的所有自然数之和的平方根s,并作为函数值返回。

例如,m为100时,函数值应为s=7.416198o

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

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

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

试题程序:

#includeVstdlib.h>

*include<conio.h>

#includeVmaih.h>

#include<stdio.h>

doubleproc(intn)

voidmain()

(

system("CI-S")i

printf("s=%f\n".proc(100))i

27.

函数fun的功能是:将s所指字符串中下标为偶数同时ASCII值为奇数

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

例如,若s所指字符串中的内容为“ABCDEFG12345”,其中字符C的

ASCII码值为奇数,在数组中的下标为偶数,因此必须删除;而字符1的

ASCII码值为奇数,在数组中的下标为奇数,因此不应当删除,其他依

此类推。最后t所指的数组中的内容应是"BDF12345"o

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

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

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

试题程序:

#iDclude<stdio.h>

include<string.h>

voidfun(char*s»chart[D

(

)

mmn()

{.

chars[100],t[100];

printf(H\nPleaseenterstringS:n);

s);

fun(s.t);

printf("\nThereAultis:%s\nn,t);

)

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

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

其功能是将a、b两个两位正整数合并成一个新的整数放在c中。合并

的方式是将a中的十位数和个位数依次放在变量c的百位和个位上,b

中的十位数和个位数依次放在变量c的千位和十位上。

例如,当a=45,b=12,调用该函数后c=1425。

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

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

voidfun(inta,intb,long*c)

main()

(

inta,b;

longc;

printf^Inputa,b:");

scanf^%d%d,,,&a,&b);

fun(a,b,&c);

printff'Theresultis:%ld\n,,,c);

29.请编写函数proc(),它的功能是:求出str所指字符串中指定字符的

个数,并返回此值。例如,若输入字符串12341234123,输入字符4,

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

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

语句。试题程序:

0inductVa如hh>

sinclude

SinciudeVnufecxh>

■NSI

in<pvocCcImr•Ur.rharc)

VtkidlIIMlillC)

(ciuirchi

*CLS*)।

prtBtfCe\nPleaRtEire•»ir«ngi*>i

I

printfCa\nP1e«Mrmer■chart

ch-getch”()i

printfCe\nThenumberofthecharIJ»<Xd

•pcocKa«ch))<

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

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

该函数的功能是求出二维数组周边元素之和,作为函数值返回。二维数

组中的值在主函数中赋予。例如,若二维数组中的值为

13579299946999813570则函数值为61。注意部分源程序在文件progl.c

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

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

l#include2#include3#include4#defineM45#defineN56intfun(inta[m][n])7{8

9}10voidmain()ll{12FILE*wf;13intaa[M][N]={{l,3,5,7,9},{2,9,9,9,4},{6,

9,9,9,8},{l,3,5,7,0}};14inti,j,y;15system("CLS");16printf("Theoriginaldatai

s:\n");17for(i=0;i<m;i++)

18{for(j=0;j<n;j++)

19printf("%6d",aa[i][j]);20printf("\n");21}22y=fun(aa);23printf("\nThesum:

%d\nM,y);24printf("\n");25/******************/26wf=fopen("out.dat","

w");27fprintf(wf,"%d",y);28fclose(wf)29/******************/30}

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

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

结点数据域赋值。函数fun()的作用是求出单向链表结点(不包括头结点)

数据域中的最大值,并且作为函数值返回。

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

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

试题程序:

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

typedefstructaa

{intdata;

structaa*next;

}NODE;

/**************************/

fun(NODE*h)

{intmax=-1;

NODE*p;

p=h->next;

while(p)

{if(p->data>max)

max=p->data;

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

p=h->next;

returnmax;

}

outresult(ints,FILE*pf)

{fprintf(pf,"\nThemaxinlink:%d\n

",s);J

NODE*creatlink(intn,intm)

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

inti,x;

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

h->data=9999;

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

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

s->data=rand()%m;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,"\nTheLIST:\n\nHEAD");

while(p)

{fprintf(pf,>%d",p->data);

p=p->next;}

fprintf(pf,"\n");

)

main()

{NODE*head;intm;

clrscr();

head=creatlink(12,100);

outlink(head,stdout);

m=fun(head);

printf("\nTheRESULT:\n");outresult

(m,stdout);

)

32.给定程序MODII.C中函数fun的功能是:将长整型数s中每一位

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

仍在低位。

例如,当s中的数为:87653142时,t中的数为:8642。

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

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

tinclude<stdio.h>

2voidfun(longs,long*t)

3{intd;

4longsl«l;

5♦t-0;

6while(s>0)

7{d=s%10;

8founcjw

9if(d%2-0)

10(*t«d*sl**t;

11si**10;

12

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

14s\-10;

15)

16)

17main()

18{longs,t;

19printf("\nPleaseenters:R);

HR

scanf(%ldr&s);

20fun(s,6t);

Rw

21printf(Theresultis:%ld\nrt);

22

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

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

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

公约数为27o

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

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

试题程序:

#include<stdio.h>

intfun(inta,intb)

{intr,t;

if(a<b)

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

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

r=a%b;

while(r!=0)

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

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

return(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);

34.下列给定程序中,函数fun()的功能是:将长整型数中每一位上为偶

数的数依次取出,构成一个新数放在冲。高位仍在高位,低位仍在低位。

例如,当s中的数为87653142时,t中的数为8642。

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

voidfun(longs,long*t)

{intd;

longsl=l;

*t=0;

while(s>0)

{d=s%10;

if(d%2=0)

{*t=d*sl+*t;

sl*=10

s\=10;

main()

{longs,t;

clrscr();

printf("\nPleaseenters:");scanf

("%ld",&s);

fun(s,&t);

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

35.给定程序M0D11.C中函数fun的功能是:找出100至n(不大于

1000)之间三位数字相等的所有整数,把这些整数放在s所指数组中,个

数作为函数值返回。

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

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

1;tinclude<stdio.h>

2!tdefineN100

3intfun(int*s,intn)

4(int

5j-0;

6for(i«100;i<n;i++)(

7/•••••••★★・•★/found/★

8k«n;

9a-k%10;k/-10;

10b=k%10;k/-10;

11/★…………[。口代•…………/

12c-k%10

13if(a-b&&a・・c)s[j++]wi;

14)

15returnj;

16)

17main()

18{inta[N],n,num・0,i;

19do

20{printf(R\nEntern(<*1000):

www

);scanf(%dr&n);}

21while(n>1000);

22num-fun(a,n);

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

w

24for(i«0;i<num;i-H-)printf("%5d9

a[i]);

25printf(w\n\nw);

26

36.给定程序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

37.给定程序MOD11C中函数fun的功能是根据形参m的值(2SmS9),

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

出。

例如,若输入2|若输入4

则输出:|则输出:

12|1234

24|2468

|36912

481216

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

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

finclude<conio.h>

2#include<stdio.h>

3#defineM10

4inta[M][M]-{0};

5/♦♦www*w***w**founcj*w******

6voidfun(int**arintm)

7(intk;

8for(j«0;j<m;j++)

9for(k«0;k<m;k++)

10/••••••一★★★★★found*

11a[j][k]-k*j;

12}

13main()

14(inti,j,n;

15printf(MEntern:H);scanf

w

(%d"r&n);

16fun(a,n);

17for(i»0;i<n;i++)

18{for(j-O;j<n;ji)

19printf("4d。a[i][jl);

20printf(H\nw);

21

22

38.N个有序整数数列已放在一维数组中,给定下列程序中,函数fun()

的功能是:利用折半查找算法查找整数m在数组中的位置。若找到,则

返回其下标值:反之,则返回-1。

折半查找的基本算法是:每次查找前先确定数组中待查的范围:low和

high(low<high),然后把m与中间位置(mid)中元素的值进行比较。如果

m的值大于中间位置元素中的值,则下一次的查找范围放在中间位置之

后的元素中;反之,下次查找范围落在中间位置之前的元素中。直到low

>high,查找结束。

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

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

试题程序:

#include<stdio.h>

#defineN10

/**********************************/

voidfun(inta[],intm)

{intlow—0,high=N-l,mid;

while(low<=high)

{mid=(low+high)/2;

if(m<a[mid])

high=mid-l;

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

elseif(m>=a[mid])

low=mid+l;

elsereturn(mid);

)

return(-l);

)

main()

{inti,a[N]={-3,4,7,9,13,24,67,89,100,180},k,m;

printf("a数组中的数据如下:");

for(i=0;i<N;i++)printf("%d",a[i]);

printf("Enterm:");scanf("%d",&m);

k=fun(a,m);

if(k>=0)printf("m=%d,index=%d\n",m,k);

elseprintf("Notbefound!\n");

39.下列给定程序中,函数fun()的功能是:输出M行N列整数方阵,

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

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

#defineM5

intfun(intn,intXX[][M])

(

inti,j,sum=O;

printf("\nThe%dx%dmatrix:\n",M,M);

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

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

/*************^ound*************I

printf("%4d",XX[ij]);

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

printf('\n');

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

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

*XX[i][n-i-l];

return(sum);

)

main()

intaa[M][M)={{3,12,4,24,35),

{11,3,3,7,56},{61,27,58,49,24},

{17,28,7,36,85},{15,33,5,24,9});

clrscr();

printf("\nTheresultofallelementson2

diagnalsiS%d",fun(M,aa));

40.给定程序MODU.C中函数fun的功能是;从低位开始取出长整型

变量s中偶数位上的数,依次构成一个新数放在t中。高位仍在高位,

低位仍在低位。

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

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

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

1linclude<stdio.h>

2

3voidfun(longs,longt)

4(longsl-10;

5s/«10;

6*t-s%10;

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

8while(s<0)

9ss/100;

10*<s%10*sl♦*t;

11si♦10;

12

13

14main()

15(longs,t;

16printf(w\nPleaseenters:");scanf

("Id”,&s);

17fun(s,&t);

MH

18printf(Theresultis:%ld\nrt);

19

五、程序改错题(2题)

41.下列给定程序中,函数proc()的功能是:给定n个实数,输出平均

值,并统计平均值以上(含平均值)的实数个数。

例如,n=8时,输入90.009,179.623,167.575,100.051,

6.092,154.986,12.432,45.765,所得平均值为94.566635,

在平均值以上的实数个数应为4o

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

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

构。

试题程序:

9mdudeVzdhh

彩mcludrVerno.

9include<sldi(x.

mtproHfloati£j«mtn)

I『,'♦♦♦•found••••

mte-OaflfMHxa*0.0i

forRni

»•'-nOJ/ni

prmifCSa*)i

(or(j-0i

if(M>

♦i

murnci

midmam()

Hoet90.009.179.623.

1$7.$?5dOO.O5U

6・092„・

12432.4S765,

•y»ietv><WCI5")।

•1))i

42.

下列给定程序中,函数fun的功能是求两个非零正整数的最大公约数,

并作为函数值返回。

例如,若nmnl和num2分别为49和21,则输出的最大公约数为7;若

numl和num2分别为27和81,

则输也的最大公约数为27o

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

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

试题程序:

#tnclude<stdio.h>

iirtfiiD(>nt33ntb)

{int侬

if(a<b)

[4b==a^=l;

/****************《1md*****************/

)

r=a%b;

while(r!=O)

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

/*m“*******%11a[********♦********/

I

voidmain()

{intnuml,num2ta;

,printf(MInputnum!num2:");

$canf(M%d%d,\&numl,&num2);

num1=%dnum2=%d\n\n*num1,num2);

a71un(numlfnum2);

ma)dn)uncommondivisoris%d\n\n"破

六、操作题(2题)

43.下列程序的运行结果是

#definePOW(r)(r)*(r)

main()

{intx=3,y=2,t;

t=POW(x+y);

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

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

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

29,31,37o

注意:部分源程序在文件PROGLC文件中。

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

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

tinclude<stdio.h>

2Voidfun(intm,intk,intxx(])

3(

4

5}

6Main()

7(

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

9printf(w\nPleaseentertwo

integers:w);

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

11fun(m,n,zz);

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

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

14printf(H\nH);

15NONOO;

16

17VoidNONO()

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

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

19intm,n,zz[1000],1;

20FILE*rf,*wf;

www

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

22wf・fopen("out・dat","w");

23forti-0;i<10;i++)(

M

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

25fun(mrn,zz);

26for(m■0;m<n;m++)fprintf

(wf,w%d”,zz(m]);

ww

27fprintf(wfr\n);

28}

29fclose(rf);

30fclose(wf);

31}

参考答案

L完善性软件维护活动包括以下几类:改正性维护,适应性维护、完善

性维护和预防性维护,完善性维护是指为了满足用户对软件提出的新功

能与性能要求,需要修改或再开发软件,以扩充软件功能、增强软件性

能、改进加工效率、提高软件的可维护性。

2.有效性测试有效性测试

3.503503解析先判断表达式a<b为假,不执行1=2,但执行“a=b;b=t;",

a的值为3,b的值为0。再判断表达式a<C,值为真,所以执行后面的

3条语句“t=a;a=c;c=t",结果a的值为5,c的值为3,所以最后输出

的结果为5、。和30

4.上溢上溢解析:入队运算是指在循环队列的队尾加入一个新元素。这

个运算有两个基本操作:首先将队尾指针进一(即rear=rear+l),并当

rear=m+l时置rear=1;然后将新元素插入队尾指针指向的位置。当循环

队列非空(s=l)时且队尾指针等于队头指针时,说明循环队列已满,不能

进行入队运算,这种情况称为“上溢”。

5.sizeof(structnode)或4sizeof(structnode)或4解析:malloc(sizeof(struet

node))的作用是开辟一个长度为sizeof(struetnode)的内存区。(structnode

*)的作用是使malloc返回的指针转换为指向structnode类型数据的指

针。

6.11<CR>23<CR>5(<CR代表换行)11<CR>23<CR>5(<CR,

代表换行)解析:本题通过语句“for(i=2;i<5;i++)a[i]=a[i-2]+a[i-];”将数

组中前面两项的和赋值给数组当前元素,得到a的值应为(1,1,2,3,5)。语

句if(i%2==0)pfintfC\\n)是要将数组中的元素以每行2个的形式输出。

7.2222解析:在main函数中,调用reverse函数将b数组中的前8个成

员进行互置,执行完毕后,b数组中的成员为{8,7,6,5,4,3,2,

1,9,10),然后再执行for循环结构,将b[6],b⑺…b[9]的值相加,结

果为22。

8.*s-*t或-*t+*s*s-*t或-*t+*s解析:函数的两个形参是两个字符指

针变量,字符串的首地址是指针变量的值,*s和*t表示字符串数组S和

t的第一个字符,在while循环中,是通过s和t值的不断变化来改变指

针所指向的字符,要改变s和t所指不同字符的ASCII码的差值,必须

使用“*s-*t”得出。

9.继承继承解析:在面向对象的程序设计方法中,某些属性和方法是可

以共享的,由于类从父类中继承而来,这样提高了软件的可重用性。

1。.关系关系

11.D

本题主要考查文件的操作。在本题的程序中,首先定义了一个无返回

值的函数fun,该函数带有两个指针类型的形参,其中第一个形参指向

需要被操作文件的文件名,而第二个形参指向被操作的字符串。在函

数体中,首先定义一个文件指针,然后以只写的方式打开第一个形参

所指向的文件,接着执行for循环,循环结束的条件是循环变量小于被

操作字符串的长度,循环体中的程序fputc(st[i]的功能是将字

符串中的当前字符输入到文件中。由这些分析我们可以知道,函数fun

的作用是将字符串的内容写入到文件中。

在主函数中,两次调用函数fun,当第一次调用时,写入文件的内容为

newworld,然后第二次调用函数,此时打开文件,文件的指针重新回

到开始,然后往文件中写内容“hello,",由于此时文件中已经有内容

"newworld",则需要覆盖前面一部分的内容,因此,程序的最终输出

结果是hello,rid,本题的正确答案选D。

12.A解析:p⑼存放的是“BOOLWO”的首地址:p[l]存放的是“OPKWO”的

首址等。在printf语句中输出的*p[i]表示p国字符串的第一个字符。在

for循环中,i的初值为3,那么输出的第一个字符为“S”,接着两次i--,

则输出的值为*p[l],即字符“0",所以本题的输出为SO。

13.D

14.C

调用函数fun(7)时,由于x的值为7,执行语句“p=x-fun(x-2);”,相当

于执行p=7-fun(5);\r\n调用函数fun(5)时,由于x的值为5,执行语

句"p=x-fun(x-2);”,相当于执行p=7-fun(3);\r\n调用函数fun(3)时,

由于x的值为3,执行语句“p=x-fun(x-2);”,相当于执行p=7-fun(l);

\r\n调用函数fun(l)时,由于X的值为1,执行语句“return(3);",函

数的返回值为3。\r\n因此函数调用fun(7)等价于7-(5-fun(3)),即7-(5

-(3-fun(l))),即7-(5-(3-3)),所以函数fun⑺的返回值为2。答案为C。

15.A

当数据类型是实数时,在存储过程中,当小数部分无限长时,会存在

小数部分的截断,会存在误差,所以答案选择A。

16.C解析:在C语言中,字符串以\\0作为结束符,因此数组x的长度

为7+1=8,而数组y的长度等于7。

17.D解析:函数fbpen(constchar"filename,constchar*mode)的功能是以

mode指定的模式打开filename指定的磁盘文件:fclose(FILE*fp)的功能

是关闭文件指针fp指向的文件;函数fscanf(FILE*fp,const

chat\*formatl,address,--])的功能是根据format中的格式从中指向的文件

中读取数据,并存入到相应的address指向的变量中.函数

fprintf(FILE*fp,constchar*format[,argument--])的功能是把argument歹表

中的表达式值写到ip所指向的文件中;函数fwfite(void*ptr,intsize,int

n,FILE*fp)的功能是把ptr指向的缓冲区中的sizexn个字节写到文件指

针fp指向的文件中。本题中首先定义了一个文件指针fp,然后通过函

数fopen以可,wb'的方式打开文件'data.daft1直接通过一个for循环,每

循环一次调用函数fwrite将数组中的元素a国的值写进fp所指的文件

中,该循环共循环4次,循环完后fp所指文件的内容为123,然后通过

fclose函数关闭fp所指文件.接着通过函数fopen以Tb”的方式打开文

件'data.daf,通过fseek函数让指针中从文件末尾向前移动2个int型大

小字节的,然后通过函数fread从中所指的文件中读取一个int型大小的

数据到变量b中,故此时b的值为3,因此最后输出的,b的值为3,所

以,4个选项中选项D符合题意。

18.C

19.B

20.A

filecopy函数每次从fin文件指针调用getc函数读取一个字符存放到ch

中,再通过while循环调用putc函数将ch写入fout,直到fin指向文

件尾部为止。所以while的循环条件是判断fin是否到文件尾部。这里

使用feof函数判断:feof返回值为真时,表示fin指向了文件尾部,否

则表示fin未到文件尾部。所以while循环条件为!feof(fin)。故本题答

案为A选项。

21.

【解析】首先判断循环中n是否为素数,如果不是素数,求其平方根的

累加和,并返回计算结果,否则跳出判断循环。其中,对于平方根的求

解可以使用C语句中的sqrt()函数。

22.

【解析】要删除字符串尾部的所有*,只要将尾部所有*中的第一个改为

字符串结束符即可。首先,将字符串指针移动到字符串最后一个位置,

检查最后一个字符,是*则将指针前移,否则将指针后移一个位置赋值

作为结束符。

23.\n\tcharch;

\ninti,m,n;

\ni=0:

\nm=n=strlen(str)-1;//求字符串str长度

\nwhile(i<(n+l)/2)//循环逆置交换

\n(

\nch=str[i];

\nstr[i]=str[m];

\nstr[m]=ch:

\ni++;

\nm—;

\n}

\n【解析】在fun函数中,首先求行字符串的长度,然后通过循环进行

字符交换。要注意的是,如果字符串长度是奇数,则最中间的元素在

逆置前后的位置是没有改变的。\n

24.voidfun(char*s,chart[])

(

inti,j=0,n;

n=strlen(s);

/*遍历整个数组*/

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

/*如果元素的ASCII值为偶数*/

if(s[i]%2==0)

(

/*将元素保存到t中*/

t[j]=s[i];

j++;

)

)

要删除ASCII值为奇数的字符,也就是要保留ASCII值为偶数的字符,

将ASCII值为偶数的字符保存到新字符串。所以本题的算法是对原字

符串从头到尾进行扫描,找出ASCII值为偶数的字符并依次存入数组。

25.voidfun(inta[],intn,int*max,int*d)

inti;

*max=a[0];

*d=0;

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

if(*max<a[i])

{*max=a[i];*d=i;J

)

fun()函数形参max用来存放最大值,形参d用来存放最大值的下标。由

于它们都是指针变量,因此在引用所指向的变量时,要进行指针运算。

循环语句用来遍历数组元素,找出最大值。条件语句用来判断该数组元

素是否最大。

温馨提示

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

评论

0/150

提交评论