2021-2022年江苏省徐州市全国计算机等级考试C语言程序设计_第1页
2021-2022年江苏省徐州市全国计算机等级考试C语言程序设计_第2页
2021-2022年江苏省徐州市全国计算机等级考试C语言程序设计_第3页
2021-2022年江苏省徐州市全国计算机等级考试C语言程序设计_第4页
2021-2022年江苏省徐州市全国计算机等级考试C语言程序设计_第5页
已阅读5页,还剩106页未读 继续免费阅读

下载本文档

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

文档简介

2021-2022年江苏省徐州市全国计算机等级考试C语言程序设计学校:________班级:________姓名:________考号:________

一、单选题(20题)1.下列程序的输出结果是

#include"stdio.h"

#defineN3

#defineM3

voidfun(inta[M][N])

{printf("%d\n",*(a[1]+2));}

main()

{inta[M][N];

inti,j;

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

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

a[i][j]=i+j-(i-j);

fun(a);}

A.3B.4C.5D.6

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

A.函数名是属于用户标识符,需符合C语言对标识符的规定

B.形参只能是变量

C.为保证程序的正常运行,函数中定义的变量不能与其他函数中的变量同名

D.函数中定义的变量可以与其他函数中的变量同名

3.设n个待排序的记录关键字,则在堆排序中需要()个辅助记录单元。

A.1B.12C.60D.15

4.数据结构主要研究的是数据的逻辑结构、数据的运算和()。A.数据的方法B.数据的存储结构C.数据的对象D.数据的逻辑存储

5.有下列程序:程序执行后的输出结果是()。A.eeaabmmnhhirrstu

B.efgabcdmnopqhijkIrstuvwxyz

C.efgacdmopqhjkIrvwxyz

D.eefgaabcdmmnopqhhijkIrrstuvwxyz

6.软件测试的目的是()。

A.评估软件可靠性B.发现并改正程序中的错误C.改正程序中的错误D.发现程序中的错误

7.栈通常采用的两种存储结构是()。

A.顺序存储结构和链式存储结构B.散列方式和索引方式C.链表存储结构和数组D.线性存储结构和非线性存储结构

8.以下选项中,能表示逻辑值“假”的是()

A.1B.0.000001C.0D.100.0

9.以下程序的主函数中调用了在其面前定义的fun函数#include<stdio.h>...main(){doublea[15],k;k=fun(a);...}则以下选项中错误的fun函数首部是()。、A.doublefun(doublea[l5])

B.doublefun(double*a)

C.doublefun(doublea[])

D.doublefun(doublea)

10.A.A.75310246B.01234567C.76310462D.13570246

11.关于排序算法的以下说法,错误的是()

A.归并排序的平均时间复杂度O(nlogn),最坏时间复杂度O(n^2)

B.堆排序平均时间复杂度O(nlogn),最坏时间复杂度O(nlogn)

C.冒泡排序平均时间复杂度O(n^2),最坏时间复杂度O(n^2)

D.快速排序的平均时间复杂度O(nlogn),最坏时间复杂度O(n^2)

12.下面程序的输出结果是()。chars()="ABCD",*p;main(){for(p=s;p<s+4;p++)printf("%s\n",p);)

A.ABCDBCDCDDB.ABCDC.DCBAD.ABCDABCABA

13.下面C程序段中count++语句执行的次数为()A.15B.16C.31D.32

14.若有以下说明:chars1[]={"tree"},s2[]={"flower"};,则以下对数组元素或数组的输出语句中,正确的是()。

A.printf("%s%s",s1[5],s2[7]);

B.printf("%c%c",s1,s2);

C.puts(s1);puts(s2);

D.puts(s1,s2);

15.以下非法的赋值语句是

A.n=(i=2,++i);B.j++;C.++(i+1);D.x=j>0;

16.算法应该是()

A.程序B.问题求解步骤的描述C.要满足五个基本特性D.B和C

17.C语言中函数返回值的类型是由()决定的。

A.return语句中的表达式类型B.调用该函数的主调函数类型C.定义函数时所指定的函数类型D.以上说法都不正确

18.有以下程序:int*f(int*x,int*y){if(*x<*y)returnx;elsereturny;}main(){inta=7,b=8,*p,*q,*r;p=&a;q=&b;r=f(p,q);printf("%d,%d,%d\n",*p,*q,*r);}程序运行后输出结果是______。

A.7,8,8B.7,8,7C.8,7,7D.8,7,8

19.用链接方式存储的队列,在进行删除运算时()。

A.仅修改头指针B.仅修改尾指针C.头、尾指针都要修改D.头、尾指针可能都要修改

20.查找较快,且插入和删除操作也比较方便的查找方法是

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

二、2.填空题(20题)21.在算法的4个特性中,算法必须能在执行有限个步骤之后终止指的是算法的______特性。

22.下列程序的功能是将字符串s中所有的字符c删除。请填空。

#include<stdio.h>

main()

{chars[80];

inti,j;

gets(S);

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

if(s[i]!='c')______;

s[j]='\0;

puts(S);

}

23.数据结构分为逻辑结构与存储结构,线性链表属于【】。

24.下列程序的运行结果是______。

#include<stdio.h>

main()

{inta=10,b=3;

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

printf("%d,",(a-b,a+b));

printf("%d\n",a-b?a-b:a+b);

}

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

#include<string.h>

main()

{printf("%d\n",strlen("IBM\n012\1\\"));}

26.常用的黑箱测试有等价类划分法、【】和错误推测法3种。

27.函数voidfun(float*sn,intn)的功能是:根据以下公式计算s,计算结果通过形参指针sn传回;n通过形参传入,n的值大于等于0。请填空。

voidfun(float*sn,intn)

{floats=0.0,w,f=-1.0;

inti=0;

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

{f=【】*f;

w=f/(2*i+1);

s+=w;}

【】=s;}

28.下列程序的运行结果是______。

#definePOW(r)(r)*(r)

main()

{intx=3,y=2,t;

t=POW(x+y);

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

}

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

#include<stdio.h>

voidswap(int*a,int*b)

{int*t;

t=a;a=b;b=t;

}

main()

{inti=3,j=5,*p=&i,*q=&j;

swap(p,q);printf("%d%d\n",*p,*q);

}

30.下面程序的功能是将字符串a下标值为偶数的元素由小到大排序,其他元素不变,请填空。

#include<stdio.h>

main()

{chara[]="labchmfye",t;

inti,j;

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

for(j=i+2;j<9;【】)

if(【】)

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

puts(a);

printf("\n");

}

31.以下程序运行后输入:3,abcde<回车>,则输出结果是______。

#include<string.h>

move(char*str,intn)

{charcemp;inti;

temp=str[n-1];

for(i=n-1;i>0;i--)str[i]=str[i-1);

str[0]=temp;}

main()

{chars[50];intn,i,z;

scanf(“%d,%s”,&n,s);

z=strlen(s);

for(i=1;i<=n;i++)move(s,z);

printf(“%s\n”,s);

}

32.面向对象的模型中,最基本的概念是对象和______。

33.在关系模型中,把数据看成一个二维表,每一个二维表称为一个______。

34.以下函数rotate的功能是:将a所指N行N列的二维数组中的最后一行放到b所指二维数组的第。列中,把a所指二维数组中的第0行放到b所指二维数组的最后一列中,b所指二维数组中的其他数据不变。

#defineN4

voidrotate(inta[][N],intb[][N])

{int,i,j;

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

{b[i][N-1]=【】;

【】=a[N-1][i];

}

}

35.以下程序的功能是:求出数组x中各相邻两个元素的和依次存放到a数组中,然后输出。请填空。

main()

{intx[10],a[9],i;

for(i=0;i<10;i++)scanf("%d",&x[i]);

for([11];i<10;i++)

a[i-1]=x[i]+[12];

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

printf("");

}

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

#include<stdio.h>

main()

{inta[5]={2,4,6,8,10},*p;

p=a;p++;

printf("%d",*p);

}

37.数据库系统的主要特点为数据集成性、数据的高______和低冗余性、数据独立性和数据统一管理和控制。

38.下列程序段的输出结果是【】。

main()

{charb[]="Hello,you";

b[5]=0;

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

}

39.以下程序调用invert函数按逆序重新放置a数组元素的值。a数组中的值在main函数中读入。

#include<stdio.h>

#defineN10

invert(s,i,j)

int*s,i,j;

{intt;

if(i<j)

{t=*(s+i);

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

*(s+j)=t;

invert(s,【】,j-1);

}

}

main()

{

inta[N],i;

for(i=0;i<N;i++)scanf("%d",a+【】);

invert(a,0,N-1);

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

printf("\n")

}

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

mam()

{

chara[]="123456789",*p;

inti=0;

p=a;

while(*p)

{

if(i%2=0)

*p='*';

p++;i++;

}

puts(A);

}

三、1.选择题(20题)41.设有以下说明语句:structex{intx;flocty;charz;}example;则下面的叙述中不正确的是()

A.struct是结构体类型的关键字

B.example是结构体类型名

C.x,y,z都是结构体成员名

D.structex是结构体类型

42.有以下程序:#include<stdio.h>main(){charc[6];inti=0;for(j<6;c[i]=getchar(),i++);for(i=0,i<6;i++)putchar(c[i]);printf("\n");}如果从键盘上输入:ab<回车>c<回车>def<回车>则输出结果为______。

A.abcdefB.abcdC.abcdD.abcdef

