试题十.docx
《试题十.docx》由会员分享,可在线阅读,更多相关《试题十.docx(13页珍藏版)》请在冰豆网上搜索。
![试题十.docx](https://file1.bdocx.com/fileroot1/2022-10/29/4d9e2592-aea2-421f-a550-03bdb5d72c68/4d9e2592-aea2-421f-a550-03bdb5d72c681.gif)
试题十
C语言
第一大题(每题1分)
1、对字符数组str赋初值,str不能作为字符串使用的一个是____。
A)charstr[]="shanghai";
B)charstr[]={"shanghai"};
C)charstr[9]={'s','h','a','n','g','h','a','i'};
D)charstr[8]={'s','h','a','n','g','h','a','i'};
2、对函数形参的说明有错误的是____。
A)inta(floatx[],intn)B)inta(float*x,intn)
C)inta(floatx[10],intn)D)inta(floatx,intn)
3、如果一个变量在整个程序运行期间都存在,但是仅在说明它的函数内是可见的,这个变量的存储类型应该被说明为____。
A)静态变量B)动态变量C)外部变量D)内部变量
4、在一个C源程序文件中,若要定义一个只允许在该源文件中所有函数使用的变量,则该变量需要使用的存储类别是。
A)externB)registerC)autoD)static
5、在C语言中,函数的数据类型是指____。
A)函数返回值的数据类型B)函数形参的数据类型
C)调用该函数时的实参的数据类型D)任意指定的数据类型
6、以下程序的输出结果是____。
#include
main()
{unionEXAMPLE
{struct
{intx,y;
}in;
inta,b;
}e;
e.a=1;e.b=2;
e.in.x=e.a*e.b;
e.in.y=e.a+e.b;
printf("%d,%d\n",e.in.x,e.in.y);
}
A)2,3B)4,4C)4,8D)8,8
7、下面程序的输出结果是____。
#include
main()
{union
{inti[2];
longk;
charc[4];
}r,*s=&r;
s->i[0]=0x39;
s->i[1]=0x38;
printf("%c\n",s->c[0]);
}
A)39B)9C)38D)8
8、下面程序的输出是。
main()
{printf("%d\n",EOF);
}
A)-1B)0C)1D)程序是错误的
第二大题(程序填空题,每题4分)
1、下面程序的功能是从键盘上输入两个字符串,对两个字符串分别排序;然后将它们合并,合并后的字符串按ASCII码值从小到大排序,并删去相同的字符。
#include
strmerge(a,b,c)/*将已排好序的字符串a、b合并到c*/
char*a,*b,*c;
{chart,*w;
w=c;
while(*a!
='\0'①*b!
='\0')
{t=②?
*a++:
*b<*a?
*b++:
(③);/*将*a、*b的小者存入t*/
if(*w④'\0')*w=t;
elseif(t⑤*w)*++w=t;/*将与*w不相同的t存入w*/
}
while(*a!
='\0')/*以下将a或b中剩下的字符存入w*/
if(*a!
=*w)*++w=*a++;
elsea++;
while(*b!
='\0')
if(*b!
=*w)*++w=*b++;
elseb++;
*++w=⑥;
}
strsort(char*s)/*将字符串s中的字符排序*/
{inti,j,n;
chart,*w;
⑦;
for(n=0;*w!
='\0';⑧)
w++;
for(i=0;ifor(j=i+1;jif(s[i]>s[j])
{⑨}
}
main()
{chars1[100],s2[100],s3[200];
printf("\nPleaseInputFirstString:
");
scanf("%s",s1);
printf("\nPleaseInputSecondString:
");
scanf("%s",s2);
strsort(s1);
strsort(s2);
⑩='\0';
strmerge(s1,s2,s3);
printf("\nResult:
%s",s3);
}
2、已知某数列前两项为2和3,其后继项根据前面最后两项的乘积,按下列规则生成:
①若乘积为一位数,则该乘积即为数列的后继项;
②若乘积为二位数,则该乘积的十位上的数字和个位上的数字依次作为数列的两个后继项。
下面的程序输出该数列的前N项及它们的和,其中,函数sum(n,pa)返回数列的前N项和,并将生成的前N项存入首指针为pa的数组中,程序中规定输入的N值必须大于2,且不超过给定的常数值MAXNUM。
例如:
若输入N的值为10,则程序输出如下内容:
sum(10)=44
2361886424
#include"stdio.h"
#defineMAXNUM100
intsum(n,pa)
intn,*pa;
{intcount,total,temp;
*pa=2;
①=3;
total=5;
count=2;
while(count++{temp=*(pa-1)**pa;
if(temp<10)
{total+=temp;
*(++pa)=temp;
}
else
{②=temp/10;
total+=*pa;
if(count{count++;pa++;
③=temp%10;
total+=*pa;
}
}
}
④;
}
main()
{intn,*p,*q,num[MAXNUM];
do
{printf("InputN=?
(2",MAXNUM+1);
scanf("%d",&n);
}while(⑤);
printf("\nsum(%d)=%d\n",n,sum(n,num));
for(p=num,q=⑥;pprintf("%4d",*p);
printf("\n");
3、下面程序的功能是从键盘上顺序输入整数,直到输入的整数小于0时才停止输入。
然后反序输出这些整数。
#include
structdata
{intx;
structdata*link;
}*p;
input()
{intnum;
structdata*q;
printf("Enterdata:
");
scanf("%d",&num);
if(num<0)
①;
q=②;
q->x=num;
q->link=p;
p=q;
③;
}
main()
{printf("Enterdatauntildata<0:
\n");
p=NULL;
input();
printf("Output:
");
while(④)
{printf("%d\n",p->x);
⑤;
}
}
第三大题(写程序每题5分)
输出如图所示的数字金字塔
参考答案
第一大题
1、答案:
D
注释:
D选项缺少字符串结束标志。
2、答案:
C
注释:
此处函数形参是一个指针变量,接受实参的地址,而不是一个数组。
3、答案:
A
4、答案:
D
注释:
这里首先要明确一些基本概念。
在C语言中,程序与文件是不同的概念,一个程序可以由一个文件组成,也可以由多个文件组成;一个文件中又可以包含多个函数;函数是构成C程序的基本单位。
变量的作用域因变量的存储类型不同而不同。
auto和register类型的变量的作用域是说明变量的当前函数;外部变量的作用域是整个程序,即外部变量的作用域可以跨越多个文件;内部静态变量(定义在一个函数内部的static型的变量)的作用域是当前函数,外部静态变量(定义在函数外面的static型的变量)的作用域是当前文件,即可以跨越同一文件中的不同函数。
5、答案:
A
6、参考答案:
C
注释:
联合体成员的取值是最后一次给成员赋的值。
7、参考答案:
B
注释:
整型数组i和字符数组c共用存储空间,给i赋值也等于给c赋值,所以s->c[0]=0x39,所以输出9。
8、参考答案:
A
注释:
基本概念。
EOF是由C语言在头文件stdio.h中定义的,用户可以直接使用。
第二大题
1、答案:
①&&②*a<*b③*a++,*b++④==
⑤!
=⑥'\0'⑦w=s⑧n++
⑨t=s[i];s[i]=s[j];s[j]=t;⑩s3[0]
2、答案:
①*++pa②*++pa③*pa
④return(total)⑤n<=2||n>=MAXNUM+1⑥num+n
3、答案:
①return②(structdata*)malloc(sizeof(structdata))
③input()④p!
=NULL⑤p=p->next
第三大题
分析:
这是一个左右对称的图形,垂直中心线上的数字恰好是行号,在每行位于图形垂直中心线左方的数字是逐渐增加的,而右方是逐渐减小的。
j==i是分区的标志,左方输出数字就是列数j,而右方的数字从i开始逐步减小1。
参考答案:
main()
{inti,j;
for(i=1;i<=9;i++)
{for(j=1;j<=9-i;j++)printf("");
for(j=1;j<=i;j++)printf("%2d",j);
for(j=i-1;j>=1;j--)printf("%2d",j);
printf("\n");
}
}
数据结构
第一大题(每题2分)
1.在含n个顶点和e条边的无向图的邻接矩阵中,零元素的个数为()
A.eB.2eC.n2-eD.n2-2e
2.假设一个有n个顶点和e条弧的有向图用邻接表表示,则删除与某个顶点vi相关的所有弧的时间复杂度是()
A.O(n)B.O(e)C.O(n+e)D.O(n*e)
3.用某种排序方法对关键字序列(25,84,21,47,15,27,68,35,20)进行排序时,序列的变化情况如下:
20,15,21,25,47,27,68,35,84
15,20,21,25,35,27,47,68,84
15,20,21,25,27,35,47,68,84
则所采用的排序方法是()
A.选择排序B.希尔排序C.归并排序D.快速排序
4.适于对动态查找表进行高效率查找的组织结构是()
A.有序表B.分块有序表C.三叉排序树D.线性链表
5.不定长文件是指()
A.文件的长度不固定B.记录的长度不固定
C.字段的长度不固定D.关键字项的长度不固定
第二大题(每题5分)
1、已知一个无向图的顶点集为{a,b,c,d,e},其邻接矩阵如下所示
a
b
c
d
e
(1)画出该图的图形;
(2)根据邻接矩阵从顶点a出发进行深度优先