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

下载本文档

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

文档简介

2021年山西省运城市全国计算机等级考试

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

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

一、2.填空题(10题)

1.以下程序的输出结果是#include<stdio.h>structstiintx;int*y;}*p;

intdt[4]={10,20,30,40);structstaa[4]={50,&dt[0],60,&dt[0],

60,&it[0],60,&dt[0],);main(){p=aa;printf("%d\n",++(p->x));]

2.执行下面程序后,输出结果是【】。

main()

{chars[12]="verygood!";

printf("%d",strlen(s));

)

3.在Windows环境下,可以利用单击、双击、拖动这三种鼠标操作之

一的【】操作实现窗口的移动。

4.用以下语句调用库函数malloc,使字符指针st指向具有H个字节的

动态存储空间,请填空。st=(char*)[];

5.若有以下程序

main()

{chara;

a='H'-'A'+'0';

printf("%c\n",A)

执行后输出结果是【】。

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

7.面向对象的程序设计方法中涉及的对象是系统中用来描述客观事物

的——个O

8.x和y都是double型变量,x的初值为4.0,y的初值为2.0,则表达

式pow(y,fabs(x))的值为。

9.以下程序调用函数swap将指针s和t所指单元(a和B)中的内容交

换,请填空。main(){inta=10,b=20,*s,*t;s=&a;t=&b;()

printf("%d%d",a,B);}swap(int*ss,int*tt){intte;te=*ss;*ss=*tt;

*tt=te;}

10.当所有结点的权值都相等时,用这些结点构造的二叉排序树是【】。

二、单选题(10题)

11.有以下程序:

#include<stdio.h>

voidmain()

{char*s="\ta\018bc”;

for(;*s!='\0';s++)

printf("*”);

printf("\n”);

}

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

******B*********c************

12.有以下程序段chareh;intk;ch='a';k=12;printf("%c,%d,

",ch,ch,k);printf("k=%d\n",k);已知字符a的ASCII码值为97,

则执行上述程序段后输出结果是

A.因变量类型与格式描述符的类型不匹配输出无定值

B.输出项与格式描述符个数不符,输出为零值或不定值

C.a,97,12k=12

D.a,97,k=12

(24)有以下程序:

/include<stdio.h>

tnain()

{intx;

scanf("%d",&x);

if(x<=0);else

if(x!=5)printf("%d\n",x);

}

程序运行时,输入的值在哪个范围才会有输出结果().

13.A)不等于5的整数B)大于()且不等5的整数

C)大于0或等于5的整数D)小于5的整数

14.结构化分析方法是面向()的自顶向下、逐步求精进行需求分析的

方法

A.对象B.数据结构C.数据流D.目标

15.若变量已正确定义,有下列程序段:

inta=3,b=5,c=7;

if(a>B)a=b;c=a;

if(c!=A)c=b;

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

其输出结果是()。

A.程序段有语法错B.3,5,3C.3,5,5D.3,5,7

16.下列有关数据库的描述,正确的是____o

A.数据库是一个DBF文件B.数据库是一个关系C.数据库是一个结构

化的数据集合D.数据库是一组文件

(30)若输入“abcdef"、“abdef",以下程序的输出结果为().

^^include-stdio.h>

#includc<string.h>

main()

{intn;

charsl[20],s2[20],*pl/p2;

scanR”%s”,sl);

scanfl[u%s\s2);

pl=sl;

p2=s2;

n-strcmp(php2);

printf(M%d\nM,n);}

A)-1B)0C)MabcderD)”abdef'

18.有以下程序:#inchide

Main(){lntx=l,y=O;if(!x)y++;elseif(x==O)if(x)y+=2;Elsey+=3;print("%d\n",y);}程序运行后的

输出结果是()。A.2B.1C.0D.3

19.算法的时间复杂度是指

A.算法的执行时间B.算法所处理的数据量C.算法程序中的语句或指

令条数D.算法在执行过程中所需要的基本运算次数

20.有以下程序:

#include<stdio.h>

main()

