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

下载本文档

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

文档简介

2021年山西省阳泉市全国计算机等级考试

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

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

一、2.填空题(10题)

1.Jackson方法是一种面向[]的结构化方法。

2.有以下程序:

#include<string.h>

structSTU

{charname[10];

intnum;};

voidf(char*name,intnum)

{structSTUs[2]={{"SunDan",20044},{"Penghua",20045)};

num=s[0].num;

strcpy(name,s[0].name);

}

main()

{structSTUs[2]={{"YangSan",20041},{"LiSiGuo",20042}},*p;

p=&s[l];f(p->name,p->num);

printf("%s%d\n",p->name,p->num);

)

程序运行后的输出结果是【】。

3.若有定义inta[4][4]={{l,2,3,4},{0},{4,6,8,10},{1,3,

5,7}),则初始化后,得到的初值是o

4.表示“整数x的绝对值大于5”时值为“假”的C语言表达式是

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

6.以下程序的输出结果是____o

main()

{inta=l,b=2;

a=a+b;b=a-b;a=a-b;

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

)

7.在一个容量为15的循环队列中,若头指针front=6,尾指针Year

9,则该循环队列中共有【】个元素。

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

main()

charc;intn=100;

floatf=10;doublex;

x=f*=n/=(c=50);

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

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

main()

{inti=10,j=0;

do

{j=j+i;i-;)

while(i>2);

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

10.有以下程序

intfa(intx){returnx*x;}

intfb(intx){returnx*x*x;}

intf(int(*fl)(),int(*f2)(),intx)

{returnf2(x)-fl(x);}

main()

{inti;i=f(fa,fb,2);printf("%d\n",i);)

程序运行后,输出结果是【】。

二、单选题(10题)

11.有以下程序:

main

{intx,i;

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

{x=i:

if(x%2=0)

if(x%3=0)

if(X%7=0)

printf("%d,i)”;

}

)

输出结果是()。

A.28B.27C.42D.41

12.以下选项中,能用作用户标识符的是()。

A._0_B.8_8C.voidD.unsigned

13.以下叙述中错误的是()。

A.C语言的可执行程序是由一系列机器指令构成的

B.用C语言编写的源程序不能直接在计算机上运行

C.通过编译得到的二进制目标程序需要连接才可以运行

D.在没有安装C语言集成开发环境的机器上不能运行C源程序生成

的.exe文件

14.以下关于指针的说法错误的是()。

A.可以向指针中写入任意数据

B.可以向指针所指内存单元中写入数据

C指针可以指向与其基类型相同的普通变量

D.可以通过加法运算,使指针指向下一个内存单元

15.有以下程序:

#include<stdio.h>

main()

(

chars[]="abcde”;

s+=2;

printf(“%d\n”,s[O]);

}

程序的运行结果是OO

A.输出字符c的ASCII值B.程序出错C.输出字符cD.输出字符a的

ASCII值

16.若有定义语句:char*sl="OK",*s2="ok";,以下选项中,能够输

出"0K"的语句是

A.A.if(strcmp(sl,s2)==0)puts(sl);

B.if(strcmp(sl,s2)!=0)puts(s2);

C.if(strcmp(sl,s2)==l)puts(sl);

D.if(strcmp(sl,s2)!=0)puts(sl);

17.下列程序的运行结果是()。

auin<)

wiide<+!■(,一・1),

A.2,3,2B.2,3,1C.l,3,3D,3,1,2

18.用二进制来编码字符串“abcdabaa",需要能够根据编码,解码回原来

的字符串,最少需要。长的二进制字符串

A.12B.14C.18D.24

19.有说明语句“inta,b;",如果输入111222333,使得a的值为111,b

的值为333,则以下正确的语句是()。

A.scanf("%3d%*3d%3d",&a,&b);

B.scanf("%*3d%3d%3d",&a,&b);

C.scanf("%3d%3d%*3d",&a,&b);

D.scanf("%3d%*2d%3d",&a,&b);

20.计算机硬件组成中,CPU包含____o

A.控制器和存储器B.控制器和运算器C.控制器、运算器和存储器D

内存储器和外存储器

三、程序设计题(10题)

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

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

数,用来删除字符串中的所有空格。例如,输入asdafaaz67,则输出为

asdafaaz670注意:部分源程序在文件progl.c中。请勿改动主函数

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

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

#include<stdio.h>

#include<ctype.h>

#include<conio.h>

#include<stdlib.h>

voidfun(char*str)

)

