专升本C语言程序设计模拟考试题C.docx
- 文档编号:11056932
- 上传时间:2023-02-24
- 格式:DOCX
- 页数:18
- 大小:30.19KB
专升本C语言程序设计模拟考试题C.docx
《专升本C语言程序设计模拟考试题C.docx》由会员分享,可在线阅读,更多相关《专升本C语言程序设计模拟考试题C.docx(18页珍藏版)》请在冰豆网上搜索。
专升本C语言程序设计模拟考试题C
计算机科学与技术专业《基础知识》模拟试卷三
(考试时间150分钟,满分300分,共三部分)
第一部分C语言程序设计(共100分)
一、单项选择题(本大题共30小题,每小题2分,共60分)
1.下列各选项中,均是合法有效的标识符的是【】
A.3dayB.lowerC.day_3D.ab
Sum_daysabcdestudent_name
_oflotus_1_2_3defaultM.D.john
2.若希望当A的值为奇数时,表达式的值为“真”,A的值为偶数时,表达式的值为“假”。
则以下不能满足要求的表达式是
A.A%2==1B.!
(A%2==0)C.!
(A%2)D.A%2
3.下列程序的输出结果是【 】
#include
voidmain()
{
intx=1,y=0,a=0,b=0;
switch(x)
{
case1:
switch(y)
{
case0:
a++;break;
case1:
b++;break;
}
case2:
a++;b++;break;
case3:
a++;b++;break;
}
printf(“%d,%d\n”,a,b);
}
A.1,1B.2,1C.1,0D.2,2
4.以下关于switch语句和break语句的描述中,只有正确的是【】
A.在switch语句中必须使用break语句
B.在switch语句中,可以根据需要使用或不使用break语句
C.break语句只能用于switch语句中
D.break语句是switch语句的一部分
5.下面程序的输出是【】。
main()
{
intx=0x23;
printf(“%d\n”,--x);
}
A.18B.19C.34D.35
6.下列函数的输出结果是【 】
#include
intf1(intxb)
{
externintxa;
return(xa*xb);
}
voidmain(void)
{
externintxb;
intxa=5;
printf(“xa=%d,xb=%d,result=%d”,xa,xb,f1(xa));
return0;
}
intxa=3,xb=4;
A.3,4,12B.5,4,20C.5,4,15D.3,4,15
7.c语言规定,简单变量做实参时,它和对应形参之间的数据传递方式是
A.地址传递
B.由实参传给形参,再由形参传回给实参
C.单向值传递
D.由用户指定传递方式
8.以下程序中调用scanf函数给变量a输入数值的方法是错误的,其原因是【 】
voidmain()
{
int*p,a;
p=&a;
scanf(“%d”,*p);
……
}
A.*p表示的是指针变量p的地址
B.*p表示的是变量a的值,而不是变量a的地址
C.*p表示的是指针变量p的值
D.*p只能用来说明p是一个指针变量
9.下列程序段的输出结果是【】。
intx=3;
do
{
printf(“%2d\n”,x-=2);
}while(!
(――x))
A.1
B.1-2
C.30
D.是死循环
10.若有语句:
inta=4,*p=&a;下面均代表地址的一组选项是【】。
A.a,p,&*a
B.*&a,&a,*p
C.&a,p,&*p
D.*&p,*p,&a
11.下面程序输出的结果是
main()
{inti;
inta[3][3]={1,2,3,4,5,6,7,8,9};
for(i=0;i<3;i++)
printf("%d",a[2-i][i]);
}
A)159
B)753
C)357
D)591
12.下面函数的功能是
char*fun(char*str1,char*str2)
{while((*str1)&&(*str2++=*str1++));
returnstr2;
}
A)求字符串的长度
B)比较两个字符串的大小
C)将字符串str1复制到字符串str2中
D)将字符串str1接续到字符串str2中
13.下面函数调用语句含有实参的个数为
func((exp1,exp2),(exp3,exp4,exp5));
A)1 B)2 C)4 D)5
13.下面程序段的运行结果是
char*s="abcde";
s+=2;printf("%d",s);
A)cde
B)字符′c′
C)字符′c′的地址
D)无确定的输出结果
14.已有变量定义和函数调用语句:
inta=25;print_value(&a);下面函数的正确输出结果是
voidprint_value(int*x)
{printf("%d\n",++*x);}
A)23
B)24
C)25
D)26
15.当顺利执行了文件关闭操作时,fclose函数的返回值是
A)-1
B)TRUE
C)0
D)1
16.设有如下定义
char*s[2]={"abcd","ABCD"};
则下列说法错误的是
A)s数组元素的值分别是"abcd"和"ABCD"两个字符串的首地址
B)s是指针数组名,它含有两个元素分别指向字符型一维数组
C)s数组的两个元素分别存放的是含有4个字符的一维字符数组中的元素
D)s数组的两个元素中分别存放了字符′a′和′A′的地址
17.以下不能对二维数组a进行正确初始化的语句是
A)inta[2][3]={0};
B)inta[][3]={{1,2},{0}};
C)inta[2][3]={{1,2},{3,4},{5,6}};
D)inta[][3]={1,2,3,4,5,6};
18.有以下程序
structSTU
{charnum[10];floatscore[3];};
main()
{structSTUs[3]={{"20021",90,95,85},
{"20022",95,80,75},
{"20023",100,95,90},
},*p=s;
inti;floatsum=0;
for(i=0;i<3;i++)
sum=sum+p->score[i];
printf("%6.2f\n",sum);
}
程序运行后的输出结果是
A)260.00
B)270.00
C)280.00
D)285.00
19.若有说明:
inta[10];则对a数组元素的正确引用是
A)a[10]
B)a[3,5]
C)a(5)
D)a[10-10]
20.下面程序段中,输出*的个数是
char*s="\ta\018bc";
for(;*s!
=′\0′;s++)printf("*");
A)9
B)5
C)6
D)7
21.设有如下函数
fun(floatx)
{
printf("\n%d",x*x);}
则函数的类型是
A)与参数x的类型相同
B)是void
C)是int型
D)无法确定
22.有如下定义
#defineD2
intx=5;floaty=3.83;
charc=′D′;
则下面选项中错误的是
A)x++;
B)y++;
C)c++;
D)D++;
23.以下程序段的执行结果为
#definePLUS(X,Y)X+Y
main()
{intx=1,y=2,z=3,sum;
sum=PLUS(x+y,z)*PLUS(y,z);
printf("SUM=%d",sum);
}
A)SUM=9
B)SUM=12
C)SUM=18
D)SUM=28
24.C语言规定,函数返回值的类型是由
A)return语句中的表达式类型所决定
B)调用该函数时的主调函数类型所决定
C)调用该函数时系统临时决定
D)在定义该函数时所指定的函数类型所决定
25.下列程序的运行结果是
voidfun(int*a,int*b)
{int*k;
k=a;a=b;b=k;
}
main()
{inta=2004,b=9,*x=&a,*y=&b;
fun(x,y);
printf("%d%d",a,b);
}
A)20049
B)92004
C)00
D)编译时出错
26.下列程序是用来判断数组中特定元素的位置所在。
如果输入如下整数:
876 675 896 101 301 401 980 431 451 777
#include
#include
intfun(int*s,intt,int*k)
{inti;
*k=0;
for(i=0;i if(s[*k] returns[*k];
}
main()
{
inta[10]={876,675,896,101,301,401,980,431,451,777},k;
clrscr();
fun(a,10,&k);
printf("%d,%d\n",k,a[k]);
}
则输出结果为
A)7,431
B)6
C)980
D)6,980
27.下面程序应能对两个整型变量的值进行交换。
以下正确的说法是
main()
{inta=10,b=20;
printf("
(1)a=%d,b=%d\n",a,b);
swap(&a,&b);
printf("
(2)a=%d,b=%d\n",a,b);
}
swap(intp,intq)
{intt;
t=p;p=q;q=t;
}
A)该程序完全正确
B)该程序有错,只要将语句swap(&a,&b);中的参数改为a,b即可
C)该程序有错,只要将swap()函数中的形参p和q以及t均定义为指针(执行语句不变)即可
D)以上说法都不对
28.有以下程序
#include
main()
{char*p,*q;
p=(char*)malloc(sizeof(char)*20);q=p;
scanf("%s %s",p,q);printf("%s%s\n",p,q);
}
若从键盘输入:
abcdef<回车>,则输出结果是
A)defdef
B)abcdef
C)abcd
D)dd
29.以下程序的输出结果是
intf()
{staticinti=0;
ints=1;
s+=i;i++;
returns;
}
main()
{inti,a=0;
for(i=0;i<5;i++)a+=f();
printf("%d\n",a);
}
A)20
B)24
C)25
D)15
30.有以下程序
#include
structNODE
{intnum;structNODE*next;};
main()
{structNODE*p,*q,*r;
p=(structNODE*)malloc(sizeof(structNODE));
q=(structNODE*)malloc(sizeof(structNODE));
r=(structNODE*)malloc(sizeof(structNODE));
p->num=10;q->num=20;r->num=30;
p->next=q;q->next=r;
printf("%d\n",p->num+q->next->num);
}
程序运行后的输出结果是
A)10
B)20
C)30
D)40
二、程序阅读题(本大题共4小题,每小题5分,共20分)
阅读下列程序,将输出结果写到答题纸的相应位置。
31.下列程序的输出结果为。
main()
{intx=3,y=5;
printf("%d",x=(x--)*(--y));
}
32.以下程序的输出结果是。
fun(intx,inty,intz)
{z=x*x+y*y;}
main()
{inta=31;
fun(6,3,a)
printf("%d",a)
}
33.执行下面程序段后,k值是。
k=1;
n=1234;
do
{
k+=n%10;
n/=10;
}while(n);
34.下列程序的输出的结果是,,。
main()
{inti,jrow,colum,m;
staticintarray[3][3]={{100,200,300},{28,72,-30}{-850,2,6}};
m=array[0][0];for(i=0;i<3;i++)
for(j=0;j<3;j++)
if(array[i][j]<m)
{m=array[i][j];colum=j;row=i;}
printf("%d,%d,%d\n",m,row,colum);
三、完善下列程序(本大题共3小题,每空2分,共20分)
请在答题纸相应的位置填上正确答案。
35.打印所有的“水仙花数”。
所谓的水仙花数是指一个三位数,其各位数字的立方和等于该数本身。
比如153=1*1*1+5*5*5+3*3*3。
(注:
变量i,j,k分别代表三位数的各个位数。
)
main()
{inti,j,k,n;
printf(“水仙花数是:
”);
for(n=100;n<1000;n++)
{i=n/100;
【1】;
k=n%10;
if(【2】)/*如果是水仙花数,则输出*/
printf(“%4d”,n);
}
printf(“\n”);
}
36.以下程序段的功能:
从键盘输入的字符,用变量n来统计数字字符的个数,用换行符(‘\n’)作为循环结束的条件。
#include
main()
{intn=0,c;
c=getchar();
while(【1】)
{if(【2】)
【3】;
c=getchar();
}
}
37.以下函数的功能是求出能整除x且不是偶数的各整数,并按从小到大的顺序放在pp所指的数组中,这些除数的个数通过形参n返回。
例如,若x中的值为30,则有4个数符合要求,它们是1,3,5,15。
请按题意,完成填空。
试题程序:
#include
#include
voidfun(intx,intpp[],int*n)
{inti,j=0;
【1】
if(x%i==0)pp【2】=i;
【3】;
}
main()
{int x,aa[1000],n,i;
clrscr();
printf("\nPleaseenteranintegernumber:
\n");scanf("%d",&x);
fun(x,【4】,&n);
for(i=0;【5】)printf("%d",aa[i]);
printf("\n");
}
第二部分数据结构(共100分)
一、单项选择题(本大题共12小题,每小题2分,共24分)
1、向顺序栈中压入新元素时,应当()。
A.先移动栈顶指针,再存入元素B.先存入元素,再移动栈顶指针
C.先后次序无关紧要D.同时进行
2、用某种排序方法对关键字序列(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.快速排序
3、在一个长度为n的顺序表的表尾插入一个新元素的渐进时间复杂度为()
A.O(n)B.O
(1)C.O(n2)D.O(log2n)
4、设单链表中结点的结构为(data,link)。
已知指针q所指结点是指针p所指结事业的直接前驱,若在*q与*p之间插入结点*s,则应执行下列哪一个操作?
()
A.s->link=p->link;p->link=sB.q->link=s;s->link=p
C。
p->link=s->link;s->link=pD.p->link=s;s->link=q
5、若让元素1,2,3依次进栈,则出栈次序不可能出现()种情况。
A.3,2,1B.2,1,3C.3,1,2D.1,3,2
6、一个递归的定义可以用递归过程求解,也可以用非递归过程求解,但单从运行时间来看,通常递归过程比非递归过程()
A.较快B.较慢C.相同
7、树中所有结点的度等于所有结点数加()
A.0B.1C.-1D.2
8、在一棵具有n个结点的二叉树中,所有结点的空子树个数等于()
A.nB.n-1C.n+1D.2*n
9、对长度为n的有序单链表,若搜索每个元素的概率相等,则顺序搜索到表中任一元素的平均搜索长度为()
A.n/2B.(n+1)/2C.(n–1)/2D.n/4
10、在无向图中定义顶点Vi与Vj之间的路径为从Vi到达Vj的一个()
A.顶点序列B.边序列C.权值总和D.边的条数
11、如果只想得到1024个元素组成的序列中的前5个最小元素,那么用()方法最快。
A.起泡排序B.快速排序C.堆排序D.直接选择排序
12、设有一个含200个表项的散列表,用线性探查法解决冲突,按关键码查询时找到一个表项的平均探查次数不超过1.5,则散列表项应能够至少容纳()个表项。
(设搜索成功的平均搜索长度为Snl={1+1/(1-α)}/2其中α为装填因子)
A.400B.526C.624D.676
二、填空题(每空2分,共22分,其中第17,19,20每空1分)
13.数据的逻辑结构是从逻辑关系上描述数据,它与数据的 无关,是独立于计算机的。
14.在一个带头结点的单循环链表中,p指向尾结点的直接前驱,则指向头结点的指针head可用p表示为head= 。
15.栈顶的位置是随着 操作而变化的。
16.已知一棵完全二叉树中共有768结点,则该树中共有个叶子结点。
17.在单链表上难以实现的排序方法有和 。
18.在有序表(12,24,36,48,60,72,84)中二分查找关键字72时所需进行的关键字比较次数为。
19.在用于表示有向图的邻接矩阵中, 对第i行的元素进行累加,可得到第i个顶点的度, 而对第j列的元素进行累加, 可得到第j个顶点的度。
20.一个连通图的生成树是该图的连通子图。
若这个连通图有n个顶点, 则它的生成树有条边。
21.在进行直接插入排序时, 其数据比较次数与数据的初始排列关;而在进行直接选择排序时,其数据比较次数与数据的初始排列关。
22.利用关键码分别为10, 20, 30, 40的四个结点,能构造出 种不同的二叉搜索树。
三、应用题(每小题8分,共32分)
23、以知一组元素为(46,25,78,62,12,37,70,29),试画出按元素排列次序插入生成的一棵二叉搜索树。
24、已知一棵树二叉如下,请分别写出按箭序、中序、后序和层次遍历时得到的结点序列。
A
BC
DEF
GH
前序:
中序:
后序:
层次:
25、设散列表的长度为13,散列函数为H(k)=k%13,给定的关键码序列为19,14,23,01,68,20,84,27。
试画出用线性探查法解决冲突时所构成的散列表。
0123456789101112
26、已知一个有序表(15,26,34,39,45,56,58,63,74,76,83,94)顺序存储于一维数组a[12]中,根据折半搜索过程填写成功搜索下表中所给元素34,56,58,63,94时的比较次数。
元素值
比较次数
四、算法设计题
26、说明下面递归过程的功能(10分)
intunknown(BinTreNode*t){
//指针T是二叉树的根指针。
if(t==NULL)return-1;
elseif(unknown(t—leftChild)>=unknown(t—rightChild))
return1+unknown(t—leftChild));
elsereturn1+unkuown(t—rightChild);
}
27、本题给出一个施加于链表的选择排序的算法。
算法中用到一个临时的表头结点head,作为结果链表的表头结点,每次从first链上摘下的值最大的结点current链入head之后。
算法结束前,将head删除。
Template
:
ListSelectSort(){
ListNode
IntI=0;
While
(1){
P=current=first;q=NULL;
While(p!
=NULL){
If(pdata2)
{pre=q;current=p;}
q=p;p=plink;
}
if(current==first)3;
elseprelink=currentlink;
if(!
I)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 模拟 考试题
![提示](https://static.bdocx.com/images/bang_tan.gif)