一、选择题(每小题1分,共40分)

(1)下列叙述中正确的是

A)一个逻辑数据结构只能有一种存储结构

B)数据的逻辑结构属于线性结构,存储结构属于非线性结构

C)一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理的效率

D)一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理的效率

(2)线性表的顺序存储结构和线性表的链式存储结构分别是

A)顺序存取的存储结构、随机存取的存储结构

B)随机存取的存储结构、顺序存取的存储结构

C)随机存取的存储结构、随机存取的存储结构

D)任意存取的存储结构、任意存取的存储结构

(3)某二叉树的前序遍历为EFHIGJK,中序遍历为HFIEJKG,则该二叉树根的右子树的根是

A)E B)F C)G D)H

(4)已知数据表A中每个元素距其最终位置不远,为节省时间,应采用的算法是

A)堆排序   B)直接插入排序  C)快速排序  D)直接选择排序

(5)在面向对象的方法中,类的实例称为

A) 对象  B)实体  C)属性  D)方法

(6)在软件工程中,白盒测试法可用于测试程序的内部结构。此方法将程序看做是

A) 循环的集合 B)地址的集合  C)路径的集合  D)目标的集合

(7)检查软件产品是否符合需求定义的过程称为

A)确认测试   B)集成测试   C)系统测试   D)验收测试

(8)程序流程图(PFD)中的箭头代表的是

A)数据流   B)控制流   C)调用关系   D)组成关系

(9)数据库系统的核心是

A)数据模型 B)数据库管理系统 C)数据库 D)数据库管理员

(10)设有关系R,S和T如下。关系T是由关系R和S经过哪种操作得到的

A)R∪S B)R – S C)R×S D)R∞S

(11) 下列C语言常量中,错误的是

A) 0xFF B) 1.2e0.5 C) 2L D) ‘\72’

(12) 下列选项中,合法的C语言关键字是

A) VAR B) cher C) integer D) default

(13) 若a为int类型,且其值为3,则执行完表达式a+=a-=a*a后,a的值是

A) -12 B) -3 C) 6 D) 9

(14)设有定义 int x=3,y=3,t;,语句 t=++x||++y;执行后,y的值为

A) 1 B) 3 C) 4 D) 不定值

(15)设有定义int x=3; char z=’a’; ,则语句printf(“%d\n”, (x&1)&&(z<'z'));的输出结果是

A) 0 B) 1 C) 2 D) 3

(16) 若执行以下程序时从键盘上输入9,则输出结果是

int main()

{

int n;

scanf(“%d”,&n);

if(n++<10) printf("%d\n",n);

else printf(“%d\n”,n–);

return 0;

}

A)8 B)9 C) 10 D) 11

(17) 若a、 b、c1、c2、x、y、均是整型变量,正确的switch语句是

A) swich(a+b); B) switch(a*a+b*b)

{ case 1:y=a+b; break; { case 3:

case 0:y=a-b; break; case 1:y=a+b;break;

} case 3:y=b-a,break;

}

C) switch a D) switch(a-b)

{ case c1 :y=a-b; break { default:y=a*b;break

case c2: x=a*d; break case 3:case 4:x=a+b;break

default:x=a+b; case 10:case 11:y=a-b;break;

} }

(18) 有如下程序

int main()

{

int a=2,b=-1,c=2;

if(a<b)

if(b<0) c=0;

else c++;

printf(“%d\n”,c);

return 0;

}

该程序的输出结果是

A) 0 B) 1 C) 2 D) 3

(19) 有如下程序

int main()

{

int x=1,a=0,b=0;

switch(x){

case 0: b++;

case 1: a++;

case 2: a++;b++;

}

printf(“a=%d,b=%d\n”,a,b);

return 0;

}

该程序的输出结果是

A) a=1,b=0 B) a=1,b=1 C) a=2,b=1 D) a=2,b=2

(20) 有如下程序

int main()

{

int x=3;

do

{

printf(“%d “,x-=2);

}while (!(–x));

return 0;

}

其输出结果是

A) 1 B) 1 -2 C) 3 0 D) 死循环

(21) 若变量c为char类型,能正确判断出c为小写字母的表达式是

A) ‘a’<=c= ‘a’)||(c<= ‘z’)

C) (‘a’=c) D) (c>= ‘a’)&&(c<= ‘z’)

(22) 设有说明语句:char a=’\72’;则变量a

A) 包含1个字符 B) 包含2个字符 C) 包含3个字符 D) 说明不合法

