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

下载本文档

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

文档简介

2022年江苏省南通市全国计算机等级考试

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

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

一、2.填空题(10题)

1.下面程序的功能:输出100以内能被3整除且个位数为6的所有整

数,请填空。

#include<stdio.h>

main()

{inti,j;

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

{j=i*10+6;

if([])continue;

printf("%d",j);

)

)

2.排序是计算机程序设计中的一种重要操作,常见的排序方法有插入排

序、【】和选择排序等。

3.对一组记录{54,38,96,23,15,72,60,45,83}进行直接插入排序时,当插入

第5个记录到有序表时,寻找插入位置需比较[】次。

4.数据元素之间的整体称为逻辑结构。

5.已知bead指向一个带头结点的单向链表,链表中每个结点包含数据域

(data)和指针域(next),数据域为整型。以下函数求出链表中所有连接点

数据域的和值作为函数值返回。请在横线处填入正确内容。

{intdata;structlink*next;}

main()

{structlink*head;

sam();

{stmctlink*p;ints=0;

p=head->next;

while(p){s+=p->data;p=p->next;}

return(s);}

6.软件测试中路径覆盖测试是整个测试的基础,它是对软件【】进行

测试。

7.在对文件操作的过程中,若要求文件的位置指针回到文件的开始处,

应当调用的函数是【】。

8.以下程序运行后的输出结果是【】。

main()

{charm;

m='B'+32;printf("%c\n",m);

9.语句“int(*ptr)();”的含义是____是指向函数的指针,该函数返回一

个int型数据。

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

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

二、单选题(10题)

11.

(24)设有输入语句scanfCa=%d,b=%d,c=%d",&a,&b,&c),为使变量a的值为2,b的值为4,

c的值为8,则从键盘输入数据的正确形式是(

A)132V回车〉B)a=lb=3c=2〈何车〉

C)132V回车)D)a=2,b=4,c=8〈何车〉

12.在执行()操作时,需要使用队列做辅助存储空间。

A.查找哈希(Hash)表B.深度优先搜索网C.前序(根)遍历二叉树D.广度

优先搜索网

13.有以下程序段:

!*tn>ctst

;intx$int♦y;;•pt;

inia[]=I1,2.,b[]={3t4];

structsi(二2:=110.ut20tb';

pl=c;

以下选项中表达式的值为11的是)o

A.」

B.

C.-♦i>«*'

D.1!一、

14.有以下程序:

#include<stdio.h>

main()

{FILE*fp;

inti,a[6]={l,2,3,4,5,6};

Q)=fopen("d.dat”,“w+b”);

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

fwrite(&a[i],sizeof(int),1,fp);

rewind(fp);

fread(&a[3],sizeof(int),3,fp);

fclose(fp);

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

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

)

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

A.4,5,6,4,5,6,B.1,2,3,4,5,6,C.4,5,6,1,2,3,D.1,2,3,1,2,3,

15.以下程序段中,与语句“1^村?(八9?1:0):0;”功能相同的是()。

A.if((a>b)||(b>c))k=l;

elsek=0;

B.if((a>b)&&(b>c))k=l;

elsek=0;

C.if(a<=b)k=0;

elseif(b<=c)k=l;

D.if(a>b)k=l;

elseif(b>c)k=l;

elsek=0;

16.下列函数的类型是()ofun(doublex){floaty;y=3*x-4;returny;}

A.intB.不确定C.voidD.float

17.在计算机中,算法是指0

A.加工方法B.解题方案的准确而完整的描述C.排序方法D.查询方法

18.使用深度优先算法遍历下图,遍历的顺序为()

A.ABCDEFGB.ABDCFEGC.ABDECFGD.ABCDFEG

19.链表不具有的特点是()。

A.插入、删除不需要移动元素B.可随机访问任一元素C不必事先估计

存储空间D.所需空间与线性长度成正比

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

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

A.log=+1

B.log2(n-1)

C.logji

D.log2(n+1)

三、程序设计题(10题)

21.

请编写一个函数voidproc(intm,intk,intxx[]),该函数的功能是将大

