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

下载本文档

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

文档简介

2022年吉林省吉林市全国计算机等级考试

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

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

一、2.填空题(10题)

1.若有定义:intk;,以下程序段的输出结果是____ofor(k=2;k<6;

k++,k++)printf("##%d",k);

2.已知字符A的ASCII代码值为65,以下程序运行时若从键盘输入:

B33〈回车〉,则输出结果是

[]o

#include<stdio.h>

main()

{chara,b;

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

a=a-'A'+'0';b=b*2;

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

)

3.下面程序的输出结果是【】。

charb[]="ABCD";

main()

{char*chp;

for(chp=b;*chp;chp+=2)printf("%s",chp);

printf("\n");

4.按照逻辑结构分类,数据结构可分为线性结构和非线性结构,二叉树

属于。

5.若从键盘输入24,则以下程序输出的结果是()。

#include<stdio.h>

main()

{inta;

scanf("%d",&A);

if(a>20)printf("%d",A);

if(a>10)printf("%d",A);

if(a>5)printf("%d",A);

)

6.若i、j为int类型,则以下程序段内循环体的总执行次数是【】。

for(i=5;i;i—)

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

7.设有以下程序:

main()

{inta,b,k=4,m=6,*pl=&k,*p2=&m;

a=pl=&m;

b=(*pl)/(*p2)+7;

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

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

)

执行该程序后,a值为【】,b值为【】。

8.开发软件所需要的高成本和产品的低质量之间有着尖锐的矛盾,这种

现象被人们称之为【】。

9.以下程序运行后的输出结果是____o

main()

{intp[7]={ll,13,14,15,16,17,18);

inti=0,j=0;

while(i<7&&p[i]%2==l)j+=p[i++];

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

)

10.一棵二叉树中共有80个叶子结点与10个度为1的结点,则该二叉

树中的总结点数为【】。

二、单选题(10题)

11.对表进行水平方向和垂直方向的分割,分别对应的关系运算是()

A.选择和投影B.投影和选择C.选择和联接D.投影和联接

12.图的BFS生成树的树高比DFS生成树的树高()

A.小或相等B.小C.大或相等D.大

13.在深度为5的满二叉树叶中,叶子结点的个数为()。

A.32B.31C.16D.15

14.如果要求一个线性表既能较快地查找,又能适应动态变化的要求,可以

采用下列哪一种查找方法0

A.分块B.顺序C.折半D.哈希

15.若有定义“intb[8],*p=b;则p+6表示()。

A.数组元素b⑹的值B.数组元素b[6]的地址C.数组元素b[7]的地址D.

数组元素b[0]的值加上6

16.在目标串T[O,n-l]="xwxxyxy”中,对模式串p[O,m-l]="xy”进行子串定

位操作的结果

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

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

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

关键字(键或码)为()

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

18.若已知一个栈的进栈序列是1,2,3,,n,其输出序列为pl,p2,

p3,?,pn,若pl=n,则pi为()。

A.iB.n-iC.n-i+1D.不确定

19.有以下程序

#include<stdio.h>

main()

{charb,c;inti;

b='a';c='A';

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

{if(i%2)putchar(i+b);

elseputehar(i+c);

}printf("\n”);

)

程序运行后的输出结果是

A.ABCDEFB.AbCdEfC.aBeDeFD.abcdef

20.设a和b均为double型变量,且a=5.5,b=2.5,则表达式(int)a+b/b

的值是

A.6.5B.6C,5.5D,6

三、程序设计题(10题)

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

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

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

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

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

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

"9include<co«»0.b>

UincludeVstdia.h2>

军ihdudcVzdL,b>

voidproc<char•tt»mipp[])

VOMI)

char•11(1000]i

mi

