2021-2022学年四川省宜宾市全国计算机等级考试C语言程序设计模拟考试(含答案)_第1页
2021-2022学年四川省宜宾市全国计算机等级考试C语言程序设计模拟考试(含答案)_第2页
2021-2022学年四川省宜宾市全国计算机等级考试C语言程序设计模拟考试(含答案)_第3页
2021-2022学年四川省宜宾市全国计算机等级考试C语言程序设计模拟考试(含答案)_第4页
2021-2022学年四川省宜宾市全国计算机等级考试C语言程序设计模拟考试(含答案)_第5页
已阅读5页,还剩42页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

2021-2022学年四川省宜宾市全国计算机等级考试C语言程序设计模拟考试(含答案)学校:________班级:________姓名:________考号:________

一、单选题(12题)1.以下叙述中错误的是()。

A.对于double类型数组,不可以直接用数组名对数组进行整体输入或输出

B.数组名代表的是数组所占存储区的首地址,其值不可改变

C.当程序执行中,数组元素的下标超出所定义的下标范围时,系统将给出“下标越界”的出错信息

D.可以通过赋初值的方式确定数组元素的个数

2.有定义语句:inta=1,b=2,c=3,x;,则以下选项中各程序段执行后,x的值不为3的是

A.if(c<a)x=1;elseif(b<a)x=1;elsex=3;

B.if(a<3)x=3;elseif(a<2)x=2;elsex=1;

C.if(a<3)x=3;if(a<2)x=2;if(a<1)x=1;

D.if(a<b)x=b;if(b<c)x=c;if(c<a)x=a;

3.若已定义:“inta[9],*p=a;”,并在以后的语句中未改变p的值,不能表示a[1]地址的表达式是______。

A.p+1B.a+1C.a++D.++p

4.

5.

6.有以下程序:

执行后的结果是()。A.7B.3C.2D.0

7.有1000个无序的整数,希望使用最快的方式找出前50个最大的,最佳的选择是()

A.冒泡排序B.基数排序C.堆排序D.快速排序

8.设以下变量均为int类型,表达式的值不为7的是A.(x=y=6,x+y,x+1)

B.(x=6,x+1,y=6,x+y)

C.(x=y=6,x+y,y+1)

D.(y=6,y+1,x=y,x+1)

9.一个队列的入队序列是a,b,c,d,则出队序列是()。

A.a,b,c,dB.a,c,b,dC.d,c,b,aD.a,c,b,d

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

A.C程序中注释部分可以出现在程序中任意合适的地方

B.花括号"{"和"}"只能作为函数体的定界符

C.构成C程序的基本单位是函数,所有函数名都可以由用户命名

D.分号是C语句之间的分隔符,不是语句的一部分

11.若有定义“charc=“hello!”;”,则以下说法正确的是()。

A.c占用7字节内存B.c是一个字符串变量C.定义中有语法错误D.c的有效字符个数是6

12.以下叙述中正确的是()A.当对文件的读(写操作完成之后,必须将它关闭,否则可能导致数据丢失

B.打开一个已存在的文件并进行了写操作后,原有文件中的全部数据必定被覆盖

C.在一个程序中当对文件进行了写操作后,必须先关闭该文件然后再打开,才能读到第1个数据

D.语言中的文件是流式文件,因此只能顺序存取数据

二、2.填空题(12题)13.以下程序运行后的输出结果是【】。

main()

{intx=10,y=20,t=0;

if(x==y)t=x;x=Y;Y=t;

printf(“%d,%d\n”,x,y);

}

14.与结构化需求分析方法相对应的是【】方法。

15.软件测试是保证软件质量的重要手段,而软件测试的主要和重要的测试方法是通过测试数据和【】的设计来实现。

16.以下程序的功能是:从键盘上输入若干学生的成绩,统计计算出平均成绩,并输出低于平均分的学生成绩,用输入负数结束输入。填空。

main()

{floatx[1000],sum,=0.0,avea;

intn=0,i;

printf("Entermark:"\n");scanf("%f",&a);

while(a>=0.0&&n<1000)

{sum+=【】;x[n]=【】;

n++;scanf("%f",&a);

}

ave=【】;

printf("Output:"\n");

printf("ave=%f"\n",ave);

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

if(【】)frintf("%f\n",x[i]);

}

17.以下程序运行后的输出结果是______。

main()

{

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

inti=0,j=0;

while(i<7&&p[i]%2==1)

j+p[i++];

printf(“%d\n”j);

}

18.若a=10,b=20,则表达式!(a<b)的值是【】。

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

#include<stdio.h>

msin()

{inti,n[]={0,0,0,0,0};

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

{n[i]=n[i-1]*2+1;

printf("%d",n[i]);

}

}

20.在运算过程中,能够使空表与非空表的运算统一的结构是【】。

21.以下程序中,fun函数的功能是求3行4列二维数组每行元素的最大值。请填空。

voidfun(int,int,int(*)[4],int*);

main()

{

inta[3][4]={{12,41,36,28},{19,33,15,27),{3,27,19,1}},b[3],i;

fun(3,4,a,B);

for(i=0;i<3;i++)printf("%4d",b[i]);

printf("\n");

}

voidfun(intm,intn,intar[][4],int*br)

{inti,j,x;

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

{

x=ar[i][0];

for(i=0;j<n;j++)if(x<ar[i][j])x=ar[i][j];

______=X;

}

}

22.在宏定义#definePI3.14159中,用宏名PI代替一个______。

23.以下程序的输出结果是______。

main()

{chars[]="abcdef";

s[3]='\0';

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

}

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

三、3.程序设计题(10题)25.请编一个函数fun,函数的功能是使实型数保留2位小数,并对第三位进行四舍五入(规定实型数为正数)。

例如:实型数为1234.567,则函数返回1234.572000;

实型数为1234.564,则函数返回1234.562000。

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

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

26.请编写一个函数fun,它的功能是:比较两个字符串的长度,(不得调用C语言提供的求字符串长度的函数),函数返回较长的字符串。若两个字符串长度相同,则返回第一个字符串。

例如,输入beijingshah曲aj(为回车键),函数将返回shanghai。

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

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

27.学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun(),它的功能是:按分数的高低排列学生的记录,高分在前。

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

请勿改动主函数main和其他函数中的任何内容,仅在函数fum的花括号中填入所编写的若啡:语句。

试题程序:

#include<stdio.h>

#defineN16

typedefstruct

{charnum[10];

ints;

}STREC;

intfun(STRECa[])

{

}

main()

{

STRECsIN]={{"GA005",85},{"GA003",76},

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

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

{"GA015",85},{"GA013",91},{"GA012",64},

{"GA014",91},{"GA011",66},{"GA017",64},

{"GA018",64},{"GA016",72}};

inti;

FILE*out;

fun(s);

printf("Thedataaftersorted:In");

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

{if((i)%4=-0)

/*每行输出4个学生记录*/

printf("\n");

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

}

printf("\n");

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

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

{if((i)%4==0&&i)

fprintf(out,"\n");

fprintf(out,"%4d",s[i].s);

}

fprintf(out,"\n");

fclose(out);

}

28.请编写函数fun(),该函数的功能是:将M行N列的二维数组中的数据,按行的顺序依次放到一维数组中,一维数组中数据的个数存放在形参n所指的存储单元中。

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

33333333

44444444

55555555

则一维数组中的内容应该是33333333444444AA,55555555

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

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

试题程序:

#include<stdio.h>

voidfun(int(*s)[10],int*b,int*n,

intmm,intnn)

{

}

main()

{

intw[10][10]={{33,33,33,33},{44,44,

44,44},{55,55,55,55}},i,j;

inta[100]={0},n=0;

printf("Thematrix:\n");

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

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

printf("%3d",w[i][j]);

printf("\n");

}

fun(w,a,&n,3,4);

printf("TheAarray:In");

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

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

printf("\n\n");

}

29.请编写函数fun(),它的功能是:判断字符串是否是回文?若是,函数返回1,主函数中输出:YES,否则返回0,主函数输出NO。回文是指顺读和倒读都一样的字符串。

例如,字符串LEVEL是回文,而字符串12312就不是回文。

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

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

[试题源程序]

#include<stdio.h>

#defineN80

intfun(char*str)

{

}

main()

{

chars[N];

printf("Enterastring:")"gets(s);

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

if(fun(s))

printf("YES\n");

else

printf("NO\n");

NONO();

}

NONO()

{

/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/

FILE*rf,*wf;

inti;chars[N];

rf=fopen("K:\\k06\\24010001\\in.dat","r");

wf=fopen("K:\\k06\\24010001\\out.dat","w");

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

fscanf(rf,"%s",s);

if(fun(S))

fprintf(wf,"%sYES\n",s);

else

fprintf(wf,"%sNO\n",s);

}

fclose(rf);

fclose(wf);

}

30.编写函数fun,它的功能是计算下列级数和,和值由函数值返回。

例如,当n=10,x=0.3时,函数值为1.349859。

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

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

31.请编写一个函数fun(),它的功能是:根据以下公式求π的值(要求满足精度0.005,即某项小于0.005时停止迭代)。

π/2=1+1/3+1*2/(3*5)+1*2*3/(3*5*7)+1*2*3*4/(3*5*7*9)+…

+1*2*3*…*n/(3*5*7*…*(2n+1))

程序运行后,如果输入精度0.0005,则程序输出3.14…。

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

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

试题程序:

#include<conio.h>

#include<math.h>

doublefun(doubleeps)

{

}

main()

{

doublex;

printf("Inputeps:");

scanf("%1f",&x);

printf("\neps=%1f,PI=%1f\n",x,fun(x));

}

32.已知学生的记录由学号和学习成绩构成,N名学生的数据已存入a结构体数组中。请编写函数fun(),该函数的功能是:找出成绩最低的学生记录,通过形参返回主函数(规定只有一个最低分)。己给出函数的首部,请完成该函数。

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

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

试题程序:

#include<stdio.h>

#include<string.h>

#include<aonio.h>

#defineN10

typedefstructss

{charnum[10];

ihts;

}STU;

fun(STUail,STU*s)

{

}

main()

{

STUa[N]={{"A01",81},{"A02",89},

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

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

{"A09",80),{"Al0",71}},m;

inti;

clrscr0;

printf("*****Theoriginaldata*****");

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

printf("No=%sMark=%d\n",ail].num,

a[i].s);

fun(a,&m);

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

printf("Thelowest:%s,%d\n",m.num,

m.s);

}

33.请编写函数fun(),其功能是:计算并输出给定10个数的方差。

其中

例如,给定的10个数为95.0,89.0,76.0,65.0,88.0,72.0,85.0,81.0,90.0,56.0,则输出为S=11.730729。

注意;部分源程序给出如下.

请勿改动主函数mam和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序:

#include<math.h>

#include<stdio.h>

doublefun(doublex[10])

{

}

main()

{

doubles,x[i0]={95.0,89.0,76.0,65.0,

88.0,72.0,85.0,81.0,90.0,56.0};

inti;

printf("\nTheoriginaldatais:\n");

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

printf("%6.1f",x[i]);

printf("\n\n");

s=fun(x);

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

}

34.编写一个函数,从num个字符串中找出最长的一个字符串,并通过形参指针max传回该串地址。(注意:主函数中用¨¨作为结束输入的标志。)

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

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

四、单选题(0题)35.下列程序的输出结果是()。#include<stdio.h>main(){inti,S=0;for(i=1;i<10;i++)if(!(i%2)&&!(i%3))s+=i;printf("%d\n",s);}A.4B.39C.45D.6

五、单选题(0题)36.若二维数组a有m列,则在a[i][j]刚前的元素个数为()。

A.i*m+j-1B.i*m+jC.j*m+iD.i*m+j+1

六、单选题(0题)37.若x,y均定义为int型,z定义为double型,以下不合法的scanf函数调用语句是()。A.scanf(“%d%lx,%le”,&x,&y,&z);

B.scanf(“%2d*%d%lf”&x,&y,&z);

C.scanf(“%x%*d%o”,&x,&y);

D.scanf(“%x%o%6.2f”,&x,&y,&z)

参考答案

1.C解析:在C语言中,除字符数组外,一个数组不能通过数组名对数姐进行整体引用,因此选项A是对的。数组名中存放的是一个地址常量,它代表整个数组的首地址,因此选项B是对的。C语言程序在运行过程中,系统不自动检验数组元素的下标是否越界,因此选项C是错误的。C语官规定可以通过赋初值来定义数组的大小,这时数组说明符的一对方括号中可以不指定数组的大小,因此选项D也是正确的。所以,4个选项中选项C符合题意。

2.C解析:选项A首先判断if语句条件中表达式的值“3<1”为假,然后执行最近的else后面的语句,该else后面又为if-else语句,在这个if-else语句中首先判断该if语句条件中表达式的值“2<1”为假,程序执行其最近的else后面的语句,将3赋值给x。

选项B中首先判断if语句条件中表达式的值“1<3”为真,然后执行最近的else后面的语句“x=3”,后面的else不再执行,最后x的值为3。

选项C中,首先执行第一条if语句,由于“1<3”为真,执行此if后面的语句“x=3”,接着执行第二条if语句,由于“1<2”为真,执行此if后面的语句“x=2”,接着执行第三条if语句,由于“1<1为假,后面的语句不执行,所以最后的x值为2不为3。

选项D中;首先执行第一条if语句,由于“a<b”为真,执行此if后面的语句“x=b”;接着执行第二条if语句,由于“b<c”,为真,执行此if后面的语句“x=c”,接着执行第三条if语句,由于“c<a”为假,后面的语句不执行,所以最后的x值为c即为3。

3.C

4.B

5.C

6.C调用函数fun(7)时,由于x的值为7,执行语句“p=x-fun(x-2);”,相当于执行p=7-fun(5);

调用函数fun(5)时,由于x的值为5,执行语句“p=x-fun(x-2);”,相当于执行p=7-fun(3);调用函数fun(3)时,由于X的值为3,执行语句“p=x-fun(x-2);”,相当于执行p=7-fun(1);调用函数fun(1)时,由于x的值为1,执行语句“return(3);”,函数的返回值为3。

因此函数调用fun(7)等价于7-(5-fun(3)),即7-(5-(3-fun(1))),即7-(5-(3-3)),所以函数fun(7)的返回值为2。

7.D

8.B本题考查逗号表达式的用法。C语言中逗号“,”也是一种运算符,称为逗号运算符,其功能是把两个表达式连接起来组成一个表达式,称为逗号表达式。其一般形式为:表达式1,表达式2。其求值过程是分别求两个表达式的值,并以表达式2的值作为整个逗号表达式的值。逗号表达式的一般形式可以扩展为:表达式1,表达式2,表达式3,…,表达式n。它的值为表达式n的值。

9.A

10.A解析:/*与*/之间的信息称为注释信息,在C语言中,允许在任何能够插入空格符的位置插入注释,但C语言的注释不能进行嵌套,故选项A正确:在C语言中,函数体是从花括号{开始,到花括号}结束。但没有规定花括号{和}只能作为函数体定界符,故选项B错误;选项C中前半句是正确的,C程序由一个或多个函数所组成,但不是所有的函数都由用户自己命名,有些函数,比如主函数main()就不能由用户来命名,故选C不正确;在C语言中明确规定每条语句以分号;结束,分号是语句不可缺少的一部分,故选项D不正确。所以,4个选项中选项A符合题意。

11.Cc是字符变量,“hello!”是字符串。字符串不能赋给字符变量,定义中有语法错误。本题答案为C选项。

12.AB)选项中打开一个已存在的文件并进行了写操作后,原有文件中的全部数据不一定被覆盖,也可以对源文件进行追加操作等。C)选项中在一个程序中当对文件进行了写操作后,不用先关闭该文件然后再打开,才能读到第1个数据,可以用fseek()函数进行重新定位即可。D)选项中,C语言中的文件可以进行随机读写。

13.20020,0解析:在主函数中首先定义了三个整型变量x、y、t,并分别给它们赋初值为10,20,0,接着执行if语句,在if后面括号内的条件表达式中,条件“x==y”即“10==20”不成立,则不执行其后的语句“t=x”,然后退出if语句,顺序执行语句x=Y;Y=t;。执行完这两条语句后x的值变为20,y的值变为0,所以最后输出x,y的值为20和0。

14.结构化设计结构化设计解析:与结构化需求分析方法相对应的是结构化设计方法。结构化设计就是采用最佳的可能方法设计系统的各个组成部分以及各个成分之间的内部联系的技术。

15.测试实例测试实例解析:进行软件测试时,应精心设计测试实例和选择测试数据,以对系统进行全面测试。

16.aasum/n或sum/(float)n或sum/(double)nx[i]<sve或!(x[i]>=sve)或sve>x[i]a\r\na\r\nsum/n或sum/(float)n或sum/(double)n\r\nx[i]<sve或!(x[i]>=sve)或sve>x[i]

17.2424解析:本题考核的知识点是数组的定义和数组元素的引用。主函数中首先定义了一个长度为7的数组,然后用一个while循环引用数组的元素,当i大于7或者p[i]为偶数时,循环结束。显然当i=2时,p12]=14为偶数时,循环结束,此时j的值为j=p[0]+p[1]=24;

18.00解析:已知a=10,b=20,所以逻辑表达式a<b的值为true,即为1,在这个表达式前面有一个逻辑运算符!,表示反操作,所以整个语句的值应当为false,即为0。

19.1371513715解析:程序中n是一个有5个元素,且元素值全为0的数组。在for循环中,当i=1时,n[1]=n[0]*2+1,此时n[1]=1;i=2时,n[2]=n[1]*2+1,此时n[2]=3;i=3时,n[3]=n[2]*2+1,此时n[3]=7;i=4时,n[4]=n[3]*2+1,此时n[4]=15,循环结束。输出函数中%d后有空格,因此输出结果为13715。

20.循环链表循环链表解析:在链表的运算过程中,采用链接方式即循环链表的结构把空表与非空表的运算统一起来。循环链表具有两个特点:①在循环链表中增加了一个表头结点,其数据域为任意或根据需要来设置,指针域指向线性表的第一个元素的结点。循环链表的头指针指向表头结点。②循环链表中最后一个结点的指针不是空,而是指向表头结点。