于整数m且紧靠m的k个非素数存入所指的数组中。例如,若输入:

105(即M=10,k=5),则应输出:1214151618o注意:部分源程序

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

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

Uindi»de<stdlib.h>

qinclude<cocua.

sinclude<.do.h>

voedRMIM)

mim«n«u(1000ji

*CLS")i

praitiCentertwointeger*

proc<m«n«tt)i

print"*\B*>t

22.

请编写函数proc(),它的功能是计算:s=(1-ln⑴-In⑵-In(3)

-...-In(m))2s作为函数值返回。在C语言中可调用log(n)函数求

In(n)olog函数的引用说明是doublelog(doublex)o例如,若m的

值为10,则proc()函数值为198.934454o注意:部分源程序给出如

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

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

WiftdudeVkfdltb.h>

>indudeVCOCIIQ.

StnciudV〈nedxx.

HindudeVouitKh>

doublepruc(mim)

voidnuiifi()

^CLS9)i

a«proc(IO)>i

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

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

全部置成0。例如,a数组中的值为:

a=i7409

48824

55171

15276

14232

用返网主程序后a数组中的值应为:

07409

00824

00071

00006

nnnnn

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

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

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

试题程序:

Uinclude<conio.h>

iincludeVstdio.h>

3$includeh2>

s?includeVstdlibuh>

二defineM5