(23) 有如下说明int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;,则数值为9的表达式是

A) *P+9 B) *(P+8) C) *P+=9 D) P+8

(24) 下列各函数首部中,正确的是

A) void play(var :Integer,var b:Integer)

B) void play(int a,b)

C) void play(int a,int b)

D) Sub play(a as integer,b as integer)

(25) 下列程序段的输出结果是

void fun(int *x, int *y)

{ printf(“%d %d “, *x, *y); *x=3; *y=4;}

int main()

{

int x=1,y=2;

fun(&y,&x);

printf(“%d %d “,x, y);

return 0;

}

A) 1 2 1 2 B) 1 2 3 4 C) 2 1 1 2 D) 2 1 4 3

(26) 设有定义 int a[]={1,2,3,4,5,6,7,8,9,0,},*p=a;,则语句printf(“%d\n”,*p+9);的输出结果是

A) 0 B) 1 C) 9 D) 10

(27) 当调用函数时,实参是一个数组名,则向函数传送的是

A) 数组的长度 B) 数组的首地址

C) 数组每一个元素的地址 D) 数组每个元素中的值

(28) 设有以下说明语句

struct ex

{ int x ; float y; char z ;} example;

则下面的叙述中不正确的是

A) struct结构体类型的关键字 B) example是结构体类型名

C) x,y,z都是结构体成员名 D) struct ex是结构体类型

(29) 下列只有在使用时才为该类型变量分配内存的存储类说明是

A) auto和 static B) auto和 register

C) register和 static D) extern和 register

(30) 若fp是指向某文件的指针,且已读到文件末尾,则库函数feof(fp)的返回值是

A) EOF B) -1 C) 非零值 D) NULL

(31) 下列程序的输出结果是

int main()

{

int i, k, a[10], p[3];

k=5;

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

for (i=0;i<3;i++) p[i]=a[i *(i+1)];

for (i=0;i<3;i++) k+=p[i] *2;

printf(“%d\n”,k);

return 0;

}

A) 20 B) 21 C) 22 D)23

(32) 下列程序的输出结果是

int main()

{

int i, x[3][3]={1,2,3,4,5,6,7,8,9};

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

printf(“%d,”,x[i][2-i]);

return 0;

}

A) 1,4,7, B) 1,5,9, C) 3,5,7, D)3,6,9,

(33) 下列程序的输出结果是

int main()

{

int a[3][3]={ {1,2},{3,4},{5,6} },i,j,s=0;

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

for(j=0;j<=i;j++)s+=a[i][j];

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

return 0;

}

A) 18 B) 19 C) 20 D)21

(34) 下列程序的输出结果是

int main()

{

char w[][10]={“ABCD”,”EFGH”,”IJKL”,”MNOP”},k;

for(k=1;k<3;k++) printf("%s\n",w[k]);

return 0;

}

A) ABCD B) ABCD C) EFG D) EFGH

FGH EFG JK IJKL

KL IJ O

M

(35) 当执行下面的程序时,如果输入ABC,则输出结果是

int main()

{

char ss[10]=”1,2,3,4,5″;

gets(ss);

strcat(ss, “6789”);

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

return 0;

}

A) ABC67 B) ABC6789 C) ABC456789 D) 12345ABC6

(36) 下列程序的输出结果是

long fun(int n)

{ long s;

if(n==1 || n==2) s=2;

else s=n-fun(n-1);

return s;

}

int main()

{

printf(“%ld\n”, fun(3));

return 0;

}

A) 1 B) 2 C) 3 D) 4

(37) 下列程序的输出结果是

#define SQR(X) X*X

int main()

{

int a=16, k=2, m=1;

a/=SQR(k+m)/SQR(k+m);

printf(“%d\n”,a);

return 0;

}

A) 1 B) 2 C) 9 D) 16

(38) 若定义了以下函数:

void f(……)

{……

*p=(double *)malloc( 10*sizeof( double));

……

}

p是该函数的形参,要求通过p把动态分配存储单元的地址传回主调函数,则形参p的正确定义应当是

A) double *p B) float **p C) double **p D) float *p

(39) 下列程序的输出是

struct st

{ int x; int *y;};

int main()

{

int dt[4]={ 10,20,30,40 };

struct st aa[4]={ 50,&dt[0],60,&dt[0],60,&dt[0],60,&dt[0],};

struct st *p=aa;

printf(“%d\n”,++(p->x));

return 0;

}

A) 10 B) 11 C) 51 D) 60

