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

下载本文档

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

文档简介

2022年陕西省榆林市全国计算机等级考试

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

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

一、2.填空题(10题)

1.在面向对象方法中,【】描述的是具有相似属性与操作的一组对象。

2.下面程序的运行结果是:[]o

typedefunionstudent

{charnameflO];

longsno;

charsex;

floatscore[4];

}STU;

main()

{STUa[5];

Printf("%d\n",sizeof(a));

)

3.语句"int(*ptr)()「的含义是____是指向函数的指针,该函数返回一

个int型数据。

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

#include<stdlib.h>

main()

{char*sl,*s2,m;

s1=s2=(char*)malloc(sizeof(char));

*sl=15;*s2=20;m=*sl+*s2;

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

)

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

main()

{inta=l,b=2;

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

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

)

6.有以下程序段,且变量已正确定义和赋值

for(s=1.0,k=l;k<=n;k++)s=s+1.0/(k*(k+1));

printf("s=%f\n\n",s);

请填空,使下面程序段的功能与之完全相同

s=1.0;k=l;

while([]){s=s+1.0/(k*(k+l));[];)

printf("s=%f\n\n",s);

7.某二叉树中度为2的结点有18个,则该二叉树中有【】个叶子结

/\\\O

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

序、【】和选择排序等。

9.以下程序的运行结果是【】°

main()

{inta=2,b=7,c=5;

switch(a>0)

(

case1:

switch(b<0)

{casel:printf("@");break;

case2:pnntf("!");break;

)

case0:

switch(c==5)

{case0:pnntf("*");break;

casel:printf("#");break;

case2:printf("$");break;

)

default:printf("&");

)

printf("\n");

)

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

#include<conio.h>

#include<stdio.h>

#defineM100

voidfun(intm,int*a,int*n)

{inti,j=0;

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

if(i%7==0IIi%ll==O)

a[j++l=i;

*n=j;}

main()

{intaa[M],n,k;

clrscr();

fun(10,aa,&n);

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

if((k+1)%20==0)printf("\n");

elseprintf("%4d",aa[k]);

printf("\n");}

二、单选题(10题)

11.有以下程序:

#include<stdio.h>

#include<string.h>

main()

(

printf("%d\n",strlen("0\t\n\0C01

)

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

A.3B.13C.lD.O

12.在数据库设计中,将E-R图转换成关系数据模型的过程属于

()。

A.需求分析阶段B.概念设计阶段C.逻辑设计阶段D.物理设计阶段

13.输入序列为(A,B,C,D),不可能得到的输出序列是

A.(A,B,C,D)B.①,C,B,A)C.(A,C,D,B)D.(C,A,B,D)

(37)以下程序的输出结果是().

#includc<stdio.h>

voidprt(int*x,int*y,int*z)

{primfC%d,%d,%d\n»*xry,*(zz));}

main()

(inta=10,b=40tc=20;

prt(&a,&b.&c);

prt(&a.&b,&c);}

A)11,42,31B)11,41,20

12,22,4112,42,20

C)11,21,40D)11,41,21

14.11,21,2112,42,22

15.以下说法正确的是()。

A.C语言只接受十进制的数

B.C语言只接受二进制、八进制、十六进制的数

C.C语言只接受二进制、十进制、十六进制的数

D.C语言只接受八进制、十进制、十六进制的数

16.如果最常用的操作是取第i个结点及其前驱,最节省时间的存储方式

是()。

A.单链表B.双向链表C.单循环链表D.顺序表

17.递归式的先序遍历一个n节点,深度为d的二叉树,则需要栈空间的

大小为()

A.O(logn)B.O(nlogn)C.O(n)D.O(d)

18.下列关于宏的叙述中正确的是()。

A.宏替换没有数据类型限制

B.宏定义必须位于源程序中所有语句之前

C.宏名必须用大写字母表示

D.宏调用比函数调用耗费时间

19.设栈S和队列Q的初始状态为空,元素el,e2,e3,e4,e5和e6依

次通过栈S,一个元素出栈后即进队列Q,若6个元素出队的序列是e2,

e4,e3,e6,e5,el,则栈S的容量至少应该是()。

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

