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

下载本文档

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

文档简介

2021年吉林省长春市全国计算机等级考试

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

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

一、2.填空题(10题)

1.下列表达式用于判断y是否为闰年。闰年的判断条件是:年号能被4

整除但不能被100整除或年号能被400整除,请填空______。

2.有以下程序

intfa(intx){returnx*x;}

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

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

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

main()

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

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

3.设当前盘为A盘,当前系统提示符为“>”在不改变当前盘情况下,

显示C盘的当前目录路径,应使用命令【】。

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

#include<stdio.h>

main

{intk=4,m=3,p;

p=func(k,m);

printf("%d",p);

p=func(k,m);

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

func(a,b)

inta,b;

{staticintm=0,i=2;

i+=m+l;

m=i+a+b;

return(m);}

5.在数据库中用数据模型这个工具来抽象、表示和处理现实世界中的数

据和信息。常见的数据模型有3种,它们分别是层次模型、网状模型和

()o

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

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

)

7.以下程序的功能是将字符串s中的数字字符放入d数组中,最后输出

d中的字符串。例如,输入字符串:abcl23edf456gh,执行程序后输出:

123456。请填空。

#include<stdioo.h>

#include<ctype.h>

main()

{chars[80],d[80];inti,j;

gets(s);

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

if(I]){d1]=s[i];j++;}

dU]='\0';

puts(d);

8.下面程序的输出是【】。

main()

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

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

arr[i]=i;

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

k+=arrfi]+i;

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

9.若有定义floatb[15],*p=b;,且数组b的首地址为200H,则p+13所

指向的数组元素的地址为0

10.若采用直接插入法对字母序列(W,S,E,L,X,G,I)进行排序,

使字母按升序排列,那么第一次排序的结果为【】。

二、单选题(10题)

11.以下是正确的C语言实型常量的是()。

A..8e+8.B.e+8C.+8e.8D.+8.8c+8

12.数据库DB、数据库系统DBS、数据库管理系统DBMS之间的关系

是()。

A.DB包括DBS和DBMSB.DBMS包括DB和DBSC.DBS包括DB和

DBMSD.没有任何关系

13.下面程序的输出结果是#include<stdio.h>#include<string.h>

main(){char*pl="abc",*p2="ABC",str[50]="xyz";strcpy(str+2,

strcat(p1,p2));printf("%s\n",str);}

A.xyzabcABCB.zabcABCC.xyabcABCD.yzabcABC

14.设有定义语句:

doublex=123.456;

贝(J语句

printf(“%6.2f,%3.0f\n”,x,x);

的输出结果是()o

A.123.46,123.0B.123.45,123C.123.46,123D.123.45,123.

15.以下程序运行后的输出结果是()。

nuain()

IiniI=I;fun(fun(0);|

fun(inth)

IMaticinta[3]»11a2t3|;

intk;

k=0;k<3;k.♦)

a[k]♦s«[k]-h;

for(k=0;k<3;k+♦)

printf(

printf(**\n");relum(a]h]);

A.l,2,3,1,5,9,

B.l,3,5,1,3,5,

C.l,3,5,0,d,8,

D.l,3,5,-1,3,7,

16.有以下程序:

#include<stdio.h>

#include<string.h>

main()

{charstrn[201[{"One*World","One*Dream!"),*p=str[l];

prinft("%d,",strlen(p));printf("%s\n",p);

)

程序运行后的输出结果是()oA.9,One*WorldB.9,0ne*Dream!C.10,

One*Dream!D.10,Ome*World

17.

(8)设一棵满二叉树共有15个结点,则在该满二叉树中的叶子结点数为().

A)7''B)8C)9D)10

18向一个栈顶指针为H的链栈中执行出栈运算时,需执行()。

A.p=H;H=H->link;free(p);

B.H=H->link;free(H);

C.p=H;H->link=H->link->link;free(p);

D.p=H;H=H->link;

19.设有定义:floata=2,b=4,h=3;以下c语言表达式中与代数式5(a+B)

h计算结果不相符的是()。

A.(a+B)*h/2B.(l/2)*(a+B)*hC.(a+B)*h*l/2D.h/2*(a+B)

20.以下关于long,int和short类型数据占用内存大小的叙述中正确的是

(),

A.均占4个字节B.根据数据的大小来决定所占内存的字节数C.由用户

自己定义D.由C语言编译系统决定

三、程序设计题(10题)

21.

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

已在主函数中给出。请编写proc()函数,它的功能是:求出该学生的

平均分并放在记录的ave成员中。请自己定义正确的形参。例如,若

学生的成绩是65.5,75,88,90,90.5,66,64.5,89.5,则他的

平均分应当是78.625°注意:部分源程序给出如下。请勿改动main

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

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

u:ndudtVttdio.

3drfmrM8

rypedef*tn»rt

tcharmmi[)Oji

double»[M]t

douHravei

STRIXi

voidproc«STKEC•p)