•y»leni(i

pnntf(^XnPlcexenter•charMncigt*>i

proc<Mr»bb>i

for(k*0>k<2<i

prmtf(*Kd■•bb(h】),

pmrtf(*\n*)•

22.请编写函数proc,该函数的功能是:将放在字符串数组中的M个字

符串(每串的长度

不超过N),按顺序合并组成一个新的字符串。

例如,若字符串数组中的M个字符串为:

ABCD

BCDEFG

CDEFGHI

贝合并后的字符串内容应该是ABCDBCDEFGCDEFGHL

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

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

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

试题程序:

#include<stdio.h>

#include<conio.h>

#defineM3

#defineN20

voidproc(chararr[M][N],char*b)

voidmain

(

charstr[M][N]={"ABCD","BCDEFG","CDEFGH1"),i;

chararr[100]={"##################"};

printff'Thestrin9:kn");

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

puts(str[i]);

printf("\n");

proc(str,arr);

printf("TheAstring:\n");

printf("%S",arr);

printf("\n\n");

)

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

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

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

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

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

linclude<stdio.h>

voidNONO();

intfun(intn)

main()

{intn,place;

do{

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

scanf;

Iwhile(n<0IIn>9999);

place«fun(n);

print—1*输入的数字是记位\n“,place);

NONO();

)

voidNONO()

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

FILE•fp,•wf;

inti,n,place;

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

wf-fopen("c:\testk>ut.datHw");

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

(

fscanf(fp,"Id・,4n);

place■fun(n);

fprintf(wff”%d\n”,place);

fclose(fp);

fclose(wf);

序:)

24.请编写函数proc(),该函数的功能是:将两个两位数的正整数

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

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

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

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

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

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

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

试题程序:

s*includeVetdlib.h>

sincludeVstdio.h>

身include<conio.h>

voidproc(ininum!.in!num2•long•num)

voidmain()

(

intnuml«num2(

longnumt

sy5tem(-CLS*)।

prind("Inputnuml«num21")i

scanf("%d%d",&-numl.&-num2)i

proc(numl•num2«&*num)i

print(("Theresultis:%ld\nH•num)।

}•!

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

案的项目中包含一个源程序文件progl.Co程序中将m个人的成绩存放

在score数组中,请编写函数fun(),它的功能是将低于平均分的人数

作为函数值返回,将低于平均分的分数放在below所指的数组中。

例如,当score数组中的数据为10、20、30、40、50、60、70、80、

90时,函数返回的人数应该是4,below中的数据应为10、20、30、

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

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

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

试题程序:

1#include<conio.h>

2finclude<stdio.h>

3#include<string.h>

4#include<stdlib.h>

5intfun(intscore[],intm,int

色below]])

6{

7

8}

9voidmain()

10{

11FILE*wf;

12inti,n,below[9];

13intscore[9]={10,20,30,40,

50,60,70,80,90};

14system(MCLSM);

15n«fun(score#9,below);

16printf(M\nBelowtheaverage

scoreare:");

17for(i=0;i<n;i-»-+)

18printf(M%d”,below[i]);

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

20wf=fopen(Mout.daf\MwM);

21for(i=0;i<n;i++)

22fprintf(wfr"^d^^elowti]);

23fclose(wf);

24/*****************/

251

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

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

能是将s所指字符串中下标为偶数同时ASCII值为奇数的字符删除,s

所指字符串中剩余的字符形成的新字符串存放在t所指的数组中。例

如,若s所指字符串中的内容为“ABCDEFG12345",其中字符C的

ASCII值为奇数,在数组中的下标为偶数,因此必须删除;而字符1的

ASCII值为奇数,在数组中的下标为奇数,因此不应当删除,其他依

此类推。最后t所指的数组中的内容应是“BDH2345”。

注意:部分源程序在文件progl.c中。请勿改动main()函数和其他函数中

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

试题程序:

tinclude<stdio.h>

2/include<string.h>

3voidfun(char*s,chart[])

■(

5

6}

7main()

8{

9chars[100],t[100];voidNONO();

10printf("\nPleaseenterstrings:");

Hscanf("%s",s);

12fun(s,t);

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

14NONO();

H)

16voidNONO()

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

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

17chars[100],t[100];

*FILE*rf,*wf;

19inti;

20wHH

21rf二fopen(in.daf\r);

22wf=fopen(wout.datn,MwM);

23

24for(i-0;i<10;if+){

MH

25fscanf(rfz%srs);

26

27fun(s,t);

28fprintf(wft);

29r

}

fclose(rf);

fclose(wf);

27.

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

删除字符串中所有的*号。编写函数时,不得使用C语言提供的字符串

函数。例如,字符串中的内容为“****A*BC*DEF*G****“,删除后,字

符串中的内容应当是“ABCDEFG”。注意:部分源程序给出如下。请

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

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

HtfkcludtVcOfMX

includeVMdto,

voidIunichar•a)

voidmaifi()

char»[B1Ji

pnatff*Enteraiinngi\n")i

w)(

tun(

print](aTlic»tnn<tfietd*lricdi\B*)(

putu(•)|

28.有N个学生,每个学生的信息包括学号、性别、姓名、四门课的成

绩,从键盘上输入N个学生的信息,要求输出总平均成绩最高的学生信

息,包括学号、性别、姓名和平均成绩。

29.

请编写一个函数voidproc(chara[],charbE3,intn),其功能是:删除

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

串存放在b所指的数组中,n中存放指定的下标。例如,输入一个字符

串student,然后输入5,则调用该函数后的结果为studet。注意:部分

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

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

#includeVstdlib.h>

#includeVstdio.h>

#include<conio.h>

5defineN20

voidprodchara[].charb[].intn)

voidmain()

{

charstrl[N]»str2fNji

intni

"CI5"h

printf("Enterthestring:\n")i

g”*Erl)।

printf(*Enterthepositiono(thes<ringdeleted:

")I

scan!(*%d".&n)i

proc(strl«Mr2•n)s

printf("Thenewsiring注:%*\n"・*lr2)i

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

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

fun(),它的功能是求出能整除x且不是偶数的整数,并将这些整数按从

小到大的顺序放在PP所指的数组中,总个数通过形参n返回。如x中

的值为30,则有4个数符合要求,它们是1、3、5、15。注意:部分源

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

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

1finclude<conio.h>

2#include<stdio.h>

3#include<stdlib,h>

4voidfun(intxrintpp[],int♦n)

61

整}

8,voidmain()

9{

10FILE♦wf;

11intxraa[1000],n,i;

12system(WCLSM);

13printf(w\nPleaseenteran

integernumber:\nf,);

wn

14scanf(%dz&x);

15fun(x,aa,&n);

16for(i=0;i<n;i++)

17printf(n%d”,aa[i]);

18printf(M\n");

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

20wf=fopen("out.datM,MwM);

21fun(309aa,&n);

22for(i=0;i<n;i++)

w

23fprintf(wfr%daa[i]);

24fclose(wf);

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

26}

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

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

式的值。

y=l-l/(2x2)+l/(3x3)-l/(4x4)+...+(-l)(m+l)/(mxm)

例如:m中的值为5,则应输出0.838611o

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

doublefun(intm)

{doubley=1.0;

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

intj=l;

inti;

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

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

y+=l/(i*i);

retum(y);

main()

intn=5;

clrscr();

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

32.给定程序M0D11.C中函数fun的功能是:根据整型形参m,计算

如下公式的值。

v=1+-----+-----+-----+・・・+-------

2*23*34*4

例如,若m中的值为:5,则应输出:1.46361lo

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

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

1tinclude<stdio.h>

2doublefun(intm)

3{doubley-1.0;

4int1;

5/……■…★★★found—f

6for(i-2;i<m;i++)

7/………•…found…………*/

8y1/(i*i);

9return(y);

10}

11main()

12{intn-5;

13printf(H\nTheresultis%lf\nw,

fun(n));

14

33.下列给定程序中,函数fun()的功能是:用冒泡法对6个字符串按由

大到小的顺序进行排序。

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

#defineMAXLINE20

voidfun(char*pstr[6])

(

inti,j;

char*p;

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

for(j=i+l;j<6;j++)

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

if(strcmp((pstr+i),(pstr+j))<0)

p=*(pstr+i);

*(pstr+i)=*(pstr+j);

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

*(pstr+j)=*p;

}

)

main()

(

inti;

char*pstr[6],str[6][MAXLINE];

clrscr();

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

pstr[i]=str[i];

printf('7nEnter6string(lstringateachline):\n");

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

scanf("%s",pstr[i]);

fun(pstr);

printf("Thestringsaftersorting:\n");

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

printf("%s\n",pstr[i]);

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

%lAn",fun(n));

)

35.给定程序M0D11.C中函数fun的功能是:将p所指字符串中的所

有字符复制到b中,要求每复制三个字符之后插入一个空格。

例如,在调用fun函数之前给a输入字符串:ABCDEFGHIJK,调用函

数之后,字符数组b中的内容则为:ABCDEFGHIJK。

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

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

1tinclude<stdio.h>

2voidfun(char*prchar*b)

3{inti,k-0;

4while(*p)

5{i-1;

6while(i<«3&&*p)<

7***wfound***♦♦*****

8blk]-p;

9ki;p++;

10}

if(*p)

12

13……….found……■…

14b[k++]-n■・

15)

16

17b(kJ-f\0f;

18

19main()

20{chara[80]rb[80);

21printf("Enterastring:");gets(a);

22printf("Theoriginalstring:");

puts(a);

23fun(arb);

24printf(w\nThestringafterinsert

space:w);puts(b);printf<w\n\n");

25

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

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

7654321时,t中的数为642。

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

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

试题程序:

#include<stdio.h>

#include<conio.h>

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

voidfun(longs,longt)

{longsl=10;

s/=10;

*t=s%10;

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

while(s<0)

{s=s/100;

*t=s%10*sl+*t;

sl=sl*10;

main()

{longs,t;

clrscr();

printf("\nPleaseenters:");scanf

("%ld",&s);

fun(s,&t);

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

37.假如整数数列中的数不重复,并存放在数组中。下列给定的程序中,

函数fun()的功能是:删除数列中值为X的元素。N中存放的是数列中

元素的个数。

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

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

试题程序:

#include<stdio.h>

#defineN20

fun(int*a,intn,intx)

{intp=0,i;

a[n]=x;

while(x!=a[p])

P=P+1;

if(p==n)return-1;

else

{for(i=p;i<n;i++)

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

a[i+l]=a[i];

returnn-1;

main()

{intw[N]={-3,0,l,5,7,99,10,15,30,90},

x,n,i;

n=10;

printf("Theoriginaldata:\n");

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

printf("\nlnputx(todelete):");

scanf("%d",&x);

printf("Delete:%d\n",x);

n=fun(w,n,x);

if(n==-l)printf("***Nobefound!

***\n\n");

else

{printf("Thedataafterdeleted:\n");

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

w[i]);printf("\n\n");

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

尸〃〃(〃)={力

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

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

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

试题程序:

#include<stdio.h>

/*************found****-j-*******/

fun(intn);

intc;

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

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

39.下列给定程序中,函数fun()的功能是:根据形参m的值(2)£9),

在m行m列的二维数组中存放如下所示的数据,由main。函数输出。

例如,若输入2,则输出12

24

输入4,则输出1234

2468

36912

481216

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

#defineM10

intaiM][MI={0};

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

fun(int**a,intm)

{intj,k;

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

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

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

a[j][k]=k*j;

)

main()

{inti,j,n;

clrscr();

printf("Entern\n");scanf("%d",&n);

fun(a,n);

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

{for(j=O;j<n;j++)

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

printf("\n");

)

}

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

写字母F。

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

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

试题程序:

#include<stdio.h>

voidfun(char*s)

inti,j;

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

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

if(s[i]!=F)

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

s[j]=s[i];

s[j]='\O';

main()

chars[80];

printf("\nEnterastring:");

gets(s);

printf("Theoriginalstring:");

puts(s);

fun(s);

printf("Thestringafterdeleted:");

puts(s);

printf("\n\n");

五、程序改错题(2题)

41.下列给定程序中,函数proc()的功能是:从3个红球,5个白球,6

个黑球中任意取出8个作为一组,进行输出。在每组中,可以没有黑

球,但必须要有红球和白球。组合数作为函数值返回。正确的组合数

应该是15。程序中i的值代表红球数,j的值代表白球数,k的值代表

黑球数。

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

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

构。

试题程序:

彝mdudrVaidgli>

improrl>

mr

pfttitfCeVnTh*rvwiilti\n\n")।

//••••(oand♦•••

-3ii+♦)

for(j-hM,5&j++)

//••••found••••

MO-l&&kV—6)

sum*Mimili

printf<'redi为“whilet%4d

bhrkiMidXn

rvtwni»um>

voidRMUM)

ml>ucni

wisi-pt<x《》i

pnntf<*sufn®%4d\n\n।

42.下列给定程序中,函数fun()的功能是:求两个非零正整数的最大

公约数,并作为函数值返回。例如,若numl和num2分别为49和21,

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

最大公约数为27。请改正程序中的错误,使它能得出正确结果。注意:

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

题程序:

然mdud*b>

mtfun(int«•imb)

mtr«ti

ifCVb)

//••••fouftd♦・♦♦

0Alb・•]・)

f**Hb|

wlidr<f(•1)>

«•,bib=bi)

//••••(oufkd••••

rnura<1)।

vo«dfn*Mi(>

Miltiwml•«

"InputnumIaum2f>>i

»c*nf(wKdKd*»miml•&>num2)i

prtnflCanum1一%d»um2•Md\n\n*.tkuml.

nufnZ>s

•OT{UQ(MMni•num2)i

printfC'ThemaximuncommondiEorinHd\n\ne•

六、操作题(2题)

43.请编写函数proc,其功能是:计算并输出下列多项式值。

S=(l-1/2)+(1/3-1/4)+...+(1/(2n-l)-l/2n)

例如,若主函数从键盘给n输入20后,则输出为S=0.680803o

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

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

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

试题程序:

#includet:stdio.h>

doubleproc(intn)

voidmain

(

intn;

doublesum;

printf("\nlnputn:");

scanf("%d",&n);

sum=proc(n)。

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

)

44.请补充main()函数,该函数的功能是:从键盘输入一个长整数,如

果这个数是负数,则取它的绝对值,并显示出来。例如,输入:-123456,

结果为:123456o注意:部分源程序给出如下。请勿改动main()函

数和其他函数中的任何内容,仅在横线上填入所编写的若干表达式或语

句。试题程序:

FntcludeV.tdLh

甚mcludr<Mdiculi>

,MtcliMleVenio.h2>

voidm*in(>

longintnutni

*CKS*)i

print1(afCi>iertbr

•canfC(I])i

pfintfC*•••theobaolute)।

if(nyfii〈Q)

121

priBtfC*\n\nM)i

printf(13]>i

参考答案

1.

本题主要考查for循环语句。for循环的增量表达式为逗号表达式,相

当于k+=2;,即每次循环后k增加2。第一次循环时,k=2,因此输

出##2;第一■次循环时k=4,输出##4。此后k=6,不满足循环条件。

\r\n

\r\n

2」BlB解析:从键盘输入后,a=1B1,b=33,之后进行运算,a=1B'-

A+U=T;b=33*2=66。C语言规定,整型和字符型可以相互转换,已

知字符A的ASCII码值为65,所以字符B的ASCII码值为66,所以

b=1B',最后以字符形式输出a和b,所以输出为IB。

3.ABCDCD

4.非线性结构非线性结构解析:对于一个非空的数据结构,如果同时满

足下列两个条件,即1)有且只有一个根结点;2)每一个结点最多有一个

前件,也最多有一个后件,•即为线性结构,而二叉树的结点可能存在两

个后件,所以是非线性结构。

5.242424

6.1515解析执行二重循环时,外循环每执行一次,内循环将循环一遍。

本题的程序段中外循环执行了5次,内循环执行了3次,所以程序段内

循环体的总执行次数是15。

7.07

8.软件危机软件危机

9.24

10.179179解析:在任意一棵二叉树中,度为0的结点(即叶子结点)总

是比度为2的结点多一个。本题中的二叉树有80个叶子结点,因此,

该二叉树有80-1=79个度为2的结点;又知本题中的二叉树有10个度

为1的结点。因此,本题中的二叉树总结点数为:叶子结点数十度为1

的结点数+度为2的结点数=80+10+79=179

1LA解析:从关系中找出满足给定条件的那些元组称为选择,是从行的

角度进行的运算,即水平方向抽取元组。从关系模式中挑选若干属性组

成新的关系称为投影,是从列的角度进行的运算,相当于对关系进行垂

直分解。所以,本题选择A。

12.A

13.C根据二叉树的性质及定义,一棵深度为k且有2k-l个结点的二叉

树为满二叉树。满二叉树的叶子结点为最后一层的结点数,又根据满二

叉树的性质,在满二叉树的第i层上至多有2i-l个结点。因此深度为5

的满二叉树的叶子结点数为25-1=16个。

14.D

15.B指针中存放的是变量的地址,指针也可以进行增减运算,这时指针

移动的最小单位是一个存储单元,而不是一个字节。所以题中“P+6”指

的是将指针向后移动了6个存储单元,即指向uE63,存放的是b[6]的地

址。

16.C

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

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

号,所以选择C项。

18.C

19.B

解析:变量b和c中分别存放字符a和A的ASCII码,当i的值对2

求余非零时输出ASCII码为i+b)的字符;当i的值对2求余为零时输

出ASCII码为i+c的字符。分析程序可知本题选B。

20.D解析:本题考查的知识点是运算符的优先级。在这个表达式中,优

先级最高的是(int)a,也就是对5.5取整,结果是5,其次是b/b,即2.5/2.5,

结果是1.000000,最后相加结果为6.000000(表达式的最终结果为实型),

所以4个选项中D正确。

21.

【解析】由函数proc()可知,数组PP中存放26个字母各自出现的次数,

初始化为0。然后判断字符串tt中每一个字符,每检查一个字符,将数

组PP中相应的元素加1。

22.voidproc(chararr[M][N],char*b)

(

inti,j,k=0;

for(i=0;i<M;i++)//i表示其行下标

for(j=0;arr[i][j]!=\0;j++)//由于每行的个数不等,因此用a[i][j]!=

\0来作为循环结束

的条件

b[k++]=arr[i][j];//把二维数组中的元素放到b的一维数组中,

b[k]=\0;//最后把b赋\。作为字符串结束的标志

【解析】字符串数组中每一行都是一个一个完整的字符串,其结束标

志为\0。因此通过字符串的结束标志来判断每一个字符串是否结

束,将字符串数组中的所有字符串均赋值新的一维数组b来完成字符

串的合并。

23.

int修时史量唬计仪歙

〃轲淅是否为0,若不为O.bits加1,再

舞n除以10.维修捋嘴

(

bitsx;

n-n/10;

r«turnbits;【考点分析】主要考察考生对循环

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

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

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

24.

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

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

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

的hum。

25.1intfun(intscore[],intm,intbe-low[])

2{

3inti,j=O;

4floatav=0.0;

5for(i=0;i

<m;i++)

6av=av+score[i]/m;/*求平均值*/</m;i++)

<m;i++)

7for(i=0;i<m;i++)

gif(score[i]</m;i++)

</m;i++)

<m;i++)

<m;i++)

<av)p*如果分数<>8低于平均分,则将此分数放入below数::组中

*/</av)p*如果分数<></m;i++)

</m;i++)

<m;i++)

<m;i++)

<av)p*如果分数<>9below[j++]=score[i];</av)p*如果分数<></m;i++)

</m;i++)

<m;i++)

