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

下载本文档

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

文档简介

2021年安徽省安庆市全国计算机等级考试

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

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

一、2.填空题(10题)

1.数据流图的类型有[]和事务型。

2.对下列二叉树进行中序遍历的结果为【】。

3.要求使下列程序输出5个整数,请填空。

for(i=0;i<=;printf("%d\n",i+=2));

4.下列程序的运行结果为【】。

main()

{inti,j,row=0,colum=0,max,

a[3][4]={{1,2,3,4J,{9,8,7,6},{-10,10,-5,2});

max=a[0][0];

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

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

if(max<a[i][j])

{max=a[i][j];

row=i;

colum=j;

}

printf("max=%-5drow=%-3dcolum=%-3d\n",max,row,colum);

)

5.若有定义语句chars[100],d[100];intj=O,i=0;且s中已赋字符串,

请填空以实现拷贝。(注:不使用逗号表达式)

white(s[i]){d[j]=[];j++;}

d[j]=O;

6.若有定义intm=5,y=2,则执行表达式y+=y-=m*=y后,y的值为【】。

7.假定变量x为int类型,请以最简单的形式写出与逻辑表达式!x等价

的C语言关系表达式【】。

8.语句“int(*ptr)();”的含义是____是指向函数的指针,该函数返回一

个int型数据。

9.以下程序的功能是根据输入的“y”("Y”)与“n”("N”),在屏幕上分别显示

出“ThisisYES.”与“ThisisNO.”。空白处需要填入的内容是

#include<stdio.h>

voidYesNo(charch)

{switch(ch)

{case'y':

case'Y':printf("\nThisisYESAn");

case'n':

case'N':Printf("\nThisisNO.\n");}}

main()

{charch;

printf("\nEnte

10.算法执行过程中所需要的存储空间称为算法的______。

二、单选题(10题)

11.

(8)待排序的关键码序列为(15,20,9,30,67.65,45,90),要按关键码值递增的顺序

排序,采取简单选择排序法,第一趟排序后关键码15被放到第()个位置。

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

12.设有表示学生选课的三张表,学生S(学号,姓名,性别,年龄,身份

证号),课程C(课号,课名),选课SC(学号,课号,成绩.,则表SC的

关键字(键或码)为0

A.课号,成绩B.学号,成绩C.学号,课号D.学号,姓名,成绩

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

A.在C语言中,函数中的自动变量可以赋初值,每调用一次赋一次初值

B.在C语言中,在调用函数时,实参和对应形参在类型上只需赋值兼容

C.在C语言中,外部变量的隐含类型是自动存储类别

D.在C语言中,函数形参的存储类型是自动(auto)类型的变量

14.在链表中进行操作比在顺序表中进行操作效率高()。

A.顺序查找B.折半查找C.分块查找D.插入

15.若有定义floata[15],*p=a;,且数组a的首地址为300H,则p+13所

指向的数组元素的地址为()。

A.334HB.30DHC.352HD.31AH

16.若有说明charsl[30]="abc",s2[]="defghi";,则在使用函数strcat(sl,s2)

后,结果是()。

A.sl的内容更新为abcdefghi

B.sl的内容更新为defghi\O

C.sl的内容更新为defghiabc\O

D.sl的内容更新为abcdefghi\O

17.

(2)下列叙述中正确的是().

A)一个逻辑数据结构只能有一种存储结构

B)逻辑结构属于线性结构,存储结构属于非线性结构

C)一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理的效率

D)一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理的效率

18.面向对象的设计方法与传统的面向过程的方法有本质不同,它的基本

原理是()。

A.模拟现实世界中不同事物之间的联系

B.强调模拟现实世界中的算法而不强调概念

C.使用现实世界的概念抽象地思考问题从而自然地解决问题

D.不强调模拟现实世界中的算法而强调概念

19.数据处理的最小单位是()。

A.数据B.数据元素C.数据项D.数据结构

20.若有说明chare⑺={C,t,T」,H,g};则对元素的非法弓[用是()。

A.c[0]B.c[9-6]C,c[4*2]D,c[2*3]

三、程序设计题(10题)

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

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

fun(),其功能是根据以下公式求P的值,结果由函数值返回。m与n

_____m!

为两个正整数且要求m>n。Pn!Im-n)!例如:m=12,n=8时,