eidfmm(>

STRKC・GA005<«<5.S«

“■M.S.M.Sh

tatii

pfoc<&»tu)|

prtutfCeTbcstudentdhuAn*«

«tu.n«im>i/"出学号

for(i-OjKMii4*>)

printf(<K4.1f\n*«Mia.«£I])I

/"由各科唆嬉

p<rifit«*\rui»e-%7,Mu.ave)i

,•出手均分

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

符串(每串的长度

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

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

ABCD

BCDEFG

CDEFGHI

贝!J合并后的字符串内容应该是ABCDBCDEFGCDEFGH10

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

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

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

试题程序:

#include<stdio.h>

#include<conio.h>

#defineM3

#defineN20

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

{

}

voidmain

(

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

chararrfl00]={"##################"};

printffThestrin9:kn");

for(i=0;i++)

puts(str[i]);

printf("\n");

proc(str,arr);

printf("TheAstring:\n");

printf("%S",arr);

printf("\n\n");

)

23.请编写函数proc(),该函数的功能是:实现B=A+A1即把矩阵A

加上A的转置,存放在矩阵B中。计算结果在main。函数中输出。

例S••人F■融缁;

777

KHCCHAi

147

147

147

BlW?ttfti

238

5811

A11U

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

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

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

试题程序:

£mdudeVadio.

UmcludeVccmeo.h>

•mdudeV.ullih

voidproc<IM«3][3]•画

21dnwiin()

II»Iarff3][3]*((|»|9|).H«4«4K(7.7.7H.

OX3J.

mti»ji

pfoc<arr»t)i

forfi^Oii<Jii++)

,。川・0“V3“++)

pnntf(*H7d*.।

pnmf(*\n*)i

24.请编写函数proc(),它的功能是:求出str所指字符串中指定字符的

个数,并返回此值。例如,若输入字符串12341234123,输入字符4,

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

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

语句。试题程序:

asnHude

Sinclude<cocuo.b>

SinHude<mdxxh>

9NSI

tn<procCchar•charc)

midmam()

(ciuirchi

*CLS*>i

prtutfCa\fiPle*iieErr•*>i

fetn(a)t

pnnt((a\nP1e«i<ieErrachert*)i

ch*getc)Mr<)<

pnntf(>\nT1ienumberolibecharisi%d

\«*.proc<«»eh>)i

25.

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

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

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

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

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

aif^dudcV.tdhhhS>

UinrludrVcooio.h>

#includeVscdio.h>

vt»dproc(intm・i・t•k・mtantJ)

vo*dwutfH>

Nilm>n«»tr{IOO]i

prmtf(0\tiPlr««rmietaaintvcrtnumbrr

between10andt001")i

»canf(

procC.&m.Mf)i

pdnif("\u\«Thrr»areHdaon-prime

number*ITMtfurnKdt

+>

prmtf("\nMid*

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

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

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

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

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

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

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

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

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

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

试题程序:

1#include<stdio.h>

2#include<string.h>

3voidfun(char♦srchart[])

,{

5

6}

7main()

■(

chars[100]rt[100];voidNONO();

10printf(M\nPleaseenterstrings:M);

Hscanf(•,%s”,s);

12fun(s,t);

塞^printf(M\nTheresultis:%s\n*\t);

14NONO();

15}

16voidNONO()

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

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

17chars[100],t[100];

18FILE♦rf,*wf;

19inti;

HMHM

20rf«fopen(in.dat/r);

21wf=fopen(,fout.dat*1,wwM);

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

Mn

23fscanf(rfr%srs);

24fun(s,t);

25fprintf(wf,t%s\nwt);

■r/

fclose(rf);

28fclose(wf);

■}

27.

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

是:只删除字符串前导和尾部的*号,串中字母之间的*号都不删除。形

参m给出了字符串的长度,形参h给出了字符串中前*号的个数,形参

e给出了字符串中最后*号的个数。在编写函数时,不得使用C语言提

供的字符串函数。例如,若字符串中的内容为****a*bc*def*g****,删

除后,字符串中的内容则应当是a*bc*def*g。注意:部分源程序给出如

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

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

/indudeV.uho.b>

aindtMieVcoaicxh>

VOM!proc(ch&r•a•mtm.inth•inte)

voedOMM<)

char•1i

mim*0*t»**0.fn-O»

phnif('"EnterAstnngAn*>a

whik<•t>

'/in十本冷图峭长,

t一一•〃筠计向字得力昵郁

<1——.u1++

Ifllft।«»*tr•个字母・m统计••的

个教

wh«lr<)

(什♦,修♦♦■)

/|»/fI■向・一个字,,9n什||»'・1»个«(

proc<•・E・(n«tn)।

printf<*The»tnn<deletedt\o*)i

pulB<a)i

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

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

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

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

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

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

试题程序:

#includet:stdio.h>

doubleproc(intn)

(

)

voidmain

{

intn;

doubleslim;

printf("\nlnputn:");

scanf("%d",&n);

sum=proc(n)o

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

}

29.学生的记录由学号和成绩组成,M名学生的数据已在主函数中放入

结构体数组stu中,请编写函数proc,其功能是:按分数的高低排列学

生的记录,高分在前。

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

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

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

试题程序:

#include<stdio.h>

#defineM16

typedefstruct

charnum[10];

intS;

)

STREC:

voidproc(STRECa[])

(

inti,j;

STRECt;

for(i=l;i++)/*用冒泡法来按从高到低

排序*/

for(j=0;j++)o

if(a[j].s)//*按分数的高低排列学生

的记录,高分在前*/

{t=a[j];a[j]=a|j+l];a[j+l]=t;)

)

voidmain

(

STRECstu[M]={{"GA005",85),{"GA003",76},

{"GA002",69},{"GA004",85),{"GA001",91),

{"GA007",72),{"GA008",64),{"GA006",87),

{"GA015",85),{"GAO13",91),{"GAO12",64),

(-GA014",91),{"GAOH",66),{"GAO17",64},

{"GAO18",64),{"GAO16",72}}

inti;

proc(stu);

printf("Thedataaftersorted:\n");

for(i=0;i++)

(

if(i%4==0)

〃每行输出4个学生记录

printf("n");

printf("%s%4d",stu[i],num,stu[i].s);

)

printf("\n");

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

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

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

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

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

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

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

fiiiclude<stdio.h>

fdefineN8

typedefstruct

Icharnum[10];

double*[N];

doubleave;

|STREC;

voidfiin(STREC•a)

main()

|STREC•■SGA005”,85.5,76,69.5.85,91.72,64.5,87.51;

inft>:

radNONO();

fun(&s);

printf("Thestudentdata:\n*,s.num);

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

printf(*%4.lAn".«.»[>]);

printf(a\nave=%7.3An"eve);

NONO();

I

voidNONO()

1/•本西数用于打开文件.输人数据,调用函数,输出数据,关闭文件.

FILE•out;

inti.j:STREC>[10]=|

I-GA005",85.5,76.69.5,85,91,72,64.5,87.51,

I-GAOOP.82.5,66.76.3,76,89,76,1,

|,CA002,.72.5,56.66.5,«6,79,68,46.5,58.51,

I,GA003".92.5,76.86.5,86,99,86,56,5,88.51,

|«GA004",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,

|-CA007",92.5,61,72.5.84.79.75,66.5,72.5(,

}•GA008",72.5.86,73.5,80,69,63.76.5,53.51,

|-GA0O9",66.5,71,74.5.70,61,82.86.5,58.51.

I-CAOIO,.76,66.5,75.5.60,76,71,96.5,93.51.

11

out=fopen("out.<hl","w");

fbr(>=0;iV10

fun(&s[i]);

^>rintf(out,"%7.3f\n",•[i].«ve);

I

fdo«e(out)i

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

31•下列给定程序中,函数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**************/

sfj]=s[i];

)

main()

(

chars[80];

printf("\nEnterastring:");

gets(s);

printf("Theoriginalstring:");

puts(s);

fun(s);

printf("Thestringafterdeleted:");

puts(s);

printf("\n\n");

32.给定程序M0D11.C中函数fun的功能是:先从键盘上输入一个3

行3列矩阵的各个元素的值,然后输出主对角线元素之和。

请改正函数fun中的错误或在横线处填上适当的内容并把横线删除,使

它能得出正确的结果。

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

1;#include<stdio.h>

2Ifinclude<string.h>

3voidfun()

4(

5inta[3][3],sum;

6intj;

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

8!;

9jprintf("Inputdata:w);

10;for(i-0;i<3;i*+)

11{for(j・0;j<3;j++)

12*********/

wR

13scanf(%dra[i](jj);

14

15for(i-0;i<3;

16sum-sum*a(i)[i];

Hw

17printf(Sum»%d\nrsum);

18}

19main()

20(

21fun();

22

33.数列中,第一项为3,后一项都比前一项的值增5。下列给定程序中,

函数fun()的功能是:计算前n(4SW50)项的累计和。在累加过程中把那

些被4除后余2的当前累加值放入数组中,符合此条件的累加值的个数

作为函数值返回主函数里。如,当n的值为20时,该数列为3,8,13,

18,23,28,....93,980符合此条件的累加值应为42,126,366,

570,1010o

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

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

试题程序:

#include<stdio.h>

#defineN20

intfun(ihtn,int*a)

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

{inti,j,k,sum;

sum=0;

for(k=3,i=O;i<n;i++,k+=5)

{sum=sum+k;

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

if(sum%4=2)

a[j++]=sum;

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

returnj;

)

main()

{inta[N],d,n,i;

printf("\nEntern(4<=n<=50):");

scanf("%d",&n);

d=fun(n,a);

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

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

printf("\n\n");

34.下列给定程序中,函数fun()的功能是:通过某种方式实现两个变量

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

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

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

intfun(int*x,inty)

血t;

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

t=x;x=y;

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

retum(y);

)

main()

{inta=3,b=8;

clrscr();

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

b=fun(&a,b);

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

35.下列给定程序中,是建立一个带头结点的单向链表,并用随机函数

为各结点数据域赋值。函数fun的作用是求出单向链表结点(不包括头结

点)数据域中的最大值,并且作为函数值返回。

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

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

[试题源程序]

#include<stdio.h>

#include<stdlib.h>

typedefstructaa

intdata;

structaa*next;

}NODE;

fun(NODE*h)

intmax=-1;

NODE*p;

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

p=h;

while(p)

if(p->data>max)

max=p->data;

/***********求found************/

p=h->next;

)

returnmax;

)

outresult(ints,FILE*Pf)

{

fprintf(pf,"\nThemaxinlink:%d\n",s);

)

NODE*creatlink(intn,intm)

{

NODE*h,*p,*s,*q;

inti,x;

h=p=(NODE*)malloc(sizeof(NODE));

h->data=9999;

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

{

s=(NODE*)malloc(sizeof(NODE));

s->data=rand()%m;s->next=p->next;

p->next=s;p=p->next;

)

p->next=NULL;

returnh;

)

outlink(NODE*h,FILE*pf)

{

NODE*p;

p=h->next;

fprintf(Pf,"\nTHELIST:\n\nHEAD");

while(P)

{

fprintf(pf,>%d",P->datA);p=p->next;

)

fprintf(pf,"\n");

)

main()

(

NODE*head;intm;

head=cteatlink(12,100);

outlink(head,stdout);

m=fun(head);

printf("\nTHERESULT"\n");

outresult(m,stdout);

)

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

值作为函数值返回。例如:若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));

)

37.下列给定程序中函数fun()的功能是:求出字符串中最后一次出现的

子字符串的地址,通过函数值返回,在主函数中输出从此地址开始的字

符串;若未找到,则函数值为NULL。例如,当字符串中的内容为

abcdabfabcdx,t中的内容为ab时,输出结果应是abcdx。当字符串中的

内容为abcdabfabcdx,t中的内容为abd时,则程序输出未找到的信息:

Notfound!

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

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

试题程序:

#include<stdio.h>

#include<conio.h>

#include<string.h>

char*fun(char*s,char*t)

{

char*p,*r,*a;

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

a=Null;

while(*s)

{p=s;r=t;

while(*r)

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

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

elsebreak;

if(*r=-\O')a=s;

s++;

)

returna;

)

main()

{chars[100],t[100],,*p;

clrscr();

printf("\nPleaseenterstringS:");

scanf("%s",s);

printf("\nPleaseentersubstringt:");

scanf("%s",t);

p=fun(S,t);

if(p)printf("\nTheresultis:%s\n",p);

elseprintf("\nNotfound!\n");

)

38.下列给定程序中,函数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!=O)

break;

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

if(k<i)

return(i);

)

)

main()

{intn;

clrscr();

printf("\nPleaseentern:");

scanf("%d",&n);

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

)

39.下列给定程序中,函数fun()的功能是:对N名学生的学习成绩,按

从高到低的顺序找出前叫mWO)名学生来,并将这些学生数据存放在一

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

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

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

试题程序:

#include<conio.h>

#include<string.h>

#include<stdio.h>

#include<alloc.h>

#defineN10

typedefstructss

{charnum[10];

ints;

}STU;

STU*fun{STUa[],intm)

{STUb[N],*t;

inti,j,k;

*t=calloc(m,slzeof(STU));

for(i=0;i<N;i++)b[i]=a[i];

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

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

if(b[i].s>b[j].s)j=i;

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

t[k].num=bfj].num;

t[k].s=b[j]s;

b[j].s=O;

)

returnt;

)

outresult(STUa[],FILE*pf)

{inti;

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

fprintf(pf,"No=%sMark-%d\n",

a[i].num,a[i].s);

fprintf(pf,"\n\n");

)

main()

{STUa[N]={{"AOI"A02",89},

{"A03",66},{"A04",87},{"A05",77},

{"A06",90},{"A07",79},{"A08",61},

{"A09",80},{"A10",71}};

STU*pOrder;

inti,m;

clrscr();

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

outresult(a,stdout);

printf("\nGivethenumberofthestudents

whohavebetterscore:");

scanf("%d",&m);

while(m>10)

{printf("lnGivethenumberofthe

studentswhohavebelterscore:");

scanf("%d",%m);

pOrder=fun(a,m);

printf("*****THERESULT*****kn");

printf("Thetop:\n");

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

printf("%s%d\n",pOrder[i].num,

pOrder[i].s);

free(pOrder);

}

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

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

该数列前n项的和sumon的值通过形参传入。例如,当n=10时,程序

的输出结果应为96.0000000

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

doublefun(intn)

(

doublesum,SO,SI,S2,S;

intk;

sum=1.0;

if(n<=2)

sum=0.0;

s0=0.0;

si=0.0;

s2=1.0;

/*************found'

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

S=S0+Sl+s2;

Sum+=s;

S0=sl;

Sl=s2;

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

S2=S;

returnsum;

)

main()

(

intn;

clrscr();

printf("InputN=");

scanf("%d",&n);

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

)

五、程序改错题(2题)

41.下列给定程序中,函数proc()的功能是:根据形参m(2Smg9)的值,

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

倒标.名■人Z3

146

S|9

才・人5.**电12>4S

24«10

36912IS

4112IS20

5101%20居

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

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

构。

试题程序:

Umclude〈coma.h>

格mclvdr<stdtikh>

#include<^stdia.b>

丹MineN10

mi«rr[N]CN]»<Oh

//••••CtMind••••

proc<im••mim)

(mii»ki

,0川-0“<«10+♦)

lor<li*Oik<Biili>♦)

//••••(mind••••

山]ji

voidmi*()

IBI,♦Dl

»yst«m(*CLS*)।

pnntf(eEntern\n*>s

9caQ((*Kd*»S.n)i

Dror<arr.n)s

foZi=OiY・ii++)

(

for♦>

ptintf(9H4d

pniMfCn•>1

42.下列给定程序、中,函数proc()的功能是:先将字符串s中的字符

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

当s中的字符串为WXYZ时,贝IJt中的字符串应为WXYZWXYZ。请

改正程序中的错误,使它能得出正确的结果。注意:不要改动main()

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

includeVsldlib.h>

Hinclude<conio.h>

二inctudcVstdio.h>

与include<string.h>

voidprocCchar•A・char•t)

(

inti・\l:

-Mrkn(s)i

for(i=O:i<slii+4->

//♦«••found•*•*

for(i=0$iVshi++)

t[2■=

)

voidmain<)

chart[100]i

systcm(*CLSH)i

prind("\nPleaseenterstrings:M)i

scanfCM%»"*>>i

proc(s»t)t

print!("Therc*uhi5:%»\n"•1)।

六、操作题(2题)

43.有以下程序,请在一处填写正确语句。使程序可正常编译运行。

#include

/

mairl();

{doublex,y,(*p)():

scanf(€t%If%If,,&x,&y);

P=avg;

printf("%f\n”,(*p)(x,y));

)

doubleavg(doublea,doubleb)

{retum((a十b/2):

44.使用VC++打开考生文件夹下modil中的解决方案。此解决方案的项

目中包含一个源程序文件modil.c。在此程序中,函数fun()的功能是求

出s所指字符串中最后一次出现的t所指字符串的地址,并将此地址通

过函数值返回,在主函数中输出从此地址开始的字符串;若未找到,则

函数值为NULL0

例如,当字符串中的内容为“abcdabfhbcdx”,t中内容为“ab”时,输出

结果应是“abedx”。

当字符串中的内容为“abedabfabedx”,t中内容为“abd”时,则程序输出

未找到信息“Notfound!”。请改正程序中的错误,使它能得出正确的

结果。

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

构!

试题程序:

#include<stdlib.h>

#include<stdio.h>

#include<conio.h>

#include<string.h>

char*fun(char*s,char*t)

(

char*p,*r,*a;

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

a=Null;

while(*s)

p=s;r=t;

while(*r)

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

if(r==p)

{r++;p++;}

elsebreak;

if(*r=='\0')a=s;

s++;}

returna;

)

voidmain()

(

chars[100],t[100],*p;

system("CLS”);

printf("\nPleaseenterstrings:");

scanf("%s”,s);

printff'\nPleaseentersubstringt:");

scanf("%s”,t);

p=fun(s,t);

if(p)

printf(u\nTheresultis:%s\n",p);

else

printf(u\nNotfound!\n^^);

)

参考答案

l.(y%4==0)&&(y%100!=0)||(y%400==0)(y%4==0)&&(y%100!=0)||(y%40

0==0)解析:考查逻辑表达。年号能被4整除(y%4==0)但不能被100整

除(y%100!=0),两者是与的关系,年号能被400整除即y%400==0,与

前两项是或的关系。

2.44解析:在主函数中调用函数f,函数f有三个参数,形参fl与f2分

别是两个指向函数的指针。在f中执行f2(x)-fl(x),实际上是执行了ft(2)-

32

fa(2),故执行i=(fa,fb,2)后i的值为2-2=4o

3.CDC:(CD与C:中间至少要有一个空格)CDC:(CD与C:中间至

少要有一个空格)

4.10211021解析:此题主要考查了变量和函数的存储类别。函数的存储

范围是从定义它的位置到文件结束为止,如果想在函数定义之前使用函

数,需要先对函数进行声明。静态局部变量的生存期为整个程序的运行

期间,作用域却为定义它的函数或局部范围内。

5.关系模型关系模型解析:在数据库中用数据模型这个工具来抽象、表

示和处理现实世界中的数据和信息。通俗地讲,数据模型就是现实世界

的反映,它分为两个阶段:把现实世界中的客观对象抽象为概念模型;

把概念模型转换为某一DBMS支持的数据模型。常见的数据模型有3

种,它们分别是层次模型、网状模型和关系模型。

6.2424解析:本题程序定义了一维数组p,有七个数组元素,整型变量

i,j初值分别为0,当while的条件表达式(i<7&&p[i]%2=1)的值为真时,

执行语句j+=p[i++];,如:当i=0时,i<7为真,p[i]%2=ll%2=l,表达

式(p[i]%2=l)的值为真,所以接个表达式(i<7&&p[i]%2=l的值为真,

执行j=j+p[i++]=0+11=11,i=l;,依此类推可以得出答案24。

7.s[i]>='0'&&s[i]<=9或isdigit(s[i])s[i]>='0'&&s[i]<=9或isdigit(s[i])

解析:“chars[80],d[80];”定义了两个字符型数组,可以放入80个字符。

gets函数是C语言提供的一个专门用于读字符串的函数,它读入全部字

符(包括空格),直到遇到回车为止。本题中,读入字符串s后,开始比

较s中的每个字符是否为数字字符,因为字符数据在内存中以相应的

ASCII码存放,所以只需比较相应的字符是否在‘0'到9之间,或使用库

函数isdigit。,来判断是否为数字字符。如果是数字字符则将此字符存

入d数组中,不是则继续进行下一字符的比较,直至s结束(即。的出

现)。将‘\\。'字符作为字符串d结束标志,最后调用puts函数输出do所

以空白处应填入比较语句s[i]>>='0'&&s[i]<=9或isdigit(s[i])以及其

他任何等价表达式。

8.1212解析:本题通过第一个for循坪将数组arr[0]-arr[9]分别赋值为0-

9,通过第二个for循环的三次循环累加,求出结果为12,具体分析如

下:

i=l:k=0+arr[l]+l即k=2;

i=2:k=2+arr⑵+2即k=6;

i=3:k=6+arr[3]+3即k=12;

9.252H252H解析:要解答本题,首先要明白在对指针进行加,减运算

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

单元长度占存储空间的多少,应该视具体情况而定,如果存储单元的基

类型是血型,则移动1个存储单元的长度就是位移2个字节;如果存储

单元基类型是float型,则移动1个存储单元的长度就是位移4个字节。

所以p+13所指向的数组元素的地址为:200H+(13*4)H=252H。

10.SWELXGI

ll.DC语言中,实型常量有两种表示形式:小数形式和指数形式。其中

指数形式的一般形式为:尾数E(或e)整型指数。C语言规定,字母E

或e之前必须要有数字,且E或e后面的指数必须是整数,所以选项

A、B、C错误,选项D正确。故本题答案为D选项。

12.CC。【解析】数据库系统(DBS)由数据库(DBS)、数据库管理系统

(DBMS)、数据库管理员、硬件平台和软件平台五个部分组成,可见DB

和DBMS都是DBS的组成部分。

13C解析:本题考查的重点是拷贝字符串使用strcpy()函数,该函

数的调用方式是:strcpy(字符数组,字符串)其中“字符串”可以是字符串

常量,也可以是字符数组。函数的功能是:将“字符串”完整地复制到“字

符数组”中,字符数组中原有内容被覆盖。

使用该函数时注意:①字符数组必须定义得足够大,以便容纳复制过来

的字符串。复制时,连同结束标志'\\0'一起复制。②不能用赋值运算符

“=,,将一个字符串直接赋值给一个字符数组,只能用strcpy()函数来处理。

另外,本题还考查连接字符串的strcat()函数,其调用方式是:strcat(字

符数组,字符串)

功能是把“字符串”连接到“字符数组”中的字符串尾端,并存储于“字符数

组,,中。,,字符数组”中原来的结束标志,被,,字符串,,的第一个字符覆盖,

而“字符串”在操作中未被修改。

使用该函数时注意:①由于没有边界检查,编程者要注意保证“字符数

组”定义得足够大,以便容纳

温馨提示

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

评论

0/150

提交评论