<m;i++)

<av)p*如果分数<>10returnj;/*</av)p*如果分数<></m;i++)

</m;i++)

<m;i++)

<m;i++)

<av)p*如果分数<>返回低于平均分的人数*/U}要计算低于平均分的人

数,首先应该求出数组score中各元素的平均值。然后通过for循环语

句和if条件语句找出低于平均值的分数。该题第1个循环的作用是求

出平均值av,第2个循环的作用是找出数组score中低于平均值的成

绩记录并存入below数组中。</av)p*如果分数<></m;i++)

</m;i++)

26.1voidfun(char*s,chart[])

2{

3inti,j=O;

4for(i=0;i<strlen(s);i++)

5if(!((i%2)==0&&(s[i]%2)))

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

7t[j]=O;

8}

按题目要求,将字符串S中符合要求的字符存放到字符数组t中。我

们使用for循环语句来解决这个问题。在赋值之前,先对字符串s的元

素下标和ASCII值进行判断,将满足要求的元素赋给数组3将数组t

的最后一个字符赋值为NO,,即ASCII值为0。

27.

【解析】此题是删除字符串中的星号。思路是通过for循环来完成对字

符串的遍历,通过if判断,找到不是“*”的字符,将其赋值到数组a中

星号前的位置,“if(a[i]!='*')”“a[j++]=a[i『,最后返回主函数将删除*

后的字符串输出即可。

28.\n#include'stdio.h'

\n#defineN3

\nstructstudent

\n{longstu_num;charsex;

\ncharname[15];intscore[4];

\nfloataverage;};

\nmain

\n{inti,j,index;floatsum,max;

\nstructstudentstuarr[N];

\nfor(l=0;l{printf('pleaseinput%dstudentinformation:\\n',I+1);

\nscanf('%ld,%c,%s',&stuarr[I].stu_num,&stuarr[I].sex,stuarr[I].name);

\nfor(j=0;j<4;j++)

\nscanf('%d',&stuarr[I].score]]);}

\nfor(I=0;I{sum=0.0;

\nfor(j=0;j<4;j++)

\nsum+=stuarr[I].score[j];

\nstuarr[I].average=sum/4.0;}

\nmax=stuarr[0].average;

\nindex=0;

\nfor(I=1;Iif(stuarr[I].average>max)

\n{max=stuarr[I].average;

\nindex=I;}

\nprintf('总平均成绩最高的学生信息是学号=%ld,性别=%c,姓名=%s,平

均成绩

=%4.1f\\n',stuarr[index].stu_num,stuarr[index].sex,stuarr[index].nam

e,stuarr[index].average);

\n}\n

29.

【解析】按照题目中的要求,删除一个字符串中指定下标的字符。首先,

将指定下标之前的字符放入字符数组b中,然后将指定下标之后的字符

也放入字符数组b中,最后为新的字符数组b添加结束符。

30.1voidfun(intx,intpp[],int*n)

2{

3inti,j=0;

4for(i=l;i<=x;i=i+2)/*i的初值为1,步长为2,确保i为奇数

*/5if(x%i==0)/*将能整除x的数存入数组pp中*/6pp[j++]=i;7*n=j;/*传

回满足条件的数的个数*/8}本题考查:偶数的判定方法;整除的实现。本

题题干信息:能整除X且不是偶数的所有整数。循环语句中变量i从1

开始且每次递增2,所以i始终是奇数。将能整除x的i值存放到数组

PP中,整除采用求余运算符“%”,即“x%i==0"。最后将数据元素个数j

保存到n中。

31.(1)错误:intj=l正确:doublej=1.0;(2)错误:y+=l/(i*i);正确:

y+=j/(i*i);(1)错误:intj=l正确:doublej=1.0;\r\n(2)错误:y+=l/(i*i);

正确:y+=j/(i*i);解析:错误1:为了做后面的除法运算,j要定义为

实型数,否则除得的结果将为整数。错误2:题中公式是加减相间的运

算,通过来实现。

32.(l)for(i=2;i<=m;i++)(2)y+=l,O/(i*i);(l)for(i=2;i<=m;

i++)(2)y+=l.0/(i*i);解析:该题中函数功能是计算公式的值。其中,

公式中涉及在循环中对各项的计算及累加求和。从已给定源程序的main

主函数开始入手,“printf(''WnTheresultis%lA\n",fun(n));“语句中调用

fun函数,计算公式的值。

33.(1)错误:if(strcmp((pstr+i)(pstr+j))<0)正确:

if(strcmp(*(pstr+i)*(pstr+j))<0)(2)错误:*(pstr+j)=*p;正确:*(pstr+j)=p;

(1)错误:if(strcmp((pstr+i),(pstr+j))<0)正确:if(strcmp(*(pstr+i),

*(pstr+j))<0)\r\n(2)错误:*(pstr+j)=*p;正确:*(pstr+j)=p;解析:错

误1:本题旨在考查指针的引用方法。*(pstr+i)指字符串中下标为i的字

符。错误2:*p是字符类型,而*(pstr+j)是指针类型,二者不能进行赋

值运算。

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

正确:c=a;a+=b;b=c;(1)错误: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

35.⑴b[k]=*p;(2)b[k++]=5?;(l)b[k]=*p;(2)b[k++]=?5;解析:本题

中函数的功能是将字符串P中的所有字符复制到字符串b中,要求每复

制三个字

温馨提示

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

评论

0/150

提交评论