20.若有下列定义(设int类型变量占2个字节):

inti=8,j=9;

则下列语句:

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

输出的结果是()。

A.i=8,j=9B.i=%d,j=%dC.i=%8,j=%9D.8,9

三、程序设计题(10题)

21.请编写函数proc(),函数的功能是求出二维数组周边元素之和,作

为函数值返回。二维数组中的值在主函数中赋予。

例・.苦:・曾用中的一为,

01234

597«$

4383,

38«87

则函数值为59。

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

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

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

试题程序:

3include<襁疝&hJ>

*indudeVcociio.h>

Mithelud*

SdefineM4

0drfinrNS

UMpmr(mi.

void)

miMCMXN]»((

M»t,♦j.

•p4cm<"CLS*>i

pniMf(*Tbeorminal<kubi\n*>i

(oKiM0iYMii**)

Itor沁Nij++)

pnntf<e%6d।

prinil<*\n*)>

ywpcoc<ae)»

pniuf(*\nTheH<f\®••>>«

prmd<*\ne)i

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

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

得使用C语言提供的字符串函数.

例如.字符串中的内容为・・••A.BC.DEF•G••・・*•除后,字符串中的内容应当

是:“•••・ABCDEFG”。

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

请勿改动主函数nuin和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

tindude<stdio.h>

voidfun(char•a)

main()

Ichar>[81];voidNONO();