main()

(

charstr[81];

charMsg[]="Inputastring:n;

intn;

FILE*out;

printf(Msg);

gets(str);

puts(str);

fun(str);

printf(•****str:%s\nn,str);

out=fopen("out.dat”,;

fun(Msg);

fprintf(out,'*%sn,Msg);

fclose(out);

)

22.

编写函数fun(),其功能是:求SS所指字符串中指定字符的个数,并

返回此值。例如,若输入字符串“123412132",输入字符为“1”,则输出

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

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

题程序:

Stnclu<WVzdhbu

*tficlu4e<como.

更includeVvldia

SdefineM8)

mi(UA(char•ch&rc>

midnitin()

char〈M].chi

wywtvfli(-C?LS")।

prwii(<•\nPloutemtefaxrifigi*)।

<•>•

<•\nPI»awEitr.chart")s

ch-<)।

print1<<\nThenumberoftbechar舟/d\«*<(an

ch))i

23.编写函数fun,其功能是:将s所指字符串中除了下标为奇数,同时

ASCH码值也为奇数自q字符之外。

其余所有字符全部删除,串中剩余字符所形成的一个新串放在所指的数

组中。

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

码值为奇数,但所在元素的

下标为偶数,因此需要删除;而字符1的ASCII码值为奇数,所在数组

中的下标也为奇数,因此不应当删除,

其他依此类推。最后t所指数组中的内容应为“135”。

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

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

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

试题程序:

#1ncltide<stdio.k>

#include<3tring.h>

voidfun(char*s,chart[D

I

)

main()*

(

chars(100],t[100];

printff'XnPIeaseenterstrings:n);

scanf("%s",§X

加n(s,0;

printf(n\n,nieresultid:%s\n,f4);

I

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

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

函数fun(),它的功能是将ss所指字符串中所有下标为奇数的字母转换

为大写字母(若该位置上不是字母,则不转换)。

例如,若输入“abc4Efg",则应输出“aBc4EFg”。

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

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

试题程序:

1#include<conio.h>

2#include<stdio.h>

3tinclude<string.h>

4#include<stdlib.h>

5voidfun(char*ss)

6{

7

8}

9voidmain()

10{

11FILE*wf;

12char81],s[81]="abc4Efg”;

13system(℃LSM);

14printf(H\nPleaseenteranstring

within80characters:\nM);

15gets(tt);

16printf(n\n\nAfterchanging,

w

thestringXn%srtt);

17fun(tt);

18printf(•'NnbecomesXn;

19/

20wf=fopen("out・dat","w");

21fun(s);

n

22fprintf(wfJ*srs);

23fclose(wf);

24/♦♦♦•♦♦#♦»♦♦♦♦***♦/

251

25.

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

是:使字符串中前部的*号不得多余m个;若多余m个,则删除多余的

*号;若少于或等于m个,则什么也不做,字符串中间和尾部的*号不删

除。例如,字符串中的内容为****A*BC*DEF*G****,若m的值为2,

删除后,字符串中的内容则应当是**A*BC*DEF*G****;若m的值为

4,则字符串中的内容仍为****A*BC*DEF*G****°n的值在主函数中输

入。在编写函数时,不得使用c语言提供的字符串函数。注意:部分源

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

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

FmclockVadidh>

*曲CIMJTVCOCUD.h>

midproc<char•n)

voidmainf>

(char

M

*Efitrr*Mnngz\n>igru(«tr)i

prinr«*Enitrni|•

proc<

pnntfC*Tbf»Afterdelrtrd:\n*)t

iMitwCstrH

26.

请编写函数fun(),其功能是:找出2M整型二维数组中最大元素的值,

并将此值返回调用函数。注意:部分源程序给出如下。请勿改动main

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

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

Sdr6ncM4

sincludeVzdicx.h>

iiMfun<inta£J£M]>

voidRMin()

initrr[2][M]-IS.B.3.45・7C.-4.12.2>i

prttii"•fnAx-,d\na«fwn<arr>)4

27.

请编写一个函数proc(),它的功能是:比较2个字符串的长度(不得

调用C语言中求字符串长度的函数),函数返回较长的字符串。若2个

字符串长度相等,则返回第1个字符串。例如,若输入jiangxiv;Enter>;

beijing<;Enter>;则函数返回jiangxio注意:部分源程序给出如下。

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

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

8ktldiMWb>

rh*r•prodclur•n«char•t)

moidmain<)

chara(20j«b[10j«•p・•qa

pnnih*InputlihMnng:")i

A)I

prindCwlapM<2th3rm(,*)t

IRtMb),

pnntt(>K»n«p|roc<a«b))i

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

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

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

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

£EclwicVwtdlO.h>

3mrludr<<1ypc-b>

<>t)clu<l*VconitKh>