{charb[]="happynewyear”,k;

for(k=0;b[k];k++)

print/%c”,b[k]-'a'+'A');

)

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

A.hAppynewyeArB.HappynewyearC.HAPPYNEWYEAR

D.HaPPYNEWYEaR

三、程序设计题(10题)

21.

N名学生的成绩已在主函数中放入一个带有头结点的链表结构中,h指

向链表的头结点。请编写函数fun(),其功能是:找出学生的最高分,

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

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

的若干语句。试题程序:

•seller<*td>o.Ii>

■incItMir<Mdlikh>

,(MtiwN•

Mntet

<

dmiblr■I

«iruci*U«<•ATKII

)•

typedrlAirtirl・lmiSTREl'i

double{unCSTKfl'•h>

STREC*cre*t(double••>

C

STREC•b・•p.•QI

iati-Oi

《STREC•)alkx(Mtto“§TRET))।

p—>•"Oi

wMZYN)

〃产牛8个41点的■*.看分At存入9我中

<

QTSTRET•)mallor«MMohSTREO)t

p-q・

J

p->BTM-NULI.I

rrtEhi//ftHttAKHitit

>

wedoudiM<STRE('•b)

<

STREC«p<

pf

prvnd("heed*>•

do(

prwitf<*—>XOf*.pr>•)।

p-R->MXt|

I

〃■出作分立

wiiikCp->•«!!-NULL)।

pnati(*\ii\n*>i

>

voidmam()

t

doubks[N]-(B5・100.99.85.91.72.M・87

STREC•hr

h^creeKa)1

<wth»t(h>«

maLfg/hh

22.输出1900〜2000年中所有的闰年。每输出3个年号换一行。(判断闰

年的条件为下面二者之一:能被4整除,但不能被100整除。或者能被

400整除。)

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

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

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

例如,若字符串中的内容为“****A*BC・DEF*G"*,****,删除后,字符串中的内容应当是

”…*ABCDEFG*

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

请勿改动主函敷main和算他函级中的任何内容.仅在函数fiin的花括号中填入你编写的若干语句。

试建程序:

#inrlude<atdio.h>

voi<lfun(char*a,char•h.char*p)

I

)

tnain(),

Ichar481

printf(MEnleraMringAn");

getafs);

whUe(*t)

t++:

J

I・

while(舞=")

l一~;

whi阳*f=1巧

f++;fun(sX0i

printf(,rThestringafterdeleted:』”);

pute(ft);

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

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

其功能是删除一个字符串中指定下标的字符。其中,a指向原字符串,

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

例如,输入一个字符串“World”,然后输入3,则调用该函数后的结果

为“Word”。

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

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

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

试题程序:

#include<stdlib.h>

#include<stdio.h>

#include<conio.h>

#defineLEN20

voidfun(chara[],charb[],intn)

(

)

voidmain()

(

charstr1[LEN],str2[LEN];

intn;

system(“CLS”);

printf("Enterthestring:\n");

gets(strl);

printf("Enterthepositionofthestringdeleted:^^);

scanf("%d",&n);fun(strl,str2,n);

printf("Thenewstringis:%s\n^^,str2);

)'一

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

4-...+ln(m))0.5在C语言中可调用log(n)函数求In(n)o例如,

若nl的值为30,则proc()函数值为8.640500。注意:部分源程序

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

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

Uincludrh>

母include<cocuo.h>

9inrludeh>

&include<ZthatK

doublepcoc<tfMm)

vmdfnam<»

dS>g

pnm{(*XAn**proc(30>>i

)

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

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

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

1234g

(78910

•»II12131415

1117III,20

21t22324ts

著n的值为2・0,”上■序网♦■1»中的假力|

3234s

a»s9io

••1314IS14IS

IS19202120

123242526271

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

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

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

试题程序:

StnclutieVtime.Ii>

SincludeVwtdao.h>

3inrludeVcoaio.h>

9inriiide<Ndl,hh>

9S

roidpfoc<mtU][M,・witn>

voidtBAin()

itif”,?♦Uji

mtarr[S](5■」・2.3・4・5・6・7・,・,.IQ・11J2・I3・

14U$.I€J7«18,2,23.24.2Slg

■yaE«yf》i

pnmf(*••••Thearray••••\w->»

pniwtf("n"K4d\fie«ci>i

proc(arr»n)i

t>nntf<*••••THFRPilJI.T••••\n*>■

fort1**0|i〈Mil++)

(or(j™0ij<?M(♦)

*%4di

pctotfC*\o")i

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

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

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

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

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

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

试题程序:

UmcludcVvtdxhhS>

UinrltMirVconio.h>

9includeVsldlibub>

sdefineM3

MdefineN4

voidpcoc(imtt[Mj[N'«mippfNj)

vmdmuni>

miI34»S4«84.7t1•

(n.B4.93.III.

IZ8,M.930i

mt|>[N].,.j・lu

prwilf("Theri*inaldata・.\■•九

loH件+)

for(j1O$jV、[j++)

pnntfC*KW*.ttr£iXjJ)e

printfC*\B*)I

proHz,.p)i

pru>tf(*\ftThereAuit

pnnif(*S4d*•K1*1)i

28.请编写函数proc,其功能是:将str所指字符串中除下标为偶数、同

时ASCII码值为奇数的字符外,其余的字符都删除,串中剩余字符所形

成的一个新串放在t所指的数组中。例如,若str所指字符串中的内容为

ABCDEFG12345,其中字符B的ASCII码值为偶数,所在元素的下标为

奇数,因此必须删除;而字符A的ASCII码值为奇数,所在数组中的下

标为偶数,因此不应当删除。依此类推,最后t所指的数组中的内容应

是ACEGO

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

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

中填人所写的若干语句。

试题程序:

#include<stdlib.h>

#include<conio.h>

#include<stdio.h>

#include<string.h>

voidproc(char*str,chart[])

(

)

voidmain

(

charstr[100],t[100];

system("CLS");

printf("\nPleaseenterstringstr:");

scanf("%S",str);

proc(str,t);

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

29.下列程序判断字符串s是否对称,对称则返回1,否则返回0;如

f("abba")返回1,ffabab")返回0。

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

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

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

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

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

♦includeOtdio.h>

voidNONOO;

intfun(intn)

main()

{intn,place;

do(

printf(”请输入一个4位以内的正整数:

scanf;

)while(n<0IIn>9999);

place-fun(n);

print--输入的数字是位place);

NONO();

)

voidNONO()

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

FIL£•fp,•wf;

inti,n,place;

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

wf■fopen("c:\fcestk>ut.datWw");

for(i«0;i<10;i-H.)

(

fscanf(fp,",&n);

place-fun(n);

fprintf(wf/"%d\n"rplace);

)

fclose(fp);

fclose(wf);

序:)

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

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

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

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

试题程序;

main()

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

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

longn;

printf("Enteranumber:\n");

scanf("%ld",&n);

do{

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

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

while(n!=0);

printf("Transmitenewbase:\n");

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

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

printf("\n");

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

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

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

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

试题程序:

#include<stdio.h>

#include<conio.h>

voidfun(char*s)

{inti,j;

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

if(s[i]>='0'&&s[i]<='9')

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

s[j]=s[i];

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

S[j]="\0";

main()

{charitem[80];

clrscr();

printf("\nEnterastring:");gets(item);

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

fun(item);

printf("\n\nThestringofchangingis:

\%s\n",item);

33.给定程序M0D11C中函数fun的功能是输出M行M列整数方阵,

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

#inClude<coMo.h>

#inClude<stdio.h>

#dehneM5

/************fOUnd************/

intfun(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++)

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

printf("%f,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("\nThesumOfallelementsOn2diagnalsis%d."fun(M,aa));

34.下列给定函数中,函数fun()的功能是:统计字符串中各元音字母(即

A,E,I,O,U)的个数。注意:字母不分大小写。例如,输入THIsis

aboot,则应输出是10220。

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

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

fun(char*s,intnum[5])

{intk,i=5;

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

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

num[i]=0;

for{;*s;s++)

{i=-l;

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

switch(s)

{case'a':case'A':{i=0;break;}

case'e':case'E':{i=l;break;}

case'i':caseT:{i=2;break;}

case'o':case'0':{i=3;break;}

case'u':case'U':{i=4;break;}

)

if(i>=0)

num[i]++;

}

)

main()

{charsi[81];intnuml[5],i;

clrscr();

printf("\nPleaseenterastring:");

gets(si);

fun{sl,numl);

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

printf("\n");

)

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

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

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

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

序的字符串已在主函数中赋予。

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

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

试题程序:

#include<string.h>

#include<stdio.h>

#defineN80

voidinsert(char*aa)

inti,j,n;charch;

n=strlen(aa);

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

ch=aa[i];

j=i-l;

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

while((j>=0)||(ch>aa[j]))

aa[j+l]=aa[j];

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

aa[j]=ch;

main()

chara[N]="JRTYDFKLIOPQWEGHMNBVCUASXZ";

inti;

printf("Theoriginalstring:%S\n",a);

insert(a);

printf("Thestringaftersorting:%S\n\n",a);

36.下列给定程序中,函数fun()的功能是:删除字符串s中所有空白字

符(包括Tab字符、回车符及换行符)。输入字符串时用‘#'结束输入。

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

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

试题程序:

#include<string.h>

#include<stdio.h>

#include<ctype.h>

fun(char*p)

{int!i,t;charc[80];

for(i=0,t=0;p[i];i++)

if(!isspace(*(p+i)))c[t++]=p[i];

c[t]='\0';

strcpy(p,c);

)

main()

{charc,s[80];

inti=0;

printf("Inputastring:");

c=getchar();

while(c!='#')

(s[i]=c;i++;c=getchar();}

s[i]="\0";-

fun(s);

puts(s);

)

37.下列给定程序中,函数fun()的功能是:实现两个整数的交换。例如

给a和b分别输入60和65,输出为:a=65b=60

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

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

试题程序;

#include<stdio.h>

#include<conio.h>

voidfun(inta,b)

{intt;

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

t=b;b=a;a=t;

}

main()

{inta,b;

clrscr();

printf("Entera,b:");scanf("%d%d",

&a,&b);

fun(&a,&b);

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

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

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

5,8,13,21...........例如,若给n输入7,

该项的斐波拉契级数值为13。

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

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

试题程序:

#include<stdio.h>

longfun(intg)

switch(g);

{case0:return0;

switch(g)

case1;case2:retum1;

return(fun(g-l)+fun(g-2));

main()

longfib;intn;

printf("Inputn:");scanf("%d",&n);

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

fib=fun(n);

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

}

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

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

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

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

为小写字母b。

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

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

1*include<stdio.h>

2*include<ctype.h>

3charfun(charc)

4(if(o-^1&&c<-Z)

5/found………….

6JC+32;

7if(c>-fa'&&c<»*uf)

8*************found*************

9c-c-5;

10elseif(c>-'v,z•)

11c»c-21;

12returnc;

13

14main()

15{charcl,c2;

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

;cl-getchar();

17if(isupper(cl))

18(c2«fun(cl);

19printf(w\n\nTheletter\,%c\1

changetocl,c2);

20;

21Jelseprintf(R\nEnter(A-Z)!\nw);

22!

40.给定程序M0D11.C中函数fun的功能是:找出100至n(不大于

1000)之间三位数字相等的所有整数,把这些整数放在s所指数组中,个

数作为函数值返回。

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

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

1;tinclude<stdio.h>

2!IdefineN100

3intfun(int*s,intn)

4{int

5j»0;

6for(i«100;i<n;i++){

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

8k«n;

9a-k%10;k/-10;

10b«k%10;k/-10;

11/found•

12c-k%10

13if(a—b&&a«-c)s[

14}

15returnj;

16}

17main()

18{inta[N],n,num-0ri;

19do

20{printf(w\nEntern(<*1000):

www

);scanf(%dr&n);}

21while(n>1000);

22num-fun(a,n);

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

nw

24for(i«0;i<num;i++)printf(%5dr

a[i));

25printf(w\n\nw);

26

五、程序改错题(2题)

41.

已知一个数列,从。项开始的前3项为0、0、1,以后的各项都是其相

邻的前3项之和。下列给定的程序中,函数proc()的功能是:计算并

输出该数列前n项的平方根之和sum。n的值通过形参传入。例如,当

n=ll时,程序的输出结果应为32.197745o请修改程序中的错误,使

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

行,也不得更改程序的结构。试题程序:

Biiwlud*VsidLIx.h>

Rmrlu<i<Vcocis.h>

3KficlwirV、tdx>・

9includeVmath.b>

//••••loufid••••

proc(ini*>

doublexiE•・0・<|•N・•1iniki

*um01.Oi

ifwm-O.O.

w0w0,Oi,1・。・0|R,L。.

fotC-LhV)

•・fO++Ni

num+.M)Ft(■)।

>0・。1i*l—W2I*2**I

//••••(oumi••••

rtiuni・um

voidrauiiti()

ratnt

•y»tem("CLS*>।

print!<*InputN-*)।

!«*,《•%d*・&■)!

fkfimfcetprorCa))<

42.下列给定程序中,函数proc的功能是:读入一个字符串(长度

<20),将该字符串中的所有字符按ASCII码升序排序后输出。

例如,输入opdye,则应输出deopy。

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

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

构。

试题程序:

#include<string.h>

#include<stdlib.h>

#include<conio.h>

#include<stdio.h>

//****found****

intproc(charstr[])

(

charc;

unsignedi,j;

for(i=0;i<strlen(str)-l;i++)

for(j=i+l;j<strlen(str);j++)

if(str[i]>str[j])

(

c=str[j]:

//****found****

str[j]=str[i++];

str[i]=c;

)

}

voidmain

(

charstr[81];

system("CLS");

printf("\nPleaseenteracharacter

string:");

gets(str);

printf("\n\nBeforesorting:\n%s”,str);

proc(str);

printf("\nAftersortingdecendingly:\n

%s",str);

)

六、操作题(2题)

43.有以下程序:

intfa(intx){returnx*x;}

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

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

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

main()

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

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

44.请补充函数fun(),该函数的功能是:把一个字符串中的字符(字母)

按从小到大排序,并把这个全部由字母组成的字符串保存在原串中,函

数返回这个字符串的长度。例如;输入“cixbr2.3",如果为bcirx,字符串

长度为5。

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

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

上填入所编写的若干表达式或语句。

#include<stdio.h>

#defineN20

intfun(char*str)

inti=0,j=0,k=-0,m=0;

chart;

char*p=str;

while(*p)

(

if((*p>='A'&&*p<=Z)||(*p>='a'

&&*p<='z'))

[1

P++;

)

*(str+i)='\O';

[];

wh{ile(*(p+j))

k=j;

while(*(p+k))

(

if(*(p+k)<*(str+m)

(

t=*(str+m);

*(str+m)=*(p+k);

*(p+k)=t;

)

k++;

)

j++;

)

returni;}

main()

(

charstr[81];

ihtn;

clrscr();

printf("Inputtheoriginalstring");

gets(str);

printf("***TheOriginalstring***In");

puts(str);

printf("***Thenwestring***\n");

n=fun(str);

puts(str);

printf("***Thelengthofnewstringis:

%d***\n",n);"」

参考答案

l.C

2.1010解析:strlen(s)函数的返回值为字符串s包含的字符个数(不计

最后的'\\01)。

3.拖动拖动

4.malloc(ll)

malloc函数的格式是void*(或char*)malloc(size),size表示应分配的存

储区,此题要分配11字节的单元,把11代入即可。

5.77解析:字符型数据可作为整型参加算术运算,其值为其对应的

ASCII码。'H'-'A',的结果是7,加O后是7的ASCII码,所以输出的是

字符7。

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

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

7.实体实体

8.1616解析:函数运算不改变数据类型,所以结果也是double型,fabs(x)

是对x取绝对值,pow(y,fabs(x))是y的labs(x)次塞,即2.04。

0=16.000000(注意;结果为double型)。

9.swap(st);swap(s,t);解析:本题要在主函数中调用swap函数交换

a、b的值,实现数据交换需要进行地址传递,所以函数的形参都应该是

需要交换的数据的地址,程序中通过“s=&a;t=&b;”将指针变量s和t

指向变量a、b的地址,因此,引用时直接引用指针变量s和t即可。

10.右子树(单支树)右子树(单支树)解析:二叉排序树对于任意新结点,

若大于等于根结点,则在右子树上建立。

11.Amain函数中定义一个字符指针s,指向字符串“\\ta\\018bc"。for循

环遍历s指向的字符串中的字符,然后输出根据题意可以理解为:s指

向的字符串中有多少个字符,就输出多少个s指向的字符串中字符分别

是\\t(转义字符)、a、\\01(转义字符)、8、b、c,总共6个。其中因为

8不属于八进制中的数字,所以“\\018”不是一个转义字符,而“\\01”是转

义字符。故本题答案为A选项。

12.D解析:输出格式控制符%<:表示将变量以字符的形式输出;输出格

式控制符%<1表示将变量以带符号的十进制整型数输出,所以第一个输

出语句输出的结果为a,97;第二个输出语句输出的结果为k=12o

13.B

14.C

Co【解析】结构化分析方法是面向数据流进行需求分析的方法,采用

自顶向下、逐层分解,建立系统的处理流程,以数据流图和数据字典

为主要工具,建立系统的逻辑模型。

15.B

解析:本题考查的是程序结构设计中if语句的应用,当if判断条件成

立时就执行其后的相关语句,否则不执行,本题中第一个if条件不成

立,故不执行“a=b”,接着执行“c=a”,此时第二个if条件也不成立,

故不执行其后语句,最终c的值为3。

16.C解析:数据库(Database,简称DB)是数据的集合,它具有统一的

结构形式并存放于统一的存储介质内,是多种应用数据的集成,并可被

各个应用程序所共享。数据库中的数据具有“集成”、“共事”之特点。

17.A

18.C

在ifelse语句中else,总是与离它最近的配对。本题目中x劝1所以!x

为0,所以执行else酷句中的内容,判断(x==0)是否成立,因为x

为1所以条件不成立,所以else部分的近.else语句不再执行,所以y

的值还是初始值0。

19.D

Do【解析】算法的时间复杂度是指算法需要消耗的时间资源。一般来

说,计算机算法是问题规模。09函数fin),算法的时间复杂度也因此

记做T(n)=O(f(n))。因此,问题的规模n越大,算法执行的时间的增长

率与f(n)的增长率正相关,称作渐进时间复杂度(AsymptoticTime

Complexity)o简单来说就是算法在执行过程中所需要的基本运算次

数。

20.C程序定义一个字符数组b,并使用字符串“happynewyeai”进行初始

化。然后通过for循环,遍历字符数组b中的每个字符,再将b中的字

符元素修改为大写字母。程序输出:HAPPYNEWYEAR。故本题答案为

C选项。

21.

【解析】本题考查的是结构体类型、指针型变量、链表和if语句等知识

点。需要用for循环遍历链表中的每一个结点,用判断语句比较结点数

据域的大小。可以通过while循环实现对最大成绩的查找,具体步骤为

遍历链表遇到比max大的值(max<h->s)则赋值给max,max=h->so需要

注意的是,h是指向结构体类型的指针变量,引用它指向的结构体的成

员时,要用指向运算符“一>”。

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

\nmain

\n{intl,n;

\nfor(n=0,I=1900;I<=2000;I++)

\n{if(I%4==0I0!=0||I@0==0)

\n{printf("%d”,I);n++;}

\nif(n%3==0)

\nprintf("\\n");}}}

\n

23.

I答案】

voidfnn((;har*a,char*h,char*p)

fiiHi-0;

char*q=a;

wlnlc(q<h)

(

a「匕*q;Q++;i++;

)

while(q<p)(

(

加上*q;i++;

),

q++;

I

while(*q)

(*

MiK*q;i+.中+;

}

a[i]=W;

}

【解析】

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

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

24.voidfun(chara[],charb[],intn)

(

inti,k=0;

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

if(i!=n)/*将不是指定下标的字符存入数组b中*/

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

b[k]=,\(r;/*在字符串最后加上字符串结束标志*/

本题要求删除字符串中指定下标的字符,即把非指定下标的字符保留。

所以if语句条件表达式为“i!=n"。字符串最后不要忘记加上字符串结

束标志

25.

【解析】由题目中所给表达式可知,表达式的值为m项表达式的和然后

开平方。可以首先通过m次循环求得m项表达式的和,然后将其和开

平方并返回到主函数当中。

26.

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

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

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

上。

27.

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

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

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

中。

28.voidproc(char*strochart[3])

\n(

\ninti,j=0;

\nfor(i=0;str[i]!=\\0;i++)〃从数组的第一个元素开始,到其最后一个

\n{if(i%2==0str[i]%2l=o)〃下标为偶数、同时ASCII码值为奇数的字符

\nt[j++]=str[i];}//如果成立,则把它放到t数组中

\nt[i]=\\o;〃字符串结束标志为\\0

\n}

\n【解析】题目中要求将字符串str中下标为偶数,同时ASCII码值为奇

数的字符放在数组t中。首先,需要检查字符串str中下标为偶数的字符

其ASCII码值是否为奇数,将符合要求的字符放在数组t中。最后,为

新的字符串数组添加结束符。

\n

29.

intf(char)

{inti=0,j=0;

while(s[j])(j++;);

for(j—;i<j&&s[i]=s[j];i++,j—);

return(i-j)

}

30.

int修时史量统计位歙

while(n/10)0,若不为O.bits>>1.4

*n*以10.it修狗斯

(

bitsx;

n-n/10;

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

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

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

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

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

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

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

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

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

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

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

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

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

数组c中后,就从最高位至最低位,参照数组c[i]的内容d(以其内容为

下标),取十六进制数字符表中的字符b[d]输出。所以在第2个空框处可

填入代码⑷。

32.(1)错误;s|j]=s[i];正确:s[j++]=s[i];(2)错误:s[j]="\O";正确:

s[j]='\O';⑴错误;s[j]=s[i];正确:s[j++]=s[i];\r\n(2)错误:s[j]='\\O';

正确:s[j]=\'\\O\';解析:有循环条件if(s[i]>=\'0\'&&s[i]<=V9V)以及

题目要求“依次取出字符串中所有的数字字符”可知,S[j]=s[i];表述错误。

sU]='\\O';中是一个常识性语法错误,学习者只要在平时训练的时候注意

一下就可以了。

33.intfun(intnintxx[][])改为intfun(intnintxx[][M))printf("%fxx[i][j]);

改为printf("%d"xx[i][j]);intfun(intn,intxx[][])改为intfun(intn,int

xx[][M))\r\nprintf('%f,xx[i][j]);改为printf('%d,'xx[i][j]);解析:二

维数组作为函数形参时,二维长度不可缺省,只能省略一维的长度。在

格式输出函数中,血型数据输出时对应的控制符是%d.

34.(1)错误:fun(char*sintnum[5])正确:voidfun(char*sinthum[5])(2)

错误:num[i]=0;正确:num[k]=0;(3)错误:switch(s)正确:switch(*s)(l)

错误:fun(char*s,intnum[5])正确:voidfun(char*s,inthum[5])\r\n(2)错

误:num[i]=0;正确:num[k]=0;\r\n(3)错误:switch(s)正确:switches)解

析:switch语句说明:

(l)switch后的表达式,可以是整型或字符型,也可以是枚举类型的。在

新的ANSIC标准中允许表达式的类型为任何类型。

⑵每个case后的常量表达式只能是常量组成的表达式,当switch后的

表达式的值与某一个常量表达式的值一致时,程序就转到此case后的

语句开始执行。如果没有一个常量表达式的值与s

温馨提示

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

评论

0/150

提交评论