21.br[i]或*(br+i)br[i]或*(br+i)解析:求最大值算法要求输入的一般是一系列数,例如一个数组,而输出只有一个值。计算时通常的做法是,首先将这一系列数的笫1个值保存到结果变量中,然后用一个指针或循环变量从头(或从第2个值)至尾遍历这一系列数,每次比较结果变量和被遍历的值,如果该值比结果大,则将该值保存到结果中。本题中,3行4列二维数组a显然是算法的输入值,而传给函数fun()的3和4在函数中起到限制循环次数的作用,所以它们代表输入数据的行列数.而传递给函数的一维数组b即没有初始化,最后又要输出它,所以数组b肯定是用来保存每行的最大值。在函数中是一个二重循环,外循环首先将ar[i][0]赋给x,然后内循环中比较x和ar[il刚,若x比较小就让x=ar[i][j],这就说明x是保存结果的临时变量.最后应该将x的值输出到数组b中,也就是形参br的相应位置。故在空格处应该填的内容为br[i]或者写成指针方式*(br+i)。

22.字符串字符串解析:本题考查字符替换格式:#define标识符字符串。

23.abcabc解析:字符串的结束标记'\\0',当输出一个存放在字符数组中的字符串时,只需输出到'\\0'为止,而不管其后有什么数据。本题给字符数组s的元素s[3]赋值为'\\0',故只能输出3个字符“abc”。

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

25.

解析:该程序功能是进行四舍五入。其中,通常求实数x保留m位小数,首先将x扩大10(m+1)倍,扩大后的x加上5后,进行截取判断,最后进行恢复。

26.

解析:该程序功能是比较两个字符串的长度。解题过程是首先分别求得两个字符串的长度,然后对这两个值进行判断,实现两个字符串长度的比较。

27.intfun(STRECa[]){intij;STRECt;for(i=1;i<N;i++)/*用冒泡法进行排序进行N-1次比较*/for(j=0;j<N-1;j++)/*在每一次比较中要进行N-1次两两比较*/if(a[j].s<a[j+1].s){t=a[j];a[j]=a[j+1];a[j+1]=t;}/*按分数的高低排列学生的记录高分在前*/}intfun(STRECa[])\r\n{\r\ninti,j;\r\nSTRECt;\r\nfor(i=1;i<N;i++)/*用冒泡法进行排序,进行N-1次比较*/\r\nfor(j=0;j<N-1;j++)/*在每一次比较中要进行N-1次两两比较*/\r\nif(a[j].s<a[j+1].s)\r\n{t=a[j];a[j]=a[j+1];a[j+1]=t;}/*按分数的高低排列学生的记录,高分在前*/\r\n}解析:冒泡法算法思路:如果有N个数,则要进行N-1次比较,在每一次比较中要进行N-1次两两比较(这种算法较好理解但不是最精的)。所谓两两比较就是从头到尾依次将相邻两个数进行比较并将其中大的数放在前或在后(若要求从小到大排序,则大的数要放在后。反之则对调),即两两比较后这两个数要形成题中所要求的顺序。由于总是从头到尾进行比较,所以第1次比较结束后,最大(或最小)数肯定在最后,第2次比较结束后,次最大(或次最小)数肯定在倒数的第2个数,依次类推,所以进行第一次比较时必须比较到最后一个数,而进行第2次比较时只要比较到倒数的第2个数即可,所以进行第i次比较时只需比较N-i次即可(这种算法较难理解,但它是最好的)。

选择法算法思路:如果有N个数则从头到倒数的第2个数一个一个往后走动,每走动1个数总是将这个数与其后的所有数进行比较并找出它们的最大(或最小)数,找出最大(或最小)数后再将所得的最大(或最小)数与该数进行交换,交换后再走到下一个数依次交换到结束。此外,选择法还可用如下思路:如果有N个数,则从头到倒数的第2个数—个一个往后走动,每走动一个数总是将这个数与其后的所有数进行两两比较,在比较时按顺序将进行比较的这两个数排序(即交换)。

插入法算法思路:先对头两个数进行排序。然后把第3个数插入到前两个数中,插入后前3个数依然有序;再把第4个数插入到前3个数中,插入后前4个数依然有序;依次插完所有的数。具体执行方式(假设从小到大排序):从第2个数开始往后一个一个走动直到最后。每走到1个数总是将该数(先将其存到1个临时变量中)与其前面的数进行比较(比较的顺序总是从后往前进行),在比较时只要发现该数比被比较的数小,就将被比较的数往后移1位,然后该数还要冉与前1个数进行比较,亢到发现该数比被比较的数大或己比较到头(即第1个数的前面),并将该数存入当前被比较数的后1位(存储空间)。

如果有整型一维数组a其有N个元素,要求将其按从小到大排序。注意元素下标是从0始的。

冒泡法:

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

for(j=0;N-1;j++)

if(a[j]>a[j+1])

{t=a[j];a[j]=a[j+1];a[j+1]=a[j];}

选择法

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

{p=i;

for(ji+1;j<N;j++)

if(a[p]>a[j])p=j;

if{p!=i)

t=a[i];a[i]=a[p];a[p]=t;

}

插入法

for{i=1;i<N;i++}

{t=a[i];

for{j=i-1;a[j]>t&&j>=0;j--)

a[j+1]=a[j];

a[j+1]=t;

}

28.voidfun(int(*s)[10]int*bint*nintmmintnn){intijk=0;for(i=0;i<mm;i++)/*将二维数组s中的数据按行的顺序依次放到一维数组b中*/for(j=0;j<nn;j++)b[k++]=s[i][j];/*通过指针返回元素个数*/*n=k}voidfun(int(*s)[10],int*b,int*n,intmm,intnn)\r\n{\r\ninti,j,k=0;\r\nfor(i=0;i<mm;i++)/*将二维数组s中的数据按行的顺序依次放到一维数组b中*/\r\nfor(j=0;j<nn;j++)\r\nb[k++]=s[i][j];/*通过指针返回元素个数*/\r\n*n=k\r\n}解析:我们可以用两个循环来处理问题,由于是按行的顺序取出,所以第1个循环用于控制行下标,第2个循环用于控制列下标;若改成按列的顺序取出,则循环应改成:

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

for(j=0;i<mm;j++)

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

要注意s[j][i]的下标,不能用s[i][j]。

若按行取出则列标变化最快,若按列取出则行标变化最快。再根据循环嵌套时,越在内层的循环,其循环变量变化就越快。上题程序中只有当j从头到尾变化完时,i才变化一次(即加1);由于二数组的第1个下标为行下标,第2个下标为列下标,所以第1个程序列变化最快、第2个程序行变化最快。

29.intfun(char*str){intin=0fg=1;char*p=str;while(*p){n++;P++;}for(i=0;i<n/2;i++)if(str[i]==str[n-1-i]);else{fg=0;break;}returnfg;}intfun(char*str)\r\n{\r\ninti,n=0,fg=1;\r\nchar*p=str;\r\nwhile(*p)\r\n{\r\nn++;\r\nP++;\r\n}\r\nfor(i=0;i<n/2;i++)\r\nif(str[i]==str[n-1-i]);\r\nelse\r\n{\r\nfg=0;\r\nbreak;\r\n}\r\nreturnfg;\r\n}解析:本题的设计思路是:(1)定义一个int型变量flag用做返回值,定义一个字符指针代替原串遍历,求字符串的长度;(2)利用循环及if条件语句判断字符串首尾对应字符是否相等;(3)如果为回文数,修改flag的值;(4)返回flag

30.

解析:该程序功能是计算并输出多项式值。根据题干中给出的数列,首先推出每一项的表达式,然后再对多项式进行累加求和。

31.doublefun(doubleeps){doubles=1.0s1=1.0;intn=1;while(s1>=eps)/*当某项大于精度要求时继续求下—项*/{s1=s1*n/(2*n+1);/*求多项式的每—项*/s=s+s1;/*求和*/n++;}return2*s;}doublefun(doubleeps)\r\n{\r\ndoubles=1.0,s1=1.0;\r\nintn=1;\r\nwhile(s1>=eps)/*当某项大于精度要求时,继续求下—项*/\r\n{s1=s1*n/(2*n+1);/*求多项式的每—项*/\r\ns=s+s1;/*求和*/\r\nn++;\r\n}\r\nreturn2*s;\r\n}解析:从第2项开始以后的每一项都是其前面一项乘以n/(2*n+1),程序中用s1来表示每一项,s来表示总和后的结果。要注意s1,s的初值都为1.0,返回时要乘以2即return2*s,这跟数学思想有关系,学习者理解后就很简单了。

32.fun(STUa[]STU*s){inti;*s=a[0];for(i=0;i<N;i++)/*先认为第1个值最小*/if(s->s>aIi].s)/*如果在循环的过程中再发现比第1个值更小的则赋给*s*/*s=a[i];}fun(STUa[],STU*s)\r\n{\r\ninti;\r\n*s=a[0];\r\nfor(i=0;i<N;i++)/*先认为第1个值最小*/\r\nif(s->s>aIi].s)/*如果在循环的过程中再发现比第1个值更小的则赋给*s*/\r\n*s=a[i];\r\n}解析:我们先认为第1个值最小,即*s=a[0]语句,如果在循环的过程中再发现比第1个值更小的随即赋给该*s就可以了。另外,还涉及到结构体中的指向运算符,请学习者注意。若要找出最高成绩则if()中的条件改成s->s<a[i].s即可。

