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

下载本文档

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

文档简介

2022年辽宁省营口市全国计算机等级考试

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

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

一、2.填空题(10题)

1.数据结构分为逻辑结构与存储结构,线性链表属于[】。

2.数据字典是各类数据描述的集合,它通常包括5个部分,即数据项、

数据结构、数据流、和处理过程。

3.函数check用来判断字符串s是否是“回文”(顺读和倒读都一样的字

符串为“回文”,如abeba)。是则函数返回值1,否则返回值0,请填空。

intcheck(char*s)

(

char*pl,*p2;intn;

n=strlen(s);

pl=s;

p2=[];

while(pl<p2)

(

if(*pl!=*p2)break;

else{pl++;p2—;}

if([])return0;

elsereturn1;

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

main()

{chars[]="ABCD",*p;

for(p=s+l;p<s+4;p++)printf("%s\n",p);)

5.若输入5、9,以下程序的运行结果为【】。

main()

{inta,b,*ptl,*pt2;

printf("inputa,b:");

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

ptl=&a;

pt2=&b;

if(a<b)swap(ptl,pt2);

printf("\n%d,%d\n",*ptl,*pt2);

)

swap(pl,p2)

int*p1,*p2;

{int*p;

P=P1;

pl=p2;

P2=P;

6.以下程序的输出是【】。

main()

(

charstrl[]="Howdoyoudo",*pl=strl;

strcpy(strl+strlen(strl)/2,"esshe");

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

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

8.阅读下面程序,则执行后的输出结果是【】。

#include"stdio.h"

main()

{intx,y,z;

x=];y=2;z=3;

if(x>y)if(x>z)printf("%d",x);

elseprintf("%d",y);

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

9.设一棵二叉树的中序遍历结果为DBEAFC,前序遍历结果为

ABDECF,则后序遍历结果为【】。

10.mystrlen函数的功能是计算str所指字符串的长度,并作为函数值返

回。请填空。

intmystrlen(char*str)

{intI;

for(I=0;[]!='\n';I++);

return(I);}

二、单选题(10题)

ll.设有定义'Charp口={T,2,3},*q=p;",以下不能计算出一个char

型数据所占字节数的表达式是()。

A.sizeof(p)B.sizeof(char)C.sizeof(*q)D.sizeof(p[0])

12.下面程序的输出结果是()。chars()="ABCD",*p;main(){for(p=s;p

<s+4;p++)printf("%s\n",p);)

A.ABCDBCDCDDB.ABCDC.DCBAD.ABCDABCABA

13.字符串"alibaba”的二进制哈夫曼编码有多少位()

A.llB.12C.13D.14

14.下列程序的输出结果是()。#include<stdio.h>main(){structst{int

y,x,z;};union{longi;intj;chark;Jun;

printf("%d,%d\n",sizeof(structst),sizeof(un));}

A.6,2B.6,4C.8,4D,8,6

15.结构化程序设计主要强调的是()。

A.程序的规模B.程序的效率C.程序设计语言的先进性D.程序的易读

16.

(1)算法的空间复杂度是指()。

A)算法程序的长度B)算法程序中的指令条数

C)算法程序所占的存储空间D)律法执行过程中所需要的存储空间

17.C语言中char类型数据占字节数为()。

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

18.要声明一个有10个int型元素的数组,正确的语句是()。

A.inta[10];B.inta[2,5];C.inta[];D.int*a[10];

19.有以下程序:main(){inta[][3]={{1,2,3),{4,5,0)),(*pa)[3],i;pa=a;

for(i=0;i<3;i++)if(i<2)pa[l][i]=pa[l][i]-l;elsepa[l][i]=l;

printf("%d\n",a[O][l]+a[l][l]+a[l][2]);}执行后输出结果是()。

A.7B.6c.8D.无确定值

20.以下描述中正确的是

A.由于do-while循环中循环体语句只能是一条可执行语句,所以循环体

