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

下载本文档

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

文档简介

2022年江苏省泰州市全国计算机等级考试

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

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

一、2.填空题(10题)

1.以下程序的运行结果是【】。

#include<stdio.h>

main()

{intfun();fun();}

fun()

{staticinta[3]={O,l,2};

inti;

for(i=0;i<3;i++)a[i]+=a[i];

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

printf("\n");)

2.数据库系统中实现各种数据管理功能的核心软件称为【】。

3.单元测试又称模块测试,一般采用【】测试。

4.下面程序的运行结果是()。##include<stdio.h>main(){inta,s,n,

m;a=2;s=0;n=l;m=l;while(m<=4){n=n*a;s=s+n;++m;}

printf("s=%d",s);}

5.若有以下程序

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%dln",a,b,c);

)

执行后输出结果为o

6.类是一个支持集成的抽象数据类型,而对象是类的【】。

7.语句:x++;、++x;、x=x+l;、x=l+x;,执行后都使变量x中的值增

1,请写出一条同一功能的赋值语句(不得与列举的相同)【】。

8.若输入thistestterminal,以下程序的输出结果为:terminaltestthiso

请填空。

#defineMAXLINE20

[]

{inti;

char*pstr[3],str[3][MAXLINE];

for(i=0;i<3;++)pstr[i]=str[i];

for(i=0;i<3;i++)scanf("%s",pstr[l]);

sort(pstr);

for(i=0;i<3;i++)prntf("%s",pstr[i]);

sort([])

char*pstr[3];

{inti,j;

char*p;

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

for(j=i+1;j<3;j++)

if(strcmp(*(pstr+i,*(pstr+j)>0

{p=*(pstr+i);

*(pstr+i=【】;

*(pstr+j)=p;

)

9.下面程序的功能是输出数组s中最大元素的下标,请填空。

main()

{intk,p,s[]={l,-9,7.2,-10,3);

for(p=0,k=p;p<6;p++)

if(s[p]>s[k])[]

printf("%d\n",k);}

10.当线性表的操作无插入和删除时,采用【】结构为好。

二、单选题(10题)

11.现有以下结构体说明和变量定义,如图所示,指针P、q、r分别指

定一个链表中连续的3个结点。

datadatancxldatanext

....................A|AI----1-------HBI---1-------HcI—|----►......

TPTqG

structnode

{hardata;

structnode*next;)*P,*q,*r;

现要将q和r所指结点交换前后位置,同时要保持链表的结构,下列

不能完成此操作的语句是()。

A.q-:>next=r->next;p—:>next=r;rm:>next=q;

B.q-:>next=r;q->next=r->next;r->next=q;

C.q-:>next=r->next;r->next=q;p->next=r;

D.q-:>next=q;p->next=r;q->next=r->next;

12.将一棵有100个结点的完全二叉树从上到下,从左到右依次对结点

进行编号,根结点的编号为1,则编号为49的结点的左孩子的编号为

A.98B.99C.50D.48

13.若有定义“inta,b,c;"以下程序段的输出结果是()。

a=l1;b=3;c=0;

printf("%d\n,,,c=(a/b,a%b));

A.2B.0C.3D.l

14.设长度为n的链队列用单循环链表表示,若只设头指针,则入队操作

的时间复杂度为0

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

15.在inta=3,int*p=&a;中,*p的值是()

A.变量a的地址值B.无意义C.变量p的地址值D.3

16.下面的哪个保留字不能作为函数的返回类型()。

A.voidB.intC.newD.long

17.对长度为n的线性表排序,在最坏情况下,比较次数不是n(n-1)

/2的排序方法是()。

A.快速排序B.冒泡排序C.直接插入排序D.堆排序

18.下列关于线性表、栈和队列的叙述,错误的是0。

A.线性表是给定的n(n必须大于零)个元素组成的序列

B.线性表允许在表的任何位置进行插入和删除操作

C.栈只允许在一端进行插入和删除操作

D.队列允许在一端进行插入在另一端进行删除

19.设有如下函数定义:

#include<stdio.h>

intfun(intk)

{if(k<1)return0;

elseif(k==1)return1;

elsereturnfun(k-l)+l;

)

若执行调用语句“n=fUn(3);",则函数fun总共被调用的次数是()。

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

20.有如下程序main(){charch[2][5]={"6937","8254"},*p[2];inti,

j,s=0;for(i=0;i<2;++)p[i]=ch[i];for(i=0;i<2;i++)for(j=0;p[il[jl

>'\0';j+=2)s=10*s+p[i]|j]-'0';printf("%d\n",s);}该程序的输出结果

A.69825B.63825C.6385D.693825

三、程序设计题(10题)

21.编写函数fun(),其功能是:实现两个字符串的连接(不要使用库函

数strcat),即把p2所指的字符串连接到pl所指的字符串的后面。例

如,分别输入下面两个字符串:“FirstString——”“SecondString”程序

输出:“FirstString——SecondString”注意:部分源程序给出如下。请

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

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

#includeVsidlib.h>

%includeVntdio.h>

4includeVconio.h>

voidfun(charpl[].charp2[])

(

I

voidmain()

(

charsl[80],$2[40]i

system(i

printf(*Entersiands2An*)।

»canf(**•si•s2)i

prind(=%s\n*»si)i

printf("s2=%An"•s2)i

printf("Invokefun(si.s2)An")i

fun(»l«s2>i

printf("Afterinvoking:\n*>:

printf("%s\n*•si)t

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

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

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

例如,若字符串中的内容为“"fVBCPEW""*",删除后,字符串中的内容应当是

“…・ABCDEFG…

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

诂勿改动主函效main和其他岛最中的任何内容,仅在函数firn的花括号中填入你编写的若干语句。

试痍程序:

#inrlude<Atdio.h>

voidfun(char*&char叱.。**p)

tnain()

\char48H,%>(;

printf('*Enlera访电卬?

用屿

t=f»s;

whfle(*t)

t++:

t-;

while(*t=***)

1-;

while(*t==1*')

t-;

wh旧*f=T巧

f++;fun(sX0;

printf(,fThestringafterdel©led:\n");

pute(ft);

23.请编写函数proc(),该函数的功能是:计算n门课程的平均分,计

算结果作为函数值返回。例如,有6门课程的成绩是90.5,72,80,

61.5,55,60,则函数的值为69.83o注意:部分源程序给出如下。

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

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

includeV*dio.h>

floatproc(float■a.intn)

voidmain()

<

float5coref30]0<90.5»72«80.61.5»55»6O)•

aven

averproc(scorc.6>»

print«"\nAveragcscoreis:%5.2f\nM.aver)i

24.编程计算下列表达式:s=n!(n从键盘上输入)

25.请编写函数voidproc(intx,intpp[],int*n),它的功能是:求出能

整除x且不是偶数、不为1的各整数,并按从大到小的顺序放在PP所

指的数组中,这些除数的个数通过形参n返回。

例如,若x的值为30,则有3个数符合要求,它们是15,5,3o

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

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

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

试题程序:

Ctnrludr<como.h>

・vnrludrV*idio.h>

Umrlude<vtdhkh>

raidpruc<HM■・intppCJ«,每(•n)

Ridmmn()

mi1000]•ai«i।

"CLS*)•

anttiregefnumber(\n*)।

•can1(.%4"・&*)i

p<roc<K»Atv«&n>i

(or”,•-1il>«*0ii——)

|>nnt((*Sd*•arr£i])i

print!(e\n")।

26.

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

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

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

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

"word"o

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

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

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

试题程序:

#inelude<5tdio.h>

#include<conio.h>

#dcfineLEN20

voidfiinfchara(]tcharb[],intn)

voidmain()

.(charstrl[LENJ.str2(LEN];

intn;

printf(wEnterthestringzXn");

gets(slrl);

printfEnterihepositionrfthestringdeleted:*1);

fun(strLstr2,n);

prinrfC^Thenewstringis:%s\n?Lr2);

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

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

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

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

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

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

语句。试题程序:

9aneludek>

9inriudeVcooio.h>

Stnrludr<Ndxxh>

SincludeV,tr«ng.h>

uMproc(miscorrf;.mt••«m4owrCl>

raidmainC)

inil・n«down[9]t

mi»corr{9]*

•0«7<.|00)|

♦ywt«n(-CLS-)i

R*proe<Mx>e*«9・dowiOi

pnntf(*\ndowntotbeaverage«corraret*)।

k>r<i,Oiyn■+♦>

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

print".\n*)t

28.

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

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

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

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

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

8mclude^,Htdbb.hJ>

8Miclwd*<«MUOLk>

9IBrlttd*<BtdKKk>

9iarludrVwiring,

ntpmiciiar•Mr.char•M^Hrtr•

roidMMIH>

cliar

KMfll

*ClJ5*)|

pnMf(-aAtVW««e)i

get»(Btr)i

pnMf<attAfV,

getw(»ubatr>e

W(Mr),

pwts(Mibair)i

■・prac《ur,MIIM”*

pmiRKAB*•■)•

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

结构体数组stu中,请编写函数proc,其功能是:按分数的高低排列学

生的记录,高分在前。

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

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

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

试题程序:

#include<stdio.h>

#defineM16

typedefstruct

(

charnum[10];

intS;

)

STREC:

voidproc(STRECa[])

(

inti,j;

STRECt;

for(i=l;i++)/*用冒泡法来按从高到低

排序*/

for(j=0;j++)0

if(a[j].s)//*按分数的高低排列学生

的记录,高分在前*/

{t=a[j];a[j]=a[j+l];a[j+l]=t;)

)

voidmain

{

STRECstu[M]={{"GA005",85),{"GA003",76},

{"GA002",69},{"GA004",85),"GA001",91),

{"GA007",72),{"GA008",64),{"GA006",87),

{"GAO15",85),{"GA013",91),{"GAO12",64),

{"GAO14",91),{"GAO11",66),{"GAO17",64},

{"GAO18",64),{"GA016",72}};

inti;

proc(stu);

printf("Thedataaftersorted:\n");

for(i=0;i++)

if(i%4==0)

〃每行输出4个学生记录

printf("n");

printf("%s%4d",stu[i],num,stu[i].s);

}

printf("\n");

30.编写函数fun(),其功能是:求出1〜1000中能被7或11整除,但

不能同时被7和11整除的所有整数,并将其放在a所指的数组中,通过

n返回这些数的个数。注意:部分源程序给出如下。请勿改动main()

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

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

仪k>

△ificludeVcoxxh>

9includeVctdio,

eid•n)

wdidmain<)

mtaa[lOOO]«B«ki

fun<*a«&*a)i

(oce-Oib<iiih++)

10•-0)

IpnotfC*%i

I〃一行。9个It

el»e

pnm{(aK$d-♦“Ch]”

pnnift*\n*>B

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

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

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

7654321时,t中的数为642。

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

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

试题程序:

#include<stdio.h>

#include<conio.h>

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

voidfun(longs,longt)

{longsI=10;

s/=10;

*t=s%10;

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

while(s<0)

{s=s/100;

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

sl=sl*10;

)

)

main()

{longs,t;

clrscr();

printf("\nPleaseenters:");scanf

("%ld",&s);

fun(s,&t);

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

)

32.给定程序中函数fun的功能是:将一个由八进制数字字符组成的字

符串转换为与其值相等的十进制整数。规定输入的字符串最多只能包含

5位八进制数字字符。

例如,若输入:77777,则输出将是:32767。

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

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

[试题源程序]

#include<stdio.h>

#include<string.h>

#include<stdlib.h>

intfun(char*p)

(

intn;

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

n=*p-'o';

p++;

while(*p!=0){

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

n=n*8+*p-'o';

p++;

)

returnn;

}

main()

(

chars[6];inti;intn;

printf("Enterastring(Ocataldigits):");

gets(s);

if(strlen(s)>5)

(

printf("Error:Stringtoolonger!\n\n");

exit(O);

)

for(i=0;s[i];i++)

if(s[i]<'O'||s[i]>7)

printf("Error:%cnotisocataldigits!\n\n",s[i]);

exit(O);

)

printf("Theoriginalstring:");

puts(s);

n=fun(s);

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

}

33.给定程序M0D11.C中函数fun的功能是:计算n的5次方的值(规

定n的值大于2、小于8),通过形参指针传回主函数;并计算该值的个

位、十位、百位上数字之和作为函数值返回。

例如,7的5次方是16807,其低3位数的和值是15。

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

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

1jlinclude<stdio.h>

2ifinclude<math.h>

3intfun(intn,int*value)

4{intd,s,i;

5/•育•••♦・•♦••••found,*****,******

6d-0;s-0;

7for(iwl;i<-5;i++).d・d*n;

8*value-d;

9for(i»l;i<w3;i++)

10{s-s^d%10;

11w*founcj***

12d«d\10;

13

14returns;

16main()

17(intn,sum,v;

18do

19{printf(H\nEntern(2<n<8):w);

RH

scanf(%dr&n);)

20while(n<«21In>»8);

21sum-fun(n,4v);

22printf(w\n\nTheresult:\nvalue®

%dsum-%d\n\n",vrsum);

23

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

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

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

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

试题程序:

#include<stdio.h>

longfun(intx,inty,long*p)

{inti;

longt=l;

/******不*******fk)und不***不**********!

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

t=t*x;

*p=t;

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

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=

%1d\n\n",x,y,r,t);

)

35.下列给定程序中,函数fun()的功能是计算并输出high以内的素数

之和。high由主函数传给fun()函数。若high的值为100,则函数的值

为1060o

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

#include<math.h>

intfun(inthigh)

(

intsum=0,n=0,j,yes;

while(high>=2)

yes=l;

for(j=2;j<=high/2;j++)

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

ifhigh%j==O

yes=0;

break;

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

if(yes==0)

sum+=high;

n++;

)

high-;

)

returnsum;

)

main()

(

clrscr();

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

)

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

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

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

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

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

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

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

>high,查找结束。

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

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

试题程序:

#include<stdio.h>

#defineN10

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

voidfun(inta[],intm)

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

while(low<=high)

{mid=(low+high)/2;

if(m<afmid])

high=mid-l;

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

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

37.下列给定程序中,函数fun()的功能是:将m(lSmqO)个字符串连接

起来,组成一个新串,放入pt所指字符串中,例如:把3个串abc,CD,

EF串联起来,结果是abcCDEF。

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

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

试题程序:

#include<conio.h>

#include<string.h>

#include<stdio.h>

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

intfun(charstr[][10],intm,char*pt)

{intk,q,i,j=O;

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

{q=strlen(str[k]);

j+=q;

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

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

pt[i]=str[k,i];

pt+=q;

pt[O]=0;

)

Pf

}

main()

{intm,h;

chars[10][10],p[120];

clrscr();

printf("\nPleaseenterm:");

scanf("%d",&m);gets(s[01);

printf("\nPleaseenter%dstring:In",m);

for(h=0;h<m;h++)gets(s[h]);

fun(s,m,p);

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

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

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

xl=-(xO+—)

2xO

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

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

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

1«include<stdio.h>

2finclude<math.h>

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

4doublefun(doublea,dounlexO)

5{doublexl,y;

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

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

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

9y«fun(arxl);

10elsey-xl;

11returny;

12

13main()

14{doublex;

15printf("Enterx:w);scanf

16printf("Thesquarerootof%lf

w

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

17

39.下列给定程序中,函数fun()的功能是:统计字符串substr在字符串

srt中出现的次数。例如,若字符串为aaas1kaaas,子字符串为as,则

应输出20

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

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

试题程序:

#include<stdio.h>

fun(char*str,char*substr)

{inti,j,k,num=0;

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

for(i=0,str[i],i++)

for(j=i,k=0;substr[k]==str[j];k++,j++)

if(substr[k+l]=='\0')

{num++;

break;

)

returnnum;

)

main()

{charstr[80],substr[80];

printf("Inputastring:");

gets(str);

printf("Inputasbustring:");

gets(substr);

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

40.给定程序MODH.C中fun函数的功能是:分别统计字符串中大写

字母和小写字母的个数。

例如,给字符串s输入:AAaaBBbl23CCccccd,则应输出结果:upper=

6,lower=8O

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

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

1finclude<stdio.h>

2/………•found………♦/

3voidfun(char*srinta,intb)

4(

5while(*s)

6{if(*s>-&&*s<»2)

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

8♦a«a+l;

9if(*s>«,a*&&*s<-1zf)

10/…•……found………•/

11

12

13)

14}

15main()

16{chars[100];intupper-Q,lower

・0;

17printf("\nPleaseastring:n);

gets(s);

18fun(sr&upper,slower);

19printf(H\nupper-%dlower■

w

%d\nrupperzlower);

20)

五、程序改错题(2题)

41.下列给定程序中,函数proc()的功能是:用递归算法计算斐波拉契

级数列中第n项的值。从第一项起,斐波拉契级数序列为1,1,2,3,

5,8,13,21,…例如,若给n输入8,该项的斐波拉契级数值为21。

请修改程序中的错误,使它能得出正确的结果。注意:不要改动main

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

ninclude<ai<ho.b>

brMproc(mtc>

//••••found••••

»wiich(g>i

corOrreturnOi

//•••・••••

cate11cawtireiurn11

}

muni<proc(g1)4pcoc(g-2)>i

midnuiiaC>

km«fibiifMnt

pnfii(<*Input•tv)i«c«af(<Kdfl♦&n>i

pnntf<*B-%d\n*«n>i

fib=peoc<n>i

prmt«•fib=-Kd\n\n*«rtb)i

42.下列给定程序中,函数proc的功能是根据输入的:个边长(整型值),

判断能否构成三角形:若能构成等边三角形,则返回3;若是等腰三角

形,则返回2;若能构成三角形则返回1;若不能,则返回0。

例如,输入3个边长为3,4,5,实际输入时,数与数之间以Enter键分

隔而不是逗号。

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

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

试题程序:

#include<stdio.h>

#include<math.h>

intproc(inta,intb,intc)

if(a+b>c&&b-c>a&&a+c〉b)

if(a==b&&b==c)

//****found****

return1;

elseif(a==b||b==C||a==c)

return2;

//****found****

elsereturn3;

}

elsereturn0;

)

voidmain

(

inta,b,c,shape;

printf("\nlnputa,b,c:");

scanf("%d%d%d",&a,&b,&c);

printf("\na=%d.b=%d,c=%d\n",a,b,c);

shape=proc(a,b.c):

printf("\n\nTheshape:%d\n",shape);

)

六、操作题(2题)

43.给定程序中,函数fun的功能是:调用随机函数产生20个互不相同

的整数放在形参a所指数组中(此数组在主函数中已置0)。

请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确

的结果。

注意:源程序存放在考生文件夹下的BLANK1.C中。

不得增行或删行,也不得更改程序的结构!

linclude<stdlib.h>

2*include<stdio.h>

3*defineN20

4voidfun(int*a)

5(inti.x,n«0;

6x»rand()%20;

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

8while(n<_1_)

9(for(i«0;i<n;i++)

10/♦♦♦*******found******♦***/

11if(x-a[i))_2_;

12/**********found**********/

13if(iM_3_){a[n]-x;n++;)

14x«rand()%20;

15)

16}

17main()

18(intx[N)-(0}

19fun(x);

20printf(wTheresult:\nH);

21for(iw0;i<N;i++)

n

22(printf("%4drx[i]);

23if((i4-l)%5-«0)printf(R\nH);

24}

25printf(w\n\nw);

26

44.以下程序的运行结果是【】。

#include<stdio.h>

longfib(intg)

{switch(g)

{case0:return0;

case1:

case2:return1;}

return(fib(g-l)+fib(g-2));}

main()

{longk;

k=fib(5);

printf("k=%51d\n",k);}

参考答案

1.0240480,2,4\r\n0,4,8解析:本题主要考查for循环语句的使用以

及静态局部变量的特点。

2.数据库管理系统

数据库管理系统(DBMS)

3.白盒法白盒法

4.s=30s=30解析:分析循环条件“m=l,m<=4",所以循环4次。第1

次n=n*a=2,s=s+n=2;m=2。第2次:n=n*a=4,s=s+n=6;m=3。第

3次:n=n*a=8,s=s+n=14;m=4o第4次:n=n*a=16,s=s+n=30o

5.503503解析:此处需注意的是:如果if后面的条件为真,只执行其

后的一条语句或一条复合语句,如果if后面的条件为假,只执行else后

面的一条语句或一条复合语句。先判断表达式“a<b”为假,不执行,t=a”,

但执行"a=b;b=t;",s的值为3,b的值为0。在判断表达式“a<c”,

值为真,所以执行后面的3条语句,t=a;a=c;c=t",结果a的值为5,c

的值为3,所以最后输出的结果为5、。和3。

6.实例将属性、操作相似的对象归为类,也就是说,类是具有共同属性、

共同方法的对象的集合。所以,类是对象的抽象,对象则是其对应类的

一个实例。

7.x+=1;

8.main()pstr*(pstr+j)

9.k=p;k=p;解析:为要寻找数组中的最大元素的下标,需先预设1个

临时最大元素的下标,并顺序逐一考查数组的元素,当发现当前元素比

临时最大元素更大时,就用当前元素的下标更新临时最大元素下标。直

至考查了数组的全部元素后,这临时最大元素下标就是数组的最大元素

下标。通常预设的最大元素下标是数组的首元素下标,考查是从首元素

开始顺序向后继元素考查。程序中,存储临时最大元素下标的变量是k,

变量p控制顺序考查的循环控制变量。当发现当前元素s[p]比临时最大

元素s[k)更大时,应该用p更新ko所以在空框处应填入代码“k=p;”。

10.顺序顺序解析:当线性表的操作无插入和删除时,在对线性表进行

操作时,不能改变元素的位置,采用顺序结构的效率高于链式结构。因

为采用顺序结构,对元素的查找可通过计算得到。

11.D

由题目中线性链表的定义可知,要将q和r所指的结点交换前后位

置,只要使q指向r的后一个结点,P指向r结点,r指向q结点即

可。而在选项D中,r->next=q,这时r指向的节点为q;p->next=r,

这时P指向的节点为r;q->next:r->next,因为r节点已经指向q,所

以执行这个语句后q又指向q,所以选项D不正确。

12.A

13.AC语言中,逗号运算符可以把两个以上(包含两个)的表达式连接

成一个表达式。逗号运算符的优先级是所有运算符中级别最低的,逗号

运算符保证左边的子表达式运算结束后才进行右边的子表达式的运算。

也就是说,逗号运算符是一个序列点,其左边所有子表达式运算都结束

后,才对其右边的子表达式进行运算,并以最右边表达式的值作为整个

逗号表达式的值。因此C的值为“a%b”,即“11%3=2”。故本题答案为A

选项。

14.C

15.D

16.C

17.D

各种排序方法中最坏情况下需要比较的次数分别为眉泡排序n(n-

1)/2、快速排序n(n-l)/2、简单插入排序n(n-l)/2>希尔排序0(nl.5)、

简单选择排序n(n-l)/2、堆排序O(nlog2n)

18.A解析:线性表的插入和删除允许在任何位置进行,所以B选项的

说法是正确的;栈的操作只允许在栈顶进行,因此,栈称为先进后出表

(FILO,FirstInLastOut),或“后进先出''表(LIFO,LastInFirstOut),所以

C选项说法也是正确的,•队列(queue)是只允许在一端删除,在另一端插

入的顺序表,允许删除的一端叫做队头(front),允许插入的一端叫做队

尾(rear),因此队列亦称作先进先出(FIFO,FirstInFirstOut)的线性表,

或后进后出(LILO,LastInLastOut)的线性表。所以D选项说法也是正确

的。

19.B执行调用语句“n=fim(3);”,3被当作实参传递进去,进行了一次调

用。3被当作实参传进去后,程序会执行“elsereturnfun(k-1)+1;",函数

被调用了第2次,参数是3-1,也就是2。2被当作参数传进去后,程序

会执行"elsereturnfun(k-l)+1;”函数被调用了第3次,参数是2-1,也

就是1。I被当作实参传进去后,程序会执行“elseif(k=l)return1;",函

数不再被递归调用。所以最终结果为3次。故本题答案为B选项。

20.C解析:该题稍微难一点。主要要搞清楚以下几点:①定义了一个

指针数组char*p⑵后,程序中第一个循环for(i=0;i<2;i++)p[i]=ch[i];

的作用,是使指针数组的p[0]元素(它本身是一个指针)指向了二维数组

ch的第一行字符串,并使指针数组的p[l]元素指向二维数组ch的第二

行字符串,这样,就使指针数组P和二维数组Ch建立起了一种对应关

系,以后对二维数组ch的某个元素的引用就有两种等价的形式:ch[i][j]

或②对二维数组Ch的初始化,使其第一行ch[O]中存入了字符

串“693

21.

【解析】本题考查字符串连接函数的实现。本题通过两个for循环完成

功能。第一个循环的作用是计算出字符串的长度,如果pl是‘\0'(即

此字符是字串尾),退出循环,i中保存的数值即是字串长度。第二个循

环的作用是循环遍历字串p2的字符,利用语句“pl[i++]=p2|j]将p2中

的字符逐个插到字串pl后。

22.

(答案1

voidfnn((Jiar*a,char*h,char*p)

{mti=0;

char*q=a;

while(q<h)

(

咽=*q;q++;i++;

)

while(q<p)(

if(*q|二,巧

(

加仁*q;i++:

1,

q++;

I

while(*q)

(

a(i土,;》.甲+;

)

a(i]=W;

}

(解析】

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

尾“号,加上结束标识符-

23.

【解析】要计算n门课程的平均分,首先可以求得n门课程的总分,然

后除以n得到其平均分,最后将其平均分返回到主函数中。

24.\n\t#include'stdio.h'

\nmain

\n{longt=l;

\ninti;

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

\nt=t*i;

\nprintf('%ld',t);}

\n

25.

【解析】按照题目中要求,求出能整除x且不是偶数的各整数。首先

判断小于等于整数x的所有奇数是否能被x整除,将能被x整除的奇

数放入数组pp中。最后将数组pp中元素的个数返回到主函数中。

26.

I答案】

voidfun(chara[J,charH|.in:n)

(inii,k=0;

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

b[k♦+卜叩h

b|k上/•在字符串最后加上结束标识符*/

)

(解析】

根据题意要蒯除字符串中指定下标的字将,也就是保得非指定下标的字符.所以if语句为说!』),在字

符串木是加上字符率结束标识符W

27.

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

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

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

回给主函数。

28.

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

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

个数返回给主函数。

29.voidproc(STRECa[])

{

inti,j;

STRECt;

for(i=l;i<M;i++)//用冒泡法来按从高到低排序

for(j=0;j++)

if(a[j].s)//按分数的高低排列学生的记录,高分在前

{t=a[j];a[j]=a[j+l];a[j+l]=t;}

)

30.

【解析】根据题意,所写函数要用for循环实现对整数1~1000的遍历;

通过if语句找出能被7或11整除,但不能同时被7和11整除的所有整

数,因为同时被7和11整除的整数一定能被77整除,且不能被77整

除的数不一定就是能被7或11整除,可得出表达式“(i%7==0||i%ll==O)

&&i%77!=0";再按题目要求,将找出来的整数放在a所指的数组中,

通过n返回这些数的个数即可。

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

while(s<0)正确:while(s>0)⑴错误:voidfun(longs,longt)正确:void

fun(longs,long*t)\r\n(2)错误:while(s<0)正确:while(s>0)解析:本

题考查函数调用方式和while循环语句中条件限制的方法。主函数中fun()

的调用方式说明fun()函数的参数应当为指针类型,所以voidfun(long

s,long。正确的写法应该是voidfun(longs,long*t)0

32.(1)错误:*p正确:*p(2)错误:'o';正确3o';⑴错误:*p\r\n正确:

*p\r\n(2)错误:'o';\r\n正确:'o';

33.(l)d=l;s=0;(2)d=d/10;(l)d=1;s=0;(2)d=d/10;解析:

本题中函数的功能是计算n的5次方的值(规定n的值大于2、小于8),

通过形参指针传回主函数;并计算该值的个位、十位、百位上数字之和

作为函数值返回。本题解题过程首先是求5次方,然后对结果进行截取

以及求和。

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

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

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

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

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

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

务必注意。

35.(1)错误:ifhigh%j

温馨提示

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

评论

0/150

提交评论