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

下载本文档

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

文档简介

2021年山东省荷泽市全国计算机等级考试

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

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

一、2.填空题(10题)

1.数据元素之间的整体称为逻辑结构。

2.下列程序执行后输出的结果是【

main()

{intarr[10],i,k=0;

for(i=0;i<10;i++)arr[i]=i;

for(i=1;i<4;i++)k+=arr[i]+i;

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

}

3.以下程序输出的最后一个值是【】。

intff(intn)

{staticintf=l;

f=f*n;

returnf;

)

main()

{inti;

for(i=l;i<5;i++)printf("%d\n",ff(i));}

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

#include<stdio.h>

main()

{FILE*fp;inta[10]={l,2,3,0,0},i;

fp=fopen("d2.dat","wb");

fwtite(a,sizeof(int),5,fp);

fwrite(a,sizeof(int),5,fp);

fclose(fp);

fp=fopen("d2.dat","rb");

fread(a,sizeof(int),10,fp);

fclose(fp);

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

)

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

请填空。

intmystrlen(char*str)

{intI;

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

retum(I);}

6.以下函数把b字符串连接到a字符串的后面,并返回a中新字符串的

长度。请填空。

strcen(chara[],charb[])

{intnum=0,n=0;

while(*(a+num)!=[])num++;

while(b[n]){*(a+num)=b[n];num++;[];}

retum(num);

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

8.选择程序中的输入输出语句,以满足题目给定的输入输出数据形式。

main()

{inta;floatb;

[]

【】}

输入形式:3.52<空格〉6(回车〉

输出形式:a*b=21.12

9.C语言中用表示逻辑值为“真”,用数字“0”表示逻辑值为“假

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

main()

{inti=10,j=0;

do

{j=j+i;i-;}

while(i>2);

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

)

二、单选题(10题)

IL下列语句组中正确的是。。

A.char*s;s="01ympic”;

B.chars[7];s="01ympic”;

C.char*s;s={"Olympic"};

D.chars[7];s={"Olympic"};

12.下列程序的输出结果是()。

voidfun(int*X,inty)

{printf("%d%d",*x,*y);*x=3;*y=l;}

main

{intx=l,y=2;

fun(&y,&x);

printf("%d%d",x,y);

)

A.2143B.l212C.1234D.2112

13.查找效率最高的二叉排序树是()。

A.所有结点的左子树都为空的二叉排序树

B.所有结点的右子树都为空的二叉排序树

C.平衡二叉排序树

D.没有左子树的二叉排序树

14.假设下图中每个正方形的边长为1,则从A到Z的最短路径条数为

0

A______________________________

Z

A.llB.12C.13D.14

(20)有以下程序

#include<stdio.h>

voidmainO

{

chars[]={"01aXyM};inti,n=O;

for(i=0;s[i]!=0;i-H-)

ins[i]<='a'&&s[i]>='z')n++;

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

)

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

A)0B)2C)3D)5

(25)以F程序的输出结果是).

#includc<stdio.h>

intm=13;

intfun(intx,inty)

{intm=2;

retum(x*y-m);

}

main()

{inta=7,b=6;

prinir%d",ft*n(a,b)/m);•

}

16.A)1B)3C)7D)10

17.

(4)下列各选项中,不屈于序言性注料的是(

A)程序标题B)程序设计者C)主要算法D)数据状态

18.若一棵二叉树具有10个出度为2的结点,则在该二叉树中,出度为

0的结点个数是0

A.9B.11C.12D.不确定

19.有以下程序:

#include<stdio.h>

main()