(40) 假定建立了以下链表结构,指针p、q分别指向如图所示的结点,则以下可以将q所指结点从链表中删除并释放该结点的语句组是

A) free(q); p->next=q->next;

B) (*p).next=(*q).next; free(q);

C) q=(*q).next; (*p).next=q; free(q);

D) q=q->next; p->next=q; p=p->next; free(p);

二、程序填空题(18分)

给定程序中,函数fun的功能是:逆置数组元素中的值。

例如,若a所指数组中的数据依次为:1、2、3、4、5、6、7、8、9,则逆置后依次为:9、8、7、6、5、4、3、2、1。

请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。

注意:不得增行或删行,也不得更改程序的结构!

#include void fun(int a[], int n){    int t;    /**********found**********/    if (n< ___1___)  return ;    else    {       t=a[0];  a[0]=a[n-1]; a[n-1]=t;    /**********found**********/       fun(___2___ , ___3___);    }}int main(){    int  b[9]={1,2,3,4,5,6,7,8,9}, i;    printf("\nThe original data  :\n");    for (i=0; i<9; i++)       printf("%4d ", b[i]);    printf("\n");    fun(b, 9);    printf("\nThe data after invert  :\n");    for (i=0; i<9; i++)      printf("%4d ", b[i]);    printf("\n");}

三、程序修改题(18分)

给定程序中,函数fun的功能是:将n个无序整数从小到大排序。

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

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

#include #include void fun ( int  n, int  *a ){      int  i, j, p, t;    for ( j = 0; j<n-1 ; j++ )    {          p = j;    /************found************/        for ( i=j+1; i<n-1 ; i++ )           if ( a[p]>a[i] )    /************found************/              t=i;        if ( p!=j )        { t=a[j]; a[j]=a[p]; a[p]=t; }    }}void putarr(int n,  int *z){      int  i;    for (i=1; i<=n; i++,z++)    {          printf( "%4d", *z );        if (!(i%10))  printf("\n");    }     printf("\n");}int main(){      int  aa[20]={9,3,0,4,1,2,5,6,8,10,7}, n=11;    printf( "\n\nBefore sorting %d numbers:\n", n );     putarr( n, aa );    fun( n, aa );    printf( "\nAfter sorting %d numbers:\n", n );     putarr( n, aa );    return 0;}

四、程序设计题(24分)

编写函数fun,它的功能是:统计各年龄段的人数并存到b数组中,n个人员的年龄放在a数组中。年龄为1到9的人数存到b[0]中,年龄为10到19的人数存到b[1],年龄为20到29的人数存到b[2],年龄为30到39的人数存到b[3],年龄为40到49的人数存到b[4],年龄为50岁以上的人数存到b[5]中。

例如,当a数组中的数据为:9、18、27、38、59、33、14、75、38。调用该函数后,b数组中存放的数据应是:1、2、1、3、0、2。

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

#include void NONO(void);void fun(int a[], int b[], int n){    }int main(){    int i,a[10]={9,18,27,38,59,33,14,75,38}, b[6];    fun(a, b, 9);    printf("The result is: ");    for (i=0; i<6; i++)        printf("%d ", b[i]);    printf("\n");    NONO();    return 0;}void NONO(void){    FILE *rf, *wf ;    int a[10], b[6], i, j ;    rf = fopen("in1.dat", "r") ;    wf = fopen("out1.dat","w") ;    for(i = 0 ; i < 10 ; i++)    {      for(j = 0 ; j < 10 ; j++)         fscanf(rf, "%d,", &a[j]) ;      fun(a, b, 10) ;      for(j = 0 ; j < 6 ; j++)         fprintf(wf, "%d ", b[j]) ;      fprintf(wf, "\n") ;    }    fclose(rf);    fclose(wf);}

一、选择题( 1)~( 5): DBCBA          ( 6)~(10):  CABBB(11)~(15): BDABB          (16)~(20):  CDCCB(21)~(25): DABCD         (26)~(30):   DBBBC(31)~(35): BCADB         (36)~(40):   ABCCB二、程序填空题    (122)a+1  或 &a[1]    (3)n-2三、程序修改题    for (i=j+1; i<n ; i++)    p=i;四、程序设计题    void fun(int a[], int b[], int n)    {        int i;        for (i=0; i<6; i++)            b[i] = 0;        for (i=0; i<n;i++)            if (a[i] >= 50) b[5]++;            else b[a[i]/10]++;    } 

参考答案: