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

下载本文档

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

文档简介

2021年江苏省徐州市全国计算机等级考试

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

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

一、2.填空题(10题)

1.在关系运算中,【】运算是对两个具有公共属性的关系所进行的运算。

2.数据库技术的主要特点为数据的集成性、数据的高【】和低冗余性、

数据独立性和数据统一管理与控制。

3.已知字母A的ASCII码为65。以下程序运行后的输出结果是____°

main()

{chara,b;

a='A'+'5'-'3';b=a+'6'-'2';

printf("%d%c\n",a,B);

)

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

main()

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

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

arr[i]=i;

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

k+=arr[i]+i;

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

5.若有定义inta=10,b=9,c=8;,接着顺序执行下列语句,变量b中的值

是【】。

c=(a-=(b-5));

c=(a%ll)+(b=3);

6.若已知a=10,b=20,则表达式!a<b的值为[]o

7.下面程序的功能是将一个字符串str的内容颠倒过来,请填空。

#include<string.h>

main()

{infi,j,[13];charstr[]={"1234567");

for(i=0,j=strlen(str)[14];i<j;i++,j—)

{k=str[i];str[i]=str[i];str[j]=k;}

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

8.fun函数的功能是:首先对a所指的N行N列的矩阵,找出各行中的

最大数,再求这N个最大值中最小的那个数并作为函数值返回。请填

空。

#include<stdio.h>

#defineN100

intfun(int(*a)[N])

{introw,col,max,min;

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

{for(max=a[row][01,col=l;col<N;col++)

if([])max=a[row][col];

if(row==0)min=max;

elseif([])min=max;

)

returnmin;

)

9.设函数findbig已定义为求3个数中的最大值,以下程序将利用函数

指针调用findbig函数。请填空。

main()

{intfindbig(int,int,int);

int(*f)(),x,y,z,big;

f=[lo

scanf("%d%d%d",&x,&y,&z);

big=(*f)(x,y,z);

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

)

10.表示""整数x的绝对值大于5""时值为""真””的C语言表达式是【】。

二、单选题(10题)

11.以下程序的输出结果是()。

#defineM(x,y,z)x*y+z

main()

{inta=l,b=2,c=3;

printf("%d\n",m(a+b.b+c,c+a));

A.19B.17C.15D.12

12.数据处理的最小单位是0。

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

13.设有如下定义和语句:

FILE*fp;

intdata[10],i,n;

fp=fopen(€tabc.txt","r");

文本文件abc.txt中的数据为58192765190,其中第1个数据代表的

是它后面数据的个数。若文件已正确打开,则以下程序段中能将文件

的最后5个数据依次正确读入数组data[0]〜data[4]中的是()。

A.fscanf(fjD,“%d",&n);

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

fscanf(小,“%d“,&data[i]);

B.i=0;

while(!feof(fp))

{fscanf(电“%d”,&data[i]);

i++;

C.for(i=0;!feof(fp);i++)

fscanf(%"%d”,&data[i]);

D.i=0;

fscanf(中,"%d",&n);

i++;

while(!feof(fp))

(

fscanf(中,"%d”,&data[i]);

i++;

14.(7-63541-2)堆排序,升序排列,3的位置改变几次()

A.lB.2C.3D.4E.5F.6

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

#include<stdio.h>

ss(char*s)

{char*p=s;

while(*p)p++return(p-s);}

main()

{char*a="abded”

inti;i=ss(a);printf("%d\rT,i);}

A.8B.7C.6D.5

16.以下不能作为合法常量的是()。

A.'cd'B.1.234e04C.”\a"DAO11'

,,

17.若变量已经定义且正确赋值,则针对程序段“temp=a;a=b;b=temp;1

以下叙述中正确的是()。

A.C语言的顺序结构不允许将多条语句写在一行里

B.程序顺序结构对于此段程序是从左至右依次执行的

C.此程序段的执行顺序是,先执行"b=temp;",再执行“a=b;",最后执行

"temp=a;"

D.将此段程序的前两个分号改成逗号,后面一个不变,则不能实现a和

b值的交换

18.有以下程序段:

inti,n;

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

{n=rand()%5;

switch(n)

{case1:

case3:printf("%d\n",n);break;

case2:

case4:print?("%d\n",n);continue;

case():exit(O);

)

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

)

以下关于程序段执行情况的叙述,正确的是()。

A.for循环语句固定执行8次

B.当产生的随机数n为4时结束循环操作

C.当产生的随机数n为1和2时不做任何操作

D.当产生的随机数n为0时结束程序运行

19.为非法的字符串常量()。

A.“case”B.""C."056''D/123,

20.有以下定义和语句:

structworkers

{intnum;charname[20];charC;

struct

{intday;intmonth;intyear;)S;

};

structworkersw,*pw;

pw=&w;

能给w中year成员赋1980的语句是()。

A.*pw.yeai-1980;

B.w.year=1980;

C.pw->year=1980

D.w.S.year=1980;

三、程序设计题(10题)

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

S=l+1/(1+2)+1/(1+2+3)+...+1/(1+2+3+…+m)

例如,若主函数从键盘给m输入20后,则输出为s=l.904762c

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

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

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

试题程序:

二include<sidio.h>

doubleproc(intm)

voidmain()

(

ininu

doublest

printf(*\nlnputms*)i

scanf("%d"•&,m)।

Aproc(m)i

print(("\n\nn-*-%f\n\n"«5>i

\

22.n个人的成绩存放在score数组中,请编写函数proc(),它的功能是

将低于平均分的人数作为函数值返回,将低于平均分的分数放在down

所指的数组中。例如,当score数组中的数据为{99,80,40,56,59,

84,60,76,100}时,函数返回的人数应该是4,down中的数据应为

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

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

语句。试题程序:

9aneludek>

9inriudeVcooio.h>

Sinclude<Ndxxk>

SincludeVntrtng.h>

uMproc(miscorrf;.mt••«m4owrCl>

raidmainC)

(

inil・n«down[9]t

mi9H9]-{”,>0・40.”・5九弘・

•o.re.iooh

<ywtrm(*CLS*)i

fl*pfoHMOfv*9•down>।

pnntf(*\ndowntotbeaverage«corraret*)।

for<i,Oiynii+♦>

pnntf(*%d*»downfQ>i

prmt"*\a*)t

j

23.请编一个函数voidproc(intintpp[N]),tt指向一个M行N

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

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

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

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

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

试题程序:

UmcludvVHdso.b>

UinclydrVemo.h>

sinclude<adlib.h>

9defineM3

■defixN4

votdproc<mttt[p^[N])

vmdmain(>

Ml・vCMKN]T(34*M«84.fth

tn.14.93.1»・

(28«M.”•”小

Milp[N]*t«j«ki

*CI-S>)•

prwtf("Thrn<inaldata•

loKi-0itVMit++)

foHj-0>j<Ni>4-+)

pnntfC•%6d"..lr[iXj]》.

prinrfC

pnxizr.p)i

prtciiK*\ttThtresult

(or,卜+)

pnnlhtfX4d"»pCll])|

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

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

其功能是找出2xM整型二维数组中最大元素的值,并将此值返回调用

函数。

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

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

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

试题程序:

#defineM4

#include<stdio.h>

intfun(inta[][m])

(

)

voidmain()

{

intarr[2][M]={5,8,3,45,76,-4,12,82);

printf("max=%d\n",fiin(arr));

)

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

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

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

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

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

#include<stdio.h>

WdrHneM4

intfun(int](M;)

rnaint)

intarr[2]jM]=5.76.-4.12.82:voidNONO():

printf("max=%d\n*'.fun(arr));

NONO();

voidN()NO()

”•本雨效用于打开文件,■人数据,调用函数,输出敷爆•关时文件©•/

FILE♦wf;

intarr;1[M]=15.8.3,90.76,-4,12,82|:

wf=fopen('*(Mil.»"ww);

fprintf(wf.Mmax=%d\nw,fun(anr));

frlc»c(wf);

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

向链表的头节点。请编写函数fun,其功能是:求出平均分,并由函数

值返回。

例如,若学生的成绩是:8576698591726487,则平均分应当是:

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

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

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

include<stdio.h>

Windude<atdlib.h>

#dc£neN8

stnictdisl

)doubleg;

Stractalia!•next;

11

typcdcfstructslistSTRECj

doublefun(STREC■h)

STREC•creat(double•s)

ISTREC•h.•p,•q;inti=0;

h»p»(STREC•)malloc(sizeof(STREC));p->»=0;

while(i<N)

|q=(STREC•)malloc(sizeo((STREC));

q->•»»[i];i♦♦;p->next=q;p=q:

I

p->next=0;

returnh;

I

outlist(STRECeh)

|STREC•p;

psh->next;printf(*head");

do

Iprintf(w->%4.IP,p->«);p=p->neirt;|

while(p!«0);

printf("\n\n*)(

I

main()

|doubles[N]«(85.76,69,85,91,72.64,871,«ve;

voidNONO()s

STREC«h|

h=creai(•)ioutlist(h);

ave=fun(h);

printf(wave=%6.3An".ave);

NONO();

I

voidNONO()

1/•本丽效用于打开文件.输入数据,调用函数出数据,关闭文件。•/

FILE•in,♦out«

intitj;doublea[N],ave;

STREC,h;

in=(open("in.dat",*r*);

out=fopen("out.

for(is0;i<10;i)

I

for(卜0;j<N;♦)fscanf(in."%lfj.

h=creai(s);

ave=fun(b);

fjpnnl£(outt"%6.31f\n",«ve);

I

£cloee(in);

fdo«e(out);

27.

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

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

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

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

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

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

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

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

MtnHude〈MdaO.h>

?indudcVeomah>

voedprocCduir•a«mitn«inth・inte)

voedIMM><>

char•f.•li

pnnlf(*Et)tcrastringAn*)i

whilc<•t>

♦—/■>如宇用•翁长才

I一一•。告计t指向字件地尾恁

wtulcX♦)

(1-----

/一个字统If/那•'的

个e

whde<

(什♦ifn*♦■)

/指汁f■的■一个字■/•施什一/'」,个做

proc<•«m.(n»m)i

print"*The»tnn<afterdeleted।\n*>t

puw(»)I

28.

编写函数proc,它的功能是:计算和输出下列级数的和。S=1/(12)

+1/(23)+...+1/(n(n+1))例如,当n=20时,函数值为0.952381°

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

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

题程序:

smdudeV

uinciiMic<cocuo.h>

9include<widxx.b>

doubleproH加1n>

voidauiin<>

««YiUrtn<*C1-S*)i

pnni«•proc(101)

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

数据,按行的顺序依次放到一维数组中,一维数组中数据的个数存放

在形参n所指的存储单元中。

例如,若二维数组中的数据为

13233343

14243444

15253545

则一维数组中的内容应该是132333431424344415253545。

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

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

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

试题程序:

#include<stdio.h>

voidproc(int(*s)[103,int*b,int*n,intrain,intnn)

(

)

voidmain

(

intarr[10][10]={{33,33,33,33),{44,44,44,44},

{55,55,55,55}),i,j;

inta[100]={o),n=o;

printf("Thematrix:\n");

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

(

fbr(=O;j<4;j++)

printf("%3d",arr[i][j]):

printf("\n");

)

proc(arr,a,&n,3,4):

printf("TheAarray:\n");

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

prmtf("%3d",a[i]):

printf("\n\n");

)

30.请编写函数proc(),对长度为9个字符的字符串,除首、尾字符外,

将其余7个字符按ASCH码值降序排列。例如,原来的字符串为

HabcdefA,则排序后输出为HfedcbaA.注意:部分源程序给出如下。

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

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

二mdud*V.Atrin<.h>

Sinclude<Ndbb.h>

&mcludeVsidio.h>

*mrludrVctyp*.h>

9mcludr<emo.h>

voidproc<cimr•m«m<num)

voidaMin<)

chart(103i

•yuteoiC*CLS*)t

prinik•■人9个,符的字用事J)।

fvlMth

proc(t»9)t

pnntfC*\nS»*<t)i

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

31.下列给定程序中函数fun()的功能是:将长整型数中每一位上为偶数

的数依次逆向取出,构成一个新数放在t中。高位在低位,低位在高位。

例如当s中的数为25846513时,t中的数为6482。请改正函数fun()

中的错误,使它能得出正确的结果。

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

试题程序:

#include<stdio.h>

#include<conio.h>

voidfun(longS,long*t)

(

intd;

longsl=l,i=l;

*t=0;

while(s/i>0)

i=i*10;

i=i/10;

while(s>0)

d=s/i

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

if(d%2!=0)

/**************************/

t=d*sl+t;

sl*=10;

)

S=S%i;

i=i/10;

)

)

main()

(

longS,t;

clrscr();

pr血f("\nPleaseenterS:");

scanf("%ld",&s);

fun(S,&t);

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

32.下列给定程序中,函数fun()的作用是,将字符串tt中的大写字母都

改为对应的小写字母,其他字符不变。例如,若输入"Ab,cD”,则输出

"ab,cd"o

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

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

试题程序:

#include<stdio.h>

#include<string.h>

#include<conio.h>

char*fun(chartt[])

(

inti;

for(i=0;tt[i];i++)

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

{if(('A,<=tt[i]||(tt[i]<='z'))

叫+=32;}

return(tt);

)

main()

{inti;

chartt[81];

clrscr();

printf("\nPleaseenterastring:");

gets(tt);

printf("\nTheresultstringis:\n%s",fun(tt));

)

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

小到大的顺序进行排序。

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

#defineMAXLINE20

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

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

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

*(pstr+i)-pstr+j;

*(pstr+j)=p;

)

}

main()

{inti;

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

clrscr();

for(i=0;i<6;i++)pstr[i]=str[i];

printf("\nEnter6string(lstringateach

line):\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的作用是求出单向链表结点(不包括头结

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

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

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

[试题源程序]

#include<stdio.h>

#include<stdlib.h>

typedefstructaa

intdata;

structaa*next;

}NODE;

fun(NODE*h)

intmax=-l;

NODE*p;

/**********************/

p=h;

while(p)

if(p->data>max)

max=p->data;

/************&^und************/

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=1;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"");

outresult(m,stdout);

35.给定程序中,函数fun()的功能是:求输入的两个数中较小的数。

例如:输入510,结果为minis50

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

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

试题程序、

#include<stdio.h>

#include<conio.h>

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

intfun(intx,y)

{intz;

z=x<y?x:y;

return(z);

)

main()

{inta,b,c;

scanf("%d,%d\n",&a,&b);

c=fun(a,b);

printf("minis%d",c);

)

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

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

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

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

为小写字母b。

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

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

finclude<stdio.h>

2*include<ctype.h>

3charfun(charc)

4{if(c>-fA'&&c<-Z)

5/…………round

6OC+32;

7if(O-^,&&c<»tut)

8w<rw****wfouncj*****♦*♦♦♦♦♦♦/

9c-c-5;

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

11c»c-21;

12!returnc;

13i)

14;main()

{charclrc2;

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

);cl-getchar();

17if(isupper(cl))

18(c2-fun(cl);

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

changeto\'%c\'\n”,clrc2);

20}

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

22)

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

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

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

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

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

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

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

试题程序:

#include<String.h>

#include<stdio.h>

#defineN80

voidinsert(char*aa)

{ihti,j,n;charch;

n=strlen(aa);

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

{c=aa[i];

j=i-l;

while((j>=0)&&(ch<aa[j]))

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

j-s

}

aa[j+l]=ch;

)

main()

{chara[N1="QWERTYUIOPASDFGHJKIMNBVCXZ";

inti;

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

insert(a);

printf("Thestringaftersorting:

%s\n\n",a);

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

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

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

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

改程序的结构。

试题程序:

#include<conio.h>

#include<stdio.h>

longfun(intk)

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

ifk>0

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

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

elseif(k=0)

return1;

}

main()

{intk=10;

clrscr();

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

39.给定程序中,函数fun()的功能是:使数组中的元素的值缩小5倍。

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

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

试题程序:

#include<stdio.h>

#include<conio.h>

floatm[10];

/*************fk)und**************/

intfun(void)

(

intj;

printf("Insubfuncaftercalling\n");

for(j=O;j<10;j++)

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

print("%f",m[j]%5);

)

main()

inti;

printf("Inmainbeforecalling\n");

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

m[i]=i+20;

printf("%f",m[i]);

)

fun();

printf("\nlnmainaftercalling\n");

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

printf("%f",m[i]/5);

)

40.下列给定程序中,函数fun()的功能是;求S的值。设

S=(22/l*30))*(42/(3*5))*(62/(5*7))*...*(2k)2/((2k-l)*(2k+l))

例如,当k为10时,函数的值应为1.533852。

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

#include<math.h>

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

fun(intk)

{ihtn;floats,w,p,q;

n=l;

s=1.0;

while(n<=k)

{w=2.0*n;

p=w-1.0;

q=w+1.0;

s=s*w*w/p/q;

n++;

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

returns

)

main()

{clrscr();

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

}

五、程序改错题(2题)

41.

下列给定程序中,函数fun的功能是:计算整数n的阶乘。

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

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

构。

试题程序:

#include<stdlib.h>

#inclu<ie<stdio.h>

doublefunfintn)

(doubleresuh=J.0;

while(n>l&&n<170)

/*****************Cund*********K*******/

result*--n;

/*****************%umj*****************/

Retum;

voi<imain()

fintn;

systein(,,CLS,t);

printf(MEnteraninteger:r,);

3canf("%d",&n);

printf("\n\n%d!=%IdXnXn11,nJnn(n)):

)

42.下列给定程序中,fun()函数的功能是:求3个数的最小公倍数,

例如,给变量a、b、c、分别输入15、11、2,则输出结果应当是330。

请修改函数中的错误,得出正确的结果。注意:不要改动main()函

数,不能增行或减行,也不能更改程序的结构。试题程序:

stnclvdcb>

mtlun<inty・imt>

mli.irmp.a-nu

//••••found••••

,■11

letup—m1•一11

//••••foufui••••

whiie<irrnp?■(>&&•!—0>

tiT如.

rviumh

voidITUIMIC)

ini•♦b・c・h

pnntf<*laput•bci*)•

»canf(*Md%dSr.&a.&b.(.c)i

pntitffKd»bw%d・c-Hd\n**B»b«c)i

i*(ua(a»l>»€)i

^nnifCThrfmosmn!eonxnoDmultiple访K<f\n**i>t

六、操作题(2题)

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

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

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

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

句。试题程序:

Paiclud*

9mrludr<Mdio.h>

0MiciudeVenio.h>

voidm*in<)

longintBum

»y»tcfn<eCLS*>i

printf(aEDICTtbcdafaiVB*)।

tcaafc<1J>»

p>nnff(*•••theabeolutrrtivr•••\B>>i

if(nuni<CO)

m

prmtfl13】>।

44.下列给定程序中,函数fun()的功能是:应用递归算法求某数a的平

方根。求平方根的迭代公式如下:

x,=(xe+-)/2

Xo

例如,2的平方根为1.414214。

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

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

试题程序:

#include<math,h>

#include<stdio.h>

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

fun(doublea,doublexO)

{doublexl,y;

xl=(x0+a/x0)/2.0;

/*************fk)und**************!

if(fabs(xl-xO)>0.00001)

y=fun(a,xl);

elsey=xl;

returny;

main()

{doublex;

printf("Enterx:");scanf("%lf',&x);

printf("Thesquarerootof%lfis

x,fun(x,l.O));

参考答案

1.自然连接自然连接解析:在关系运算中,自然连接运算是对两个具有

公共属性的关系所进行的运算。

2.共享性共享性解析:数据库技术的主要特点有以下几个方面:数据的

集成性,数据的高共享性与低冗余性,数据的独立性,数据统一管理与

控制。

3.67G67G解析:字符型变量中保存的是某个字符的ASCII码值,是一

个整数,因此字符型变量的算术运算和整型变量并无区别。所以。a=

'A'+'5'-3='A'+('5'=3)='A'+2=65+2=67:b=a+'6'=2='C'+('6'-2)='C'+4='G'。

最后分别按十进制整数和字符形式输出a和b的值为:67G。

4.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]+2即k=6;

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

5.33解析:这里:b-5=4,a-=4之后a的值为6,并把它赋给c。此时b

的值并未被改变。在第2个表达式中,也只有赋值表达式b=3改变了b

的值。所以两行语句执行完毕,b的值应该为3。

6.11解析:计算表达式!a<b,先计算!a,因a的值为10,!a的值为0,

而关系表达式0<20为真,所以表达式!a<b的值为1。

7.

颠倒一个字符串中的字符,就是首尾对应的元素两两交换。简单地可

用两个游标变量i和j,i是前端元素的下标,j是后端元素的下标,交

换以这两个变量值为下标的元素str[i]和开始时,i的值为0,j

的值为字符串末元素的下标(字符串长度减1)。每次交换后,i增1,j

减1。继续交换的条件是str[i]位于str[j]的前面,即i<j字符串末元素

的下标是它的长度减1,所以在第二个空框处应填入-1。程序为了交换

str[i]和使用了变量k,该变量应在程序的变量定义部分中一起

定义,所以在第一个空

\r\n

\r\n

8.a[row][c01]>max或max<a[row][col]max<min或min>

maxafrow][c01]>max或max<a[row][co1]\r\nmax<min或min>max解

析:本题有两层for循环,函数首先定义了整型变量row、col、max和

min,其中row用于外循环的循环变量,col用于内循环的循环变量,max

记录每行中的最人值,min记录所有行最大值中的最小值。在内循环中,

首先给max赋初值为每行的第0个元素值,然后从第一个开始依次与

max进行比较。如果大于max则将其值赋给max,当每一行循环结束,

max记录了每一行的最大值。所以第一个空应该填a[row][col]>max或

max<a[row][col)o退出内循环,在第一次退出内循环时,将min赋初

值为第。行的max,然后在每次退出内循环时,将min和每行的max比

较,如果大于max,则将max值赋min,所以第二个空应该填max<min

或min〉max,当退出外循环时,rain为所有行中的最大值的最小值。

9fndbigfindbig解析:f是指向函数的指针变量,根据题意要求,空格

处应填入findbigo

本题目考查:C语言中指向函数的指针变量定义的一般形式为;

数据类型标识符(时旨针变量名X);

“数据类型标识符”表示函数返回值的类型。

函数的调用可以通过函数名调用,也可以通过函数指针调用。在给函数

指针变量赋值时,只需给出函数名而不必给出参数。(*p)()表示定义一个

指向函数的指针变量,专门用来存放函数的入口地址,可以先后指向不

同的指针变量。用函数指针调用函数时,只需要将(*p)代替函数名即可,

在(*可之后的括号中,根据需要写上参数。

10.x>5||x<-5x<-5或x<-5||x>5x>5||x<-5,x<-5或x<-5||x>5解

析:要使整数x的绝对值大于5,则x大于5或x小于5,用C语言表

示即为:x>5||x<-5或者x<-5||x>50故本题答案为;x>5||x<-5或者

x<-5||x>50

11.D

M(a+b,b+C,c+a)=a+b*b+c+c+a=l+2*2+3+3+l=12,注意x*y+z而不

是(x)*(y)+z。

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

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

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

13.A由题意可知,文件abc.txt中存放了6个整数。其中第1个表示后

续数据的个数。要将最后5个数据读入数组data中,需要读取数据的个

数为5,所以首先调用fscanf函数,将5读入整型变量n中;接着通过

for循环,i分别取值O-n-I,调用fscanf函数将n个整数读入

data[0]〜data[n-l]中。故本题答案为A选项。

14.B

15.D

16.A字符常量是使用单引号标注的单个字符,选项A错误;选项B属于

浮点数常量,正确;选项C属于转义字符常量,正确;选项D属于转义字

符,代表八进制数011的ASCII值的字符,正确。本题答案为A选项。

17.BC语言允许将多条语句写在一行,选项A错误;题干中的语句是从

左至右依次执行的,选项B正确,选项C错误。题干中的程序前两个分

号改成逗号,就构成了逗号表达式。逗号表达式会依次从左到右计算各

个表达式,整个表达式的值是最后一个表达式的值,所以此例也可以实

现a和b值的交换,选项D错误。故本题答案为B选项。

18.A

程序中的if循环是固定地执行8次,属于计数器,程序是从中随机抽

取一个数,然后对5进行求余再输出,共抽取8个数。所以答案为

Ao

19.D

20.D

结构workers中的成员s是一个嵌套的结构类型定义,因此在给year

赋值时,要用运算在深入一层访问到最基本的成员year,只有D

项反映出了这一点。

21.

【解析】由题目中所给公式可知,多项式的值为m项的和。多项式每

一项的分子均为1,第i项的分母为1〜i所有整数的和。根据这个特

点,通过m次循环求出多项式的每一项并求和。最后将多项式的和返

回到主函数中。

22.

【解析】要找到所有学生中成绩低于平均分数的人数,首先需要算出所

有学生的平均成绩。然后将所有学生的成绩与平均成绩相比较。将低于

平均分数学生的记录存放在新的数组中,并将低于平均分数的学生数返

回给主函数。

23.

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

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

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

中。

24.intfun(inta[][m])

(

inti,j,max=a[O][O];

/*对二维数组进行遍历*/

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

for(j=0;j<=""p="">

if(max<a[i][j])<p=""></a[i][j])<>

/*将最大值保存在max中*/

max=a[i皿;

returnmax;

)

因为数组是二维数组,所以应使用两层for循环嵌套。使用for循环语

句时需注意循环变量的取值范围。

此类求最大值或最小值的问题,可以采用逐个比较的方式。遍历数组

中所有元素,从中找出数组的最大值或最小值。首先定义变量max来

存放数组的第1个元素的值,然后利用for循环逐个找出数组中的元

素,并与变量max比较。如果元素值大于max,则将该值赋给max。

循环结束后max的值即为数组最大值。最后将该值返回。

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

采用逐个查找的方法,代码实现如下:

for(i=0;i<=""p="">

for(j=0;j<=""p="">

25.

【考点分析】

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

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

变量的取值范围。

【解题思路】

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

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

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

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

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

回。

【解题宝典】

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

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

26.

【考点分析】

本题考查:链表的操作,对链表的主要操作有以下几种:建立链表、

结构的查找与输出、插入一个结点、删除一个结点。

【解题思路】

题目要求求链表中数据域的平均值,应首先使用循环语句遍历链表,

求各结点数据域中数值的和,再对和求平均分。遍历链表时应定义一

个指向结点的指针P,因为“头结点”中没有数值,所以程序中让P直接

指向“头结点”的下一个结点,使用语句STREC+P-h-nexto

27.

【解析】题目要求不能用C语言提供的字符串函数,可以利用移动字符

串指针来实现,首先移动字符串指针到第一个不是*的位置,通过指针

的移动,来实现把第一个不是星号的字符与最后一个不是星号的字符放

到a数组中,最后用‘\0'来作为字符串结束的标志。

28.

【解析】首先定义一个变量来表示其和s,通过n次循环求出n项的和,

最后将所得到各项的和值返回给主函数。

29.\r\n\tvoidproc(int(*s)[10],int*b,int*n,intmm,intnn)

{

inti,j,k=0;

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

for(j=0;j<nn;j++)//j是表示其列的下标

b[k++]=s[i][j];//把其放到b的一维数组中

*n=k;//把b数组的长度通过形参n传回到主函数中

【解析】要将M行N列的二维数组中的数据,按行的顺序依次放到一

维数组中,可以通过首先行循环,然后列循环取出二维数组中的每一

个元素,并将其放入一维数组中。最后,将一维数组的长度通过形参

返回到主函数当中。

30.

【解析】按照题目中要求,求除首、尾字符外,将其余7个字符按ASCH

码值降序排列。首先需要判断除首、尾字符之外,其余7个字符ASCH

码值的大小,将不符合顺序要求的字符互换。

31.⑴错误:if(d%2!=0)正确:if(d%2==0)(2)错误:t=d*sl+t;正确:

*t=d*sl+*t;(l)错误:if(d%2!=0)正确:if(d%2==0)\r\n

温馨提示

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

最新文档

评论

0/150

提交评论