prinlf('Enterastring:\nn);geto(t);

fun(>);

printf("Thestringafterdeleted:\nN);pulfl(a);

NONO();

I

voidNONO()

1/•本♦效用于打开文件,输入数据.调用函数,输出数据,关闭文件。./

FILE■in..out;

inti;chari[81];

m=fopen(-in.M,T);

ouKxfbpen(Moul.dat","ww);

far<i=0;i<10;i♦♦)

I

w

bcanf(in/%8v8);

Ma

^pnntf(out,%s\n9»);

I

fdme(in);

fcloae(oul);

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

的项目中包含一个源程序文件progl.c。在此程序中,学生的记录由学号

和成绩组成,N名学生的记录已放入主函数的结构体数组s中。请编写

函数fun(),其功能是把指定分数范围内的学生记录存放在b所指的数

组中,分数范围内的学生人数由函数值返回。

如输入的分数是60、69,则应当把分数在60〜69的学生记录输出,包

含60分和69分的学生记录。主函数中把60放在low中,把69放在

high中o

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

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

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

试题程序:

#include<stdio.h>

#defineN16

typedefstruct

(

charnum[10];

ints;

}STREC;

intfun(STREC*a,STREC*b,int1,inth)

voidmain()

{

STRECs[N]={{"GA005”,85},{“GA003”,76},

{“GA002”,69},{“GA004”,

85},{uGA001”,96},{“GA007”,72},{“GA008”,64},{“GA006”,87},{“GAO1

5”,85},{“GA013”,

94},{“GA012”,64},{“GAO14”,91},{“GAO11”,90},{“GAO17”,64},{“GAO

18”,64},{“GAO16”,72}};

STRECh[N];

inti,n,low,high,t;

printf("Enter2integernumberlow&high:,,);

scanf("%d%d”,&low,&high);

if(high<low)

{t=high;high=low;low=t;}

n=fun(s,h,low,high);

printf("Thestudent'sdatabetween%d--%d:\n”,low,high);

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

printf(4t%s%4d\n”,h[i].num,h[i].s);

printf(4t\n^^);

)

24.请编一个函数voidproc(intintppfN]),tt指向一个M行N

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

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

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

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

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

试题程序:

Umcludc<C9tdao.

=includrVconio.h>

Sinclude<Mdbb.

9drGneM3

ddefineN4

2dpfocCinttt[M3[N2pptNj)

void>

mi34.54・84.78•

(23.12l«

(28.M.39.93F)i

mt

*ywietn<*CIJI*)•

prmlfCThefiginaldata

hr(L0“V、,j++>

pnotf(

pnnff(

prodMr*p)i

primf<*\nTherr&uh

k-O&k<TM』一♦)

pnnifL;4d".pTkl><

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

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

其功能是根据以下公式求兀的值(要求精度0.0005,即某项小于0.0005

时停止迭代)O

^=l+±+|2Sa+12<22<3+12S2x32<4++

233x53x5x73x5x7x9

Ix2x…X”

3x5x•••x(2n+1)

程序运行后,若输入精度0.0005,则程序应输出为3.140578。

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

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

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

试题程序:

#include<stdio.h>

#include<conio.h>

#include<math.h>

doublefun(doubleeps)

(

}

voidmain()

(

doublex;

printf("Inputeps:");

scanf("%lF',&x);

u,,

printf(\neps=%lf,PI=%lf\n5x,fun(x));

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

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

其功能是实现B=A+A5即将矩阵A加上A的转置,结果存放在矩阵

B中。计算结果在main()函数中输出。

举例如下。

输入如下的矩阵:其转置矩阵如下:

123147

456258

789369

程序输出:

26

610

1014

注意:部分源程序给出如下。请勿改动主函数main。和其他函数中的

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

试题程序:

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

voidfun(inta[3][3],intb[3][3])

(

)

voidmain()

(

inta[3][3]={{1,2,3},{4,5,6},{7,8,9}},t[3][3];

inti,j;

system(“CLS”);

fun(a,t);

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

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

printf("%7r,t[i][j]);

printf("\n");

)

)

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

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

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

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

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

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

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

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

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

试题程序:

#include<stdlib.h>

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

printff'Theresultis:%ld\n,,,c);

28.编写fun()函数,它的功能是:利用以下所示的简单迭代方法求方程

cos(y)-y=0的一个实根。

yn+l=cos(yn)

迭代步骤如下:

⑴取yl初值为0.0;

(2)y0=yl,把yl的值赋给y。;

(3)y1=cos(y0),求出一个新的y1;

(4)若y0=yl的绝对值小于0.000001,则执行步骤

(5),否则执行步骤(2);

(5)所求yl就是方程COS(y)-y=0的一个实根,作为函数值返回。

程序将输出结果Result=0.7390850

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

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

部分源程序给出如下。

试题程序:

BinclwirVcomoih>

includeVounh.h>

4ifirltMlrVktdm.h>

HoelfaM>

voidRMtaC>

I

FILE

AMIM-,《*<》■

pnfiiK■Re*«ih«HI\B*.CI»)I

ou<•fope«i<<Ui*»ew*)i

fpnntl(oui«*Kr«c<M)i

(done<ou«><

29.请编写函数proc(),该函数的功能是:将M行N列的二维数组中的

字符数据,按列的顺序依次放到一个字符串中。例如,若二维数组中

的数据为:

WWW

SSS

HHH

III

则字符串中的内容应是WSHIWSHIWSHL

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

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

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

试题程序:

#tncludeVzdtd

林WineM4

8dtfitwN3

voidproc<ckmr<•»>[N)«clur•b>

M>ldmatn(>

char41003»W[MXN]M(IW.W・W).

3'S\S\I.CH\*H\1H4.)•(T・'

r.THi

inii小

print"'The

(or(i-“yMX*4»)

<lor《♦)

pnrn((aHlc*.w£iltj]h

peoc<w»a)i

prmtf<"TheA

pm*<a)s

pnnrf<<\n\n")i

30.

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

是:将字符串中的前导*号全部删除,中间和后面的*号不删除。例如,

若字符串中的内容为****a*bc*def*g****,删除后,字符串中的内容则

应当是a*bc*def*g****。注意:部分源程序给出如下。请勿改动main

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

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

svAcludk*Vadia

Smcludr<como,h>

voidproc<ciwir•»tr>

VUidHNliB()

rtuir»tr{Sl

prmdCvEnter■»thngt\n*H

proc<Mr>i

prail(<*TheMI”delrtedt\B*><

Mt)sI

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

31.下列给定程序中,函数fun()的功能是:判断一个整数m是否是素

数,若是返回L否则返回0。在main。函数中,若fun()返回1则输出

YES,若fun()返回0则输出NO!

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

intfun(intm)

{intk=2;

while(k<=m&&(m%k))

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

k++

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

if(m=k)

return1;

elsereturnO;

)

main()

{ihtn;

clrscr();

printf("\nPleaseentern:");

scanf("%d",&n);

if(fun(n))printf("YES\n");

elseprintf("NO!\n");

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

n项之和。

23581321

I*293959T*13*

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

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

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

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

1*include<stdio.h>

2…•…吉・•一found

3fun(intn)

4(inta-2,b-1.c,k;

5doubles-0.0;

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

7(s«s>1.0*a/b;

8/found★***•••★★★★**/

9c-a;a♦=b;b+,c;

10}

11return(s);

12}

13main()

14(intn»5;

15printf(w\nThevalueoffunction

w

is:%lf\nrfun(n));

16

33.下列给定程序中,函数fun()的功能是:找出一个大于给定整数m且

紧随m的素数,并作为函数值返回。

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

intfun(intm)

{inti,k;

for(i=m+l;;i++)

{for(k=2;k<i;k++)

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

if(i%k!=0)

break;

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

if(k<i)

retum(i);

)

)

main()

{intn;

clrscr();

printf("\nPleaseentern:");

scanf("%d",&n);

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

}

34.以下程序可把输入的十进制数以十六进制数的形式输出。

请在横线上填上适当的内容并把横线删除,使它能得出正确的结果。

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

试题程序;

main()

charb[17]={"0123456789ABCDEF"};

intc[64],d,i=0,base=16;

longn;

printf("Enteranumberin'');

scanf("%ld",&n);

do{

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

c[i]=;i++;n=n/base;}

while(n!=0);

printf("Transmitenewbase:\n");

for(—i;i>=0;—i)

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

{d=cfi];printf("%c",b);}

printf("\n");

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

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

r=p,

while(*r)

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

elsebreak;

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

if(*r==O)

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

)

36.下列给定程序中函数fun()的功能是;先将在字符串s中的字符按逆

序存放到t串中,然后把s中的字符按正序连接到t串的后面。例如:

当S中的字符串为ABCDE时,则t中的字符串应为EDCBAABCDEo

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

#include<string.h>

voidfun(char*s,char*t)

(

inti,sl;

sl=strlen(s);

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

t[i]=s[sl-l];

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

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

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

t[2*sl]-'\0';

)

main()

{chars[100],t[100];

clrscr();

printf("\nPleaseenterstrings:");

scanf("%s",s);

fun(s,t);

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

}

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

母,形成新的字符串,并取代原字符串。

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

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

试题程序:

#include<stdio.h>

#include<conio.h>

voidfun(char*S)

(

inti,j;

for(i=0,j=0;s[i]!='\0';i++)

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

if((s[i]>='A'&&s[i]<='Z')&&(s[i]>='a'&&S[i]<="z',))

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

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

s[j]="\O'';

)

main()

charitem[80];

clrscr();

printf(t4\nEnterastring:");

gets(item);

printf(t4\n\nThestringis:\%S\n",item);

fun(item);

printf("\n\nThestringofchanging

is:\%S\n",item);

38.下列给定程序中,函数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[il[i]+xx[i][n-i-l];

return(sum);

)

main()

{intaa[M][M]={{l,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));

39.给定程序M0D11.C中函数fun的功能是:计算n!。

例如,给n输入5,则输出120.000000。

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

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

1*include<stdio.h>

2doublefun(intn)

3{doubleresult-1.0;

4/found*…

5ifn-»0

6return1.0;

7while(n>1n<170)

8/・・•foundf**********/

9result*■n--

10returnresult;

11)

12main()

13{intn;

14printf(HInputN:w);

15scanf(w%dw,&n);

ww

16printf(\n\n%d!-%lf\n\nrn,fun(n));

17

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

母转换为按字母序列的后续字母(但z转换为A,z转换为a),其他字符

不变。

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

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

1finclude<stdio.h>

2*include<ctype.h>

3voidfun(char*s)

4(

5/**♦******wfound*******♦♦**/

6while(*s!-"e')

7{if(*s>-,A,||*s>-,a,

&&*s<»1z•)

8{if(*s-12')WA,

9elseif(*3«=,z1)*s**a1;

10else*s+■1;

11

12;/………Found•…★……/

13!Cs)++;

14;1

151

16main()

17{chars(80);

18printf(w\nEnterastringwith

length<80.:\n\n");gets(s);

19printf(w\nThestring:\n\nw);

puts(s);

20fun(s);

21printf(w\n\nTheCords:\n\nw);

puts(s);

22

五、程序改错题(2题)

41.

下列给定程序中,函数proc()的功能是:利用插入排序法对字符串中

的字符按从小到大的顺序进行排序。插入法的基本方法是:先对字符串

中的头2个元素进行排序,然后把第3个字符插入到前2个字符中,插

入后前3个字符依然有序;再把第4个字符插人到前3个字符中,待排

序的字符串已在主函数中赋予。请修改程序中的错误,使它能得出正

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

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

5mclu4cVari”

Umdudc<Mduxb>

9defineM80

voidprocCdur•arv)

(mtt»j»mcharchi

n*Mrhe(arr)।

(or<i・l.ynii++)

//••••€O«MI••••

Ic"•rrtGi

whiiet<j>-0)&&(cb<.nfi])]

•rr£j-^

一—t

■n£j+lj-cbi

void>

char4M]-•QWERTYUK>PASI)FGHJKLMNB

VCXZ%

pnntf(eTheongiiMilMs\ne«a>i

proc(a)i

*TheMringafter8rtz.

KAn\n*»«)i

42.

下列给定程序中,proc()函数的功能是:根据形参m,计算下列公式

的值。t=l+l/2+1/3+1/4+...+1/m例如,若输入10,则应输出

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

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

题程序:

5include<sldlib.h>

二include<con»o.h>

5includeVstdio.h>

doubleproc(intm)

(

doublet=1.0;

iniit

for(i=2ii<=mn-F+)

//***•found••••

t+=1.O/ks

//•«•«found••••

returnis

}

voidnuin()

{ini

sy5tem("CI.S*),

pnnifCw\nPlca>renterintegernumber:w>i

prinifC*\nTheresultis%lf\nH•proc(m))(

六、操作题(2题)

43.以下函数用来求出数组的最大元素在数组中的下标并存放在k所指

的存储单元中。请填空。

#include<conio.h>

#include<stdio.h>

intfun(int*s,intt,int*k)

{inti;

*k=0;

【】

if(s[*k]<s[i])*k=i;

return【】;}

main()

{inta[10]={876,675,896,101,301,401,980,431,451,777),k;

fun(a,10,&k);

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

44.以下程序运行后的输出结果是[]0

#include<string.h>

voidfun(char*s,intP,intk)

{inti;

fbr(i=p;i<k-l;i++)s[i]=s[i+2];

main()

{chars[]="abcdefg";

fun(s,3,strlen(s));puts(s)

)

参考答案

1.类类解析:在面向对象方法中,类描述的是具有相似属性与操作的一

组对象。

2.8080解析:数组a是共用体变量,共用体类型变量所占的内存长度为

最大成员的长度,即单精度数组的长度,为4x4=16,因此,数组a所占

的内存长度为5x16=80,所以最后输出的s的值为80。

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

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

4.40

40解析:本题中指针si和s2都指向同一个内存中的地址。因此语句

“*s2=20;”执行后,*\u3000sl=*s2=20。所以m最后的值为40。

5.21

6.k<=nk++k<=n\r\nk++解析:本题要求将—for循环改成while

循环。首先要保证循环条件相同,在for循环中,每次执行循环之后,

循环控制变量k都会加1,而while循环则没有,故需在循环体中增加

改变k数值的语句“k++

7.1919解析:根据二叉树的性质:在任意一棵二叉树中,度为。的结点

(即叶子结点)总是比度为2的结点多一个。本题中度为2的结点数为18,

故叶子结点数为18+1=19个。

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

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

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

用机制和区别。

9.#&#&解析:首先看最外面的switch,其表达式为a>0,结果为真(即

1),从easel:标号处开始执行。这里又是一个switch语句,其表达式为

b<00,结果为假(即0),由于没有case。:或default:标号,所以直接跳

过此switch语句。因为没有遇到break;语句,所以继续执行进入内部

第2个switch语句,其表达式为c==5,结果为真,从easel:标号处开

始执行,输出一个#,遇到break;语句,跳出该内部switch语句,最后

执行default:标号后的输出语句输出一个&后,整个外部switch语句执行

完毕。程序最后输出的换行符不会显示,所以本题应该填#&。

10.77解析:解答本题的关键是要读懂程序,要找出能被7或11整除

的所有整数,注意数学中的“或”和C语言中的“或”的区别,但在此处,

if条件语句中用了“H”运算符,若要找能同时被7和11整除的所有整

数则在if的条件中应使用“&&”运算符。

当然,如果m的值输入50,即表达式fun(10,aa,&n);为fun(50,

aa,&n);时输入结果为:711142122283335424449。

11.AC语言中的转义字符也是一个字符。字符串“0\\t\\n\\0C011\\l",共有

字符U、Nt,、Nn,3个字符。strlen遇到\\0,字符计数结束,因此计数为

3O故本题答案为A选项。

12.CE-R图转换成关系模型数据则是把图形分析出来的联系反映到数据

库中,即设计出表,所以属于逻辑设计阶段。

13.D

14.B

15.DC语言中,整型常量可以用十进制、八进制和十六进制表示。故本

题答案为D选项。

16.D

17.D

18.A宏定义写在函数的花括号外,作用域为其后的程序,通常在文件的

最开头,所以B选项错|误。宏名一般用大写字母,但不是必须用大写字

母,所以C选项错误。宏展开不占运行时间,只占编译时间,函数调用

占运行时间(分配内存、保留现场、值传递、返回值),所以D选项错

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

19.C

20.B

本题考查函数的输出格式。在printf函数,格式说明符中有两个“%”说

明;将第1个%后面的字符原样输出,并不输出其对应r的变量值。

21.

【解析】要求二维数组周边元素之和,首先应该判断数组中的每一个

元素是否是周边元素。找出所有的周边元素后求和,返回给主函数。

周边元素的下标特点为行或列的下标为。或N—1。根据此特点,找出

所有的周边元素然后求和。

22.

程序设计题解析:

【考点分析】

本题考查:指针型变最定义;wh丑e循环语句;语句条件

表达式;字符串结束标识

【解题思路】

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

除。

【解答本题】

(1)定义一个临时指针P,初始指向原串首地址;(2)利用循环语句把字

符串前导*号拷贝到原串;(3)继续移动指针,把串中和串尾的非*号字

符拷贝到原串;(4)为修改后的字符串赋结束字符,、0\

【解题宝典】

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

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

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

字符。

23.intfun(STREC*a,STREC*b,int1,inth)

inti,j=0;

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

if(a[i].s>=l&&a[i].s<=h)

/*将分数高于1,低于h的学生记录存入结构体数组b中*/

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

returnj;/*返回分数范围内的学生人数*/

)

本题使用循环判断结构实现题目要求。循环语句用于遍历结构体数组;

条件语句用于判断当前元素是否符合条件,若符合条件则将其存入结构

体数组b中。变量j为数组b元素下标,最后变量j+1为学生人数,作

为函数值返回。

24.

【解析】按照题目中要求,求出二维数组每行中最大元素,并依次放

入pp所指的一维数组中。首先比较二维数组中每一行的元素,然后找

出每一行中的最大元素,放入一维数组pp中,最后返回到主函数当

中。

25.doublefun(doubleeps)

(

doubles=0.0,sl=1.0;

intn=l;

while(sl>=eps)/*当某项大于精度要求时,继续求下一项*/

{s=s+sl;/*求和*/

sl=sl*n/(2*n+l);

/*求多项式的每一项*/

n++;

)

return2*s;

该题考核的是通过迭代法求给定多项式的值。迭代法是让计算机对一组

指令(或一定步骤)进行重复执行,在每次执行这组指令(或这些步骤)时,

都从变量的原值推出它的一个新值。需要注意变量的数据类型和赋初值

操作。

定义double类型变量s,并为其赋初值,用来存放多项式的某一项和

最后的总和。从第2项开始,以后的每一项都是其前面一项乘以

n/(2*n+l)o程序用si来表示每一项,用s表示求和后的结果。需注意

变量si和s的初值都为1.0,因为循环变量从第2项开始累加。

26.voidfun(inta[3][3],intb[3][3])

(

inti,j;

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

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

b[i][j>a[i]rj]+a[j][i];

/*把矩阵a加上a的转置,存放在矩阵b中*/

)

行列数相等的二维数组的转置就是行列互换。即转置后的第i行第j列

正好对应原矩阵的第j行第i歹本题使用两层循环实现矩阵的转置,

并将计算结果存入矩阵b中,外层循环控制矩阵的行下标,内层循环控

制矩阵的列下标。

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

(

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

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

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

)

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

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

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

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

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

28.

【解析】进入fun()函数,根据题中给出的求解步骤,首先yl初值为

0.0;若yO-yl的绝对值大于0.000001就循环进行迭代,即“yO-yl;

yl-cos(yO);",直到满足题目中的要求,返回yl,即实根。本题考查

了do-while用法。

29.

(2)错误:if(*r==0)

正确:if(*r=='\0')

【解析】由于后面的语句控制变量r是指向字符串t的指针,而不是指

向字符串str的指针,因此,“r=p;”应改为“r=t;while循环结束

后,如果r指向字符串t的结束符,证明字符串str中包含一个t字符

串,因此,“if(*r=O)”应改为“if(*『='\0')”。

30.

【解析】题目中要求将字符串中的前导*号全部删除,首先将指针P移

动到第一个不是*的字符,将指针P之后的字符放入原来的字符串中,

并为新的字符串添加结束符。

31.(1)错误:k++正确:k++(2)错误:if(m=k)正确:if(m==k)(l)错误:

k++正确:k++\r\n(2)错误:if(m=k)正确:if(m==k)解析:函数fun()的

功能是判断m是否为素数:m从2开始作为除数,并对m取余,若不

存在一个数使得余数为。,则m为素数,程序的错误在于if(m=k)语句

中的逻辑表达式写成了赋值表达式。

32.(l)doublefun(intn)(2)c=a;a+=b;b=c;(l)doublefun(intn)(2)c=a;a+=b;

b=c;解析:本题中函数的功能是求出分数序列的前n项之和。首先根

据题干中给出的公式推出每一项之间的关系,求出每一项的表达式,然

后求得数列的和。每一项的分母是前一项的分子,分子是前一项分子和

分母的和。

33.⑴错误:if(i%k!=O)正确:if(i%k=O)(2)错误:if(k<i)正确:if(k>=i)(l)

错误:if(i%k!=O)正确:if(i%k=O)\r\n⑵错误:if(k<i)正确:if(k>=i)解

析也许刚接触C语言的学习者对素数的概念不清楚,在这里说明一下,

素数就是质数,本题的任务是随便输入一个整数m,然后在m的后面寻

找紧跟m的一个质数,作为函数值返回。

for(i=m+1;;i++){

是从m后面的一位开始循环,将m后面一位的值赋予io然后;我们依

次判断m后面的一位是否为素数。

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

if(i%k==0)

是一个简单的数学判断问题,判断i被赋予的值与k的余数是否为零。

34.(1)错误:缺少语句正确:应填入n%base或%16(2)错误:缺少语句

正确:应填入[d](l)错误:缺少语句正确:应填入n%base或%16\1"\11(2)

错误:缺少语句正确:应填入回解析:在该程序中,字符数组b存储

十六进制的16个数字符,整型数组c存储译出的十六进制数的各位数

值。从整数n译出它的各位十六进制数值,需采用除16取余的方法,

即求n除16的余,得到它的十六进制的个位数,接着将n除以16。在

n不等于0的情况下循环,能顺序求出n的十六进制的个位数、十位数、

百位数等。程序中变量base已预置16,所以在第1个空框处可填代码

n%base或n%16。当n的十六进制数的个位、十位、百位等依次存

温馨提示

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

评论

0/150

提交评论