(

intx=072;

printf(">%d<\n”,x+1);

)

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

A.>073<B,>73<C.>142<D.>59<

20.有以下程序段:

charcl,c2;

fbr(c='0',c2='9';cl<c2;cl++,c2-)

printf("%c%c”,cl,c2);

程序段的执行结果是()o

A.0123456789B.0918273645C.0123498765D.9876543210

三、程序设计题(10题)

21.请编写函数fun,其功能是:找出2xM整型二维数组中最大元素的

值,并将此值返回调用函数。

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

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

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

#includr<Mdio.h>

WdrfinrM4

intfun(inta[](M,)

tnain()

intarr[2][M]«5.76.-4,12.82:voidNONO()t

printf(wrnax=%d\nM.fun(arr)):

NONO();

voidN()NO()

/•本函数川于打开文件,输入数据,网用函数.输出数据.关团文件u•/

FILE*wf;

iniarr[]fM]«15.8.3,90,76.-4,12.82;;

wf=fr>prn(**out.<Ut*,**w*);

fprinlf(wf.Hmax=%d\nH.fun(arr));

wf);

22.请编写函数fun,其功能是:找出一维整型数组元素中最大的值所

在的下标,并通过形参传回。数组元素中的值已在主函数中赋予。

主函数中x是数组名,n是x中的数据个数,max存放最大值。index

存放最大值所在元素的下标。

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

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

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

试题程序:

*include<timc.h>

"includeV&tdlib.h>

=include<»tdio.h>

voidfun(int•max「nt•d)

(

}

vnidmjiin(>

(

inti.x[20]・max.index*n-IOI

?*ran(((unsigned)lime(NULL))।

for(i=OiiV=iui++)

(

x£i]=rand()%50t

prind,〃输出一个叨机教组

)

prinif<"\n">t

fun(x»n«&-max.&index)i

print!("Max%5cLIndex=%4d\nM.max.in­

dex)।

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

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

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

例如.若字符串中的内容为“”"•A・BC・DEW”"L,删除后,字符串中的内容应当是

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

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

试痍程序:

#inrlude<stdio.h>

voidfunfchar*&char*h.char*p)

I

}

main()•

{char&81『t,Y;

printfl'TnieraMringrW?

“㈣s);,

t=fw

while(*t)

t++:

t-;

1—;•

whi}e(*t==i)

t-;

while(*£=w)

f+*+;fun(s£t);

printff'Thestringafterdeleted:\n");

puts(R);

24.

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

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

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

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

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

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

SincludeVadia

Smcludr<como.h>

voidproc<ciMir•Mr)

VUM!main<)

rtuiTMr{Sl,,

prMilt*Enter■»tnngt\n*)i

f«fn<xr>a

proc<Mr>i

praitR*TheMnt<afterdeleted

Mr)sI

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

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

数fun(),用来求出数组中值最大的元素在数组中的下标并将其存放在

k所指向的存储单元中。

例如,输入如下整数:

876675896101301401980431451777则输出结果为6,980。

注意:部分源程序在文件progl.c中。

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

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

1tinclude<conio.h>

2#include<stdio.h>

3linclude<stdlib.h>

4intfun(int♦s,intt,int♦k)

5(

6

7)

8voidmain()