33.doublefun(doublex[10]){doublexl=0.0s=0.0;inti;for(i=0;i<10;i++)xl=xl+x[i];xl-xl/10;/*求10个数的平均值*/for(i=0;i<l0;i++)s=s+(x[i]-xl)*(x[i]-x1);returnsqrt(s/l0);/*求10个数的方差*/}doublefun(doublex[10])\r\n{\r\ndoublexl=0.0,s=0.0;\r\ninti;\r\nfor(i=0;i<10;i++)\r\nxl=xl+x[i];\r\nxl-xl/10;\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000/*求10个数的平均值*/\r\nfor(i=0;i<l0;i++)\r\ns=s+(x[i]-xl)*(x[i]-x1);\r\nreturnsqrt(s/l0);\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000/*求10个数的方差*/\r\n}解析:又是一道算式表达题,程序中用第1个循环来完成求10个数的总和,接着再用x1=x1/10来求出平均值。

34.

解析:该程序功能是找出最长的一个字符串。解题思路,首先指定第一个字符串为长度最大的字符串,然后在循环过程中将其与其他的所有串的长度进行比较,求出最长的串。

35.Dif语句的条件是当i既是3的倍数又是2的倍数时成立,所以此程序实现的功能是将10以内既是3的倍数又是2的倍数的数相加。

36.B解析:二维数组的元素可以看成是按矩阵形式存放的,总是先存放第一行的元素,再存放第二行的元素。数组第一维的下标是i,说明它前面还有i行,有i*m个元素,数组第二维的下标是j,说明它前面还有j列,有j个元素,所以共有i*m+j个元素。

37.D2021-2022学年四川省宜宾市全国计算机等级考试C语言程序设计模拟考试(含答案)学校:________班级:________姓名:________考号:________

一、单选题(12题)1.以下叙述中错误的是()。

A.对于double类型数组,不可以直接用数组名对数组进行整体输入或输出

B.数组名代表的是数组所占存储区的首地址,其值不可改变

C.当程序执行中,数组元素的下标超出所定义的下标范围时,系统将给出“下标越界”的出错信息

D.可以通过赋初值的方式确定数组元素的个数

2.有定义语句:inta=1,b=2,c=3,x;,则以下选项中各程序段执行后,x的值不为3的是

A.if(c<a)x=1;elseif(b<a)x=1;elsex=3;

B.if(a<3)x=3;elseif(a<2)x=2;elsex=1;

C.if(a<3)x=3;if(a<2)x=2;if(a<1)x=1;

D.if(a<b)x=b;if(b<c)x=c;if(c<a)x=a;

3.若已定义:“inta[9],*p=a;”,并在以后的语句中未改变p的值,不能表示a[1]地址的表达式是______。

A.p+1B.a+1C.a++D.++p

4.

5.

6.有以下程序:

执行后的结果是()。A.7B.3C.2D.0

7.有1000个无序的整数,希望使用最快的方式找出前50个最大的,最佳的选择是()

A.冒泡排序B.基数排序C.堆排序D.快速排序