43.已知字母A的ASCII码值是65,字母a的ASCII码值是97,以下程序______。main(){chara='A';intb=20;printf(%d,%0",(a=a+a,a+b,B),a+'a'-'A',B);}

A.表达式非法,输出零或不确定值

B.因输出项过多,无输出或输出不确定值

C.输出结果为20,141

D.输出结果为20,141,20

44.设有说明语句如下:staticcharstr[]="Beijing";若执行下列输出语句:printf("%d\n",strlen(strcpy(str,"China")));则输出结果为()。

A.5B.7C.12D.14

45.若有定义:char*st="howareyou";下列程序段中正确的是

A.chara[11],*p;strcpy(p=a+1,&st[4]);

B.chara[11];strcpy(++a,st);

C.chara[11];strcpy(a,st);

D.chara[],*p;strcpy(p=&a[1],st+2);

46.若x=10010111,则表达式(3+(int)(x))&(~3)的运算结果是()。

A.10011000B.10001100C.10101000D.10110000

47.若有以下定义和语句:inta=010,b=0×10,c=10;printf("%d,%d,%d\a",a,b,C);则输出结果是()。

A.8,10,10B.10,10,10C.8,8,10D.8,16,10

48.以下程序的输出结果是()main(){intb[3][3]={0,1,2,0,1,2,0,1,2},i,i,t=1;for(i=0:i<3;i++)for(j=j;j<=i;j++)t=t+b[i][j]printf("%d\n",t);}

A.3B.4C.1D.9

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

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

50.若a、b、c、d都是血型变量且都已经正确赋初值,则下列不正确的赋值语句是()。

A.a+d;B.a++;C.a=b=c=d=100;D.a=(b=3)+(d=5);

51.用树形结构表示实体之间联系的模型是

A.关系模型B.网状模型C.层次模型D.以上三个都是

52.以下合法的赋值语句是______。

A.X=Y=100B.D-;C.X+Y;D.C=int(A+B)

53.数据的存储结构是指______。

A.数据所占的存储空间量B.数据的逻辑结构在计算机中的表示C.数据在计算机中的顺序存储方式D.存储在外存中的数据

54.以下程序的输出结果是_______。#include<stdio.h>main(){inti;for(i=1;i<5;i++){if(i%2)printf("*");elsecontinue;printf("#");}printf("$\n");}

A.*#*#*#$B.#*#*#*$C.*#*#$D.#*#*$

55.下述程序段的输出结果是()intx=10;inty=x++;8printf("%d,'%d,(x++,y),y++);

A.11,10B.11,11C.10,10D.10,11

56.实体一联系模型中,实体与实体之间的联系不可能是

A.一对一B.多对多C.一对多D.一对零

57.对于下面的程序#include<stdio.h>#include<string.h>char*scmp(char*s1,char*s2){if(strcmp(s1,s2)<0)return(s1);elsereturn(s2);}main(){inti:charstring[20],sb[3][20];for(i=0;i<3;i++)gets(str[i]);strcpy(string,scmp(str[0],str[1]));strcpy(string,scmp(string,str[21));printf("%s\n",string);}若运行时依次输入abcd、abba和abc三个字符串,则输出结果为______。

A.abcdB.abbaC.abcD.abca

58.下面程序输出的结果是______。main(){inti=5,j=9,z;x=(i==j?i:(j=7));printf(:\n%d,%d",i,j);}

A.5,7B.5,5C.语法错误D.7,5

59.有下列程序main(){intt,a=1,b=5,c=-2;while(a>b>c){t=a;a=b;b=t;c++;}printf("%d,%d,%d",a,b,c);}程序输出的结果是()。

A.1,5,0B.1,5,-2C.5,1,-1D.5,1,-2

60.下列是合法的用户自定义标识符的是()。

A._w1B.3_xyC.intD.LINE-3

四、选择题(20题)61.

62.阅读以下程序:

该程序在编译时产生错误,原因是()。

A.定义语句出错,Case是关键字,不能用作用户自定义标识符

B.定义语句出错,printF不能用作用户自定义标识符

C.定义语句无错,sCanf不能作为输入函数使用

D.定义语句无错,printf不能输出Case的值

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

A.eelcomwB.weoclnleC.welcomeD.emoclew

64.

65.下列工具中为需求分析常用工具的是()。

A.PADB.BFDC.N-SD.DFD

66.

67.

68.

69.

70.有以下程序(说明:字母A的ASCIl码值是65):

程序运行后的输出结果是()。

A.BTB.YEC.YTD.BY

71.下面不属于软件工程三要素的是()。

A.方法B.环境C.工具D.过程

72.

73.语句:“printf("%d",(a=)&&(b=-2));”的输出结果是()。

A.无输出B.结果是不确定C.-1D.1

74.在下列关系运算中,不改变关系表中的属性个数但能减少元组个数的是

A.连接B.选择C.投影D.笛卡儿乘积

75.以下叙述中错误的是()。

A.用户所定义的标识符允许使用关键字

B.用户所定义的标识符应尽量做到“见名识意”

C.用户所定义的标识符中,大、小写字母代表不同标识

D.用户所定义的标识符必须以字母或下划线开头

76.

77.

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

A.2B.4C.6D.3

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

A.28B.24C.32D.36

80.下面概念中,不属于面向对象方法的是()。A.对象B.继承C.类D.过程调用

五、程序改错题(1题)81.下列给定的程序中,函数proc()的功能是:用选择法对数组中的m个元素按从小到大的顺序进行排序。

例如,排序前的数据为:1132-5214

则排序后的数据为:-52111432

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

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

试题程序:

六、程序设计题(1题)82.使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。此程序定义了N×N的二维数组,并在主函数中自动赋值。请编写函数该函数的功能是使数组下三角元素中的值乘以n。注意:部分源程序给出如下。请勿改动函数main()和其他函数中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。试题程序:#include<stdio.h>#include<conio.h>#include<stdlib.h>#defineN5voidfun(inta[][N],intn){}main(){inta[N][N],n,i,j;printf(“*****Thearray*****\n”);for(i=0;i<n;i++)<p=""></n;i++)<>{for(j=0;j<=""p="">{a[i][j]=rand()%10;printf(“%4d”,a[i][j]);}printf(“\n”);}n=rand()%4;printf(“n=%4d\n”,n);fun(a,n);printf(“*****TheResult*****\n”);for(i=0;i<=""p="">{for(j=0;j<=""p="">printf(“%4d”,a[i][j]);printf(“\n”);}}

参考答案

1.B解析:若有以下定义:inta[3][4],i,j;且当0<=i<3,0<=j<4,则可以有以下几种方式来引用数组中的第i行,第j列的元素:a[i][j],*(a[i]+j),*(*(a+i)+j),(*(a+i))[j],*(&a[0][0]+4*i+j)。

2.C解析:本题考查函数调用时参数的作用域。在函数调用时,函数体内定义的变量的作用域连函数体内,因而在不同函数体内定义的变量可以相同,不影响各个变量的使用。

3.A

4.B详细解答:

数据结构是研究数据元素及其之间的相互关系和数据运算的一门学科,它包含3个方面的内容,即数据的逻辑结构、存储结构和数据的运算。

5.C程序定义一个二维字符数组a,使用5个字符串对其初始化。另外定义字符指针数组P。for循环中,每次将数组a当前下标为i的字符串首地址赋给P[i],再求得P[i]的长度赋给len,第1个printf输出p[i]字符串的首字母,第2个printf输出p[i]字符串下标从len/2开始的子字符串。当下标i=0时输出efg;当下标i=l时输出acd;当下标i=2时输出mopq;当下标i=3时输出hjkl;当下标i=4时输出rvwxyz。所以程序输出:efgacdmopqhjklrvwxyz。本题答案为C选项。

6.D软件测试是为了发现错误而执行程序的过程,测试要以查找错误为中心,而不是为了演示软件的正确功能,也不是为了评估软件或改正错误,因此本题答案为D)。

7.A解析:和线性表类似,栈也有两种存储方法,一是顺序栈,二是链式栈。栈的顺序存储结构是利用一组地址连续的存储单元一次存储自栈底到栈顶的数据元素,同时附设指针top指示栈顶元素的位置,由于栈的操作是线性表操作的特例,相对而言,链式栈的操作更易于实现。注意:这3种运算方法在各种存储结构中的应用。

8.C\n本题考查逻辑值假,在程序中非0字符表示逻辑真,0表示逻辑假,所以答案选择C。

\n

9.A由题可知fun的参数为变量,而a[15]为常量,所以答案为A。

10.A本题的考点是C语言的数组及其排序。本题的程序中分为2个循环体,第一个循环体将数组中1,3,5,7,2,4,6,0的前4个元素从大到小排序,这个循环体结束后数组中的值为7,5,3,1,2,4,6,0。第二个循环体将数组中7,5,3,1,2,4,6,0从第5个开始的4个元素从小到大排序,这个循环体结束后数组中的值为7,5,3,1,0,2,4,6。所以正确答案是选项A。

11.A

12.A解析:p为指针型变量。第一次循环,p=s,p的值为字符数组s的首地址,输出字符串'ABCD'。p++,第二次循环,p的值为字符数组s的首地址加1,输出字符串'BCD'。p++,第三次循环,p的值为字符数组s的首地址加2,输出字符串'CD'。p++,第4次循环,p的值为字符数组s的首地址加3,输出字符串\'D'。

13.A

14.C

15.C解析:本题考查的知识点是赋值语句的基本知识。在表达式的运算中,双目赋值运算符的格式为“变量二表达式”,单目运算符一般形式为“运算符表达式”或“表达式运算符”。常量和表达式是不能被赋值的。选项A为复合表达式,首先计算(i=2,++i)的值,然后赋值给n,故选项A正确;选项B为简单自加运算,故选项B正确;选项C在表达式++(i+1);中,(i+1)不是变量,该表达式的值为常量,而在++运算中,其运算对象必须为变量,故选项C错误;选项D中为复合赋值表达式,正确.所以应当选择C。

16.B

17.C

18.B解析:f函数的功能是返回地址为x,y的两个数中值铰的数的地址,本题输出结果是7,8,7。

19.D

20.A分块查找是折半查找和顺序查找的一种改进方法,分块查找要求索引表是有序的,对块内节点没有排序要求,因此查找较快,且插入和删除操作也比较方便。

21.有穷性有穷性解析:算法的4个基本特性包括:可靠性、确定性、有穷性和拥有足够的情报,其中,算法的有穷性指的是算法必须在有限的时间内完成,即算法必须在执行有限个步骤之后终止。

22.s[j++]=s[i]s[j++]=s[i]解析:循环开始后如果数组s中储存值与字符c相同,则i++直接跳过当前值;如果不相同,则将当前值赋予数组指定位置,并通过.j++将下标加1,指向下一元素要存储的位置。

23.存储结构

24.11371,13,7解析:本题考查3个知识点:①余数的计算,题中的a=10,b=3,a%b=1;②(表达式1,表达式2)形式的结果为最后一个表达式的值,题中的a=10,b=3,(a-b,a+b)=a+b=13;③条件运算符的使用,题中的a-b?a-b:a+b,判断语句a-b=7不为0,所以执行a-b,结果为7。

25.99解析:本题要输出的结果是字符串'IBM\\n012\\1\\\\'的长度,'IBM'是3个字符,\'\\n\'是1个字符,'012'又是3个字符,最后的\'\\1\'和\'\\\\\'都是1个字符。所以最终字符串的长度应该是3+1+3+1+1=9。故本题应该填9。

26.边界值分析法边界值分析法解析:黑箱测试方法完全不考虑程序的内部结构和内部特征,而只是根据程序功能导出测试用例。常用的黑箱测试有等价类划分、边界值分析法和错误推测法3种。

27.=-1*sn=-1\r\n*sn解析:C语言中实参变量和形参变量的数据传递是单向的“值传递”方式。指针变量作函数也要遵循这一规则。调用函数不可能改变实参指针变量的值,但可以改变实参指针变量所指变量的值。

28.2525解析:本题考查带参数的宏的定义及相关运算。运算过程为:t=POW(x+y)=(2+3)*(2+3)=25。

29.3535解析:函数swap(int*a,int*b)的功能是实现*a和*b中两个数据的交换,在主函数中调用swap(p,q)后,形参指针变量a和b分别指向i和j,在swap(int*a,int*b)执行完后,指针变量a和b分别指向j和i,而指针变量p,q所指向变量的值没有发生变化,所以输出结果为35。

30.j++a[i]>a[j]或a[j]<a[i]j++\r\na[i]>a[j]或a[j]<a[i]解析:题目要求排序的元素是下标值为偶数的元素,外循环循环4次,i的值分别为0、2、4、6,所以内循环也循环4次,i的值就应为2、4、6、8,在循环体中已经有了对j加1的操作,因此for后括号中的语句应再对j加1,保证下标为偶数。if语句的功能是如果后一个数比前一个数小则交换位置。

31.cdeabcdeab解析:本题考核的知识点是基本算法的应用和程序的综合分析。从分析知道move()函数的作用,是将形参str所指的数组依次向后左移一位,即让该数组第一个元素的值等于第二个元素的值,接着让第二个元素的值等于第三个元素的值,直到该数组最后第二个元素的值等于最后一个元素的值,然后让第一个元素等于最后一个元素的值。主函数中用了一个for循环调用move()函数,共循环三次。当i=1时,第一次调用move()函数,使输入到数组的s的字符串“abcde”变为“eabcd”,当i=2时,第二次调用move()函数,使字符串“eabcd”变为“deabc”,当i=3时,第三次调用move()函数,使字符串“deabc”变为“cdeab”,故最后输出的值为“cdeab”,故该空格处应该填“cdeab”。

32.类类

33.关系关系解析:关系模型用;维表表示,则每个;维表代表一种关系。

34.a[0][i]b[i][0]a[0][i]b[i][0]解析:根据题意,第一处所在语句行的作用是把a数组中的第0行放到b数组的最后一列中,a数组的第0行用a[0][]来表示,所以第一处填a[0][i];第二所在语句行的作用是将a数组的最后一行放到b数组的第0列中,b数组的第0列用b[][0]来表示,所以,第二处应填b[i][0]。

35.i=1x[i-1]i=1\r\nx[i-1]解析:对于10个数,相邻的两个数相加取和,总共要进行9次加法运算,所以空11处应填入i=1。相邻的两个数相加取和,放在数组a中,x[0]与x[1]的和存放在a[0]中,所以空12处应填入x[i-1]。

36.44解析:在主函数中,语句p=a;p++使用指针p指向数组a[1],所以输出结果为4。

37.共享性共享性解析:数据库系统中的数据能被不同的应用程序使用,实现了数据的高度共享,从而降低了数据的冗余,这也是数据库的主要目的。

38.HelloHello解析:字符串中,数值0或符号'/0'表示字符串的结束。本题中,b[5]被赋了0值,表明字符串b的第六个字符就是结束标志。因此,只输出前五个字符,即Hello。

39.i+1i

40.*2*4*6*8**2*4*6*8*解析:程序中定义了一个字符数组a,并初始化为123456789,接着定义了一个指针p并让它指向数组a,紧接着执行了一个while循环,此循环的作用是:当i为偶数时,将“*”赋给a[i],p指向数组末尾,循环结束,此时数组中a[0]、a[2]、a[4]、a[6]和a[8]的值都为“*”,所以最后调用puts()函数输出的a的值为*2*4*6*8*

41.B

42.C解析:getchar():此函数的作用是从终端(或系统隐含指定的输入设备)输入—个字符。2.putchar()此函数的作用是向终端输出—个字符,也可以输出控制字符。本题在输入字符时,ab和c后面的回车符分别赋给了c[2]和c[4],所以,正确答案为C。

43.C解析:本题中首先输出逗号表达式“a=a+a,a+b,b”的值,即20。然后以八进制的形式输出a+'a'-'A'的值为97对应的八进制数141,由于最后一个表达式b没有对应输出格式的输出项表列就不会输出。

44.A解析:本题考查求字符串的长度。数组str初始化的长度是7,使用strcpy函数将新字符串赋给str后,strlen函数返回的是新字符串的字符个数5。

45.A解析:本题综合考查字符数组的赋值和strcpy函数的用法。C语言不允许用赋值表达式对字符数组赋值,如下面的语句就是非法的:strl=“China”,如果想把“China”这5个字符放到数组strl中,除了逐个地输入外,还能使用strcpy函数,该函数的功能是将一个字符串复制到一字符数组中。例如:strcpy(strl,“China”);或strcpy(strl,str2);注意,不能企图用以下语句来实行赋值(将str2的值传给strl):strl=str2;不能用赋值语句将一个字符串常量或字符数组直接给一个字符数组。

strcpy函数的结构是:strcpy(字符数组1,字符串2)

其中,需要注意的是,字符数组1的长度不应小于字符串2的长度,“字符数组1”必须写成数组名形式,如(strl),“字符串2”可以是字符数组名,也可以是字符串常量,不能用赋值语句将一个字符串常量或字符数组直接给一个字符数组。

46.A解析:本题主要考查运算表达式的运算。3+(int)(x)的结果是10011010,~3的结果是11111100,二者逻辑与得10011000。

47.D解析:以数字“0”开头的是八进制整型常量,以“0x”或“0X”开头的是十六进制整型常量。“%d”代表用十进制整型格式输出。题中的“010”、“0x10”转换成十进制数后分别是8和16。

48.B

49.C解析:二叉树的一个性质是,在二叉树的第k层上,最多有2(k-1)(k>=1)个结点。对于满二叉树,每一层上的结点数都达到最大值,即在满二叉树的第k层上有2k-1个结点。所以,在深度为5的满二叉树中,所有叶子结点在第5层上,即其结点数为2(k-1)=2(5-1)=16。

50.A解析:C语言规定,赋值号的右边可以是一个赋值表达式,因此选项C)、选项D)正确;在选项B)中,a++是一个自加1的表达式,a被重新赋值,因此它是一个合法的赋值表达式;在选项A)中,a+d是一个算术表达式,虽然最后有一个分号,但这个表达式中没有赋值操作,因此它不是一条赋值语句。