运行结果为495.000000。注意:部分源程序在文件progl.c中。请勿改

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

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

1tinclude<stdio.h>

2floatfun(intm,intn)

3{

4

5}

6main()/水主函数♦/

7{voidNONO();

8printf(HP=%f\n",fun(12,8));

9NONO();

10}

11voidNONO()

12{/*本函数用于打开文件、输入数据、调

用函数、输出数据及关闭文件*/

13FILE♦fpr*wf;

14inti,m,n;

15floats;

16fp=fopen(win.dat*\nrn);

nMM

17wf=fopen(out.dat"rw);

18for(i=0;i<10;i++){

w

19fscanf(fpr%d,&d",&n);

20s=fun(m,n);

21fprintf(wf,n%f\n"\s);

22)

23fclose(fp);

24fclose(wf);

25}

22.

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

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

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

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

题程序:

Sindud*Vwdhbi.

|stficludeVcomo.b>

#ioduiWVsldio.h>

sdrfitteM81

mifun(clur•3•clurc)

voidtn*加()

chara(M^«ehi

*y«cefii("CLS*)।

prait(<•\nPICBMenteraMftfigi

g«l«(•)(

prmtf《•\nP1eaxceier.charJ)।

ch―getchar()t

printf<w\nThrnumberoftbrrhetiat%d\・'・(un

dO>i

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

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

fun(),其功能是统计s所指字符串中的数字字符个数,并将其作为函

数值返回。例如,s所指字符串中的内容是

2def35adh253kjsdf7/kj8655x,函数fun()返回值为11注意:部分源程序在

文件progl.c中。请勿改动主函数main()和其他函数中的任何内容,仅在

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

1tinclude<stdio.h>

2voidNONO();

3intfun(char♦s)

H(

5

6}

7main()

{char*s=w2def35adh253kjsdf

7/kj8655xM;

w

9printf("%s\nrs);

10printf(M%d\n*\fun(s));

HNONO();

腔)

13voidNONO()

M{/*本函数用于打开文件、输入数据、调

用函数、输出数据及关闭文件Q♦/

15FILE*fp,♦wf;

16inti;

17chars[256];

18fp=fopen("in.dat",;

19wf=fopen(Mout.daf\Hww);

20for(i-0;i<10;i++){

21fgets(sr255,fp);

fprintf(wf,M%d\nHfun(s));

Ir

24fclose(fp);

fclose(wf);

■}

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

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

的数据为:

WWW

SSS

HHH

III

则字符串中的内容应是WSHIWSHIWSHE

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

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

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

试题程序:

=tneludrVaididh_>

隹drlineM4

WdrfirwN3

void|>roc<char<•»>[N}«clur•b>

voidmain(>

char4>00],w[MXN]»|{W,W.W).

mlup

pnntf<eTbe

for(i-OjYMii*,)

<ioc《LQ“VN8j+♦)

prwndq.%”.।

pnrnH

pcoc<w»«)।

prmtfC-TbrA

pu<«(a)t

pnntK)i

25.

编写一个函数,输入n个字符串,串与串之间以Enter键分隔,找出最

短字符串中第一个字符串,传回该串地址(用一个新串“*”作为结束输入

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

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

语句。试题程序:

sinclude<«<dio.h2>

升includeVarin*.h>

Uinclude<conio.h>

char»(un(char(•»>[100]antnum)

voidmain()

charstr[10][100].*mini

inin,i=O:

FILE•outiprintf("inputstringswith

asend:*)।

gets(str[i])i

putsCstrfi])i

while。strcmp(Mr[i].''•**)==0)

[

i++s

gelstMr[ij)t

put5(5tr[i]>?

}

n・11

min、fun(sir»n)i

primf("\nmin-%八rT.minh

out=fopen(*outfilc.dat"»"w"):

strcpy(str[O]."just»*)i

strcpy(str[l]・"a*)i

9trcpy(str[2]•"icsi")i

strcpy(sir[3]»*someM):

strcpy(sir[4]»"too!?!?*>:

fprinlf(ouu"%*",fun(strt5))।

fclosc(oul);

26.请编一个函数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);

27.三个整数a、b、c,由键盘输入,输出其中最大的数。

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

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

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

k所指向的存储单元中。

例如,输入如下整数:

876675896101301401980431451777则输出结果为6,980。

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

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

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

1tinclude<conio.h>

2tinclude<stdio.h>

3#include<stdlib.h>

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

5(

6

7)

8voidmain()

9{

10FILE*wf;

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

301r401r980r431r451,777Hk;

12system(MCLSM);

13fun(a,10,&k);

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

15//

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

.17fprintf(wf,d,3d",k,a[k]);

18fclose(wf);

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

20}

29.

请编写函数proc(),其功能是:将所有大于1小于整数m的非素数存

入XX所指数组中,非素数的个数通过k传回。例如,输入20,则应

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

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

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

atodifdc<BtdJil*.h>

aiwlvdrVcooio.h>

#includeVstdio.h>

wedproc(inim>int•k。mtxx£J)

vodnwuM>

mtm・n««tr[IOO]i

•ywtm()i

pnmf("\tiPW»*rmier■■mtcgrtnumbrr

brtwwfi10and100,*>।

itcaM)i

proc<n»(>ni«Mr)B

prim1("\n\»Thrr»ar*Hdvon-pricnc

number*ITMtlwinK<it

foKn^0ta<laiin4*+)

pnnif(M\nK4d**9<f{n])i

30.

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

除字符串中所有的。号。编写函

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

例如,字符串中的内容为“*4c*‘*A*BC*DEF*G*******'',删除后,

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

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

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

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

试题程序:

#include<sidioJi>

voidlun(char*a)

(

}

voidriainf)

(chars[81J;

printff1EnterastringS');

gets(s);fun(a);

printf(MThestringafterdeleted\");

3U0(S);)•.

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

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

之和。

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

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

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

注意:不要改动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:

%mn",fun(n));

32.下列给定程序中,函数fun()的功能是读入一个字符串(长度<20),

将该字符串中的所有字符按ASCII码降序排序后输出。

例如:输入dafhc,则应输出hfdcao

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

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

intfun(chart[])

charc;

inti,j;

for(i=0;i<strlen(t)-1;i++)

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

if(t[i]<t[j])

c=t[j];

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

t[i]=t[i++];

t[i]=c;

)

)

main()

(

chars[81];

clrscr();

printf("\nPleaseenteracharacter

string:");

gets(s);

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

fun(s);

printf("\nAftersortingdecendingly:\n

%s",s);

)

33.给定程序M0D11.C的功能是:读入一个英文文本行,将其中每个

单词的第一个字母改成大写,然后输出此文本行(这里的“单词”是指由空

格隔开的字符串)。

例如,若输入:Iamastudenttotaketheexamination则应输出:lAmA

StudentToTakeTheExamination,o

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

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

♦include<ctype.h>

linclude<string.h>

3/•••••••••肯**found*♦*♦♦**♦♦♦♦*/

4include<stdio.h>

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

6upfst(charp)

7{intk«0;

8for(;*p;p++)

9if(k)

10{if(*pk-0;}

11elseif(*p!«11)

12(k«1;*p-toupper(*p);}

13)

14main()

15(charchrstr(81];

16printf("\nPleaseenteranEnglish

textline:w);gets(chrstr);

17printf(w\n\nBeforechanging:\n

R

%srchrstr);

18upfst(chrstr);

M

19printf("\nAfterchanging:\n%s\nr

chrstr);

20

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

n项之和。和值通过函数值返回到main函数。

23581321

T2'3'5'T*……

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

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

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

tinclude<stdio.h>

2/♦♦♦♦♦♦♦♦♦*w*found****w****w**/

3voidfun(intn)

4{inta,b,c,k;doubles;

5s,0.0;a»2;bw1;

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

7/♦♦♦****w****found**w*♦♦♦♦**♦♦/

8s-s*(Double)a/b;

9c»a;a»afb;b•c;

10I

11returns;

12)

13main()

14(intn«5;

15printf(w\nThevalueoffunction

w

is:%lf\nrfun(n));

16

35.下列给定程序中,函数fun()的功能是:按顺序给s所指数组中的元

素赋予从2开始的偶数,然后再按顺序对每5个元素求一个平均值,并

将这些值依次存放在w所指的数组中。若s所指数组中元素的个数不是

5的倍数,多余部分忽略不计。例如,s所指数组有14个元素,则只对

前10个元素进行处理,不对最后的4个元素求平均值。

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

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

试题程序:

#include<stdio.h>

#defineSIZE20

fun(double*s,double*w)

{intk,i;doublesum;

for(k=2,i=0;i<SIZE;i++)

{s[i]=k;k+=2;}

sum=0.0;

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

{sum+=s[i];

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

if(i+l%5==0)

{w[k]=sum/5;Sum=0;k++;)

)

returnk;

)

main()

{doublea[SIZE],b[SIZE/5];

inti,k;

k=fun(a/b);

printf("Theoriginaldata:\n");

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

(

if(i%5==0)printf("\n");

printf("%4.0f7a[i]);

)

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

for(i=0;i<k;i++)printf("%6.2f,b[i]);

printf("\n\n");

)

36.给定程序M0D11.C中函数fun的功能是:统计substr所指子字符

串在str所指字符串中出现的次数。

例如,若字符串为aaasIkaaas,子字符串为as,则应输出2。

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

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

1linclude<stdio.h>

w

2intfun(char*strrcharsubstr)

3{intirkrnum-0;

4八,"………found…

5for(i-0,str[i]9

6for(j-i/k«0;substr(k]~str[j);

k»,八♦)

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

8If(substr[k*lj-,\0,)

9(num+,;

10break;

11

12returnnum;

13)

14main()

15(

16charstr(80]rsubstr[80];

17printf("Inputastring:*);

18gets(str);

19printf(wInputasubstring:w);

20gets(substr);

w

21printf(%d\n"rfun(strrsubstr));

22

37.下列给定程序中,函数fun()的功能是;求出两个数的最大公约数,

并作为函数值返回。例如,若给numl和num2输入49和21,则输出

的最大公约数为7:若给numl和num2分别输入27和81,则输出最大

公约数为27o

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

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

试题程序:

#include<stdio.h>

intfun(inta,intb)

{intr,t;

if(a<b)

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

{t=a;b=a;a=t;}

r=a%b;

while(r!=O)

{a=b;b=r;r=a%b;}

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

return(a);

)

main()

{intnuml,num2,a;

printf("Inputnumlnum2:");scanf("%d%d",&numl,&num2);

printf("numl=%dnum2=%d\n\n",numl,num2);

a=fun(numl,num2);

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

38.下列给定程序中,函数fu列)的功能是::求k!(k<13),所有阶乘的

值作为函数值返回。例如:若k=10,则应输出3628800。

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

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

改程序的结构。

试题程序:

#include<conio.h>

#include<stdio.h>

longfun(intk)

{].........................................................

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

ifk>0

return(k*fun(k-1));

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

elseif(k=0)

return1;

)

main()

{intk=10;

clrscr();

print,("%d!=%ld\n",k,fun(k));

39.下列给定程序中,函数fun的功能是按以下递归公式求函数值。

Fun(n)={力(-2

例如:当给n输入5时,函数值为240;当给n输入3时,函数值为60o

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

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

试题程序:

#include<stdio.h>

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

fun(intn);

intc;

/*************found*************I

if(n=l)

c=15;

else

c=fun(n-l)*2;

return(c);

)

main()

intn;

printf("Entern:");

scanf("%d",&n);

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

)

40.下列给定程序中,函数fun()的功能是:从N个字符串中找出最长的

那个中,并将其地址作为函数值返回。各字符串在主函数中输入,并放

入一个字符串数组中。

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

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

试题程序:

#include<string.h>

#include<stdio.h>

#defineN5

#defineM81

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

fun(char(*sq)[N])

{inti;char*sp;

sp=sq[0];

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

if(strlen(sp)<strlen(sq[i]))

sp=sq[i];

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

returnsq;

)

main()

{charstr[N][M],*longest;inti;

printf("Enter%dlines:\n",N);

for(i=0;i<N;i++)gets(str[i]);

printf("\nThe%dstring:\n",N);

for(i=0;i<N;i++)puts(str[i]);

longest=fun(str);

printf("\nThelongeststring:\n");

puts(longest);

)一

五、程序改错题(2题)

41.

下列给定的程序中,函数proc()的功能是:判断字符ch是否与sir所

指字符串中的某个字符相同;若相同,则什么也不做,若不同,则将其

插在串的最后。请修改程序中的错误,使它能得出正确的结果。注意:

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

题程序:

sincludeVh>

&includeVenio.h>

:includeVaduxh>

gincludeVsiring.h>

//••••louffed••••

voidp<oc(CIMF»<r«charchi

while(•»tr&&♦nir!-ch).ir++।

//••••found••••

if(•・・,,・<>!!)

//••••f51nd••••

votdRMMM>

char

n)ntieivi<eCt-S>>s

prtnif<"\nPlca*centeraMnngi01i

grt>(

priiitfC*\nPleam*entertheto

wearrhj*)t

ehxgetchar<)i

proHibtr»H1)i

printfe*\C171>eFeMiitin”H\B*•>ir)<

42.下列给定程序中,函数proc()的功能是:对M名学生的学习成绩,

按从低到高的顺序找出m(mS10)名学生来,并将这些学生数据存放在

一个动态分配的连续存储区中,此存储区的首地址作为函数值返回。

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

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

构。

试题程序:

夕include<widlikh>

Siocludr<cocUo.h>

9includeVsinnft.h>

9inrludrVzdidh>

,include<mdk>c.h>

gdrfirwM10

trpctielMrwi»*

(

duiT

bit»!

\STU.

STU•procCSTU•[].irnm)

I

STVb[ML*u

tntuj・lu

//•♦••found♦•••

•・■calhHm.MMU(STU)>&

foKi-OtKMii*

lor€h*Otli<iniki+)

(or《I-LO8YM“++)

附2工,<2].»)i-H

//••••loutid••••

•[kJ.num-b(j).aumi

•till»•

2]..-iooi

r«<uraii

rod(MitreHtlt(STU*[]•FILE•pO

mtI*

fprwitf<p4.*NoMark"Xd\n*•

a[i].num*山工«)i

fpnn«(<p4«"\H\II*>i

voadnuiin<)

(STUZM]=ICADI\8lhCAD:%MF.

\S4I.CAO4*.an.

CAOS\ni.CAD«•.«>>.

(•A07-.TthCAM•・6”・

CM9-.TOKCAW.riHi

STUepOrdrri

pn!M«e«•••THERESULT••••"・九

OUlfVMlltC>I

pniM«thefMimbrrolthrwtiedmt*whohave

fewerMtirei*>»

•canf(NKr.^m)i

whik(m>10>

pnntl(a\iiGivethenumbera(theUudrm.whohaw

lowertcorvt*>i

»CMU<•aOi

p(>rdrr-proc<»tu.ni>i

phM<(*••••THERESULT•••

pnn<f(vTbrwpAns)»

for<j-0iYoM2♦)

pnntf(aK»X4\n*«p(>rdef{i].num*f<Mrr{i]»9)>

free(p(>r<kr)i

六、操作题(2题)

43.请编写fun函数,其功能是:计算并输出3〜m所有素数的平方根

之和。

例如,若主函数从键盘给m输入50后,则输出为s=68.665791o

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

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

注意:m的值要大于2但不大于100。部分源程序给出如下。

试题程序:

#include<math.h>

#include<stdio.h>

doublefun(intm)

(

)

voidmain

(

intm;

doubles;

FILE*out:

printf("\n\nlnputm:");

scanf("%d",&m);

s=fun(m);

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

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

for(m=0;m<10;m++)

fprintf(out,"%f\n",fun(m+80));

felose(out);

44.有以下语句段:

intnl=10,n2=20;

printf("[]",nl,n2);

要求按以下格式输出nl和n2的值:

nl=10

n2=20

每个输出行从第一列开始,请填空。

参考答案

1.变换型典型的数据流类型有两种:变换型和事务型。变换型是指信息

沿输入通路进入系统,同时由外部形式变换成内部形式,进入系统的信

息通过变换中心,经加工处理以后再沿输出通路变换成外部形式离开软

件系统;在很多软件应用中,存在某种作业数据流,它可以引发一个或

多个处理,这些处理能够完成该作业要求的功能,这种数据流就叫做事

务。

2.ACBDFEHGPACBDFEHGP解析:中序遍历方法的递归定义;当二叉

树的根不为空时,依次执行如下3个操作:①按中序遍历左子树。②访

问根结点。③技中序遍历右子树。根据遍历规则来遍历本题中的二叉树。

首先遍历F的左子树,同样按中序遍历。先遍历C的左子树,即结点

A,然后访问C,接着访问C的右子树,同样按中序遍历C的右子树,

先访问结点B,然后访问结点D,因为结点D没有右子树,因此遍历完

C的右子树,以上就遍历完根结点F的左子树。然后访问根结点F,接

下来遍历F的右子树,同样按中序遍历。首先访问E的左子树,E的左

子树为空,则访问结点E,然后访问结点E的右子树,同样按中序遍历。

首先访问G的左子树,即H,然后访问结点G,最后访问G的右子树

Po以上就把整个二叉树遍历一遍,中序遍历的结果为ACBDFEHGP。

因此,划线处应填入“ACBDFEHGP”。

3.88解析:本题考查基本的for循环条件,i+=2表示i每次递增2,从

0开始,输出5个整数则需要的条件是i<=8。

4.max=10row=2colum=l

5.s[i++]s[i++]解析:本题中为了能实现字符串的拷贝,需要使字符数组

s从头到尾依次遍历其有元素。本题应使用i舶自增后置来实现。

6.-16-16解析:将赋值运算符右侧的“表达式”的值赋给左侧的变量,并

且赋值运算符按照“自右而左”的结合顺序,本题表达式应先算m的值为

10,再运算y的值为8,最后计算y=y+(-8)=-8+(-8)=-16。

7.x==0

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

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

9.

10.空间复杂度空间复杂度解析:算法执行时所需要的存储空间,称为

算法的空间复杂度。

11.A

12.C学号是学生表S的主键,课号是课程表C的主键,所以选课表SC

的关键字就应该是与前两个表能够直接联系且能唯一定义的学号和课

号,所以选择C项。

13.C解析:外部变量在编译时由系统分配永久的内存空间,所以外部

变量的类型不是自动存储类别。

14.D

15.C解析:解答本题,首先要明白在对指针进行加、减运算的时候,数

字“1”不是十进制的数“1”,而是指T个存储单元长度,而1个存储单元

长度占多少存储空间,应该视具体情况而定。如果基本类型是int型,

移动1个存储单元的长度就是位移2个字节,如果基本类型是float型,

移动1个存储单元的长度就是位移4个字节。所以p+13所指向的数组

元素的地址:300H+Q3*上标)4)H=352H。

16.D解析:streams1,s2)是把s2字符串连接到si字符串的末尾,要保

证si能容纳下连接后的字符串。

17.D

18.C\n面向对象的设计方法的基本原理是:使用现实世界的概念抽象地

思考问题从而自然地解决问题。它虽强调模拟现实世界中的概念而不强

调算法,但是它鼓励开发者在软件开发的过程中从应用领域的概念角度

去思考O

\n

19.C解析:数据处理的最小单位是数据项;由若干数据项组成数据元素;

而数据是指能够被计算机识别、存储和加工处理的信息载体;数据结构

是指数据之间的相互关系和数据运算。故正确答案为选项C)。

20.C

21.1floatfun(intm,fintn){FloatpI=l,p2=l,p3=l;inti;for(i=1;i<=m;i++)pi*=i;f

or(i=l;i<=n;i++)p2*=i;for(i=l;i<=(m-n);i++)p3*=i;returnpi/(p2*p3);

本题考查循环的使用。通过3个for循环分别计算阶乘。其中pl=m!,

p2=n!,p3=(m-n)!。

22.

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

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

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

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

中出现的次数。

23.intfun(char*s)

2;{intn=0;

3char*p;

4:;for(p=s;*p!=,\\0';p_L+)

if((*p>,o,)&&(<,9,))

6n++;

7retumn;

8}要统计字符串中数字字符的个数,首先应定义变量n,并将其初始化

为0,然后遍历字符串,逐个判断字符是否为数字字符,判断条件为该

元素的ASCII值在字符。和9的ASCII值之间,若判断条件成立,则

使n的值加1,否则,继续判断下一个字符,直到字符串结束。

24.

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

正确:if(*r=="\0/)

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

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

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

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

25.

【解析】首先指定第一个字符串为长度最小的字符串,然后在循环过程

中将其与其他的所有串的长度进行比较,求出最小的串。设置一个指针

变量min,使它的初值为第一个字符串,再使其他的所有串的长度与min

的长度进行比较,若其他字符串的长度小于min,则将其他字符串的首

地址赋值给min。最后使用返回语句,返回最短长度min的字符串的地

址。

26.\n\tcharch;

\ninti,m,n;

\ni=O:

\nm=n=strlen(str)-1;//求字符串str长度

\nwhile(i<(n+l)/2)//循环逆置交换

\n(

\nch=str[i];

\nstr[i]=str[m];

\nstr[m]=ch:

\ni++;

\nm—;

\n}

\n【解析】在fun函数中,首先求行字符串的长度,然后通过循环进行

字符交换。要注意的是,如果字符串长度是奇数,则最中间的元素在

逆置前后的位置是没有改变的。\n

27.main

\n{inta,b,c;

\nprintf(“请输入三个整数:");scanf("%d,%d,%d”,&a,&b,&c);

\nif(aif(belseprmtf(ctmax=%d\\n,,,b);

\nelseif(aelseprintf(t<,max=%d\\n,,,a);}

\n

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

2{

3Inti;

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

5标*/

6for(i=0;i<t;i++)hif(s[*k]<s[i])*k=i;/*找到数组中值最大的元素,把该元

素的下标赋给k所指的数*/

7returns[*k];/*返回数组的最大元素*/

8}

<t;i++)

。本题中使用指针变量k作为值最大的元素的下标。使用时要注意对

k进行指针运算。程序一开始让k指向数组中的第1个元素,即

*k=0o通过for循环与数组各个元素比较,找到最大值。<></t;i++)

29.

【解析】题目中要求将所有大于1小于整数m的非素数存入xx所指数

组中,因此需要判断所有大干1小于m的整数是否为素数。将所有大干

1小于m的非素数放入数组xx中,并将非素数的个数通过形参k传递

回主函数中。

30.

【答案】

voidfun(char

(

inti,jM);

4j-H-Mifef*若不是要剔除的字符则保留•/

4jJ=YT;I*最后加上字符串结束符加'*/

},

【解析】

用循环操作从第一个字符开始.往后逐个与要删除的字符比较,保留要删除字符以外的字符。变量i表

示原字符串的下标,变量j表示剔除•号后新字符串的下标.且j从0开始,循环结束后给字符串加上结束

31.(1)错误:fun(intn)正确:doublefun(intn)(2)错误:c=a;a+=b;;b+=c;

正确:c=a;a+=b;b=c;⑴错误:fun(intn)正确:doublefun(intn)\r\n(2)

错误:c=a;a+=b;;b+=c;正确:c=a;a+=b;b=c;解析:该题题干

是著名的斐波拉契分数序列,所以循环条件应该是c=a;a+=b;b=co

32.(1)错误:intfun(chart[])正确:voidfun(chart口)⑵错误:t[j]=t[i++];

正确:;⑴错误:intfun(chart[])正确:voidfun(chart口)\r\n(2)错

误:t[j]=t[i++];正确:t[j]=t[i];解析:错误1:该函数只是对一个字

符串中的元素进行比较大小的操作,并没有具体的返回值,因此,函数

的返回值类型应为void。错误2:本题的思路是利用选择法对数组元素

进行比较。所谓选择法,是依次用当前取得的元素和它后面的元素进行

比较,在第一个元素和它后面的元素顺次比较时,可以借助中间变量来

对两数进行交换,要保证这第一个元素始终存放数组中的最大数,以后

依次挑出次大数,这样最终的数组就是有序的。解答本题,只要理解了

选择法的思想,找到并改正错误就容易了。

33.(l)#include<stdioh>(2)upfst(char*p)(1)#include<stdioh>

⑵upfst(char*p)解析:本题中函数的功能是将每个单词的第一个字母改

成大写。该题的解题思路根据题干中“这里的‘单词'是指由空格隔开的字

符串”可以归纳为主要是对字符串中空格字符的查找。

34.(l)doublefun(intn)(2)s=s+(double)a/b;(l)doublefun(intn)

◎s=s+(double)a/b;解析:本题中函数的功能是求出分数序列的前n

项之和。首先根据题干中给出的公式推出每一项之间的关系,求出每一

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

是前一项分子和分母的和。

35.错误:if(i+l%5==0)正确:if((i+l

温馨提示

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

评论

0/150

提交评论