logo资料库

2008年四川西南交通大学程序设计与数据结构.doc

第1页 / 共9页
第2页 / 共9页
第3页 / 共9页
第4页 / 共9页
第5页 / 共9页
第6页 / 共9页
第7页 / 共9页
第8页 / 共9页
资料共9页,剩余部分请下载后查看
2008 年四川西南交通大学程序设计与数据结构 一、填空题(本大题共 20 个空,每空 1 分,共 20 分) 1、设有定义:int x=1, y=2; 则表达式:2.0+x/y 的值为: 。 2、在 C 语言中字符串的存放,其最后一个字符称为“空字符”,也叫字符串的结束符, 对应的转义字符是 ,其值为 。 3、设有宏定义:#define AA 2-3 ,则 3*AA 的宏替换结果是 4、设有定义:int a=3, b=2, c=1 ,则表达式:a>b>c 的值是 。 。 5、定义一个名为 a 的二维数组,并对数组元素赋初值,其值为下列矩阵,则对应的定 义语句为: 。 1.0 3.3 3.8 5.0 2.6 9.8 6、设有定义:char s[]=”SWJTU”; 则数组占用的内存为 字节,s[5]的值 为 。 7、若有定义: inta[5],*p=a ;则*(p+3)表示 ;*p+3 表示 。 8、在具有 n 个元素单元的循环队列中,若采用少用一个元素来解决队空队满时都有头 尾指针相等的问题,队满时共有 个元素。 9、带一个头结点的单链表 head 为空的条件是 。 10、二维数组 A[10][20]采用列序为主序存储,每个元素占一个存储单元,并且 A[0][0] 的存储地址是 200,则 A[6][12]的地址是 。 11、深度为 k 的完全二叉树至少有 个结点,至多有 个结点。 12、在一棵二叉树中,度数为零的结点个数为 n0,度数为 2 的结点个数为 n2,则有 n0= 。 13、在无向图 G 的邻接矩阵 A 中,若 A[i][j]等于 1,则 A[j][i]等于 14、对 n 个元素的序列进行冒泡排序时,最少的比较次数是 。 。 15 、 以 折 半 查 找 方 法 查 找 一 个 线 性 表 时 , 此 线 性 表 必 须 是 存 储 的 表。 二、单项选择题(本大题共 30 小题,每小题 1 分,共 30 分。在每小题列出的四个选项中只 有一个选项是符合题目要求的答案)
1、若有以下定义语句: char ; int b ;float c ;double d:则表达式 a+b*c-d 的值的 类型是【 】。 A.char B.int C.float D.double 2、以下程序段中与语句 k=a>b?(b>c?1:0):0;功能等价的是【 】。 A.if((a>b)&&(b>c)) k=1; else k=0; B.if((a>b)||(b>c)) k=1; else k=0; C.if(a<=b) k=0 ;else if(b<=c) k=0 ;else k=1; D.if(a>b) k=1 ;else if(b>c) k=1 ;else k=0; 3、若程序中定义了以下函数,并将其放在调用语句之后,则在调用前需对该函数进行说明, 以下选项中错误的说明是【 】。 double myadd(double a,double b) { return (a+b) ;} A.double myadd (double a,b); B.double myadd (double ,double); C.double myadd (double b,double a); D.double myadd (double x, double y) 4、假定 a 和 b 均为 int 型变量,则执行以下程序段后, b 的值是【 】。 a=1; b=10; do{b-=a ;a++ ;} while (b--<0); A.9 B.-2 C.-1 D.8 5、语句: printf(“%d” ,strlen(“abc\n012\1\\”)); 的输出结果是【 】。 A.9 B.10 C.11 D.12 6、设有定义:int n=0,*P=&n , **q=&p ;则以下选项中,正确的赋值语句是【 】。 A.p=1; B.*q=2; C.q=p D.*p=5 7、设有变量定义: int a[10]={1,2,3,4,5,6,7,8,9,10}, *P=&a[3],b;则执行赋值语句 b=p[5];后 b 的值是【 】 A.5 B.6 C.8 D.9 8、在函数定义中未指定返回值类型,则其隐含的返回值类型是【 】。 A.void B.int C.float D.编译出错 9、若有函数原型: viod f( int a[ ]); 和数组定义 int a[10];则以下函数调用错误的 是【 】。 A.f(a) B.f(a+2) C.f(a[0]) D.f(&a[0])
10、设 k 为整型变量,与表达式 (!k)值完全相同的表达式是【 】。 A.k==0 B.k==1 C.k!=0 D.k!=1 11、以下程序运行后,输出结果是【 】。 int b ; void MyFunc( int a,int *c) {b=(a++) + (*c)++; } void main(void) { int a, c ; a=1 ;b=2 ;c=3 ; MyFunc (c, &a); printf(“%d%d%d”,a ,b ,c ); } A.144 B.243 C.123 D.143 12、以下函数的功能是【 】。 int fun(char *s1 ,char *s2) { int i=0 ; while(s1[i]=s2[i]&&s2[i]!=’\0’)i++; return(s1[i]==’\0’&&s2[i]==’\0’); } A.将 s2 所指字符串赋给 s1 B.比较 s1 和 s2 所指字符串的大小,若 s1 比 s2 的大,函数值为 1,否则函数值为 0 C.比较 s1 和 s2 所指字符串是否相等,若相等,函数值为 1,否则函数值为 0 D.比较 s1 和 s2 所指字符串的长度,若 s1 比 s2 的长,函数值为 1,否则函数值为 0 13、以下程序段是从键盘上依次输入数据给数组元素,程序的下划线处应填上【 】。 void main (void) { int a[20] ,i=0; while(i<20) scanf(“%d”, ); } A.&a[i] B.&a[i+1] C.&a[i++] D.&a[i]++ 14、若文件型指针 fp 已指向某文件的末尾,则函数 feof(fp)的返回值是【 】。
A.0 B.-1 C.NULL D.非零值 15、在数据结构中,从逻辑上可以把数据结构分成【 】。 A.动态结构和静态结构 B.紧凑结构和非紧凑结构 C.线性结构和非线性结构 D.内部结构和外部结构 16、在以下叙述中,正确的是【 】。 A.线性表的顺序存储结构优于链式存储结构 B.二维数组是其数据元素为线性表的线性表 C.栈的操作方式是先进先出 D.队列的操作方式是先进后出 17、一个栈的入栈序列式 a ,b ,c ,d ,e ,则不可能的出栈序列是【 】。 A.edcba B.decba C.dceab D.abcde 18、若已知一个栈的入栈序列是 1, 2, 3, ……, n ,其输出序列为 p1 ,p2 , p3, …… ,pn, 若 p1=n,则 p1 为【 】。 A.i B.n=I C.n-i+1 D.不确定 19、循环队列用数组 A[m]存放其元素值,已知其头尾指针分别是 front 和 rear,则当前队 列中的元素个数是【 】。 A.(rear-front+m)%m B.rear-front+1 C.rear-front -1 D.rear-front 20 、 设 串 s1=””ABCDEFG, s2=”PQRST”, 函 数 con(x,y) 返 回 x 和 y 串 的 连 接 串 , subs(s ,I ,j)返回串 s 的从序号 i 的字符开始的 j 个字符组成的子串 , len(s)返回串 s 的长度,则 con(subs(s1 ,2 , len(s2)), subs(s1 ,len (s2),2 )))的结果串是【 】。 A.BCDEF B.BCDEFG C.BCPQRST D.BCDEFEF 21、设矩阵 A 是一个对称矩阵,为了节省存储空间,将其下三角部分按行序存放在一维数组 B[n(n-1)/2]中,对下三角部分中任一元素 ai,j(i≥j),在一维数组 B 中下标 k 的值是【 】。 A.i(i-1)/2+j-1 B.i(i-1)/2+j C.i(i+1)/2+j-1 D.i(i+1)/2+j 22、设高度为 h 的二叉树上只有度为 0 和度为 2 的结点,则此类二叉树中所包含的结点数至 少为【 】。 A.2h B.2h-1 C.2h+1 D.h+1 23、在一个具有 n 个顶点的无向图中,要连通全部顶点至少需要【 】条边。 A.n B.n+1 C.n-1 D.n/2 24、设哈希表长 m=14,哈希函数 H(key)=key%11.表中已有 4 个结点: addr(15)=4,
addr(38)=5,addr(61)=6,addr(84)=7,其余地址为空,如用线性探测在散列处理冲突,关 键字为 49 的节点的地址是【 】。 A.3 B.4 C.5 D.6 25、哈希表长度为 m,哈希函数 H(K)=K%P,一般来说 P 应取小于 m 的最大【 】。 A.奇数 B.偶数 C.素数 D.合数 26、若用邻接矩阵表示一个有向图,则其中每一列包含的 1 的个数为【 】。 A.图中顶点的入度 B.图中顶点的出度 C.图中弧的条数 D.图中连通分数的数目 27、在对 n 个关键字进行直接选择排序的过程中,每一趟都要从无序区选出最小关键字元素, 则在进行第 i 趟排序之前,无序区中关键字元素的个数为【 】。 A.i B.i+1 C.n-i D.n-i+1 28、下列排序算法中,其时间复杂度和记录的初始排列无关的是【 】。 A.插入排序 B.堆排序 C.快速排序 D.冒泡排序 29、对 20 个有序记录进行折半查找,查找成功的平均查找长度为【 】。 A.5 B.37/10 C.39/10 D.41/10 30、当初始数据有序时,不应采用【 】。 A.堆排序 B.快速排序 C.基数排序 D.希尔排序 三、阅读程序,按提示给出结果(共 5 小题,每小题 4 分,共 20 分)。 1、下面的函数 Func 的功能是 float Func (float a[ ], int N) { int i, float s; for(i=0,s=0; i
case 1:b++;break; } case 2:a++;b++;break; } printf(“%d %d\n”,a ,b); } 3、以下程序运行后的输出结果是 。 void main (void) { int i=0,s=0; for(::) { i++; if(i==3||i==5) continue; if(i==6) break; s+=i; } printf(“%d\n”,s); } 4、下面程序运行时,若输入 234,则输出结果是 。 unsigned Func (unsigned Num) { unsigned k=1; do{k*=Num%10;Num/=10;}while (Num); return k; } void main(void) { unsigned n; scanf(“%u”,&n); printf(“%d”,Func(n)); } 5、下面程序运行时,若输入: 口口-893abc193,则输出结果是 。 int IsDigit (char c)
{ return (c<’0’||c>’9’)?0:1:} long Func(char s[ ]) { long n; int Sign ; for(:*s==’口’:s++); //口 表示空格 Sign=(*s==’-’)?-1:1; if(*s==’+’||*s==’-’)s++; for(n=0L:IsDigit(*s) :s++) n=10*n+(*s-‘0’); return n*Sign; } void main (void) { char s[81]; gets(s); printf(“%ld”,Func(s)); } 四、程序填空(本大题共 10 个空,每空 2 分,共 20 分) 1、以下程序从键盘输入数据到数组中,统计其中正数的个数,并计算它们之和。请填空。 void main(void) { int i,a[20],sum,count; sum=count=0; for(i=0;i<20;i++) scanf(“%d”, 【1】 ) ; for(i=0;i<20;i++) { if(a[i]>0) { count++; sum+= 【2】 ; } } printf(“Count=%d ,Sum=%d”,count,sum); } 2、以下函数的功能是删除字符串 s 中的所有数字字符,请填空。 void DelSpace (char *s)
{ int n=0,i; for(i=0; s[i]; i++) if( 【3】 ) s[n++]=s[i]; s[n]= 【4】 ; } 3、下面是折半查找算法,请填空。 int Search_Bin (SSTable ST , KeyType key) { low =1 ;high=ST.length; //置区间初值 while(low<=high) { mid= 【5】 ; if(ST.elem[mid].key=key) return mid ; //找到待查元素 else if(key
分享到:
收藏