51.C解析:在数据库系统中,由于采用的数据模型不同,相应的数据库管理系统(DBMS)也不同。目前常用的数据模型有三种:层次模型、网状模型和关系模型。在层次模型中,实体之间的联系是用树形结构来表示的,其中实体集(记录型)是树中的结点,而树中各结点之间的连线表示它们之间的关系。因此,本题的正确答案是C。

52.B解析:本题中的答案A与D都缺少“;”,而答案C中,表达式是不能独立成为语句的,答案B使用了C语言的自减运算符它就相当于D=D-1,所以答案B为一赋值语句。

53.B解析:数据元素在计算机存储空间中的位置关系与它们的逻辑关系不一定是相同的,而且一般不可能相同。数据的逻辑结构在计算机存储空间中的存放形式称为数据的存储结构,也称数据的物理结构。

54.C解析:当i不可以整除2时打印“*”然后打印“#”,不能整除2则执行continue,跳挝printf('#');语句,结束本次循环,返回到循环的起始点。当循环结束后,打印“$”。

55.A

56.D解析:实体联系模型中实体与实体之间的联系有一对一(1:1),一对多或多对一(1:m或m:1),多对多(m:n)其中一对一是最常用的关系。

57.B解析:本题自定义函数scrnp()的作用是比较字符串s1和s2的大小,如果s1<s2,函数返回s1的值,否则返回s2的值。若运行时依次输入abcd、abba和abc三个字符串,执打strcpy(string,scmp(str[0],str[1]));后,string的值为abba,再执行strcpy(string,scmp(string,str[2]));,由于scmp(string,str[2])返回string的值abba,再拷贝到字符串数组string中,所以本题输出abba。

