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

付费下载

下载本文档

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

文档简介

2021年广东省佛山市全国计算机等级考试

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

学校:________班级:姓各考号:

一、2.填空题(10题)

1.数据库系统在其内部分为三级模式,即概念模式、内模式和外模式。

其中,【】给出了数据库物理存储结构和物理存取方法。

2.已知字符A的ACSII码值为65,以下语句的输出结果是_____。

charch='B';

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

3.下面fun函数的功能是将形参x的值转换成二进制数,所得二进制数

的每一位数放在数组中返回,二进制数的最低位放在下标为。的元素中,

其他依此类推。请填空。

Fun(intx,intb[])

{intk=0,r;

do

{r=x%2;

()=r;

x/=2;

}while(x);

)

4.以下程序运行后的输出结果是____o

fun(intx)

{if(x/2>0)fun(x/2);

printf("%d",x);

main()

{fun(6);)

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

main()

{inta=2,b=2,c=4;

a*=16+(b++)-(++C);

printf("%d",a);

)

6.已有定义:charc=〃;inta=l,b;(此处c的初值为空格字符),执行b=!c&&a;

后b的值为【

7.数据库管理系统是位于用户与之间的软件系统。

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

#include<stdio.h>

#defineMAX(x,y)(x),(y)?(x):(y)

main()

{inta=5,b=2,c=3,d=3,t;

t=MAX(a+b,c+d)*10;

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

)

9.下面程序的功能是:计算110之间的奇数之和与偶数之和,请填空。

#include<stdio.h>

main()

{inta,b,c,I;

a=c=O;

for(I=0;I<=10;I+=2)

{a+=I;

【】;

c+=b;}

printf("偶数之和二%d\n",a);

printf("奇数之和=%d\n",c-11);}

10.若a=l,b=2,则表达式!(x=A)II(y=B)&&0的值是

二、单选题(10题)

11.若变量a,b已正确定义,且b已正确赋值,则合法的语句是()。

A.b=double(b);B.(int)a=(int)b;C.a=a++=5;D.a=double(b);

12.有以下定义和语句

StructWorkers

{intnum;charname[20];charc;

struct

{intday;intmonth;intyear;)s;

);­

StructWorkersW,*pe;

PW=&W;

能给W中yeaR成员赋1980的语句是

A.*pW.yeaR=1980;

B.W.yeaR=1980;

C.pW->yeaR=1980;

D.W.s.yeaR=1980;

13.设一个广义表中结点的个数为n,则求广义表深度算法的时间复杂度

为O

A.O(1)B.O(n)C.O(n2)D.O(log2n)

14.在数据结构中,从逻辑上可以把数据结构分为()。

A.动态结构和静态结构B.紧凑结构和非紧凑结构C.线性结构和非线

性结构D.内部结构和外部结构

15.数据的存储结构是指()。

A.数据所占的存储空间

B.数据的逻辑结构在计算机中的存放形式

C.数据在计算机中的顺序存储方式

D.存储在计算机外存中的数据

16.若有说明:int*p,m=5,n,•以下正确的程序段是

A.p=&n;scanf("%d",&p);

B.p=&n;scanf("%d",*p)

C.scanf("%d",&n);*p=n;

D.p=&n;*p=m;

17.以下叙述中正确的是0

A.C程序由函数和过程组成B.C程序由主函数组成C.C程序由函数组

成D.C程序中,主函数必须放在其他函数之前

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

A.用户定义的函数中可以没有return语句

B.用户定义的函数中可以有多个return语句,以便调用一次返回多个函

数值

C.用户定义的函数中若没有return语句,则应当定义函数为void类型

D.函数的return语句中可以没有表达式

19.有以下程序:

#include<stdio.h>

doublef(doublex);

main()

{doublea=0;inti;

for(i=0;i<30;i+=10)a+=f((double)i);

printf("%5.of\n",a);

)

doublef(doublex)

{returnx*x+l;}

程序运行后的输出结果是()oA.503B.401C.500D.1404

20.下列算法中,()算法用来求图中某顶点到其他顶点所有顶点之间的最

短路径。

A.DijkstraB.FloyedC.PrimD.Kruskal

三、程序设计题(10题)

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

的项目中包含一个源程序文件progl.c。在此程序中,规定输入的字符串

中只包含字母和*号。请编写函数其功能是使字符串的前导*号不得多于

n个,若多于n个,则删除多余的*号;若少于或等于n个,则不做处

理。字符串中间和尾部的*号不删除。

例如,字符串中的内容为“*******A*BC*DEF*G*****,若n的值为

4,删除后,字符串中的内容应当是“****A*BC*DEF*G*****;若n

的值为8,则字符串中的内容仍为“*******A*BC*DEF*G****”。n的

值在主函数中输入。在编写函数时,不得使用C语言提供的字符串函

数。

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

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

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

试题程序:

#include<stdio.h>

#include<conio.h>

voidfun(char*a,intn)

(

)

voidmain()

chars[81];intn;

printf("Enterastring:\n^^);

gets(s);

printf("Enter

scanf("%d”,&n);

fun(s,n);

printf(uThestringafterdeleted:\n,,);

puts(s);

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

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

能是移动一维数组中的内容,若数组中有n个整数,要求把下标为。〜

P(含P,P小于等于n-1)的数组元素平移到数组的最后。

例如,一维数组中的原始内容为1、2、3、4、5、6、7、8、9、10;P

的值为3。移动后,一维数组中的内容应为5、6、7、8、9、10、1、

2、3、4o

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

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

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

试题程序:

#include<stdio.h>

#defineN80

voidfun(int*w,intp,intn)

(

)

main()

{inta[N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15);

inti,p,n=15;

printf(4tTheoriginaldata:\n,5);

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

printf(u%3d,,,a[i]);

printf(u\n\nEnterp:"j;

scanf("%d“,&p);

fun(a,p,n);

printf(4t\nThedataaftermoving:\n^^);

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

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

printf("\n\n");

23.规定输入的字符串中只包含字母和+号。编写函数fun,其功能是:除了字符串前导和

尾部的母号外,将其他的*号全部删除。形参h已指向字符串中第一个字母,形参P指向字

符串中最后一个字母。在编写函数时,不得使用c语言提供的字符串函数。

例如,若字符串中的内容为,刷除后,字符串中的内容应当是

“…,ABCDEFG

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

诂勿改动主函效main和其他晶数中的任何内零.仅在函数firn的花括号中埴入你编将的若干语句。

试爆程序:

#inrlude<stdio.h>

voidfun(char*&char•h.char-p)

I

)

main。

{char48tkL'f;

printffTnteraMringzVi*');

«Ms>;'

while(*t)

t++:

I

whileet=e*)

t-;

while(*t==B)

l-;

whi阳*fsT*')

f++;fun(sJ,0i

printf(,rThestringafterdeleted"");

puts(R);

1“

24.请编写一个函数,用来删除字符串中的所有空格。例如,输入

abcdefgh,则输出为abcdefgho注意:部分源程序给出如下。请勿改

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

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

Uatcludrh>

3mdiMir<ctypr.h>

=itirludc<conio.h>

tticludr<

midpfocXrhar•Mr)

vmdmmvi<>

charNr[8l[i

'CLS">i

prtntk91npui•brings")i

Mr)«

putMMr)a

l>roe<Mr>s

prinif<••••Mtri^s\n*»!rtr)i

25.输出1—100之间不能被12整除的数。

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

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

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

苦n第假有1.0道帕士中的假力

3234s

I»8910

•-1314IS141$

!IS19202120

12324252627

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

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

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

试题程序:

Smclu3rVdmc.k>

giludeV,ub(Kb>

SindudeVcotsio.h>

Sinclude<zdlih

tfdrfineM5

voidproc<itMa[][M'•mt■>

roidm&m(>

(

tfMhji

Ml•rr[S][S],“.2・3・4・5・6・7・8・9.IOJi.l*」B・

HJS.H.l?aSJ9.204U22<23«t4.25ii

•yME「C1S)i

pfituK*••••Thearray••••\n*)i

%4d\fT.0》i

proHarr.n)i

DRIHIC*••••THERESULT••••\n>>t

fodi-0Bi<Mti++)

(

(or<j-,Oij<Mi)

pnnt(<■Kid")i

printfC

27.请编写函数fun,其功能是:找出一维整型数组元素中最大的值所

在的下标,并通过形参传回。数组元素中的值已在主函数中赋予。

主函数中x是数组名,n是x中的数据个数,max存放最大值。index

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

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

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

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

试题程序:

然includeVtimc.h>

aincludeV'tdlib.h>

Uinclude<stdio.h>

voidfunCintafj.int•max«int•d)

(

}

vnidmikin().

(

in<i,x[20].max.index,n10i

5r®nf((unsigned)lime(NULL))।

for(inOiiV=rui++)

(

x[i]=rnnd()%50i

printf(M^4dM.x[iJ)r〃输出个的机数纸

)

prinlf(*\nw>।

fun(x.n.&max.&index)i

prinlf("Max=%5d.Index=%4d\n".max.in­

dex)।

28.n个人的成绩存放在score数组中,请编写函数proc(),它的功能是

将低于平均分的人数作为函数值返回,将低于平均分的分数放在down

所指的数组中。例如,当score数组中的数据为{99,80,40,56,59,

84,60,76,100}时,函数返回的人数应该是4,down中的数据应为

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

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

语句。试题程序:

岑includek>

9inriudeVcooio.h>

Sinclude<Ndxx

SincludeV,tr«ng.h>

uMproc(miscorrf;.mt••«m4owrCl>

roidRMint)

inil・n«down[9]t

mi«corc(9]*

<0,7<.(00)1

♦ywtem(*CLS*)•

fi*proHMXMVa9・dowit>|

pnntf(*\ndowntotbeaverage«corraret*)।

♦<>r<i,Oiynii+♦>

pnntf(*%d*»downf|]>i

print".\a*)i

29.

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

体数组stu中,请编写函数proc(),它的功能是:把分数最低的学生数

据放在h所指的数组中。注意:分数低的学生可能不止一个。注意:

部分源程序给出如下。请勿改动main()函数和其他函数中的任何内

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

includeVsidiah>

Sdrfif»rM

lypetlefMn*r1

charluiml*I。/

mt»|

STRBCi

mipror(STREC•■.STRIX*•b)

STRfT•<;A005*.KZLI•(iAOOS*.751.

•(;AOO2*.B51■1•GAOOV.7R

•GA0O1F5〉•也人007・.62

,;AOOIT・T•(eGA0O6\&5

・GA<H5,Z)«CGAoir.»i

•<;40ir.7H..(•GAOI4L97

•GAOir.to:•|,GAol7*・,5

*GAOIR*»M1

STRECMMli

mi!•m

nproc<iiuthli

pnf»4((*ThrSdlowmtucorttXn*«n)i

lor(l。,iV・$i,♦)

pruitil*M*mam・MiJ.■),

。・出■修分?]的学弓加瞋・

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

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

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

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

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

#defineN20

voidfun(int*a,intn)

(

inti,m,t,k;

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

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

(

m==i;

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

if(afk]<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");

}

32.下列给定程序中,函数fun()的功能是将字符串s中位于偶数位置的

字符或ASCII码为奇数的字符放入字符串t中(规定第一个字符放在第0

位中)。

例如:字符串中的数据为ADFESHDI,则输出应当是AFESDL

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

#include<string,h>

#defineN80

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

voidfun(chars,chartfl)

(

inti,j=0;

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

/*********found*+************/

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

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

tUl='\O';

)

main()

(

chars[N],t[N];

clrscr();

printf("\nPleaseenterstrings:");

gets(s);

fun(s,t);

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

)

33.下列给定程序中,函数fun()的功能是:按顺序给s所指数组中的元

素赋予从2开始的偶数,然后再按顺序对每5个元素求一个平均值,并

将这些值依次存放在w所指的数组中。若s所指数组中元素的个数不是

5的倍数,多余部分忽略不计。例如,s所指数组有14个元素,则只对

前10个元素进行处理,不对最后的4个元素求平均值。

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

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

试题程序:

#include<stdio.h>

#defineSIZE20

fun(double*s,double*w)

{intk,i;doublesum;

for(k=2,i=0;i<SIZE;i++)

{s[i]=k;k+=2;}

sum=0.0;

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

{sum+=s[i];

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

if(i+l%5==0)

{w[k]=sum/5;Sum=0;k++;}

)

returnk;

)

main()

{doublea[SIZEl,b[SIZE/5];

inti,k;

k=fun(a/b);

printf("Theoriginaldata:\n");

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

(

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

printf("%4.0f7a[i]);

)

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

for(i=0;i<k;i++)printf("%6.2f",b[i]);

printf("\n\n");

)

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

的6个能被7或11整除的自然数之和。K的值由主函数传入,若k的

值为500,则函数的值为2925。

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

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

试题程序:

#include<stdio.h>

#include<conio.h>

intfun(intk)

(

intm=0,mc=0,j;

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

while(k>=2)&&(mc<6)

(

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

if((k%7=0)||(k%U=0))

{.......................................................

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

m=k;

mc++;

)

k~/

)

returnm;

}

main()

(

clrscr();

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

)

35.下列给定程序中函数fun()的功能是;从低位开始取出长整型变量s

中奇数位上的数,依次构成一个新数放在t中。例如,当s中的数为

4576235时,t中的数为4725。

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

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

试题程序:

#include<stdio.h>

#include<conio.h>

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

intfun(longS,long*t)

(

longsi=10;

*tiS%10;

while(s>0)

(

/*************found*****,

s=s%100;

*t=S%10*Sl+*t;

sl=sl*10;

)

)

main()

(

longS,t;

clrscr();

printf("\nPIeaseenterS:");

scanf("%ld'',&s);

fun(S,&t);

,,

printff'Theresultis:%ld\nIt);

36.下列给定程序中,函数fun()的功能是:在字符串str中找出ASCII

码值最小的字符,将其放在第一个位置上,并将该字符前的原字符向后

顺序移动。例如,调用fun。函数之前给字符串输入fagAgBDh,调用后

宁符串中的内容为AfaggBDho

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

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

试题程序:

#include<stdio.h>

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

voidfun(charp)

charmin,*q

inti=0;

min=p[i];

while(p[i]!=0)

if(min>p[i])

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

p=q+i;

min=p[i];

)

i++;

while(q>p)

{*q=*(q-l);

q-;

)

p[O]=min;

)

main()

(

charstr[80];

printf("Enterastring:");

gets(str);

printf("\nTheoriginalstring:");

puts(str);

fun(str);

printf("\nThestringaftermoving:");

puts(str);

printf("\n\n");

}

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

)

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

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

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

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

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

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

1*include<stdio.h>

2voidfun(char.p,char*b)

3(inti,k-0;

4while(*p)

5(i-1;

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

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

8b[k]-p;

9p++;

10;}

11!if(*p)

12i(

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

14b[k++]

15

16J

17!

18I)

19main()

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

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

22printf("Theoriginalstring:R);

puts(a);

23fun(a,b);

24printf(H\nThestringafterinsert

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

25

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

并统计平均值以上(含平均值)的实数个数。例如,n=8时,输入193.199,

195.673,195.757,196.051,196.092,196.596,196.579,196.763,所

得平均值为195.838745,在平均值以上的实数个数应为5。

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

intfun(floatx[],intn)

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

ihtj,c=0;floatxa=0.0;

for(j=O;j<n;.j++)

xa+=x[j]/n;

printf("ave=%f\n",xa);

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

if(x[jl>=xa)

C++;

returnc;

)

main()

{floatx[100]={193.199,195,673,195.757,

196.051,196.092,196.596,

196.579,196.763};

clrscr();

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

)

40.给定程序MODI1.C中函数fun的功能是:首先将大写字母转换为

对应小写字母;若小写字母为a〜u,则将其转换为其后的第5个字母;

若小写字母为v〜z,使其值减21。转换后的小写字母作为函数值返回。

例如,若形参是字母A,则转换为小写字母f若形参是字母W,则转换

为小写字母bo

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

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

linclude<stdio.h>

2linclude<ctype.h>

3charfun(charc)

4(if(O-^1&&

5/……♦……found…………•/

6JC+32;

7if(O-^1&&c<«,u,)

8♦•••founcpf—m/

9c-c-5;

10elseif(c>m,v,z1)

11c-c-21;

12returnc;

13

14main()

15!{charcl,c2;

16printf(w\nEnteraletter(A-Z):

);cl-getchar();

17if(isupper(cl))

18(c2»fun(cl);

19printf(H\n\nTheletter\1%c\1

,tR

changeto\%c\\n/cl,c2);

20

21elseprintf(w\nEnter(A-Z)!\nR);

22

五、程序改错题(2题)

41.下列给定程序中,函数proc的功能是找出100〜m(m不大于1000)

之间百位数字加十位数字等于个位数字的所有整数,把这些整数放在s

所指的数组中,个数作为函数值

返回。

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

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

构。

试题程序:

#include<stdio.h>

#defineM1000

intproc(int*S.intn)

(

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

j=0;

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

(

II****j^Qund****

k=n:

a=k%10;

k/=10;

b=k%10;

c=k/10;

if(a==b+c)

II****j^Qund****

s|j]=i:

}

returnj;

)

voidmain

(

inta[M],m,num=0,i;

do

(

printf("\nEnterm(<=1000):");

scanf("%d",&m);

while(m>1000);

num=proc(a,m);

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

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

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

printf("\n\n");

}

42.下列给定程序中函数fun的功能是:将P所指字符串中的所有字符复

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

例如,若给a输入字符串:ABCDEFGKHHK,调用函数后,字符数组b

中的内容为:ABCDEFGHIJK。请改正程序中的错误,使它能得出正

确的结果。

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

程序的结构。

findnde<sidio.h>

voidfun(char*p,char•b)

Iinti.k=0;

while(•p)

Ii=l;

while(i<=3&&ep)|

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

b(k]=p;

k**;p++;i++;

I

if(-p)

I

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

b[k+♦]=*w;

I

I

b[k]=3;

I

main()

Ichara[80]eb[80];

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

printf("Thcorigina]string:");puu(a);

firn(db);

printf("\nThestringafterinsertspace:");put"b);printf("\n\n")t

I

六、操作题(2题)

43.

请补充函数proc(),其功能是:计算并输出给定10个数的方差。例

如,给定的10个数为12.0,9.0,26.0,5.0,6.0,31.0,9.0,

3.0,8.0,18.0,输出为s=8.877500o注意:部分源程序给出如

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

()的横线上填入所编写的若干表达式或语句。试题程序:

0includeVfrtdio.

01rwlu4rVRMth.b>

dtMiblrpror<duubk«[10;)

beiit

doubleavg-Q.0.

double*wO.。,

double»t»»»0,0»

doublrMII

(0€(1*0|»<|0||>>)

IiJI

W=MMH/IOI

lor(i-lOii-f-♦)

Pl»

T**«3ji

E&Exdl

widmam()

double**»4Kif£lOj-(12.0,9.0424.03.0«B.0«3L0.

9v0«3.0.t.0wit.01«

inih

(>rintf(a\nTheorigmaldau»i\na>i

(or(i・0.iV10gi++)

prmifc*Si,IC।

pcintfC*\«\n>>।

■*pfoctutr)i

prmt«•,・i

44.设有如下宏定义

#defineMYSWAP(z,x,y){z=x;x=Y;Y=z;}

以下程序段通过宏调用实现变量a、b内容的交换,请填空。

floata=5,b=16,c;

MYSWAP([],a,b);

参考答案

1.内模式内模式解析:内模式又称为物理模式,它给出了数据库物理存

储结构与物理存取方法。

2.B66B66解析:printf函数的功能是按照指定的格式,在标准输出设

备上输出数据,它有两种参数:格式控制参数和输出项参数。本题中,

printf('%c%d\\n',ch,ch)表示以字符格式和十进制整数格式输出ch,B的

ACSII码值为66,即在计算机中B的十进制整数格式是66。所以,输

出为B66。

3.b[k++]b[k++]解析:本题的考查点是do-while语句。形参x默认为十

进制,要想将一个十进制的数转换成二进制,可以使用整除求余法,题

中的程序段也表明了将使用这种方法,将一个十进制的数转换成二进制

要用这个十进制数不断的整除2,将每次的余数记录下来,直至无法再

除,此时,整除得到的第一个元素即为二进制数的最低位,其余依次类

推,所以在程序段中的横线处,应当填写“b[k++/。

4.136136解析本题考核的知识点是函数递归。主函数调用函数fun(6),

由于6/2>0为真递归调用fun(3),接着递归调用fun(l),输出1,返回

上一层输出3,在返回上一层输出6。故空格处应该填136。

5.2626解析:a*=16+(b++)-(++c)等价于a*=a*(16+(b++)-

(++c))=2*(16+(2-5)=26。b++是先使用b的值参加运算,再对b加1;

++c是先c加1,再使用c的值参加运算。

6.11解析字符空格的ASCII码不为0,所以本题中表达式\ue008!c\ue009

的值为0,b=0&&l的结果显然为0。

7.操作系统操作系统解析数据库管理系统是帮助用户创建和管理数据

库的应用程序的集合。因此,数据库管理系统需要操作系统的支持,为

用户提供服务。

8.77解析:本题综合考查带参数的宏以及三目运算符的计算方法。三目

运算符的一般形式是:<表达式1>?<表达式2>:<表达式3>。“?:”

运算符的含义是:先求表达式1的值,如果为真,则求表达式2的值,

并把它作为整个表达式的值;如果表达式1的值为假,则求表达式3的

值,并把它作为整个表达式的值。注意,在本题中宏替换时可采用逐步

求解,最终为7>6?7:6*10,即t=7>6?7:60,其值为t=7。

9.b=I+lb=I+l解析:本题考查了for循环语句的执行过程。i+=2是修正

表达式,执行一次循环体后i的值就增加2,i的初始值为0,每次加2后的

和累加至a,所以a的值就是110之间的偶数之和;b的值是111之间的

奇数和,但在输出b值时,c去掉多加的11,即为110之间的奇数之和。

10.00解析根据运算符的运算顺序可知,该表达式最后运算的是与(&&)

运算,而任何表达式与“0”进行“与”运算,结果都为0。

11.B

在C语名中规定进行强制类型转换的格式是:(类型名)变量名;并且

给表达式赋值。

12.D

解析:结构体structureworkers中的成员s是结构体类型,给w中成员

year赋值的语句是w.s.year=1980,故选D。

13.D

14.C数据结构与算法:数据结构的基本概念[评析]逻辑结构反映数据元

素之间的逻辑关系,线性结构表示数据元素之间一对一的关系,非线性

结构表示数据元素之间一对多或多对一的关系。线性结构和非线性结构

是根据数据元素之间关系的不同特性加以分类的,即是从逻辑上加以分

类的。

15.B解析:数据的存储结构,又称为数据的物理结构,是数据的逻辑

结构在计算机中的存放形式,数据的存储结构有顺序结构、链式结构、

散列结构和索引结构等。

16.D解析:是求址运算符,“*”是指变量说明符。选项A)、B)应改

为scanf('%d',p);选项C)中指针变量p未指向一确定的内存单元,不

能为其赋值,并且这样做很危险,建议不使用。

17.C

18.B函数的值只能通过return语句返回主调函数。函数中允许有多个

return语句,但每次只能调用一个return语句,因此只能返回一个函数

值。不返回函数值的函数,可以明确定义为“空类型”,类型说明符为voido

故本题答案为B选项。

19.A

此题是一个简单的函数调用,当i=0并且i<30,执行i+=10,并且调用

函数f,所以当i=0时,结果为1,当i=10时,结果为101,当i=20

时,结果为401,所以a=l+101+401=503。

20.A

21.voidfun(char*a,intn)

(

inti=0,k=0;

char*p,*t;

p=t=a;/*开始时,p与t同时指向数组的首地址*/

while(*t=,*,)/*用k来统计前导星号的个数*/

{k++;t++;}

if(k>n)/*如果k大于n,则使p的前导保留n个星号,其后的字符

依次存入数组a中*/

{while(*p)

{a[i]=*(p+k-n);

i++;

p++;

}

a[i]=\(y;/*在字符串最后加上字符串结束标志*/

)

}

字符串中前导*号不能多于n个,多余的应删除。首先需要通过while循

环统计字符串前导*号的个数,然后通过if条件语句完成前导*号的个数

和n的比较,如果前导*号多于n个,则需要把n个*号和其余字符重新

保留。

22.voidfun(int*w,intp,intn)

{intX,j,ch;

for(x=0;x<=p;x++)

{ch=w[O];

for(j=l;j/*通过for循环语句,将p+1〜n-1(含n-1)之间的数组

元素依次向前移动p+1个存储单元*/

(

w[j-l]=w[j];

)

w[n-l]=ch;/*将下标为。〜p的数组元素逐一赋给数组w[n-l]*/

}

)

本题要求把下标为。〜p(含p,p小于等于n-1)的数组元素平移到数组的

最后。可以根据输入的P值,通过for循环语句,将p+1〜n-1(含n-1)之

间的数组元素依次向前移动P+1个存储单元,即w[j-l]=w[j];o同时将下

标为0~p的数组元素逐一赋给数组w[n-l],也就是通过语句w[n-l]=ch;

来实现此操作。

23.

【答案】

voidfiinhJiar*a,char*h,char*p)

{iiiri=0;

char

while(q<h)

(

明=*q;q++:i++;

J

while(q<p){

(

心仁*q;i++:

).

q++;

I

while(*q)

(,

a[ij=*q;i++XJ+*;

I

a(W:

I

【解析】

h和p分别指向第一个和最后个字母,先将前导,号进行保存•再保存中间的非*号字符,然后保存

尾•号,加上结束标识符・

24.

【解析】根据题目中要求删除字符串中所有的空格,需要检查字符串中

的每一个字符。将不是空格的字符放入原来的字符串中,形成新的字符

串。在新的字符串的末尾加上结束符。

25.\n#include'stdio.h'

\nmain

\n{inti;

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

\n{if(i==0)

\ncontinue;

\nprintf('%d',i);

\n}

\n

26.

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

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

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

±o

27.

【解析】本题考查的是for循环和指针变量。通过for循环实现对数组

的遍历,形参iilax和d都是指针型变量,所以引用它们指向的变量时

要进行指针运算。先有*max=a[0],在遍历中如果遇到比max大的元

素,则将a[i]赋值给max,下标i赋值给*d。循环语句用来遍历数组元

素,然后通过条件语句比较数组元素找到最大值。

28.

【解析】要找到所有学生中成绩低于平均分数的人数,首先需要算出所

有学生的平均成绩。然后将所有学生的成绩与平均成绩相比较。将低于

平均分数学生的记录存放在新的数组中,并将低于平均分数的学生数返

回给主函数。

29.

【解析】要返回分数最低的学生个数,首先要找出学生中的最低分数。

然后将各个学生的成绩与最低分数相比较,最后将分数最低的学生个数

返回给主函数。

3O.\n#include'stdio.h'

\nmain

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

\nfor(i=l;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++)

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

\n}

\n

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

k=m;正确:m=k;(1)错误:for(i=0;i<n;i++)正确:for(i=0;i<

2;i++)\r\n(2)错误:k=m;正确:m=k;解析:错误1:由于题目要

求将最小数和次最小数分别与a[0]和a[l]中的数对调,因此这层循环只

需循环两次。错误2:赋值语句的执行方向是从右向左,即把右边的值

赋给左边的变量。

32.(1)错误:voidfun(charschart[])正确:voidfun(char*schart[])(2)错

误5f(i%2=0||s[i]%2!=0)正确if(i%2=0||s[i]%2!=0)⑴错误Voidfun(char

s,chart[])正确:voidfun(char*s,chart口)\r\n⑵错误if(i%2=0||s[i]%2!=0)

正确:if(i%2=0||s[i]%2!=0)解析:错误1:由于本题中函数的功能是对

字符串进行处理,而不是对单个字符进行处理,因此,函数的参数应为

字符串指针。错误2:if语句中要用关系运算符,而不是赋值运算符。

33.错误:if(i+l%5==0)正确:if((i+l)%5==0)错误:if(i+l%5==0)正确:

if((i+D%5==0)解析:本题除了考查循环语句以外,其实就是一道简单

的数学题,循环条件if(i+l%5==0)是一个标准的语法错误,这跟题目考

查的知识点毫无关系,也就是说,做这样的题,只要读懂了题干意思,

问题便可迎刃而解。

34.(1)错误:while(k>=2)&&(mc<6)正确:while((k>=2)&&(mc<6))(2)

错误:if((k%7=0)||(k%ll=0))正确:if((k%7==0)||(k%ll=0))(3)错误:

m=k正确:m=m+k;⑴错误:while(k>=2)&&(mc<6)正确:while((k

>=2)&&(mc<6))\r\n(2)错误:if((k%7=0)||(k%l1=0))正确:

if((k%7==0)||(k%l1=0))\r\n(3)错误:m

温馨提示

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

评论

0/150

提交评论