9{

10FILE*wf;

11inta[10]=(876,675,896,101,

301,401,980,431,451,777},k;

12system(MCLSM);

13fun(a,10,&k);

14printf(M%d,%d\n”,k,a[k]);

15/♦*♦♦♦*♦*♦♦♦♦♦♦♦♦♦/

16wf=fopen(wout.datH,MwM);

w

.17fprintf(wfr%d,%d",k,a[k]);

18fclose(wf);

19/*****************/

20}

26.请编写一个函数voidproc(char*tt,intpp[]),统计在tt字符串中“a"

到“z”26个字母各自出现的次数,并依次放在pp所指数组中。例如,

当输入字符串abcdefghxyzabcde“e后,程序的输出结果应该是:

2222331100000000000000001110注意:部分源程序给出如下。请勿改

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

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

才iDclude<conio.

fimciudeVsidio.h>

WihdudcVzdlHb>

votdproc<char•tt»mtpp[]>

voidanM《>

char»lt{10(XQ.

mtbb(26]«lii

•ywftflH.C1W)i

print((e\nPlc«*<enter•char>)i

Ym”■%・*tr)•

proc<>ir»bl>>i

lor(k-0ih<26•*♦♦)

pnnlf(-Kd”•bb(k]》•

prwi{("\ne)i

27.请编一个函数fun(ohlr*str),该函数的功能是把字符串中的内容逆置。

例如,字符串中原有的字符串为asdf9,则调用该函数后,串中的内容为

9fdsao

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

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

试题程序:

#include<string.h>

#include<conio.h>

#include<stdio.h>

#defineN100

voidfun(char*str)

(

)

voidmain

chara[N];

FILE*out:

printf("Enterastring:");

gets(a);

printf("Theorigiralstringis:");

puts(a);

fun(a):

printf("Thestringaftermodified:");

puts(a);

strcpy(a,"Welcome!");

fun(a);

ut=fopen("outfile.dat","w");

fprintf(out,"%s".a);

fclose(out);

)

28.编写函数fun,其功能是:将所有大于1小于整数m的非素数存人

XX所指数组中,非素数的个数通过k返回。

例如,若输入17,则应输出:46891012141516。注意:部分源程序

在文件PROG1.C中。

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

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

tindude<stdio.h>

voidfun(intm,intek,intxx(])

main()

I

inim,n,xs[100];

voidNONO();.

printf(**\nPleMeenteranintegernumberbetween10and100:");

acanf(&n);

fun(nt&m,zz),

printf("\n\n11ieretre%dnon-primenumberslessthan%d:",m,n);

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

printf(-\n%4d-,n[n]);

NONO();

I

voidNONO()

I

/•请在此函数内打开文件.检人测试数据.ill用fun函数.

输出数据,关闭文件。•/

intm,n,n[100];

FILE•if,•wf;

a

rf=fbpen(in.dat"t"r");

wf=fopen("out.dat","w");

rf,"%d-.&n);

fun(n,&m,zz);

H

fprintf(wft"%d\n%d\n,mtn);

for(ns0;n<m;n-F4>)

w

fprintf(wf,"%d\n.B[D])S

fcl0M(rf);•

fck»e(wf);

I

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

案的项目中包含一个源程序文件progl.c。在此程序中,规定输入的字符

串中只包含字母和*号。编写函数fun(),其功能是除了字符串前导和尾

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

个字母,形参P指向字符串中最后一个字母。在编写函数时,不得使用

C语言提供的字符串函数。

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

后,字符串中的内容应当是“****ABCDEFG********”。

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

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

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

试题程序:

#include<stdio.h>

#include<conio.h>

#include<string.h>

voidfun(char*a,char*h,char*p)

(

)

main()

{

chars[81],*t,*f;

printf("Enterastring:\n");

gets(s);

t=f=s;

while(*t)

t++;

t--;

while(*t=='*')

t--;

while(*

f++;

fun(s,f,t);

printf("Thestringafterdeleted:\n^^);

puts(s);

)

30.某学生的记录由学号、8门课程成绩和平均分组成,学号和8门课程

的成绩已在主函数中给出,请编写函数fun,其功能是:求出该学生的

平均分,并放入记录的ave成员中。

例如,学生的成绩是:85.5,76,69.5,85,91,72,64.5,87.5,

则他的平均分应为78.875。注意:部分源程序在文件PR0G1.C中。

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

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

finclude<fldio.h>

(MdineN8

typedefstruct

Icharnum[10];

double»[N];

doubleave;

|STREC;

voidfun(STREC•a)

main()

|STREC«s|*GA005",85.5,76,69.5,85,91,72,64.5,87.51;

ini):

voidNONO();

fun();

printf("The%-studentdata八tT,s.num);

fbr(i»0;i<N;i♦♦)

printf(*%4.if\n",«.B[>]);

printf("\mve=%7.3An"ave);

NONO();

I

midNONO()

|/・本函数用于打开文件,输人数据,利用函效,输出数据,关闭文件:

FILE•out:

imi.j:STREC.[JO]=|

I-GA005",85.5,76.69.5,85.91,72,64.5,87.51,

|"GA001*,82.5,66.76.S,76,89,8.51,

|*GA002",72.5,56,66.5,«6,79,68.46.S,58.5|,

|-GA003",92.5,76.86.5,86,99,86,56.5,88.51,

|•GAOM",82,66.5,46.5,56,76,75,76.5,63.51.

I"GA006".75.5,74,71.5,85.81,79.64.5.71.51,

I«CA007-,92.5,61,72.5.84,79,75,66.5,72.5f,

I"GA008-,72.5,86,73.S,80,69,63,76.5,53.51,

I-GAOO?",66.5.71.74.5.70,61.82.86.5,58.51.

I"CA010-,76.66.5,6,71,96.5,93.51.

11

out=fopen(Wcwt.dai",*w");

for(>=0;i<I0;i**)|

fjpnntf(outv*%7.3An",t(ij.ave);

I

fdoee(out);

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

31.给定程序MOD11.C中函数fun的功能是:为一个偶数寻找两个素

数,这两个素数之和等于该偶数,并将这两个素数通过形参指针传回主

函数。

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

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

♦include<stdio.h>

2♦include<math.h>

3voidfun(inta,int*brint*c)

4(int

5for(i«3;i<-a/2;(

6/***********w*found*********♦♦**/

7Y-l;

8for(j-2;j<-sqrt((double)i);

j++)

9ify-0;

10if(y-1)(

11/♦«««*«***w***found**««*t««**«*«/

12

13for(j»2;j<-sqrt((double)d);

,+♦)「‘-J」'一

14if(d%j=«0)y»0;

15if(y・・l)

16{*b-i;*c-d;|

17

18

19

20main()

21(inta,b,c;

22do

23{printf(w\nlnputa:scanf

ta);)

24while(al2);

25fun(a,ftc);

wR

26printf(\n\n%d«%d.%d\nra/brc);

27

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

elsereturn0;

)

main()

{ihtn;

clrscr();

printf("\nPleaseentern:");

scanf("%d",&n);

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

elseprintf("NO!\n");

)

33.下列给定程序中,函数fun()的功能是找出100~n(n不大于1000)之

间百位数字加十位数字等于个位数字的所有整数,把这些整数放在s所

指的数组中,个数作为函数值返回。

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

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

试题程序:

#include<stdio.h>

#defineN100

intfun(int*s,intn)

inti,j,k,a,b,c;

j=。;

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

(

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

k=n;

a=k%10;

k/=10;

b=k%10;

c=k/10;

if(a==b+c)

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

s[j]=i;

)

returnj;

)

main()

(

inta[N],n,num=0,i;

do

{

printf("\nEntern(<=1000):”);

scanf("%d",&n);

)

while(n>1000);

num=fun(a,n);

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

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

printf("%5d",a[i]);

printf("\n\n");

)

34.在主函数中从键盘输入若干个数放入数组中,用0结束输入并放在

最后一个元素中。下列给定程序中,函数fun()的功能是计算数组元素中

值为负数的平均值(不包括0)。

例如:数组中元素的值依次为43,47,-21,53,-8,12,0,则程序的

运行结果为-25.333333。

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

doublefun(intx[])

doublesum=0.0;

intc=0,i=0;

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

while(x[i]==0)

if(x[i]<0)

sum=sum+x[i];

C++;

)

i++;

}

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

sum=sum\c;

returnsum;

)

main()

(

intx[1000];

inti=0;

clrscr();

printf("\nPleaseentersomedata(endwith

0):”);

do

{

scanf("%d",&x[i]);

}while(x[i++]!=0);

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

}

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

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

应输出2。

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

注意:不要改动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(substrfk+l]=='\0')

{num++;

break;

)

returnnum;

)

main()

{charstr[80],substr[80];

printf("Inputastring:");

gets(str);

printf("Inputasbustring:");

gets(substr);

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

36.下列给定程序中,函数fun()的功能是:将s所指字符串中的字母转

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

请改正程序指定部位的错误,使它能得到正确结果。

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

[试题源程序]

#include<stdio.h>

#include<ctype.h>

voidfun(char*s)

(

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

while(*s!='@')

if(*s>='A'&&*s<='Z'II*s>='a'&&'s<='z')

(

if(*s==Z)

*s='A';

else

if(*s=='z')

*s='a';

else

*s+=l;

)...........................................

/**********jfiQund**********/

(*s)++;

)

)

voidmain()

(

chars[80];

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

printf("\nThestring:\n\nt");

puts(s);

fun(s);

printf("\n\nTheCords:\n\n");puts(s);

)

37.下列给定程序中函数fun()的功能是计算1/n!的值。

例如:给n输入5则输出0.0083330

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

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

试题程序:

#include<stdio.h>

#include<conio.h>

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

intfun(intn)

{doubleresult=1.0;

if(n==0)

return1.0;

while(n>1&&n<170)

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

result*=n++;

result=l/result;

returnresult;

)

main()

(

intn;

printf("InputN:");

scanf("%d",&n);

printf("\nl/%d!=%If\n",n,fun(n));

)

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

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

4576235时,t中的数为4725。

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

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

试题程序:

#include<stdio.h>

#include<conio.h>

intfun(longS,long*t)

longsi=10;

*tiS%10;

while(s>0)

(

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

s=s%100;

*t=S%10*Sl+*t;

sl=sl*10;

)

}

main()

(

longS,t;

clrscr();

printf("\nPIeaseenterS:");

scanf("%ld”,&s);

fun(S,&t);

,,

pr血f("Theresultis:%ld\n1t);

39.给定程序MODI1.C中函数fun的功能是:首先把b所指字符串中

的字符按逆序存放,然后将a所指字符串中的字符和b所指字符串中的

字符,按排列的顺序交叉合并到c所指数组中,过长的剩余字符接在c

所指数组的尾部。例如,当a所指字符串中的内容为“abcdefg”,b所指

字符串中的内容为“1234»1时,c所指数组中的内容应该为“a4b3e2dlefgl

而当a所指字符串中的内容为“1234”,b所指字符串中的内容为“abedefg”

时,c所指数组中的内容应该为“g2fBe4dcba:

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

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

1♦include<stdio.h>

2♦include<string.h>

3voidfun(charchar*brchar*c)

4(

5intifj;charch;

6i=0;j=strlen(b)-1;

7/…………found……

8while(i>j)

9{ch«b[i];b[i]-b[j];b(j]-ch;

10ifj一;

11)

12while(*a|I*b){

13/…………found…………/

18

19c-0;

20

21main()

22

23charsl[100]/s2[100]rt[200];

24printf(w\nEntersistring:w);

ww

scanf(%srsi);

25printf(w\nEnters2string:R);

nw

scanf(%srs2);

26fun(si,s2,t);

nw

27printf(\nTheresultis:%s\nrt);

28

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

/**********^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(0);

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

)、

五、程序改错题(2题)

41.

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

然后求两条对角线上的各元素之和并将其返回。请修改程序中的错误,

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

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

*inclod<h>

9includeh>

,indudc<stdao.h>

<defineMS

〃••••(oUfMi••••

mtpfoc(int

mtj・sum^Oi

%dKMdMh

//••••lound••••

pdatfC

foHim0ii<nii4-+)

•urn4—+1-l]t

mum(sufn)*

eidnwimC)

S.2.O・I).(7・O・5J・»・<5'J・9•外h

•yMcai(*CLS*)।

priM«*\nThezinto4allelmeninQCI2

ducnabbXd*»proc<।

42.下列给定程序中,函数fun()的功能是:实现两个变量值的交换,

规定不允许增加语句和表达式。例如,变量a中的值原为8,b中的值

原为3,程序运行后,a中的值为3,b中的值为8。请改正程序中的错

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

或删行,也不得更改程序的结构!试题程序:

£sncliidrK.tdlihb>

-includeVcomo.h>

s»ncludrV,tdio.h>

mi(UB(mi•«•mty)

intt*

//••••••••

//••••••••

return<,)।

voidMtn(>

mtb-8i

♦ywtem(*CLS*)i

pnnt(<*KdSd\n**a»b)1

b™{un(&-a.b>s

prinrfC*SdKd\n**■»b)4

六、操作题(2题)

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

个字符,请填空。

voiddelete(chars[],inti,intn)

{intj,k,length=O;

while(snength])

【】;

-i/

j=i

)

if([1)

{k=i+n;

if(i+n<=length)

while(k<length)

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

s[j]='\O';

}

44.请编一个函数voidproc(intintpp[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.1212解析:本题的第一个for循环用于绐数组arr赋初值,第二个for

循环用于求和运算。由于第二个for循环初始值为1,而循环条件为i<

4,所以求的是arr[l]到arr[3]及i的和,所以输出结果为12。

3.120120解析:静态变量的类型说明符是static,静态局部变量属于静

态存储方式,它具有以下特点:

①静态局部变量属于静态存储类别,在静态存储区内分配存储单元。在

程序整个运行期间都不释放。

②对静态局部变量是在编译时赋被值的,即只赋被值一次,在程序运行

时它已有被值。以后每次调用函数时不再重新赋初值而只是保留上次函

数调用结束时的值。

③如在定义局部变量时不赋初值的话,则对静态局部变量来说,编译时

自动赋初值。(对数值型变量)或空字符(对字符变量)。(注意:C语言中

的非静态变量在定义时,系统并不会自动给它赋被值)

④虽然静态局部变量在函数调用结束后仍然存在,但其他函数是不能引

用它的。

本题中函数的功能是:与for语句一起求一个整数的阶乘。

4.12300123001,2,3,0,0,1,2,3,0,0,解析:本题考查文件读写函数fread和

fwrite的用法。fwrite函数将数组a的前5个元素输出到文件fp中两次,

共10个字节,再调用fread函数从文件fp中读取这10个字节的数据到

数组a中,此时数组a的内容就变为{1,2,3,0,0,1,2,3,0,0},最后的输出结果

为'1,2,3,0,0,1,2,3,0,0,

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

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

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

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

6.0域0或NULLn++或++n或n=n+1或n+=10域0或NULL\r\nn++或

++n或n=n+1或n+=1

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

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

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

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

8.scanf("%f<空格>%d"&b&a);printf("ab=%5.2f'a*b);scanf('%f<空

格〉%d',&b,&a);\r\nprintf('a,b=%5.2f,a*b);

9.非0非。解析:逻辑运算中,非。表示逻辑“真”,用。表示逻辑"假

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

do

(

语句;

}while(条件表达式)

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

循环。

U.A字符型指针变量可以用A选项的赋值方法“Char*s;s="01ymPiC”;”。

C选项的写法“char*s;5={“0卜!中配“};”是错误的。字符数组可以在定义

的时候初始化,^^charsf]={»01ympic");^W»charS[]="01ympic-r,1B

是不可以在定义字符数组后对数组名赋值(数组名是常量,代表数组首

地址),所以B选项和D选项都是错误的。对于本例,B、D选项中字

符数组s的大小至少为8,才能存放下字符串(字符串的末尾都有结束

标识'\\0'),同时,此时S为字符数组的地址,是常量,不能为其赋值。

故本题答案为A选项。

12.C

当执行fun函数时,因为参数传递时是地址传递,因此形参值的改变

会影响实参中的数,在执行fun函数时先输出12,接着把*X赋3,

*丫赋4,此时带回主函数中,输出的值为34。

13.C对于结点个数相同的二叉排序树,平衡二叉排序树的深度最小。而

二叉排序树的查找效率取决于二叉排序树的深度。

14.C

15.A

16.B

17.D

18.B

19.D题干中x是一个整型变量,赋值为072。以0开头的整数是八进制

的表示形式。printf函数中,格式字符%d表示以十进制形式输出“x+1”,

所以需要将072转换成十进制数,即7x8+2=58,输出“x+1”为59。故

本题答案为D选项。

20.B程序定义两个字符变量cl和c20for循环中,首先为cl赋值P',

为c2赋值,夕,接着判断cl和C2的大小。由于字符变量可以作为整型

数处理,数字字符的ASCH值按字面数值的大小顺序连续递增,因此

cl小于c2成立,执行循环体输出“09”,再将cl自增1,c2自减1后,

执行下一轮循环,直到cl=,5\c2=,4,时,cl<c2不成立,循环终止。

最终程序段输出:0918273645。故本题答案为B选项。

21.

【考点分析】

本题考查:求数组的最大值,需要运用循环语句,因为数组是二维数

组,所以应使用二层for循环嵌套。使用for循环语句时需要注意循环

变量的取值范围。

【解题思路】

此类求最大值或最小值的问题,我们可以采用逐个比较的方式,要求

对数组中所有元素遍历一遍,并且从中找出数组最大值或最小值。首

先定义变量max存放数组中的第一个元素的值,然后利用for循环逐

个找出数组中的元素,并与max比较,如果元素值大于max,则将该

值赋予max,循环结束后max的值即为数组最大值,最后将该值返

回。

【解题宝典】

该类题目考查较多,要掌握逐行比较的方法。对于m*n二维数组,如

采用逐行查找方法,代码实现为:

22.

【解析】本题考查的是for循环和指针变量。通过for循环实现对数组

的遍历,形参iilax和d都是指针型变量,所以引用它们指向的变量时

要进行指针运算。先有*max=a[0],在遍历中如果遇到比max大的元

素,则将a[i]赋值给max,下标i赋值给*d。循环语句用来遍历数组元

素,然后通过条件语句比较数组元素找到最大值。

23.

(答案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分别指向第一个和最后个字母,先将前导”号进行保存.再保存中间的非*号字符,然后保存

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

24.

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

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

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

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

2{

3Inti;

4*k=O;/*k所指的数是数组的

温馨提示

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

评论

0/150

提交评论