58.A解析:条件表达式的一般形式为:表达式1?表达式2:表达式3;先求解表达式1,若为真则求解表达式2;若表达式1的值为假,则求解表达式3。本题中先判断i==j,不等,执行j=7;然后执行x=7。故本题为A。

59.A解析:本题考查while循环。先判断while循环的控制表达式是否成亢,发现a>b>c不成立,所以不执行循环。直接输出a、b、c的值。

60.A解析:C语言规定用户标识符由英文字母、数字和下划线组成,且第一个字符必须是字母或下划线,由此可见选项B),D)是错的;此外,C语言不允许用户将关键字作为标识符,而选项C)中的int是C语言的关键字。

61.C

62.A标识符不能与c编译系统已经预定义的、具有特殊用途的保留标识符(即关键字)同名,否则程序在编译时会出现错误。题目源程序中使用了已经预定义的关键字case,所以将出现错误。

63.D该程序中f函数的功能是交换两个位置字符的值,f函数共调用3次,依次更改了字符串中l和o、e和m、w和e的值,因此更改后的字符串的值是emoclew。

64.A

65.D需求分析常用的工具有4种:数据流图(DFD)、数据字典(DD)、判断树和判定表。PAD(问题分析图)、PFD(程序流程图)、N—S(盒式图)都是详细设计的常用工具,不是需求分析的工具。

66.B

67.D

68.C

69.C

70.B本题中执行fun(a)时,会取字符串a的第一个字母B,因为字母B的ASCIl码值为66,所以不会输出字母8,函数只会输出ASCIl码值为奇数的字母,字母Y的ASCIl码值为89,字母T的ASCIl码值为84,字母E的ASCII码值为69。因此B选项正确。

71.B\n软件工程包括三个要素:方法、工具和过程。软件工程方法为软件开发提供了”如何做”的技术。工具支付软件的开发、管理、文档生成;过程支持软件开发的各个环节的控制、管理。

\n

72.D

73.D因为在逻辑表达式中,两边的赋值表达式都成立,即值为1,故选择D选项。

74.B笛卡儿乘积运算。假设关系R和关系S的元数个数与属性个数分别为m和n。R×S表示R和S的笛卡儿积,R×S={(m+n)个属性的一个元组集合,每个元组的前m个属性值来自R的一个元组,后n个属性值来自S的一个元组的所有组合}。

连接。它是从两个关系的笛卡儿乘积结果中选取属性间满足一定条件的元组,它不能实现题目中给出的条件。

投影。它是从关系中挑选若干属性组成新的关系,它是对关系进行列操作的方法。

选择。它是从关系中找到满足条件的所有元组的操作,即不改变关系表中的属性个数但能减少元组个数的操作,它是对关系进行行操作的方法。