voidproc(inta[j[M])

voidmain<>

intarif

srand((unsigned)time(NULL))i

sy5tem("CI.S*)।

print”"・••»Thearray••••\nM)i

for(iraO|j<Mji++)

〃产生一个随机的5,5矩阵

<for(j=Oij<Msj++>

(arrfi]£j]=rand(>%10i

printf("%4d",arr[i](jJ)।

)

printf(**\nw)i

)

proc(arr):

printf(wTHERESULT'n"),

for(i=0$iVM[i++)

(for(j»0ij<Mij4-4->

printf("%4d*warr[i][j])s

printfC*\n**)i

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

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

能是将s所指字符串中下标为偶数同时ASCII值为奇数的字符删除,s

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

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

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

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

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

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

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

试题程序:

1iinclude<stdio.h>

2iinclude<string.h>

3voidfun(char♦srchart[])

■(

5

6}

7main()

8{

chars[100]rt[100];voidNONO();

10printf(H\nPleaseenterstrings:M);

11scanf(••%s”,s);

12fun(s,t);

13printf(M\nTheresultis:%s\n”,t);

14NONO();

15}

16voidNONO()

{/*本函数用于打开文件、输入数据、调

用函数、输出数据及关闭文件,/

17chars[100]rt[100];

18FILE*rf,*wf;

19inti;

nwnM

20rf=fopen(in.datrr);

wnMM

wf=fopen(out.datrw);

for(i«0;i<10;i++){

23fscanf(rfr"%s",s);

fun(s,t);

25fprintf(wf”%s\n”,t);

■r

27fclose(rf);

28fclose(wf);

■}

25.使用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(1'Enterastring:\n");

gets(s);

fun(s);

printf("Thestringafterdeleted:\n^^);

puts(s);

)

26.编写函数fun,其功能是:将所有大于1小于整数m的非素数存入

XX所指数组中,非素数的个数通过k返回。

例如,若输入17,则应输出:46891012141516。注意:部分源程序

在文件PROG1.C中。

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

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

tindude<sldio.h>

voidfun(intm,int•k.intxx[])

main()

I

intm,n,xs[100];

voidNONO();■

printf(w\nPleaseenteranintegernumberbetween10and100:")•

®canf("%d",&n);

ftm(n,zz);

printf(w\n\n71iCTeire%dnon-primenumbmles»than%d:",m,n);

for(nz0;n<m;n++)

printf(*\n%4d",«[n]);

NONO();

I

voidNONO()

I

/•请在此函数内打开文件,憎人测试数据,调用fun函数.

输出数据,关闭文件。•/

intm.n,zx[100](

FILE•rf,•wf;

rf=fbpen(-in.<ht"/r");

wf»fopen("ail.d*t«/ww);

fecanf(rf."%d"t&n);

fttn(n,&m,zz);

fprintf(wf「%d\ii%d\n”.mvn);

for(ns0;n<m;n.+)

H

fprintf(wft%d\n".B(n]);

£E1OM(rf);•

(close(wf);

I

27.有N个学生,每个学生的信息包括学号、性别、姓名、四门课的成

绩,从键盘上输入N个学生的信息,要求输出总平均成绩最高的学生信

息,包括学号、性别、姓名和平均成绩。

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

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

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

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

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

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

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

请勿改动主函数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);

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

)

29.

编写函数如n,其功能是:删除一个字符串中指定下标的字符。其中,

a指向原字符串,删除指定字符后

的字符串存放在b所指的数组中,n放指定的下标。

例:输入一个字符串"world",然后输入3,则调用该函数后的结果为

"word"o

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

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

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

试题程序:

#include<stelio.h>

#include<c<mio.k>

#defineLEN20

voidfiinfchara(],charb[],intn)

{・.

}二

voidmain()

{charstrl[LENJ,str2(LENh

intn;

printf(wEnterthegtringiXn'1);

gets(strl);

priirtfifTitterthepositionthestringdeleted:。

scanf("%d",&n);

fun(strI,str2,n);

prinrfV'Thenewstringis:%s\n[tr2);

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

置。例如,字符串中原有的字符串为asdfg,则调用该函数后,串中的

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

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

•MtrliMleI

■<00*0^Il

•ifwiwW<lb

■N100

*tMO【"■(cKftf*M.I

RMMI4I

FILE•wti

.eXA)l

pniwfl-TheBtnagafw*Mo^tfaW

pwtM•)।

•ircpy<a«*WeiroflM**>•

fittKs)।

>fopeoK*0Kfilt_40ia**w*)g

fpriaraout.■%.*.a).

fcl(Mc<our)*

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

31.下列给定程序中,函数fun。的功能是:求整数x的y次方的低3位

值。例如,整数5的6次方为15625,此值的低3位值为6250

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

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

试题程序:

#include<stdio.h>

longfun(intx,inty,long*p)

{inti;

longt=l;

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

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

t=t*x;

*p=t;

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

t=t/1000;

returnt;

}

main()

{longt,r;intx,y;

printf("\nlnputxandy:");scanf

("%ld%ld",&x,&y);

t=fun(x,y,&r);

printf("\n\nx=%d,y=%d,r=%ld,last=

%ld\n\n",x,y,r,t);

}

32.给定程序M0D11.C中函数fun的功能是:应用递归算法求形参a

的平方根。求平方根的迭代公式如下:

xl=-(xO+—)

2xO

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

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

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

1;tinclude<stdio.h>

*

2!*include<math.h>

3j/**********found*****♦♦***/

4;doublefun(doublea,dounlexO)

5!{doublexl,y;

6.xl»(x0>a/xO)/2.0;

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

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

9iy=fun(a,xl);

10!elsey-xl;

11:returny;

12;

13main()

14i{doublex;

15•printf(REnterx:w);scanf

*

16;printf("Thesquarerootof%lf

H

is%lf\nrxrfun(xr1.0));

”!)

33.给定程序MOD11.C中函数fun的功能是:统计字符串中各元音字

母(即:A、E、I、0、U)的个数。注意:字母不分大、小写。

例如:若输入:THIsisaboot,则输出应该是:1、0、2、2、0o

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

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

1♦include<stdio.h>

2voidfun(charintnum(5))

3{intk,i-5;

4for(k■0;k<i;

5/★♦★found/■"■★一•••/

6num(i]«0;

7for(;ws;

8{i«-1;

9/♦♦♦♦*♦♦♦**foundww*♦****♦*/

10switch(s)

11(case*a':case•A*:(i«0;break;}

12case•e1:case:(i-l;break;}

13case•i':case•I*:{i-2;break;}

14case'o1cease•O1:{i-3;break;}

15case*0,:case:(i»4/break;}

16

17if(i>-0)

18

19

20

21main()

22{charsl[81];intnuml[5],i;

23printf(w\nPleaseenterastring:

R);gets(si);

24fun(slrnuml);

25for(i-0;i<5;i++)printf(w%d

nnn

rnuml(i]);printf(\n);

26

34.下列给定的程序中,函数fun()的功能是:用选择法对数组中的n个

元素按从大到小的顺序进行排序。请改正程序中的错误,使它能得到正

确结果。

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

试题程序:

#include<stdio.h>

#defineN20

voidfun(inta[],intn)

inti,j,t,p;

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

for(j=0;j<n-1;j++);

P=j;

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

if(a[i)>a[p])

P=i;

t=a[p];

a[p]=a[i];

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

a[p]=t;

main()

inta[N]={ll,32,-5,2,14},i,m=5;

printf("排序前的数据:");

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

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

printf(“\n”);

fun(a,m);

printf("排序后的顺序:”);

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

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

printf(“\n”);

)

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

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

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

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

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

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

1tinclude<stdio.h>

2voidfun(char*prchar*b)

3(inti,k-0;

4while(*p)

5{i-1;

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

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

8b(k]-p;

9kx;p++;

10}

11

12

13/**********four)d*****♦**♦♦/

b[k++],”H

15

16

17

18)

19main()

20{chara[80]rb(80);

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

22printf("Theoriginalstring:");

puts(a);

23fun(a,b);

24printf(w\nThestringafterinsert

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

25

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

)

37.给定程序M0D11.C中函数fun的功能是:比较两个字符串,将长

的那个字符串的首地址作为函数值返回。

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

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

1tinclude<stdio.h>

2/***w******found***♦******/

3charfun(char*srchar*t)

4{intsl«0rtl=0;char♦ss,*tt;

5ss-s;tt»t;

6while(*ss)

7{sl++;

8/**♦♦****♦♦found****♦*♦♦♦♦/

9(*ss)

10}

11while(*tt)

12(C++;

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

14

15)

16if(tl>sl)returnt;

17elsereturns;

18}

19main()

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

21printf(H\nEnterastring:w);

gets(a);

22printf("\nEnterastringagain:

");gets(b);

23printf(w\nThelongeris:\n\n\

Hw

"%s\\nrfun(a,b));

24

38.给定程序M0D11.C中fun函数的功能是:求出以下分数序列的前

n项之和。

23581321

7*2*3*5*T*B*'

和值通过函数值返回main函数。

例如,若n=5,则应输出:8.3916670

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

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

1tinclude<stdio.h>

2/…………*fou廿…………/

3fun(intn)

4{inta02,b-1.c,k;

5doubles«0.0;

6for(k*1;k<=n;k++)

7(s=s♦1.0*a/b;

8*♦*♦**♦♦****/

9cma;ab;b♦-c;

10

11return(s);

12}

13main()

14(intn»5;

15printf("\nThevalueoffunction

is:%lf\n"rfun(n));

16

39.下列给定程序中,函数fun()的功能是:计算整数n的阶乘。

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

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

试题程序:

#include<stdio.h>

doublefun(intn)

(

doubleresult=L0;

whil(n>l&&n<170)

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

result*=—n;

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

return;

main()

{int.n;

clrscr();

printf("Enteraninteger:");

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

printf("\n\n%d!=%lg\n\n",n,fun(n));

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

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

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

8565.56995.5875562.575

则高于平均分的学生人数为4(平均分为74.312500)。

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

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

试题程序:

#include<stdio.h>

#include<conio.h>

#defineN20

intfun(float*S,intn,float*aver)

(

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

intave,t=0;

intcount=0,k,i;

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

t+=s[k];

ave=t/n;

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

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

if(s[i]<ave)

count++;

aver=ave;

returncount;

}

main()

(

floatS[30],aver;

intm,i;

clrscr();

printf("\nPleaseenterm:");

scanf("%d",&m);

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

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

scanf("%f",s+i);

printf("\nThenumberofstudents:%d\n",

fun(S,m,&aver));

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

)

五、程序改错题(2题)

41.已知一个数列从。项开始的前3项为0,0,1,以后的各项都是其

相邻的前3项之和。下列给定的程序中,函数proc的功能是:计算并

输出该数列前n项的和sum。n的值通过形参传人。例如,当n=20

时,程序的输出结果应为42762.000000o

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

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

构。

试题程序:

#include<stdlib.h>

#include<conio.h>

#include<stdio.h>

doubleproc(intn)

(

doublesum,sO,si,s2,s;

intk;

sum=l.0;

if(n<=2)

sum=0.0;

s0=0.0;

sl=0.0;

s2=l.0;

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

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

)

(

s=s0+sl+s2;

sum+=S:

sO=sl;

sl=s2;

//****^)und****

s2=s;

returnsum;

voidmain

(

intn;

system("CLS");

printf("InputN=");

scanf("%d",&nJ;

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

)

42.下列给定程序中,函数proc()的功能是:依次取出字符串中所有的

数字字符,形成新的字符串,并取代原字符串。例如原始字符串是

“ab45c6djfd789”,则输出后的字符是“456789”。请修改函数proc()中

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

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

MtexcludeV.idhh

Minclude<.do.h>

9includeVcociio.b>

votdproctcK^r•、)

(inti«je

ioc(iW0»jw0i«,】!-*\0*।f>

制«“>-'O'A&*q<,V)

//••••found••••

•GJ

//••••IOUMI••••

9]■飞%

voidfBaiait)

(HurNF(90〕.

*ywiem(*CLS*>t

pnntf<*\n£nteraBtrinci*tr)(

pnntfC*\ti\nThe«tnt^g

pn)c<M)9

prwitR*\n\nTheofcKaticiyi»>

六、操作题(2题)

43.

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

式的值:y=l-l/(22)+1/(33)-1/(44)+...+(-1)(n+1)/(m)

例如,n中的值为10,则应输出0.817962。请修改程序中的错误,使

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

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

*inHude<b>

Sinctudc<cofwn.

SincludeVstdio.IO

ckxibltproHmtn)

doubWy].O|

//••••(ound••••

ittfj-li

iniii

Y-IMl++)

•••(mind••••

•i)<

rrttaniCy>i

toedfiminC)

mti>-10i

«yctefn("CLS>>i

pnntf(*\nTberevoltisSltXn*»proc<n>)t

44.下列给定的程序中,fun()函数的功能是:将p所指字符串中每个单

词的最后一个字母改成大写(这里的“单词”是指有空格隔开的字符串)。

例如,若输入:

Iamastudenttotaketheexamination

则应输出:IaMAstudenTtOtakethEexaminatioN

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

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

试题程序:

#include<conio.h>

#include<ctype.h>

#include<stdio.h>

voidfun(char*p)

intk=0;

for(;*p;p++)

if(k)

{,....................

if(P==")

(

k=0;

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

*p=toupper(*(p-1));

else

k=l;

main()

{charchrstr[64];

intd;

clrscr();

printf("\nPleaseenteranEnglishsentencewithin63letters:");

gets(chrstr);

d=strlen(chrstr);

chrstr[d=='';

chrstr[d+l]=O;

printf("\nBoforechanging:\n%s",chrstr);

fun(chrstr);

printf("\nAfterchanging:\n%s",chrstr);

参考答案

1J%3!=O或j%3j%3!=0或j%3解析:题目要求输出100以内能被3整

除且个位数为6的所有整数,且通过for循环实现,循环体内j=i*10+6;

这也就满足了个位数为6的条件,所以第1个空格填入i<10或i<=9;

if语句中的continue说明如果条件不成立则不输出j,所以第2空填

j%3!=0或j%3。

2.交换排序交换排序解析:常见的排序方法有插入排序(包括简单插入

排序法和希尔排序法等)、交换排序(包括冒泡排序和快速排序法等)和选

择排序(包括简单选择排序和堆排序等)。注意:常见的排序方法及其作

用机制和区别。

3.11解析直接插入排序是在已排好序的序列中用顺序查找法查找插入

位置。第5个记录是15,15和23比较,就知道15应放在原23放的位

置,23及其以后的记录后移。

4.逻辑关系逻辑关系

5.

6.结构结构解析:路径测试是白盒测试方法中的一种,它要求对程序中

的每条路径最少检查一次,目的是对软件的结构进行测试。

7.rewind()或fseek()rewind()或fseek()

8.BB解析:字符类型的数据在内存中以相应的ASCII码存放,另外,

字符数据还可以作为整数参加运算。格式控制参数中的格式字符用以指

定输出项的数据类型和输出格式,输出字符与其对应的输出项的类型要

一致。本题中,“b”的ASCII码为98,字符类型m的ASCII码为

98+32=130,所以最后输出为b。

9.ptrptr解析:本题考查函数指针的概念。函数指针的定义格式是:类型

标识符(*指针变量名)()。注:“类型标识符”为函数返回值的类型。

10.3535解析:函数swap(int*a,int*b)的功能是实现*a和*b中两个数据

的交换,在主函数中调用swap(p,q)后,形参指针变量a和b分别指向i和

j,在swap(int*a,int*b)执行完后,指针变量a和b分别指向j和i,而指针变

量P,q所指向变量的值没有发生变化,所以输出结果为350

11.D

12.D

13.C

一的运算优先级比++高,此时,pt-x=10,执行自加运算后为11。

14.D程序首先以读和写二进制文件的方式打开文件d.dat;然后通过for

循环,调用fwrite函数将数组a中的各个元素写入d.dat中,•接下来调

用rewind函数,将文件指针fp重定位到文件的开始位置;再调用fread

函数将文件的前3个整数1,2,3读入a[3]开始的位置,所以此时数组a

中的元素值分别为:123,1,2,3。故本题答案为D选项。

15.B条件表达式的含义是:如果表达式1成立,结果为表达式2的值,

如果不成立,则为表达式3的值。在题干中,如果“a>b”且“b>c”,则

k值为1;如果“a>b”且“b<c”,则k值为0;如果“a<b”,则k值为0。

条件“a>b”与“b>c”中只要有一个条件不成立,k的值就为0。故本题答

案为B选项。

16.A

本题考查函数值的类型。在函数调用时,尽管Y的类型是float,x的

类型是double,但是因为函数定义时没有指定类型说明,系统默认函

数值的类型为血型,所以计算后Y的类型是int型。

17.B在计算机中,算法被定义为对一个问题求解步骤的一种描述,是求

解问题的方法,它是指令的有限序列,其中每条指令表示一个或者多个

操作。算法具有有穷性、确定性、可行性、输入和输出五大特点。

在本题中,选项A、C、D的说法明显偏离了算法的定义,因此正确答

案选B。

18.C

19.BB选项的特点是顺序存储结构的特点,即数组的特点。

20.A

21.

【解析】通过要求把非素数的数放到xx数组中,检查大于整数m的整

数,将不是素数的整数放在数组xx中,直到个数大于k个结束。

22.

【解析】首先我们应定义一个变量来表示其和,另一个来表示其项数,

然后通过循环,求得其差值,最后把和的平方返回到主函数中。

23.

【解析】要使数组左下半三角元素中的值全部置成0,先要找出数组的

下半三角元素,再将其值全部赋值为0。二维数组中下半三角元素的特

点为,其列下标小于其行下标。根据这个特点,将二维数组的下半三

角元素都赋值为0。

24.1voidfun(char*s,chart[])

2{

3inti,j=0;

4for(i=0;i<strlen(s);i++)

5if(!((i%2)==0&&(s[i]%2)))

6t[j++]=s[i];

7t[j]=0;

8}

按题目要求,将字符串S中符合要求的字符存放到字符数组t中。我

们使用for循环语句来解决这个问题。在赋值之前,先对字符串s的元

素下标和ASCII值进行判断,将满足要求的元素赋给数组3将数组t

的最后一个字符赋值为'\\CT,即ASCII值为0。

25.voidfun(char*a)

(

inti,j=0;

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

if(a[i]!=V,)

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

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

a[j]=)(T;

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

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

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

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

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

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

符串结束标志,NT。

26.

【考点分析】

本题考查:如何判断非素数;循环判断结构;数组的引用。

【解题思路】

题目要求将1—m之问的非素数存人数组中,应使用循环判断结构。循

环语句用来遍历1一m之间的每个数,判断语句用来判断该数是否为

素数,若不是素数,则将其存人数组中。这道题目是考查一个数是否

为素数的简单延伸,只要掌握了判断素数的方法,问题便能顺利解

决。

【解题宝典】

判定一个数是否为素数,即该数除了能被1和它本身外,不能被任何

数整除。

代码实现为:

for(j=2;j<i;j++)if(i%j==O)/*如余数为0,证明i不是素数•/

此语句需要熟记,很多判断素数的题目也可通过此法解决。

27.\n#include'stdio.h'

\n#defineN3

\nstructstudent

\n{longstu_num;charsex;

\ncharname[15];intscore[4];

\nfloataverage;};

\nmain

\n{inti,j,index;floatsum,max;

\nstructstudentstuarr[N];

\nfor(I=0;I{printf('pleaseinput%dstudentinformation:\\n',I+1);

\nscanf('%ld,%c,%s',&stuarr[I].stu_num,&stuarr[I].sex,stuarr[I].name);

\nfor(j=0;j<4;j++)

\nscanf('%d',&stuarr[I].score。]);}

\nfor(I=0;I{sum=0.0;

\nfor(j=0;j<4;j++)

\nsum+=stuarr[I].score[j];

\nstuarr[I].average=sum/4.0;}

\nmax=stuarr[0].average;

\nindex=0;

\nfor(I=1;Iif(stuarr[I].average>max)

\n{max=stuarr[I].average;

\nindex=I;}

\nprintf('总平均成绩最高的学生信息是学号=%ld,性别=%c,姓名=%s,平

均成绩

=%4.lf\\n',stuarr[index].stu_num,stuarr[index].sex,stuarr[index].nam

e,stuarr[index].average);

\n)\n

28.voidfun(inta,intb,long*c)

(一

/*b%10获取b的个位数,a/10获取a的十位数,a%10获取a的个位

数,b/10获取b的十位数*/

*c=a/10+(b/10)*10+(a%10)*100+(b%10)*1000;

)

本题主要考如何取出a和b的个位数和十位数,取出后如何将其表示成

c中相应的位数。由于a和b都是只有两位的整数,因此分别对它们除

以10可得到它们的十位数,分别用10对它们求余可得到它们的个位

数。将得到的数对应乘以1000、100、10、1,即可得到c的千位数、百

位数、十位数、个位数。注意使用c时要进行指针运算。

29.

【答案】

vnidfun(chara[),char|,intn)

(inii,k=0;

/*将不是指定下标的字符存人数组b中*/

b|k)=W;尸在?符串最后加上结束标限符*/

)

(解析】

根据题.意要删除字符串中指定下标的字芍,也就是保华非指定下标的字符.所以if语句为迎!5),在字

符串木尾加上字符串结束标识符not+

30.

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

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

前后的位置是没有改变的。

31.(1)错误:for:(i=l;i<y;i++)正确:for(i=l;i<=y;i++)(2)错误:

t=t/1000;正确:t=t%1000;(1)错误:for:(i=l;i<y;i++)正确:for(i=l;i

<=y;i++)\r\n⑵错误:t=t/1000;正确:t=t%1000;解析:我们先用

简单的思想理解一下该程序,如果当x=y=l时,程序的问题出在哪儿?

很简单吧,所以很(i=l;i<y;i++)的循环条件应该是for(i=l;i++),

另外,t=t/1000;中的错误是混淆了“/”和“%”的定义对这样的细节问题

务必注意。

32.(l)doublefun(doubleadoublex0)(2)if(fabs(xl-x0)>0.0

0001)(l)doublefun(doublea,doublex0)(2)if(fabs(xl-x0)>0.00001)

解析:⑴主函数中“ftin(x,1.0)",x是double型变量,1.0是浮点数,

可知fun有两个double型参数,而第一标识下“dounle"不是C语言关键

字,所以应将“

温馨提示

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

评论

0/150

提交评论