内不能使用复合语句

B.do-while循环由d。开始,用while结束,在while(表达式)后面不能写

分号

C.在do-while循环体中,是先执行一次循环,再进行判断

D.do-while循环中,根据情况可以省略while

三、程序设计题(10题)

21.请编写函数proc(),该函数的功能是:移动一维数组中的内容,若

数组中有n个整数,要求把下标从p到n-l(p<n-l)的数组元素平移到

数组的前面。例如,一维数组中的原始内容为1,2,3,4,5,6,7,

8,9,10,11,12,13,14,P的值为4。移动后,一维数组中的内容应

为5,6,7,8,9,10.11,12,13,14,1,2,3,4O注意:部分源

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

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

/includeh>

*defineM80

voidproc(int•w.intp.intn)

voidmain()

(

intarr[M]=<1.2.3・4.5.6・7・8・9・10.11・12・13,

14h

inti.p»n14s

printf("Theoriginaldaiat\nw)i

for(i'Oji-Cnsib4")

printf("%3d"•arrfi])।

printf(*\n\nEntcrpj**)>

wanfL%d"♦&p)।

proc(arr«p«n)t

printfC**\nThedataaftermoving;\n*):

for(im0|i<Cnii4-+>

printf("%3d".arrfi])।

printf(*\n\n*)i

22.请编一个函数intfun(inta),它的功能是:判断a是否是素数,若a是

素数,返回1;若不是素数,返回0。A的值由主函数从键盘读入。

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.请编写函数proc(),该函数的功能是:将两个两位数的正整数

numl,num2合并形成一个整数放在num中。合并的方式是:将numl

数的十位和个位数依次放在num数的十位和千位上,num2数的十位

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

例如,当num1=64,num2=18时,调用到该函数后,num=4168o

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

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

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

试题程序:

sfincludeVstdlib.h>

sincludeVstdio.h>

Minclude<conio.h>

voidproc(ininuml«intnum2Jong•num)

voidmain()

intnuml.num2s

longnum:

siystem("CLS*)।

printfC"Inputnuml,num2(")i

sc«nf("%d%d",&numl.&-num2)।

proc(numl•num2«&*num)t

printfCThcresultisi%ld\nN»num)।

25.编写函数fun,其功能是:求ss所指字符串中指定字符的个数,并返

回此值。

例如,若输入字符串123412132,输入字符为1,则输出3。

注意:部分源程序在文件PR0G1.C中。

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

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

Windude<stdio.h>

tfincludr<siring,ii>

HdrfineM8!

intfun(rhoir•HS.charc)

miun()

|churMJ•ch;

voidNONO():

printf(**XnPlenseenWrastring:");grU»(A):

printf(**\nPleaseenterachar:"I;ch=gctchar();

printf(**\nTlirnumberofthechnris:%d\np.fun(■.ch));

NONO():

vnidNONO()

|/«本函数用于打开文件.输入测试数据.调用fun函数.检出数据,关闭文件。*/

inii:

FILE*乩■M;

ehara[M]•b[M],ch;

rf=fbprn(nin.r**);

wf=fi»prn("out.dal*';

(or(i=0;i<10•i♦-)|

fnc4mf(rf,M%R**.a);

ft«>anf(rf.**%«**.b);

ch=♦b;

fprinrf(wf.,*%c=%d\n"'.ch•fun(a.ch));

(clone(if);

fclooefwf);

26.

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

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

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

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

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

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

sindudeVCCMIIQ.

Sincludeb>

¥indudeh>

doublepVQr(mim)

mHMuUfH)

»y«tctn(*CLS*)i

prifitit*Kf\n**proc(10))i

27.

请编写一个函数proc(),它的功能是:根据以下公式求7c的值(要求

满足精度。.。。。5,即某项小于。.。05时停止迭代)o

K/2・1+1/3+1*2/(3•5)+1•2•3/(3•5•7)4-1

*2»3«4/(3«5»7»9)+,,,+1#2•3•••••n/(3•S•

7w••••(2n4-l)l

程序运行后,如果输入精度0.0005,则程序输出3.140578o注意:

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

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

4include<conio.h>

UincludeVstdi。.h>

zinclude<math.h>

doubleproc(doubleeps>

voidmain()

(

doublesi

printfC"\nPkascenteraprecision:*)i

scanf(wKIP•&M)i

printfCXnPi^%lf\n*,proc(s))t

28.规定输入的字符串中只包含字母和*号。请编写函数fun,其功能是:

除了字符串前导的*号之外,将串中其他*号全部删除。在编写函数时,

不得使用c语言提供的字符串函数。

例如,字符串中的内容为:****A*BC*DEF*G*******,删除后,字符

串中的内容应当是:

****ABCDEFG。

注意:部分源程序在文件PR0G1.C中。

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

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

#include<stdin,h>

voidfun(rhar♦■)

main()

chars[81];voidNONO();

printf(*Enterastring:\nN);geu(B);

fun(、):

|irintf("Thestringafterdeleted:\n");puts(»);

NONO():

voidNONO()

!/•本南数用于打开文件.输入数据,调用函数,临出数据,关闭文件.•/

FILE•in,•oul;

mtt;chars[81J;

in=fopen("in.dat",**r**);

outwfopcn("out.dat**.ww*);

fw(i=

f»canf(in.**%•*,・);

fun(«)(

fprinlf(out.H%«\n**..);

(cloec(in);

IcloseCout);

29.

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

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

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

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

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

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

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

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

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

/includeh>

磐mclmie<COCMO.h>

midproc<char•a«intn)

voidt**in(>

(cii*rzrfjiifiiRI*

eEnter*Mnngi\nM>ifrt«(«tr)i

pnarK*Entertni।

procC

pnntfC"TbrAtnugafterdrlct«l*\i1*)t

tMi»(»tr)t

30….请编写函数。fun能是:判断形参n中的正整数是几位数(输入数

据的位数不超过4位),并将结果通过函数值返回。例如:若输入的数

据为123,则输出结果为:输入的数字是3位。注意:部分源程序存在

PR0G1.C中,请勿改动主函数main和其他函数中的任何内容,仅在函

数fun的花括号中填入所缩写的若干语句。试题程

iinclude<stdio.h>

voidNONOO;

intfun(intn)

main()

{intn,place;

do{

printf请输入一个4位以内的正整数:•);

scanf;

)while(n<0IIn>9999);

place-fun(n);

printf("IS人的数字是%d位\n**,place);

NONO();

)

voidNONO()

{/•本函数用于打开文件,输入数据,调用雨数,输出数据,关闭文件。*/

FILE•fp,•wf;

inti,n,place;

fp■fopen("c:\test\in.dat","r");

wf-fopen("c:\test\sut.dat**,Ww");

for(i-0;i<10;i1)

(

fscanf(fp,"%d",in);

place・fun(n);

R

fprintf(wfr%d\n",place);

>

fclose(fp);

fclose(wf);

序:,

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

31.给定程序MODII.C中函数fun的功能是:把主函数中输入的3个

数,最大的放在a中,最小的放在c中,中间的放在b中。

例如,输入的数为:551234,输出结果应当是:a=55.0,b=34.0,

c=12.0o

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

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

tinclude<stdio.h>

2voidfun(floatfloat*b,float*c)

(

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

5float*k;

6if(*a<*b)

7(k«*a;*a-*b;*b«k;}

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

9if(*a>*c)

10{k-*c;*c»*a;*a-k;}

11if(*b<*c)

12{k-*b;*b-*c;*c-k;}

13)

14main()

15{floata,b.c;

16printf("Inputabc:scanf

RH

(%f%f%fr&ar&br&c);

R

17printf(a=%4.Ifrb•44.Ifrc

w

■%4.1f\n\nrafbrc);

18fun(&a,&b,&c);

w

19printf(a=44.Iffb-%4.1frc

w

-%4.lf\n\n,a,brc);

20

32.下列给定程序中,函数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++)

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

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

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

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

33.下列给定程序中,函数fun()的功能是:根据整型形参m的值,计算

如下公式的值。

t=l-l/(2x2)-l/(3x3)-...-l/(mxm)

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

doublefun(intm)

{doubley=l.O;

inti;

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

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

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

y-=l/(i*i);

return(y);

main()

{intn=5;

clrscr();

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

34.下列给定程序中,函数fun()的功能是:求出以下分数序列的前n项

之和。

2/1,3/2,5/3,8/5,13/8,21/13,.......

和值通过函数值返回main()函数。例如,若输入n=5,则应输出8.391667O

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

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

fun(intn)

{inta=2,b=l,c,k;

doubles=0.0;

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

{s=s+1.0*a/b;

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

c=a;a+=b;b+=c;

)

return(s);

}

main()

{intn=5;

clrscr();

printf("\nThevalueoffunctionis:

%lAn",fun(n));

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

N项之和SN,直到SN+1大于q为止,q的值通过形参传入。

SN=2/1+3/2+4/3+(N+1)/N

例如,若q的值为50.0,则函数值为49.394948。

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

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

doublefun(doubleq)

{intn;doubles,t;

n=2;

s=2.0;

while(s<=q)

t=s

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

s=s+(n+l)/n;

n++;

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

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

returns;

main()

{clrscr();

printf("%f\n",fun(50));

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

37.给定程序M0D11.C中函数fun的功能是:将十进制正整数m转换

成k(2SkS9)进制数,并按高位到低位顺序输出。

例如,若输入8和2,则应输出1。。0(即十进制数8转换成二进制表示

是1000)o

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

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

1*include<conio.h>

2♦include<stdio.h>

3voidfun(intm,intk)

4

5intaa[20]9i;

6for(i-0;m;i++)

7(

8/•肯••••••••found*••••・••••/

9aa[i]-m/k;

10m/■k;

11

12for(;i;i--)

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

Rw

14printf(%draa[i]);

15}

16main()

17(

18intb;n;

19printf(w\nPleaseenteranumber

andabase:\nw);

20scanf(R%d%d-,&b);

21fun(nrb);

22printf(w\nw);

23

38.下列给定程序中,函数fun()的功能是:计算s所指字符串中含有t

所指字符串的数目,并作为函数值返回。

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

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

试题程序:

#include<conio.h>

#include<string.h>

#include<stdio.h>

#defineN80

intfun(char*s,char*t)

{intn;

char*p,*r;

n=0;

while(*s)

p=s,

/*1**1*01*1**1**1**1-**4*/

/不不不不不不不不不不不不不不Iciin「不不不不不不不不不不不不干不干/

r=P;

while(*r)

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

elsebreak;

/*1**1**1**1**1*vl**1**1**1*。1*1**1**1**1**1**1*K!*/

/不不不不不不不不不不不不不不T/~1l不不不不不不不不不不不不干不不/

if(*r==0)

n++;

s++;

)

returnn;

)

main()

{chara[N],b[N];intm;

clrscr();

printf("\nPleaseenterstringa:");

gets(a);

printf("\nPleaseentersubstringb:");

gets(b);

m=fun{a,b);

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

)

39.下列给定的程序中,函数fun()的功能是;将s所指字符串中出现的

n所指字符串全部替换成t2所指字符串,所形成的新的字符串放在w所

指的数组中。在此处,要求口和t2所指字符串的长度相同。例如:当

s所指字符串中所指的内容为abcdabfab,tl所指字符串中的内容为ab,

t2所指字符串中的内容为99时,结果在w所指的数组中的内容应为

99cd99f99。

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

#include<string.h>

intfun(char*s,char*tl,char*t2,char*w)

inti;char*p,*r,*a;

strcpy(w,s);

while(*w)

{p=w;r=tl;

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

while(r)

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

elsebreak;

if(*r=='\0')

{a=w;r=t2;

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

while(*r){*a=*r;a++;r++}

w+=strlen(t2);

elsew++;

main()

{chars[100],tl[100],t2[100],w[100];

clrscr();

printf("\nPleaseenterstringS:");

scanf("%s",s);

printf("\nPleaseentersubstringtl:");

scanf("%s",tl);'

printf("\nPleaseentersubstringt2:");

scanf("%s",t2);“

if(strlen(tl)==strlen(t2))

(

fun(s,tl,t2,w);

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

}

elseprintf("Error:strlen(t2)\n");

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

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

ihtj,c=0;floatxa=0.0;

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

xa+=x[j]/n;

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

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

if(x[j]>=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));

)

五、程序改错题(2题)

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

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

的值为800,则函数的值为7605。

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

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

构。

试题程序:

gtficludrVgdkx

8includeVcocuo.

*includeVsidliKh>

intproHintIt)

mttn・O.mc-O・ji

whdi»(<W-2)&&«t0)1

//••••found••■•

jf<(kXlS*O>/14k%l8-0>)

m-4*lt||Mr-4--i)

k-—•

//••••(oufid••••

returnmi

voidnwiinC)

wystetnC*CLS")i

prmtf<aKAna»procOOO>);

42.下列给定程序中,函数proc()的功能是:根据整型形参n的值,计

算如下公式的值。t=l-l/(2*2)-1/(3*3)-...-1/(n*n)例如,当

n=7时,t=0.488203。请修改函数proc()中的错误,使它能得出正

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

更改程序的结构。试题程序:

#knclude<<idhkb>

sincludeVconio,h>

•include<sttd>o.h>

dooblcprocitutn)

(doubleI,Oi

iniii

//••••IOUMI•♦••

!(wqi-2iiV0ii*♦)

//••••ICWMI••••

,一■■l/Ci•

mura<y)i

voidmain<)

(ini|>-7|

*CLS*)।

prmtf<*\nTheresulti»/lf\n'・pruc(n)>s

六、操作题(2题)

43.函数delete(s,i,n)是作用是从字符串s中删除从第i个字符开始的n

个字符,请填空。

voiddelete(chars[],inti,intn)

{intj,k,length=O;

while(s[length])

[];

-i;

j=i

)

if([])

{k=i+n;

if(i+n<=length)

while(k<length)

s[j++]=s[k++];

s[j]='\O';

44.请编一个函数voidproc(intttEM][N],intpp[N]),tt指向一个M行

N列的二维数组,求出二维数组每行中最大元素,并依次放入pp所指

的一维数组中。二维数组中的数已在主函数中给出。

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

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

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

试题程序:

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

#defineM3

#defineN4

voidproc(intttrM3rN]□intpp[N])

(

)

voidmain

(

intstr[M][N]={{34,56,84,78},

{23,84,93,12),

{28,38,39,93}};

intp[N],i,j,k;

system("CLS");

printf("Theriginaldatais:\n");

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

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

printf("%6d",str[i][j]);

printf("\n");

)

proc(str,p);

printf("\nTheresultis:\n");for(k=0:k<M;k++)

printf("%4d",p[k]);

printf("n");}

参考答案

1.存储结构

2.数据存储数据存储

3.s+n-lpl<p2s+n-l\r\npl<p2解析:判断是否“回文”字符串,应该使用

两个字符型指针,一个从前往后遍历字符串,另一个从后往前遍历字符

串,直到它们中途相遇,如果每次两个指针所指的字符都相同,则为“回

文”字符串。程序中已经使pl=s,即指向字符串的第一个字符了,所以

p2应该指向s的最后一个字符,故第一空应填s+n-1。比较两个指针时,

如果有一次不相同,则跳出循环,因为此时已可肯定不是“回文”字符串。

如果是while循环的条件pl<p2不满足时自然结束的循环,则每次比

较都是相同的,两个指针是中途相遇了才结束比较。两种情况的区别就

是pl<p2是否成立。故第二空应该填pl<p2。

4.BCDCDDBCD\r\nCD\r\nD解析:本题考查指向字符串的指针的运算

方法。指针变量P首先指向字符串中的第一个字符A,执行p=s+l后,p指

向字符串中的第二个字符B,然后输出值记CD并换行,依次执行循环语句。

5.59

6.HowdoessheHowdoesshe解析:strcpy(strl,si);字符串拷贝函数,

作用是将字符串si拷贝到字符数组strl中去。strlen(str):测试字符串str

的长度,函数的值为字符串中实际长度,不包括\'\\ov在内。本题中

strlen(strl)的值为13,贝strcpy(strl+strlen(strl)/2,'esshe');相当于

strcpy(strl+6,'esshe');,因此可得答案为Howdoesshe

7.数据库管理系统

数据库管理系统(DBMS)

8.33解析:C语言的语法规定:else子句总是与前面最近的不带else的

if相结合。因为x不大于y,所以执行printf(%d\\n;z);语句。

9.DEBFCA

10.*(str+I)或str[I]*(str+I)或str[I]解析:str是指针变量,它指向字符型数

据,在循环过程中,可以用*(str+I)来访问字符串中的第I个元素,判断是

否为结束标志,如果不是,1=1+1,继续取下一个元素进行判断,直到*(str+I)

的值为'\\0'为止也可以用下标的方式引用字符,如*(str+I)相当于str[I]。

11.A

根据题目中的定义可知,“sizeof(p)”计算的是数组p中所有元素所占用

的字节数,而不是char型数据所占的字节数。故本题答案为A选项。

12.A解析:p为指针型变量。第一次循环,p=s,p的值为字符数组s的

首地址,输出字符串ABCD:p++,第二次循环,p的值为字符数组s的

首地址加1,输出字符串‘BCD:p++,第三次循环,p的值为字符数组s

的首地址加2,输出字符串CD:p++,第4次循环,p的值为字符数组

s的首地址加3,输出字符串VD。

13.C

14.B解析:本题主要考查结构体和联合内存使用的区别:结构中不同

的成员分别使用不同的内存空间,一个结构所占内存空间的大小是结构

中每个成员所占内存空间大小的总和,结构中每个成员相互独立;联合

所占用的内存空间为最长的成员所占用的空间。

15.D解析:程序不仅是编写完就结束了,为了测试和维护程序,往往还

有其他人阅读和跟踪程序,因此程序设计的风格应该强调简单和清晰,

即程序的易读性,“清晰第一,效率第二”。

16.D

17.C

Char类型数据占1个字节。

18.A

19.A解析:本题定义了一个指向由3个元素组成的一维数组的指针变

量pa,通过赋值让它指向具有2行3列的数组a,此时用指针变量pa,

表示数组元素的形式是pa[i][j]ofor循环执行了3次;第一次i值

为0,执行pa[l][0]=pa[l][0]-l,执行后的值变为3;第二次i值

为1,执行执行后的值为4;第三次i值为

2,执行pa[l][2]=l,执行后a[l]⑵的值变为1。故printf语句输入的值

为2+4+1=7。所以,A选项为所选。

20.C解析:do-while语句的一般形式为:do循环体语句while(表达式);,

其中循环体语句可以是复合型语句,但必须用花括号括起来。while后

必须要有分号作为语句的结束,在do-while循环中,不可以省略while。

21.

【解析】题目中要求把下标从p到n-1的数组元素平移到数组的前面,

可以通过每一次循环将最后一个元素放在第一个位置上,使其成为第一

个元素,其余元素后移一个位置。通过n-1-p次循环实现将从p到n-1

的数组元素平移到数组的前面。

22.\n#include,,stdio.h"

\nintfun(inta)

\n{intI;

\nif(a==2)return1;1=2;

\nwhile((a%I)!=OI<=sqrt((float)a))

\nl++;

\nif(a%I==0)

\n{printf("%disnotaprime!”,a);

\nretum0;}

\nprintf("%disaprime!”,a);

\nretum1;}

\nmain

\n{intx;

\nprintf("\\npleaseenteranumber:^^);

\nscanf("%d",&x);

\nprintf(tc%d\\n,,,fun(x));}

\n

23.

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

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

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

角元素都赋值为0。

24.

【解析】要算出变量num的值,首先需要得到变量numl和hum2个

位和十位上的数字。然后将在千位上的数字乘以1000,百位上的数字

乘以100,十位上的数字乘以10,各位上的数字乘以1,就能得到要求

的hum。

25.

【考点分析】

本题考查:for循环语句遍历字符串,并通过if条件语句,判断字符串

是否结束。

【解题思路】

从字符串中查找指定字符,需要使用循环判断结构,循环语句用来遍

历字符串,循环条件为字符串没有结束,即当前字符不是'\0',判断

语句用来判断当前字符是否为指定字符。最后返回指定字符的个数。

26.

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

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

27.

【解析】我们应定义一个变量表示其和,一个变量表示其分数,由题目

中可知循环结束的标志为分数小于eps,因此其为循环结束的条件,根

据公式的变化规律,可求得s,最后把2*s返回到主函数中。

28.

程序设计题解析:

【考点分析】

本题考查:指针型变量定义;while循环语句;if语句条件表达式;字

符串结束标识、(T。

【解题思路】

函数fun的功能:除了字符串前导的*号之外,将串中其他。号全部删

除。解答本题,(1)定义一个临时指针P,初始指向原串首地址;(2)利

用循环语句把字符串前导*号拷贝到原串;(3)继续移动指针,把串中和

串尾的非*号字符拷贝到原串;(4)为修改后的字符串赋结束字符

【解题宝典】

要删除字符串中的指定字符,通常采用保留非指定字符的方法。可以

将非指定字符保留在原串,即将需要保留的字符从原串的起始位置重

新赋值;也可以保留到新串,即新建一个字符串,存放要保留的字

符。

29.

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

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

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

指针来实现。

30.

intbits〃住*tit量随计仪a

while(n/10)A0,若不为O.bits*1,4

*n*以10,域修判断

I

bitsx;

n-n/10;

returnbits;【考点分析】主要考察考生对循环

跳出的条件的理解,以及理解取数字位数的方法。【解题思路】通过

对指定的多位数每次除以10,去掉最后一位,直到为。结束,使用临时

变量来统计一个多位数的位数。

31.(l)floatk;(2)if(*a<*c)(l)floatk;(2)if(*a<*c)解析:本题中函数

的功能是把主函数中输入的3个数,最大的放在a中,最小的放在c中。

对三个数进行两两比较,实现函数功能。

32.(1)错误:printf("%4d"xx[ij]);正确:printf("%4d"xx[i][j]):(2)错误:

printf('\n');正确:printr("\n");⑴错误:printf('%4d',xx[ij]);正确:

printf('%4d',xx[i][j]):\r\n(2)错误:printf(\'\\n\');正确:printr('Wn');解

析:错误1:此处考查的是对二维数组的引用方法。错误2:此处考查

的是输出语句的语法,括号中应该用双引号,而不是单引号。

33.(1)错误:for(i=2;i<m;i++)正确:for(i=2;i<=m;i++)(2)错误:y-

=l/(i*i);正确:y-=1.0/(i*i);⑴错误:for(i=2;i<m;i++)正确:for(i=2;i

<=m;i++)\r\n(2)错误:y-=l/(i*i);正确:y-=1.0/(i*i);解析:该题是

一道简单的计算题,循环条件for(i=2;i<m;i++)中忽略了i=

温馨提示

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

评论

0/150

提交评论