8.设以下变量均为int类型,表达式的值不为7的是A.(x=y=6,x+y,x+1)

B.(x=6,x+1,y=6,x+y)

C.(x=y=6,x+y,y+1)

D.(y=6,y+1,x=y,x+1)

9.一个队列的入队序列是a,b,c,d,则出队序列是()。

A.a,b,c,dB.a,c,b,dC.d,c,b,aD.a,c,b,d

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

A.C程序中注释部分可以出现在程序中任意合适的地方

B.花括号"{"和"}"只能作为函数体的定界符

C.构成C程序的基本单位是函数,所有函数名都可以由用户命名

D.分号是C语句之间的分隔符,不是语句的一部分

11.若有定义“charc=“hello!”;”,则以下说法正确的是()。

A.c占用7字节内存B.c是一个字符串变量C.定义中有语法错误D.c的有效字符个数是6

12.以下叙述中正确的是()A.当对文件的读(写操作完成之后,必须将它关闭,否则可能导致数据丢失

B.打开一个已存在的文件并进行了写操作后,原有文件中的全部数据必定被覆盖

C.在一个程序中当对文件进行了写操作后,必须先关闭该文件然后再打开,才能读到第1个数据

D.语言中的文件是流式文件,因此只能顺序存取数据

二、2.填空题(12题)13.以下程序运行后的输出结果是【】。

main()

{intx=10,y=20,t=0;

if(x==y)t=x;x=Y;Y=t;

printf(“%d,%d\n”,x,y);

}

14.与结构化需求分析方法相对应的是【】方法。

15.软件测试是保证软件质量的重要手段,而软件测试的主要和重要的测试方法是通过测试数据和【】的设计来实现。

16.以下程序的功能是:从键盘上输入若干学生的成绩,统计计算出平均成绩,并输出低于平均分的学生成绩,用输入负数结束输入。填空。

main()

{floatx[1000],sum,=0.0,avea;

intn=0,i;

printf("Entermark:"\n");scanf("%f",&a);

while(a>=0.0&&n<1000)

{sum+=【】;x[n]=【】;

n++;scanf("%f",&a);

}

ave=【】;

printf("Output:"\n");

printf("ave=%f"\n",ave);

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

if(【】)frintf("%f\n",x[i]);

}

17.以下程序运行后的输出结果是______。

main()

{

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

inti=0,j=0;

while(i<7&&p[i]%2==1)

j+p[i++];

printf(“%d\n”j);

}

18.若a=10,b=20,则表达式!(a<b)的值是【】。

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

#include<stdio.h>

msin()

{inti,n[]={0,0,0,0,0};

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

{n[i]=n[i-1]*2+1;

printf("%d",n[i]);

}

}

20.在运算过程中,能够使空表与非空表的运算统一的结构是【】。

21.以下程序中,fun函数的功能是求3行4列二维数组每行元素的最大值。请填空。

voidfun(int,int,int(*)[4],int*);

main()

{

inta[3][4]={{12,41,36,28},{19,33,15,27),{3,27,19,1}},b[3],i;

fun(3,4,a,B);

for(i=0;i<3;i++)printf("%4d",b[i]);

printf("\n");

}

voidfun(intm,intn,intar[][4],int*br)

{inti,j,x;

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

{

x=ar[i][0];

for(i=0;j<n;j++)if(x<ar[i][j])x=ar[i][j];

______=X;

}

}

22.在宏定义#definePI3.14159中,用宏名PI代替一个______。

23.以下程序的输出结果是______。

main()

{chars[]="abcdef";

s[3]='\0';

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

}

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

三、3.程序设计题(10题)25.请编一个函数fun,函数的功能是使实型数保留2位小数,并对第三位进行四舍五入(规定实型数为正数)。

例如:实型数为1234.567,则函数返回1234.572000;

实型数为1234.564,则函数返回1234.562000。

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

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

26.请编写一个函数fun,它的功能是:比较两个字符串的长度,(不得调用C语言提供的求字符串长度的函数),函数返回较长的字符串。若两个字符串长度相同,则返回第一个字符串。

例如,输入beijingshah曲aj(为回车键),函数将返回shanghai。

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

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

27.学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun(),它的功能是:按分数的高低排列学生的记录,高分在前。

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

请勿改动主函数main和其他函数中的任何内容,仅在函数fum的花括号中填入所编写的若啡:语句。

试题程序:

#include<stdio.h>

#defineN16

typedefstruct

{charnum[10];

ints;

}STREC;

intfun(STRECa[])

{

}

main()

{

STRECsIN]={{"GA005",85},{"GA003",76},

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

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

{"GA015",85},{"GA013",91},{"GA012",64},

{"GA014",91},{"GA011",66},{"GA017",64},

{"GA018",64},{"GA016",72}};

inti;

FILE*out;

fun(s);

printf("Thedataaftersorted:In");

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

{if((i)%4=-0)

/*每行输出4个学生记录*/

printf("\n");

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

}

printf("\n");

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

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

{if((i)%4==0&&i)

fprintf(out,"\n");

fprintf(out,"%4d",s[i].s);

}

fprintf(out,"\n");

fclose(out);

}

28.请编写函数fun(),该函数的功能是:将M行N列的二维数组中的数据,按行的顺序依次放到一维数组中,一维数组中数据的个数存放在形参n所指的存储单元中。

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

33333333

44444444

55555555

则一维数组中的内容应该是33333333444444AA,55555555

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

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

试题程序:

#include<stdio.h>

voidfun(int(*s)[10],int*b,int*n,

intmm,intnn)

{

}

main()

{

intw[10][10]={{33,33,33,33},{44,44,

44,44},{55,55,55,55}},i,j;

inta[100]={0},n=0;

printf("Thematrix:\n");

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

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

printf("%3d",w[i][j]);

printf("\n");

}

fun(w,a,&n,3,4);

printf("TheAarray:In");

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

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

printf("\n\n");

}

29.请编写函数fun(),它的功能是:判断字符串是否是回文?若是,函数返回1,主函数中输出:YES,否则返回0,主函数输出NO。回文是指顺读和倒读都一样的字符串。

例如,字符串LEVEL是回文,而字符串12312就不是回文。

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

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

[试题源程序]

#include<stdio.h>

#defineN80

intfun(char*str)

{

}

main()

{

chars[N];

printf("Enterastring:")"gets(s);

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

if(fun(s))

printf("YES\n");

else

printf("NO\n");

NONO();

}

NONO()

{

/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/

FILE*rf,*wf;

inti;chars[N];

rf=fopen("K:\\k06\\24010001\\in.dat","r");

wf=fopen("K:\\k06\\24010001\\out.dat","w");

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

fscanf(rf,"%s",s);

if(fun(S))

fprintf(wf,"%sYES\n",s);

else

fprintf(wf,"%sNO\n",s);

}

fclose(rf);

fclose(wf);

}

30.编写函数fun,它的功能是计算下列级数和,和值由函数值返回。

例如,当n=10,x=0.3时,函数值为1.349859。

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

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

31.请编写一个函数fun(),它的功能是:根据以下公式求π的值(要求满足精度0.005,即某项小于0.005时停止迭代)。

π/2=1+1/3+1*2/(3*5)+1*2*3/(3*5*7)+1*2*3*4/(3*5*7*9)+…

+1*2*3*…*n/(3*5*7*…*(2n+1))

程序运行后,如果输入精度0.0005,则程序输出3.14…。

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

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

试题程序:

#include<conio.h>

#include<math.h>

doublefun(doubleeps)

{

}

main()

{

doublex;

printf("Inputeps:");

scanf("%1f",&x);

printf("\neps=%1f,PI=%1f\n",x,fun(x));

}

32.已知学生的记录由学号和学习成绩构成,N名学生的数据已存入a结构体数组中。请编写函数fun(),该函数的功能是:找出成绩最低的学生记录,通过形参返回主函数(规定只有一个最低分)。己给出函数的首部,请完成该函数。

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

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

试题程序:

#include<stdio.h>

#include<string.h>

#include<aonio.h>

#defineN10

typedefstructss

{charnum[10];

ihts;

}STU;

fun(STUail,STU*s)

{

}

main()

{

STUa[N]={{"A01",81},{"A02",89},

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

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

{"A09",80),{"Al0",71}},m;

inti;

clrscr0;

printf("*****Theoriginaldata*****");

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

printf("No=%sMark=%d\n",ail].num,

a[i].s);

fun(a,&m);

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

printf("Thelowest:%s,%d\n",m.num,

m.s);

}

33.请编写函数fun(),其功能是:计算并输出给定10个数的方差。

其中

例如,给定的10个数为95.0,89.0,76.0,65.0,88.0,72.0,85.0,81.0,90.0,56.0,则输出为S=11.730729。

注意;部分源程序给出如下.

请勿改动主函数mam和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序:

#include<math.h>

#include<stdio.h>

doublefun(doublex[10])

{

}

main()

{

doubles,x[i0]={95.0,89.0,76.0,65.0,

88.0,72.0,85.0,81.0,90.0,56.0};

inti;

printf("\nTheoriginaldatais:\n");

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

printf("%6.1f",x[i]);

printf("\n\n");

s=fun(x);

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

}

34.编写一个函数,从num个字符串中找出最长的一个字符串,并通过形参指针max传回该串地址。(注意:主函数中用¨¨作为结束输入的标志。)

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

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

四、单选题(0题)35.下列程序的输出结果是()。#include<stdio.h>main(){inti,S=0;for(i=1;i<10;i++)if(!(i%2)&&!(i%3))s+=i;printf("%d\n",s);}A.4B.39C.45D.6

五、单选题(0题)36.若二维数组a有m列,则在a[i][j]刚前的元素个数为()。

A.i*m+j-1B.i*m+jC.j*m+iD.i*m+j+1

六、单选题(0题)37.若x,y均定义为int型,z定义为double型,以下不合法的scanf函数调用语句是()。A.scanf(“%d%lx,%le”,&x,&y,&z);

B.scanf(“%2d*%d%lf”&x,&y,&z);

C.scanf(“%x%*d%o”,&x,&y);

D.scanf(“%x%o%6.2f”,&x,&y,&z)

参考答案

1.C解析:在C语言中,除字符数组外,一个数组不能通过数组名对数姐进行整体引用,因此选项A是对的。数组名中存放的是一个地址常量,它代表整个数组的首地址,因此选项B是对的。C语言程序在运行过程中,系统不自动检验数组元素的下标是否越界,因此选项C是错误的。C语官规定可以通过赋初值来定义数组的大小,这时数组说明符的一对方括号中可以不指定数组的大小,因此选项D也是正确的。所以,4个选项中选项C符合题意。

2.C解析:选项A首先判断if语句条件中表达式的值“3<1”为假,然后执行最近的else后面的语句,该else后面又为if-else语句,在这个if-else语句中首先判断该if语句条件中表达式的值“2<1”为假,程序执行其最近的else后面的语句,将3赋值给x。

选项B中首先判断if语句条件中表达式的值“1<3”为真,然后执行最近的else后面的语句“x=3”,后面的else不再执行,最后x的值为3。

选项C中,首先执行第一条if语句,由于“1<3”为真,执行此if后面的语句“x=3”,接着执行第二条if语句,由于“1<2”为真,执行此if后面的语句“x=2”,接着执行第三条if语句,由于“1<1为假,后面的语句不执行,所以最后的x值为2不为3。

选项D中;首先执行第一条if语句,由于“a<b”为真,执行此if后面的语句“x=b”;接着执行第二条if语句,由于“b<c”,为真,执行此if后面的语句“x=c”,接着执行第三条if语句,由于“c<a”为假,后面的语句不执行,所以最后的x值为c即为3。

3.C

4.B

5.C

6.C调用函数fun(7)时,由于x的值为7,执行语句“p=x-fun(x-2);”,相当于执行p=7-fun(5);

调用函数fun(5)时,由于x的值为5,执行语句“p=x-fun(x-2);”,相当于执行p=7-fun(3);调用函数fun(3)时,由于X的值为3,执行语句“p=x-fun(x-2);”,相当于执行p=7-fun(1);调用函数fun(1)时,由于x的值为1,执行语句“return(3);”,函数的返回值为3。

因此函数调用fun(7)等价于7-(5-fun(3)),即7-(5-(3-fun(1))),即7-(5-(3-3)),所以函数fun(7)的返回值为2。

7.D

8.B本题考查逗号表达式的用法。C语言中逗号“,”也是一种运算符,称为逗号运算符,其功能是把两个表达式连接起来组成一个表达式,称为逗号表达式。其一般形式为:表达式1,表达式2。其求值过程是分别求两个表达式的值,并以表达式2的值作为整个逗号表达式的值。逗号表达式的一般形式可以扩展为:表达式1,表达式2,表达式3,…,表达式n。它的值为表达式n的值。

9.A

10.A解析:/*与*/之间的信息称为注释信息,在C语言中,允许在任何能够插入空格符的位置插入注释,但C语言的注释不能进行嵌套,故选项A正确:在C语言中,函数体是从花括号{开始,到花括号}结束。但没有规定花括号{和}只能作为函数体定界符,故选项B错误;选项C中前半句是正确的,C程序由一个或多个函数所组成,但不是所有的函数都由用户自己命名,有些函数,比如主函数main()就不能由用户来命名,故选C不正确;在C语言中明确规定每条语句以分号;结束,分号是语句不可缺少的一部分,故选项D不正确。所以,4个选项中选项A符合题意。

11.Cc是字符变量,“hello!”是字符串。字符串不能赋给字符变量,定义中有语法错误。本题答案为C选项。

12.AB)选项中打开一个已存在的文件并进行了写操作后,原有文件中的全部数据不一定被覆盖,也可以对源文件进行追加操作等。C)选项中在一个程序中当对文件进行了写操作后,不用先关闭该文件然后再打开,才能读到第1个数据,可以用fseek()函数进行重新定位即可。D)选项中,C语言中的文件可以进行随机读写。

13.20020,0解析:在主函数中首先定义了三个整型变量x、y、t,并分别给它们赋初值为10,20,0,接着执行if语句,在if后面括号内的条件表达式中,条件“x==y”即“10==20”不成立,则不执行其后的语句“t=x”,然后退出if语句,顺序执行语句x=Y;Y=t;。执行完这两条语句后x的值变为20,y的值变为0,所以最后输出x,y的值为20和0。

14.结构化设计结构化设计解析:与结构化需求分析方法相对应的是结构化设计方法。结构化设计就是采用最佳的可能方法设计系统的各个组成部分以及各个成分之间的内部联系的技术。

15.测试实例测试实例解析:进行软件测试时,应精心设计测试实例和选择测试数据,以对系统进行全面测试。

16.aasum/n或sum/(float)n或sum/(double)nx[i]<sve或!(x[i]>=sve)或sve>x[i]a\r\na\r\nsum/n或sum/(float)n或sum/(double)n\r\nx[i]<sve或!(x[i]>=sve)或sve>x[i]

17.2424解析:本题考核的知识点是数组的定义和数组元素的引用。主函数中首先定义了一个长度为7的数组,然后用一个while循环引用数组的元素,当i大于7或者p[i]为偶数时,循环结束。显然当i=2时,p12]=14为偶数时,循环结束,此时j的值为j=p[0]+p[1]=24;

18.00解析:已知a=10,b=20,所以逻辑表达式a<b的值为true,即为1,在这个表达式前面有一个逻辑运算符!,表示反操作,所以整个语句的值应当为false,即为0。

19.1371513715解析:程序中n是一个有5个元素,且元素值全为0的数组。在for循环中,当i=1时,n[1]=n[0]*2+1,此时n[1]=1;i=2时,n[2]=n[1]*2+1,此时n[2]=3;i=3时,n[3]=n[2]*2+1,此时n[3]=7;i=4时,n[4]=n[3]*2+1,此时n[4]=15,循环结束。输出函数中%d后有空格,因此输出结果为13715。

20.循环链表循环链表解析:在链表的运算过程中,采用链接方式即循环链表的结构把空表与非空表的运算统一起来。循环链表具有两个特点:①在循环链表中增加了一个表头结点,其数据域为任意或根据需要来设置,指针域指向线性表的第一个元素的结点。循环链表的头指针指向表头结点。②循环链表中最后一个结点的指针不是空,而是指向表头结点。

21.br[i]或*(br+i)br[i]或*(br+i)解析:求最大值算法要求输入的一般是一系列数,例如一个数组,而输出只有一个值。计算时通常的做法是,首先将这一系列数的笫1个值保存到结果变量中,然后用一个指针或循环变量从头(或从第2个值)至尾遍历这一系列数,每次比较结果变量和被遍历的值,如果该值比结果大,则将该值保存到结果中。本题中,3行4列二维数组a显然是算法的输入值,而传给函数fun()的3和4在函数中起到限制循环次数的作用,所以它们代表输入数据的行列数.而传递给函数的一维数组b即没有初始化,最后又要输出它,所以数组b肯定是用来保存每行的最大值。在函数中是一个二重循环,外循环首先将ar[i][0]赋给x,然后内循环中比较x和ar[il刚,若x比较小就让x=ar[i][j],这就说明x是保存结果的临时变量.最后应该将x的值输出到数组b中,也就是形参br的相应位置。故在空格处应该填的内容为br[i]或者写成指针方式*(br+i)。

22.字符串字符串解析:本题考查字符替换格式:#define标识符字符串。

23.abcabc解析:字符串的结束标记'\\0',当输出一个存放在字符数组中的字符串时,只需输出到'\\0'为止,而不管其后有什么数据。本题给字符数组s的元素s[3]赋值为'\\0',故只能输出3个字符“abc”。

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

25.

解析:该程序功能是进行四舍五入。其中,通常求实数x保留m位小数,首先将x扩大10(m+1)倍,扩大后的x加上5后,进行截取判断,最后进行恢复。

26.

解析:该程序功能是比较两个字符串的长度。解题过程是首先分别求得两个字符串的长度,然后对这两个值进行判断,实现两个字符串长度的比较。

27.intfun(STRECa[]){intij;STRECt;for(i=1;i<N;i++)/*用冒泡法进行排序进行N-1次比较*/for(j=0;j<N-1;j++)/*在每一次比较中要进行N-1次两两比较*/if(a[j].s<a[j+1].s)

温馨提示

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

最新文档

评论

0/150

提交评论