75.Ac语言规定标识符只能由字母、数字和下划线3种字符组成,且第一个字符必须为字母或下划线,排除D);用户定义标识符中大小写字母之间是有区别的并且应尽量做到”见名识意”,排除选项B)和c);C语言中还规定标识符不能为c语言的关键字,故选项A)叙述错误,正确答案是选项A)。

76.C

77.D

78.C函数f的功能是利用冒泡排序方法,将二维字符数组的前n行进行递增排序。

注意,本题目排序时整个字符串都交换。数组P排序后的结果为

79.As得到全局变量a的值为4,第一次循环返回l2,第二次循环返回l2,累加结果为28。

80.D[答案]D

[考点]软件工程基础

[评析]

面向对象=对象+类+继承+通过消息的通信

对象:一组属性及其上的操作的封装体

类:一组有相同属性和操作的对象的集合

继承:一个类为另一个类上的扩充的方式,子类继承父类,主要目的是代码复用

消息:对象间通信的手段

D是结构化程序设计或过程式(函数式)语言中的,一般的面向对象程序设计语言兼容这种方式,但不是其特征,故最佳选项为D

81.

【解析】for循环结束的标志是for后的一个语句,如果for后面直接跟一个分号,说明是一个空循环不执行任何功

82.voidfun(inta[][n],intn){inti,j;for(i=0;i<=""p="">for(j=0;j<=i;j++)/*矩形的下三角时,积相乘*/a[i][j]=a[i][j]*n;}首先从数组中找出要乘以n的元素。这其实就是找出将被挑出的元素在原数组中的分布规律的过程。通过观察得出,要被处理的元素下标的范围是从每行中第1个元素开始,直到列数等于该行行数为止。即数组下三角元素的列下标(j)小于等于(<=)行下标(j)。找到这个规律后,依次从数组中取得符合要求的元素,然后乘以n。2021-2022年江苏省徐州市全国计算机等级考试C语言程序设计学校:________班级:________姓名:________考号:________

一、单选题(20题)1.下列程序的输出结果是

#include"stdio.h"

#defineN3

#defineM3

voidfun(inta[M][N])

{printf("%d\n",*(a[1]+2));}

main()

{inta[M][N];

inti,j;

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

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

a[i][j]=i+j-(i-j);

fun(a);}

A.3B.4C.5D.6

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

A.函数名是属于用户标识符,需符合C语言对标识符的规定

B.形参只能是变量

C.为保证程序的正常运行,函数中定义的变量不能与其他函数中的变量同名

D.函数中定义的变量可以与其他函数中的变量同名

3.设n个待排序的记录关键字,则在堆排序中需要()个辅助记录单元。

A.1B.12C.60D.15

4.数据结构主要研究的是数据的逻辑结构、数据的运算和()。A.数据的方法B.数据的存储结构C.数据的对象D.数据的逻辑存储

5.有下列程序:程序执行后的输出结果是()。A.eeaabmmnhhirrstu

B.efgabcdmnopqhijkIrstuvwxyz

C.efgacdmopqhjkIrvwxyz

D.eefgaabcdmmnopqhhijkIrrstuvwxyz

6.软件测试的目的是()。

A.评估软件可靠性B.发现并改正程序中的错误C.改正程序中的错误D.发现程序中的错误

7.栈通常采用的两种存储结构是()。

A.顺序存储结构和链式存储结构B.散列方式和索引方式C.链表存储结构和数组D.线性存储结构和非线性存储结构

8.以下选项中,能表示逻辑值“假”的是()

A.1B.0.000001C.0D.100.0

9.以下程序的主函数中调用了在其面前定义的fun函数#include<stdio.h>...main(){doublea[15],k;k=fun(a);...}则以下选项中错误的fun函数首部是()。、A.doublefun(doublea[l5])

B.doublefun(double*a)

C.doublefun(doublea[])

D.doublefun(doublea)

10.A.A.75310246B.01234567C.76310462D.13570246

11.关于排序算法的以下说法,错误的是()

A.归并排序的平均时间复杂度O(nlogn),最坏时间复杂度O(n^2)

B.堆排序平均时间复杂度O(nlogn),最坏时间复杂度O(nlogn)

C.冒泡排序平均时间复杂度O(n^2),最坏时间复杂度O(n^2)

D.快速排序的平均时间复杂度O(nlogn),最坏时间复杂度O(n^2)

12.下面程序的输出结果是()。chars()="ABCD",*p;main(){for(p=s;p<s+4;p++)printf("%s\n",p);)

A.ABCDBCDCDDB.ABCDC.DCBAD.ABCDABCABA

13.下面C程序段中count++语句执行的次数为()A.15B.16C.31D.32

14.若有以下说明:chars1[]={"tree"},s2[]={"flower"};,则以下对数组元素或数组的输出语句中,正确的是()。

A.printf("%s%s",s1[5],s2[7]);

B.printf("%c%c",s1,s2);

C.puts(s1);puts(s2);

D.puts(s1,s2);

15.以下非法的赋值语句是

A.n=(i=2,++i);B.j++;C.++(i+1);D.x=j>0;

16.算法应该是()

A.程序B.问题求解步骤的描述C.要满足五个基本特性D.B和C

17.C语言中函数返回值的类型是由()决定的。

A.return语句中的表达式类型B.调用该函数的主调函数类型C.定义函数时所指定的函数类型D.以上说法都不正确

18.有以下程序:int*f(int*x,int*y){if(*x<*y)returnx;elsereturny;}main(){inta=7,b=8,*p,*q,*r;p=&a;q=&b;r=f(p,q);printf("%d,%d,%d\n",*p,*q,*r);}程序运行后输出结果是______。

A.7,8,8B.7,8,7C.8,7,7D.8,7,8

19.用链接方式存储的队列,在进行删除运算时()。

A.仅修改头指针B.仅修改尾指针C.头、尾指针都要修改D.头、尾指针可能都要修改

20.查找较快,且插入和删除操作也比较方便的查找方法是

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

二、2.填空题(20题)21.在算法的4个特性中,算法必须能在执行有限个步骤之后终止指的是算法的______特性。

22.下列程序的功能是将字符串s中所有的字符c删除。请填空。

#include<stdio.h>

main()

{chars[80];

inti,j;

gets(S);

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

if(s[i]!='c')______;

s[j]='\0;

puts(S);

}

23.数据结构分为逻辑结构与存储结构,线性链表属于【】。

24.下列程序的运行结果是______。

#include<stdio.h>

main()

{inta=10,b=3;

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

printf("%d,",(a-b,a+b));

printf("%d\n",a-b?a-b:a+b);

}

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

#include<string.h>

main()

{printf("%d\n",strlen("IBM\n012\1\\"));}

26.常用的黑箱测试有等价类划分法、【】和错误推测法3种。

27.函数voidfun(float*sn,intn)的功能是:根据以下公式计算s,计算结果通过形参指针sn传回;n通过形参传入,n的值大于等于0。请填空。

voidfun(float*sn,intn)

{floats=0.0,w,f=-1.0;

inti=0;

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

{f=【】*f;

w=f/(2*i+1);

s+=w;}

【】=s;}

28.下列程序的运行结果是______。

#definePOW(r)(r)*(r)

main()

{intx=3,y=2,t;

t=POW(x+y);

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

}

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

#include<stdio.h>

voidswap(int*a,int*b)

{int*t;

t=a;a=b;b=t;

}

main()

{inti=3,j=5,*p=&i,*q=&j;

swap(p,q);printf("%d%d\n",*p,*q);

}

30.下面程序的功能是将字符串a下标值为偶数的元素由小到大排序,其他元素不变,请填空。

#include<stdio.h>

main()

{chara[]="labchmfye",t;

inti,j;

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

for(j=i+2;j<9;【】)

if(【】)

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

puts(a);

printf("\n");

}

31.以下程序运行后输入:3,abcde<回车>,则输出结果是______。

#include<string.h>

move(char*str,intn)

{charcemp;inti;

temp=str[n-1];

for(i=n-1;i>0;i--)str[i]=str[i-1);

str[0]=temp;}

main()

{chars[50];intn,i,z;

scanf(“%d,%s”,&n,s);

z=strlen(s);

for(i=1;i<=n;i++)move(s,z);

printf(“%s\n”,s);

}

32.面向对象的模型中,最基本的概念是对象和______。

33.在关系模型中,把数据看成一个二维表,每一个二维表称为一个______。

34.以下函数rotate的功能是:将a所指N行N列的二维数组中的最后一行放到b所指二维数组的第。列中,把a所指二维数组中的第0行放到b所指二维数组的最后一列中,b所指二维数组中的其他数据不变。

#defineN4

voidrotate(inta[][N],intb[][N])

{int,i,j;

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

{b[i][N-1]=【】;

【】=a[N-1][i];

}

}

35.以下程序的功能是:求出数组x中各相邻两个元素的和依次存放到a数组中,然后输出。请填空。

main()

{intx[10],a[9],i;

for(i=0;i<10;i++)scanf("%d",&x[i]);

for([11];i<10;i++)

a[i-1]=x[i]+[12];

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

printf("");

}

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

#include<stdio.h>

main()

{inta[5]={2,4,6,8,10},*p;

p=a;p++;

printf("%d",*p);

}

37.数据库系统的主要特点为数据集成性、数据的高______和低冗余性、数据独立性和数据统一管理和控制。

38.下列程序段的输出结果是【】。

main()

{charb[]="Hello,you";

b[5]=0;

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

}

39.以下程序调用invert函数按逆序重新放置a数组元素的值。a数组中的值在main函数中读入。

#include<stdio.h>

#defineN10

invert(s,i,j)

int*s,i,j;

{intt;

if(i<j)

{t=*(s+i);

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

*(s+j)=t;

invert(s,【】,j-1);

}

}

main()

{

inta[N],i;

for(i=0;i<N;i++)scanf("%d",a+【】);

invert(a,0,N-1);

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

printf("\n")

}

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

mam()

{

chara[]="123456789",*p;

inti=0;

p=a;

while(*p)

{

if(i%2=0)

*p='*';

p++;i++;

}

puts(A);

}

三、1.选择题(20题)41.设有以下说明语句:structex{intx;flocty;charz;}example;则下面的叙述中不正确的是()

A.struct是结构体类型的关键字

B.example是结构体类型名

C.x,y,z都是结构体成员名

D.structex是结构体类型

42.有以下程序:#include<stdio.h>main(){charc[6];inti=0;for(j<6;c[i]=getchar(),i++);for(i=0,i<6;i++)putchar(c[i]);printf("\n");}如果从键盘上输入:ab<回车>c<回车>def<回车>则输出结果为______。

A.abcdefB.abcdC.abcdD.abcdef

43.已知字母A的ASCII码值是65,字母a的ASCII码值是97,以下程序______。main(){chara='A';intb=20;printf(%d,%0",(a=a+a,a+b,B),a+'a'-'A',B);}

A.表达式非法,输出零或不确定值

B.因输出项过多,无输出或输出不确定值

C.输出结果为20,141

D.输出结果为20,141,20

44.设有说明语句如下:staticcharstr[]="Beijing";若执行下列输出语句:printf("%d\n",strlen(strcpy(str,"China")));则输出结果为()。

A.5B.7C.12D.14

45.若有定义:char*st="howareyou";下列程序段中正确的是

A.chara[11],*p;strcpy(p=a+1,&st[4]);

B.chara[11];strcpy(++a,st);

C.chara[11];strcpy(a,st);

D.chara[],*p;strcpy(p=&a[1],st+2);

46.若x=10010111,则表达式(3+(int)(x))&(~3)的运算结果是()。

A.10011000B.10001100C.10101000D.10110000

47.若有以下定义和语句:inta=010,b=0×10,c=10;printf("%d,%d,%d\a",a,b,C);则输出结果是()。

A.8,10,10B.10,10,10C.8,8,10D.8,16,10

48.以下程序的输出结果是()main(){intb[3][3]={0,1,2,0,1,2,0,1,2},i,i,t=1;for(i=0:i<3;i++)for(j=j;j<=i;j++)t=t+b[i][j]printf("%d\n",t);}

A.3B.4C.1D.9

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

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

50.若a、b、c、d都是血型变量且都已经正确赋初值,则下列不正确的赋值语句是()。

A.a+d;B.a++;C.a=b=c=d=100;D.a=(b=3)+(d=5);

51.用树形结构表示实体之间联系的模型是

A.关系模型B.网状模型C.层次模型D.以上三个都是

52.以下合法的赋值语句是______。

A.X=Y=100B.D-;C.X+Y;D.C=int(A+B)

53.数据的存储结构是指______。

A.数据所占的存储空间量B.数据的逻辑结构在计算机中的表示C.数据在计算机中的顺序存储方式D.存储在外存中的数据

54.以下程序的输出结果是_______。#include<stdio.h>main(){inti;for(i=1;i<5;i++){if(i%2)printf("*");elsecontinue;printf("#");}printf("$\n");}

A.*#*#*#$B.#*#*#*$C.*#*#$D.#*#*$

55.下述程序段的输出结果是()intx=10;inty=x++;8printf("%d,'%d,(x++,y),y++);

A.11,10B.11,11C.10,10D.10,11

56.实体一联系模型中,实体与实体之间的联系不可能是

A.一对一B.多对多C.一对多D.一对零

57.对于下面的程序#include<stdio.h>#include<string.h>char*scmp(char*s1,char*s2){if(strcmp(s1,s2)<0)return(s1);elsereturn(s2);}main(){inti:charstring[20],sb[3][20];for(i=0;i<3;i++)gets(str[i]);strcpy(string,scmp(str[0],str[1]));strcpy(string,scmp(string,str[21));printf("%s\n",string);}若运行时依次输入abcd、abba和abc三个字符串,则输出结果为______。

A.abcdB.abbaC.abcD.abca

58.下面程序输出的结果是______。main(){inti=5,j=9,z;x=(i==j?i:(j=7));printf(:\n%d,%d",i,j);}

A.5,7B.5,5C.语法错误D.7,5

59.有下列程序main(){intt,a=1,b=5,c=-2;while(a>b>c){t=a;a=b;b=t;c++;}printf("%d,%d,%d",a,b,c);}程序输出的结果是()。

A.1,5,0B.1,5,-2C.5,1,-1D.5,1,-2

60.下列是合法的用户自定义标识符的是()。

A._w1B.3_xyC.intD.LINE-3

四、选择题(20题)61.

62.阅读以下程序:

该程序在编译时产生错误,原因是()。

A.定义语句出错,Case是关键字,不能用作用户自定义标识符

B.定义语句出错,printF不能用作用户自定义标识符

C.定义语句无错,sCanf不能作为输入函数使用

D.定义语句无错,printf不能输出Case的值

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

A.eelcomwB.weoclnleC.welcomeD.emoclew

64.

65.下列工具中为需求分析常用工具的是()。

A.PADB.BFDC.N-SD.DFD

66.

67.

68.

69.

70.有以下程序(说明:字母A的ASCIl码值是65):

程序运行后的输出结果是()。

A.BTB.YEC.YTD.BY

71.下面不属于软件工程三要素的是()。

A.方法B.环境C.工具D.过程

72.

73.语句:“printf("%d",(a=)&&(b=-2));”的输出结果是()。

A.无输出B.结果是不确定C.-1D.1

74.在下列关系运算中,不改变关系表中的属性个数但能减少元组个数的是

A.连接B.选择C.投影D.笛卡儿乘积

75.以下叙述中错误的是()。

A.用户所定义的标识符允许使用关键字

B.用户所定义的标识符应尽量做到“见名识意”

C.用户所定义的标识符中,大、小写字母代表不同标识

D.用户所定义的标识符必须以字母或下划线开头

76.

77.

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

A.2B.4C.6D.3

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

A.28B.24C.32D.36

80.下面概念中,不属于面向对象方法的是()。A.对象B.继承C.类D.过程调用

五、程序改错题(1题)81.下列给定的程序中,函数proc()的功能是:用选择法对数组中的m个元素按从小到大的顺序进行排序。

例如,排序前的数据为:1132-5214

则排序后的数据为:-52111432

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

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

试题程序:

六、程序设计题(1题)82.使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。此程序定义了N×N的二维数组,并在主函数中自动赋值。请编写函数该函数的功能是使数组下三角元素中的值乘以n。注意:部分源程序给出如下。请勿改动函数main()和其他函数中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。试题程序:#include<stdio.h>#include<conio.h>#include<stdlib.h>#defineN5voidfun(inta[][N],intn){}main(){inta[N][N],n,i,j;printf(“*****Thearray*****\n”);for(i=0;i<n;i++)<p=""></n;i++)<>{for(j=0;j<=""p="">{a[i][j]=rand()%10;printf(“%4d”,a[i][j]);}printf(“\n”);}n=rand()%4;printf(“n=%4d\n”,n);fun(a,n);printf(“*****TheResult*****\n”);for(i=0;i<=""p="">{for(j=0;j<=""p="">printf(“%4d”,a[i][j]);printf(“\n”);}}

参考答案

1.B解析:若有以下定义:inta[3][4],i,j;且当0<=i<3,0<=j<4,则可以有以下几种方式来引用数组中的第i行,第j列的元素:a[i][j],*(a[i]+j),*(*(a+i)+j),(*(a+i))[j],*(&a[0][0]+4*i+j)。

2.C解析:本题考查函数调用时参数的作用域。在函数调用时,函数体内定义的变量的作用域连函数体内,因而在不同函数体内定义的变量可以相同,不影响各个变量的使用。

3.A

4.B详细解答:

数据结构是研究数据元素及其之间的相互关系和数据运算的一门学科,它包含3个方面的内容,即数据的逻辑结构、存储结构和数据的运算。

5.C程序定义一个二维字符数组a,使用5个字符串对其初始化。另外定义字符指针数组P。for循环中,每次将数组a当前下标为i的字符串首地址赋给P[i],再求得P[i]的长度赋给len,第1个printf输出p[i]字符串的首字母,第2个printf输出p[i]字符串下标从len/2开始的子字符串。当下标i=0时输出efg;当下标i=l时输出acd;当下标i=2时输出mopq;当下标i=3时输出hjkl;当下标i=4时输出rvwxyz。所以程序输出:efgacdmopqhjklrvwxyz。本题答案为C选项。

6.D软件测试是为了发现错误而执行程序的过程,测试要以查找错误为中心,而不是为了演示软件的正确功能,也不是为了评估软件或改正错误,因此本题答案为D)。

7.A解析:和线性表类似,栈也有两种存储方法,一是顺序栈,二是链式栈。栈的顺序存储结构是利用一组地址连续的存储单元一次存储自栈底到栈顶的数据元素,同时附设指针top指示栈顶元素的位置,由于栈的操作是线性表操作的特例,相对而言,链式栈的操作更易于实现。注意:这3种运算方法在各种存储结构中的应用。

8.C\n本题考查逻辑值假,在程序中非0字符表示逻辑真,0表示逻辑假,所以答案选择C。

\n

9.A由题可知f

温馨提示

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

评论

0/150

提交评论