#MirludrVwdhh

midprocKchar•MI)

char»tr[8lJi

*CLS*)t

pruiiR*Input••tnngs*)»

r〃

Mr>t

prodMT》i

prwitfC*•••Mr।KAn*»str)«

29.

请编写一个函数,用来删除字符串中的所有空格。

例如,输入asdafaaz67,则输出为asdafaaz67o

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

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

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

试题程序:

#i^lude<stdK.h>

#i)iclude<ctype.h>

#iiiclude<conio.h>

vodfun(char*stz)

(

)

main()

{char$tr[81];

charMsgf]=uInputastring:7';

intn;

printf(Msg);gets(str);puts(str);{un(str);

printfC****str:%8\nM,str);

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

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

fun(),该函数的功能是统计各年龄段的人数。N个年龄通过调用随机

函数获得,并放入主函数的age数组中。要求函数把。〜9岁的人数存

放在d[0]中,把10〜19岁的人数存放在d[l]中,把20〜29岁的人数存

放在d[2]中,依此类推,把100岁(含100岁)以上年龄的人数都存放在

d[10]中。结果在主函数中输出。

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

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

试题程序:

1#include<stdio.h>

21defineN50

3tdefineM11

4voidfun(int♦a,int♦b)

51(

6

7)

8doublernd()

9(

10statict«29,c=217,m=1024,r=0;

11r=(r*t+c)%m;

12return((double)r/m);

13J

14voidmain()

i.

16FILE•wf;

17intage[N]rird[MJ;

18intb(N]-[32,45,15,12,86,49,

97,3,44,52,17,95,63);

19for(i-0;i<N;i)

20age[i]-(int)(115*rnd());

/•产生一个随机的年龄教组*/

21printf(**rheoriginaldata

22for(i-0;i<N;i**)

23printf((i+1)*10=0?

4dw,age[i]);/*每行*出10冷敏•/

24printf(••\n\nw);

25fun(age,d);

26for(i=0;i<10;i++)

H

27printf(-%4d--%4d:%4d\nr

i・10,i^l0^9.d[i]);

M

28printf("Over100:^4d\nrd[10]);

29/***♦♦•******♦・•♦・/

30wf-fopen(Mout.datMww);

31fun(brd);

32for(i=0;i<10;1•♦+)

w

33fprintf(wf.^d—Md:%4d\nri

-10,

34fprintf(wfr'KXrer100:%4dn,d[10]);

35fclose(wf);

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

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

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

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

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

1tinclude<stdio.h>

2/****•*****foundw*********/

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{tl++;

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

14

15}

16if(tl>sl)returnt;

17elsereturns;

18)

19main()

20{chara[80]rb[80);

21printf(w\nEnterastring:w);

gets(a);

22printf("\nEnterastringagain:

;gets(b);

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

fun(arb));

24

32.下列给定程序中,函数fun()的功能是:用冒泡法对6个字符串按由

小到大的顺序进行排序。

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

#defineMAXLINE20

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

fun(char*pstr[6])

{inti,j;

char*p;

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

{for(j=i+l;j<6;j++)

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

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

p=*(pstr+i);

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

*(pstr+i)-pstr+j;

*(pstr+j)=p;

main()

{inti;

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

clrscr();

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

printf("\nEnter6string(lstringateach

line):\n");''

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

fun(pstr);

printf("Thestringsaftersorting:\n");

for(i=0;i<6;i++)printf("%s\n",pstr[i]);

)

33.给定程序中函数fun的功能是:根据整型形参m,计算如下公式的

值。

例如,若m中的值为5,则应输出:1.463611。

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

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

[试题源程序]

#include<stdiO.h>

doublefun(intm)

(

doubley=1.0;

inti;

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

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

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

y+=l/(i*i);

retum(y);

1.

main()

(

intn=5;

printf("\nTheresultis%lf\n",fun(n));

}

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

字符按逆序存放到t所指字符串中,然后把s所指串中的字符按正序连

接到t所指串的后面。

例如:当S所指的字符串为:“ABCDE”时,则t所指的字符串应为:

“EDCBAABCDE”。

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

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

finclude<stdio.h>

2♦include<string.h>

3voidfun(char*srchar*t)

4(

5/♦**♦♦***♦♦**found***♦♦**♦♦♦♦*/

6inti;

7si«strlen(s);

8for(i-0;i<sl;i++)

9/•………•♦found…………/

10t[i]•s[sl-i];

11for(i-0;i<sl;i++)

12t[sl+i]=s[i];

13t[2*sl]-•XO';

14

15main()

16{chars[100],t(100];

17printf(w\nPleaseenterstring

Mwn

s:);scanf(%srs);

18fun(srt);

wn

19printf(Theresultis:%s\nrt);

20

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

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

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

#defineM5

ihtfun(intn,intxx[][])

{inti,j,sum=0;

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

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

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

printf("%4f',xx[i]|j]);

printf("\n");

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

sum+=xx[i][i]+xx[i][n-i-1];

return(sum);

main()

{intaa[M][M]={{1,2,3,4,5},{4,3,2,1,0},

(6,7,8,9,0},{9,8,7,6,5},{3,4,5,6,7));

clrscr();

printf("\nThesumofallelementson2

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

36.下列给定程序中,函数fun()的功能是:用冒泡法对6个字符串按由

大到小的顺序进行排序。

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

#defineMAXLINE20

voidfun(char*pstr[6])

(

inti,j;

char*p;

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

for(j=i+l;j<6;j++)

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

if(strcmp((pstr+i),(pstr+j))<0)

p=*(pstr+i);

*(pstr+i)=*(pstr+j);

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

*(pstr+j)=*p;

main()

inti;

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

clrscr();

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

pstr[i]=str[i];

printf("/nEnter6string(lstringateachline):\n");

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

scanf("%s",pstr[i]);

fun(pstr);

printf("Thestringsaftersorting:\n");

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

printf("%s\n",pstr[i]);

)

37.给定程序中,函数fun()的功能是:求输入的两个数中较小的数。

例如:输入510,结果为minis5O

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

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

试题程序、

#include<stdio.h>

#include<conio.h>

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

intfun(intx,y)

{intz;

z=x<y?x:y;

return(z);

}

main()

{inta,b,c;

scanf("%d,%d\n",&a,&b);

c=fun(a,b);

printf("minis%d",c);

)

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

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

5位八进制数字字符。

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

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

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

[试题源程序]

#include<stdio.h>

#include<string.h>

#include<stdlib.h>

intfun(char*p)

(

intn;

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

n=*p-'o';

P++;

while(*p!=0){

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

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

39.下列给定程序中,函数fun()的功能是:从s所指字符串中,找出t

所指字符串的个数作为函数值返回。例如,当s所指字符串中的内容为

abcdabfab,t所指字符串的内容为ab,则函数返回整数3。

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

#include<string.h>

intfun(char*s,char*t)

{intn;char*p,*r;

n=0;

while(*s)

{P=s;

r=t;

while(*r)

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

if(*r==*p){r++;p++)

elsebreak;

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

if(r=='\O')

n++;

s++;

)

returnn;

main()

{chars[100],t[100];intm;

clrscr();

printf("\nPleaseenterstrings:");

scanf("%s",s);

printf("\nPleaseentersubstringt:");

scanf("%s",t);

m=fun(s,t);

printf("\nTheresultis:m=%d\n",m);

40.给定程序MODE.C中函数fun的功能是:求整数x的y次方的低

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

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

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

;linclude<stdio.h>

2!longfun(intxrintlong*p)

3i{inti;

4longt«l;

5\/**♦****♦♦****found***♦**♦♦*****/

i

6for(i-1;i<y;i++)

7

8*p-t;

9i/…•………found…………•/

10!t-t/1000;

11»returnt;

12;}

13!main()

14i{longt,r;intxry;

15;printf(w\nlnputxandy:

!scanf(M%ld%ldw,&x,iy)

i

16it»fun(x,v,&r);

w

17!printf(\n\nx-%dry»%d,

w

(last-%ld\n\nrxry#rrt);

18;1

五、程序改错题(2题)

41.

下列给定程序中,函数proc()的功能是:用下面的公式求兀的近似值,

直到最后一项的绝对值小于指定的数(参数num)为止。71/4^1-1/

3+1/5-1/7+…例如,程序运行后,输入0.0001,则程序输出3.1414。

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

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

二includeh>

include<math.h>

s*includeVstdio.h>

floatproc(floatnum)

(

inisi

floatn.t«DI:

t011pinO,n=liN=11

found»***

whileC4num)

(

pi=pt+11

n=n4-2j

//««»•found•■••

t=x%m

>

pi=pi*4$

returnph

J

voidm^inC>

floatnl•n2i

sy5teni<-€LSH)s

print(("Enterafloatnumber:")i

scanf(*%P.&«nl)i

n2,fcproc(nl)i

printfC*%6,4f\n*.n2>i

42.

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

10个能被13或17整除的自然数之和。k的值由主函数传人,若k的值

为600,则函数的值为5671。请修改程序中的错误,使它能得出正确的

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

程序的结构。试题程序:

sindudcli>

$inciuorVcooio.b>

Sinriude<C*tdliKIC>

iniproc<mt

initn-0/fnc-0・ji

win*(lO*,2J&&(ntr^I0M

//••••found••••

if<(kKlSMO)H(kKn«O>>

I1•・•»+hime++“

k--i

//••••found••••

returnmi

voidmBin(>

sy»tctn(*CLS*)।

pnoi((*^id\n*•proc(600>>;

六、操作题(2题)

43.请补充main()函数,该函数的功能是:从键盘输入一个长整数,如

果这个数是负数,则取它的绝对值,并显示出来。例如,输入>123456,

结果为:123456o注意:部分源程序给出如下。请勿改动main()函

数和其他函数中的任何内容,仅在横线上填入所编写的若干表达式或语

句。试题程序:

3mdudeV-tdlihb>

生includrVh>

更ificludeVconio.h2>

voi4m*in()

loci,ininutni

*C*KS*>।

printfC*Knierthe<kiiai\ii0)।

«can(<|l))i

prmtf(••••theobaolvic“Is•••\®*)।

if(num*CO)

■】

prtntf(13]>i

44.有以下程序:

intfa(intx){returnx*x;}

intfb(intx){retumx*x*x;}

intf(int(*fl)(),int(*f2)(),(intx)

{returnf2(x)-fl(x);}

main()

{inti;i=f(fa,fb,2);printf("%d\n",i);}

程序运行后,输出结果是【】。

参考答案

1.数据结构数据结构解析:Jackson方法是一,种面向数据结构的结构化

方法。

2.SunDan20042SunDan20042解析:f函数中形参1用的是显式传地址

的方式,因此p->name的值发生改变,而形参2用的传值的方式,在

调用时不改变实参的值,因此p->num的值不发生变化。

3.00解析:二维数组可以看成是按矩阵形式排列的,题目中给二维数组

赋初值是按行分段赋值的,a⑷⑷可以分解为4个一维数组,其数组名

分别为a[0]、a[l]xa[2]、a[3],这4个一维数组都有4个元素,a⑼的元

素为a[0][0]、a[0][l]xa[0][2]sa[0][3]o

4.(x>-5)&&(x<5)(x>-5)&&(x<5)解析:本题考查基本逻辑表达,“整

数x的绝对值大于5”时值为“假”,即整数x的绝对值小于等于5,也就

是整数x要大于等于-5且要小于等于5。这里“且”用“与(&&)”表示,所

以C语言表达式为:(x>-5)&&(x<5)o

5.继承继承

6.21

7.3

8.220.0或220或220.或220.000000220.0或220或220.或2

20.000000解析:所有的赋值运算符的优先级都相同,它们的结合性为

从右至左,它们返回的表达式值为赋给变量的值.所以,语句

x=f*=n/=(c=50):—x=#=n/=50;-x=#=2;(n的值变成2)-x=20;o故

最终输出的结果应该是:220.000000

9.5252解析:do...while语句的形式为:

do

(

语句;

}while(条件表达式)

当条件表达式为非零时,继续执行循环体,直到条件表达式为零时退出

循环。

10.44解析:在主函数中调用函数f,函数f有三个参数,形参fl与f2

分别是两个指向函数的指针。在f中执行f2(x)-fl(x),实际上是执行了

32

fb(2)-fa(2),故执行i=(fa,fb,2)后i的02-2=4o

11.C

只有当3个if条件同时成立,即能够同时被2、3、7整除时,才输出i

的值,而从。到50能够同时被2、3、7整除的数只有42,故选择C

选项。

12.AC语言的标识符由字母、数字、下划线组成,且第1个字符必须是

字母或下划线。另外,关键字不能作为标识符。B选项中以数字8开头,

所以错误。C选项与D选项中用的是关键字“void”与“unsigned",所以错

误。故本题答案为A选项。

13.D

c语言的可执行程序是由一系列机器指令组成的。用C语言编写的源

程序必须经过编译生成二进制目标代码,再经过连接才能运行,并且

可以脱离c语言集成开发环境。故答案为D)。

14.A指针变量必须区分基类型,可以向指针所指内存单元写入与基类型

相同的数据,而不能写入任意数据,选项A错误,选项B正确;指针可

以指向与其基类型相同的普通变量,选项C正确才旨针是一个内存地址,

它是一个整数,可以通过加法运算,使指针指向下一个内存单元,选项

D正确。故本题答案为A选项。

15.B在C语言中,数组名类似于一个指向数组首地址的指针常量,一

旦定义就不能修改其内容。所以本题中的“s+=2;”语句让数组名S的内

容加2是错误的,编译无法通过。故本题答案为B选项。

16.D

解析:strcmp(sl,s2)的作用是比较字符串si和s2。参数strl,str2如

果相同,则返回0,如果strl大于str2则返回一个正整数,如果str1小

于str2则返回一个负整数。本题中si,s2不相同,A)选项不会输出任

何字符,B)选项输出ok,C)选项不输出任何字符,D)选项会输出

OKo

17.D本题考查while循环。第一次循环,y=y-l,y=2,循环条件成立,

X=l,X++后值为1,x自加变成2,进入循环,a=a+l=l,判断if语句条

件是否成立,y<x不成立,接着执行下一次循环。第二次循环,x=2,y-

1=1.循环条件成立,进入循环,a=a+l=2,判断if语句的控制条件是否

成立,y<x成立,执行break语句。退出循环。结果为D。

18.B

19.A

根据题意,要使a的值为111,b的值为333,必须在读入时指定a的

读入宽度为3,b的读入宽度为3,且a和b的控制字符之间必须额外

增加%*控制符,用于跳过中间的3位输入数字,选项A正确。本题答

案为A选项。

20.B

21.1voidfun(char*str)

2{

3inti=O;

4char*p=str;

5while(*p)

61

7if(*p!=")/*删除空格*/

8{

9str[i++]=*p;

10)

11P++;

12}

13str[i]=N(y;/*加上结束符*/

14)

本题要求删除所有空格,即保留除了空格以外的其他所有字符。由于

C语言中没有直接删除字符的操作,因此对不需要删除的字符采用“保

留”的操作。用指针P指向字符串中的每一个字符,每指向一个字符都

判断其是否为空格,若不是空格则将其保存到数组Str。

22.

【解析】此题考查用for循环遍历字符串和通过条件表达式*ss!='\0

'来判断字符串是否结束。给字符串加上结束标识‘\0',通过for循

环遍历字符串中每一个字符,在遇到结束标识前,如果遇到指定(即用户

输入)字符,变量i加1,最后将变量i返回,即用户输入字符在字符串

中出现的次数。

23.

I答案】

voidfun(('har*s,chart[J)

I.

inti.j=0.n;

n=stricn(s);

fbr(isO;i<n;i++)

呻%2!以>&&#[%2]刈

{tbM>J;/*将下标为奇数同时ASCII码值为奇数的字符放人数组t中*/

J++;

)

tfi]=w;产最后加上结束标识符*/

)

【解析】

用循环遍历字符串,通过if语句将下标和ASCII码都为奇数的字符保

存到数组中,在字符串末尾加上结束标识符。

24.1voidfun(char*ss)

2{

3inti;

4for(i=O;ss[i]!='\\0';i++)/*将ss所指字符串中所有下标为奇数的字母

转换为大写字母*/

5if(i%2==l&&ss[i]>='a'&&ss[i]<='z')

6ss[i]=ss[i]-32;

7)

本题要求将给定字符串ss中下标为奇数的字母转换为大写字母。需要

先判断下标为奇数的字母是否是小写字母,如果是再通过其转换方法

进行转换。从C语言的学习中知道,只要将小写字母减去32即转换成

大写宇母,将大写字母加上32即换转成小写字母。本程序用if语句实

现转换功能。

25.

【解析】题目中要求字符串前部的*不得多于m,首先要计算出字符串

前部的*号的个数,与变量m进行比较。当字符串前部的*多于m个时,

删除多余的*。规定不能用字符串函数处理,可以通过移动字符串的首

指针来实现。

26.

【解析】此题考查的是数组的查找算法。使用for循环嵌套完成对二维

数组的遍历。题目要求出最大值,则应采用将所有元素遍历一遍,逐个

比较的方式完成。定义变量max,将第一个元素赋值max,然后通过for

循环将元素逐个与max比较,遇到比max大的则赋值max,替换原有

数据,当嵌套的for循环结束后,max即为二维数组中的最大值。

27.

【解析】题目中要求不能用C语言中提供的求字符串长度的函数,可以

通过移动字符串指针来计算字符串的长度。定义2个变量分别存放2个

字符串的长度,最后比较2个字符串的长度,返回相对较长的那一个字

符串。

28.

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

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

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

29.[答案]

voidfun(char*str)

{inti=(h

char

whi砥*遍历字符串*/

(

/*如果当前元素不为空格*/

)--

/*将当前元素保存到市中*/

蛔十";

.收.

)

P++;

}

s用户字符串最后加上结束标记符幅力

[解析]

题目要求删除空格,也就是重新保存空格以外的其他字符。通过循环删

除字符串中的每一个空格,将非空格字符进行重新保存。

30.1voidfun(int*a,int*b)

2{

3inti,j;

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

5b[]==0;/*_且b初始化为0*/

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

7if(a[i]>=100)

8b[10]++;/*如果年龄大于等于100,b[lo]自增1*/

9else

10b[a[i]/10]++;/*如果年龄小于100,则将其分别统计到b[a[i]/10]中*/

11}

<m;j++)

<n;i++)

本题是一个分段函数的问题,用两个循环来完成。第1个循环的作用

是使数组b中的所有元素值都为0。这个循环不能省略,因为若未对数

组b中的元素赋初值,则它们的值将是不可预测的。第2个循环的作

用是分别统计数组a中各年龄段的人数。当a[i]>100时,按题意要将

其统计到b[10]中。else的作用是如果年龄小于100,则将其分别统计到

b[a[i]/10]中。由运算优先级可知先进行a[i]/10的运算,所得结果作为b

的下标。若a用为0~9,a[i]/10的值为0,且0?9岁的人数正好存入b[0]

中。若a国为10〜19,a[i]/10的值为1,且10〜19岁的人数正好存入

b[l]中,依此类推。</n;i++)

</m;j++)

31.(l)char*fun(char*schar*t)(2)ss++;(3)tt++;(1)char*fun(char*s,

char*t)(2)ss++;(3)tt++;解析:本题中函数的功能是比较两个字符串,

将长的那个字符串的首地址作为函数值返回。解题思路是对调试过程中

产生的错误提示进行跟踪,也就是题干中给出的错误标识符号下的语句。

32.(1)错误:fun(char*pstr[6])正确:voidfun(char*pstr[6])(2)错误:

if(strcmp(*(pstr+i)pstr+j)>0正确:if(strcmp(*(pstr+i)*(pstr+j))>0(3)错

误:*(pstr+i)=pstr+j;正确:*(pstr+i)=*(pstr+j);(l)错误:fun(char*pstr[6])

正确:voidfun(char*pstr[6])\r\n(2)错误:if(strcmp(*(pstr+i),pstr+j)

温馨提示

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

评论

0/150

提交评论