考题解答09年福建专升本C和数据结构.docx

上传人:b****6 文档编号:7971219 上传时间:2023-01-27 格式:DOCX 页数:21 大小:523.79KB
下载 相关 举报
考题解答09年福建专升本C和数据结构.docx_第1页
第1页 / 共21页
考题解答09年福建专升本C和数据结构.docx_第2页
第2页 / 共21页
考题解答09年福建专升本C和数据结构.docx_第3页
第3页 / 共21页
考题解答09年福建专升本C和数据结构.docx_第4页
第4页 / 共21页
考题解答09年福建专升本C和数据结构.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

考题解答09年福建专升本C和数据结构.docx

《考题解答09年福建专升本C和数据结构.docx》由会员分享,可在线阅读,更多相关《考题解答09年福建专升本C和数据结构.docx(21页珍藏版)》请在冰豆网上搜索。

考题解答09年福建专升本C和数据结构.docx

考题解答09年福建专升本C和数据结构

09年专升本C考题解答(共100分)

一、单项选择题(30小题,每小题2分,共60分)

1、下列选项中,合法的C语言标识符是()。

A.my_nameB.$234C.mynameD.23b

标识符只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线。

标识符不能使用C语言的关键字(见教材后清单)

2、已知:

intx=5;执行完printf(“%d”,++x);后。

输出的结果是()。

A.4B.5C.6D.不确定

注意++x和x++的区别

3、已知:

intx=5,y=3;则逻辑表达式(x-y)&&(y-3)的值为()。

A.7B.2C.1D.0

(x-y)&&(y-3)=(5-3)&&(3-3)=2&&0=0

4、已知:

inta=3,b=6,c=8;则执行完语句:

a=a>b?

a:

(b

b:

c);后,a的值为()。

A.3B.6C.8D.17

a=a>b?

a:

(b

b:

c)=3>6?

a:

(6<8?

b:

c)=6

5、如下程序执行后的结果是()。

main()

{inta=11,b=3;

printf(“%d,%d”,a/b,a%b);

}

A.3,2B.11,2C.3,3D.3.3,2

a/b=11/3=3(整除),a%b=11%3=2

6、如下程序运行时输入“B回车”,输出结果是()。

mian()

{charc;

scanf(“%c”,&c);

switch(c)

{case‘A’:

printf(“5”);

case‘B’:

printf(“4”);

case‘C’:

printf(“3”);

case‘D’:

printf(“2”);

default:

printf(“1”);

}

}

A.4B.43C.432D.4321

注意没有break语句

7、已知字符’a’的ASCII码为97,’A’的ASCII码为65,则如下程序的运行结果是()。

main()

{charc=’d’;

inti=c-32;

printf(“%c,%d”,i,i);

}

A.d,68B.D,68C.d,100D.D,100

‘a’=97,’d’=100,’d’-32=100-32=68,

‘A’=65,’D’=68,

%c打印字符,%d打印数字

8、如下程序段的执行结果是()。

main()

{intx=1,y=100;

while(y>0)

{x*=2;y/=3;}

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

}

A.8,0B.16,0C.32,0D.64,0

y=100,x=2,y/=3=33

y=33,x=4,y/=3=11

y=11,x=8,y/=3=3

y=3,x=16,y=3/3=1

y=1x=32y=0

9、如下选项中正确的数组定义是()。

A.#definem10;staticinta[m]={3,4,5,6};

B.staticinta[2]={3,4,5};

C.staticinta[10]={3,4,5};

D.intm=4;staticinta[m]={3,4,5,6};

10、执行程序段:

charstr[12];scanf(“%s”,str);如果输入如下字符串What’s□your□name?

则str的值是()。

A.What’s

B.What’s□

C.What’s□your

D.What’s□your□name?

str只有12个元素,而输入超过12个字符,你可能会选择What’s□your□name?

的前11个字符作为str的值(考虑’\0’),但是正确答案是A,因为scanf用空格作为字符串输入的结束。

在TurboC2中,如果输入的字符串长度超过数组长度,则会出错。

如果要输入带空格的字符串,用gets(str)。

11、如下程序段的运行结果是()。

main()

{inti=5,sum=100;

do{sum=sum+(--i);}while(i>=0);

printf(“%d”,sum);

}

A.100B.109C.105D.110

inti=5,sum=100;

sum=sum+(--i)=100+4=104i=4

sum=sum+(--i)=104+3=107i=3

sum=sum+(--i)=107+2=109i=2

sum=sum+(--i)=104+1=110i=1

sum=sum+(--i)=110+0=110i=0

sum=sum+(--i)=110+(-1)=109i=-1

printf(“%d”,sum);打印109

12、如下程序段的运行结果是()。

main()

{inti;

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

{if(i%3==0)continue;

printf(“%d”,i);

}

}

A.1,2,4,5,7,8,10,

B.1,2,3,4,5,6,7,8,9,10,

C.3,6,9,

D.1,2,4,5,6,7,8,9,10,

跳过了3的倍数不打印,其它都打印出来

13、如有说明:

inta[5][6];则数组的正确引用是()。

A.a[5][4]下标越界

B.a[3,4]语法错

C.a(3)(4)语法错

D.a[3][4]

14、在C语言中,凡不加类型说明的函数,自动()。

A.按无类型void处理

B.按整型int处理

C.按字符型char处理

D.按浮点型float处理

15、如下程序段的运行结果是()。

voidkk(inta,intb){

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

}

main()

{inta=5,b=6;

kk(a,++b);

printf(“%d,%d”,a,b);

}

A.30,6,30,6

B.35,6,35,6

C.30,7,5,7

D.35,7,5,7

16、如下程序段的运行结果是()。

main()

{staticinta[6]={3,6,9,12,15,18};

int*c=&a[2];

printf(“%d,%d”,*(c+3),*c+3);

}

A.18,12B.15,18C.18,15D.15,12

int*c=&a[2];等价于

int*c;

c=&a[2];

17、如下程序段语法正确的是()。

A.int*p;p=1000;

B.inta,*p;p=&a;

C.inta,*p;*p=&a;

D.inta=1000;*p;p=a;

18、如下程序段的运行结果是()。

intmm(int*a,intb)

{*a=*a+5;b*=3;return*a+b;}

main()

{inta=3,b=6;

intc=mm(&a,b);

printf(“%d,%d,%d”,a,b,c);

}

A.3,6,9B.8,6,26C.8,18,26D.3,18,11

19、如下程序段的运行结果是()。

main()

{staticinta[2][3]={3,6,9,12,15,18};

int*c=a[1];

printf(“%d,%d”,*(c+1),*c+1);

}

A.15,13B.6,7C.9,10D.12,13

20、已有函数定义如下,

voidaa(inta,charb,floatc){c=(float)(a+b);}

则如下程序段的能进行正确函数调用的是()。

A.main(){aa(5.0,’a’,5);}

B.main(){int*a,scanf(“%d”,&a);aa(a,’a’,9);}

C.main(){

inta=1;charb=’b’;floatc=1.0;aa(a,b,c);}

D.main(){int*a;scanf(“%d”,a);aa(a,’a’,3.0);}

21、有定义如下,

structstudent{

charname[10];

floatscore;

intage;

}stu1,*p;

则如下程序段正确的是()。

A.stu1={“ddd”,66.0,55};

B.strcpy(stu1.name,”ddd”);

stu1.score=66.0;stu1.age=15;

C.p=&stu1;p->name=’ddd’;

p->score=66.0;p->age=15;

D.p=&stu1;p->name=”ddd”;

p->score=66.0;p->age=15;

22、如下程序段语法正确的是()。

A.intmm(intx,inty){intx,y;returnx+y;}

局部变量不能与形参重名

B.charstr[10];scanf(“%s”,&str);

输入字符数组不能加&

C.inti,a[10];

for(i=0;i<=10;i++)scanf(“%d”,&a[i]);

数组下标从0开始

D.inti,a[10],*p;

for(i=0,p=a;p

23、已知inta;并且a已经被正确赋值,则下列逻辑表达式与(!

a)等价的是()。

A.(a==0)

B.(a>0)

C.!

(a==1)

D.(a==1)

(!

a)成立表示a不成立,C语言不成立用0表示,即a==0

24、若变量已经定义,要求程序从1累加到100,下列选项不能完成此功能的是()。

A.for(i=1,sum=0;i<=100;i++)sum=sum+i;

B.i=1;sum=0;while(i++<=100)sum=sum+i;

C.for(i=1,sum=0;i<=100;i++){sum=0;sum=sum+i;}

D.i=1;sum=0;do{sum=sum+i;}while(++i<=100);

25、已知intk;且k已经正确赋值,则下列表达式中存在错误的是()。

A.2

B.(k<6)++

C.k<6&&k>2

D.k==1

22,而是表示(2

(1),要么不成立(0),即0或1都小于6,也就是说2

(1)。

26、如下程序段的运行结果是()。

main()

{inti,j,a=0;

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

for(j=i;j<=5;j++)

a=a+j;

printf(“%d”,a);

}

A.10B.25C.55D.75

A=0

i=1

j=1a=1

j=2a=3

j=3a=6

j=4a=10

j=5a=15

i=2

j=2a=17

j=3a=20

j=4a=24

j=5a=29

i=3

j=3a=32

j=4a=36

j=5a=41

i=4

j=4a=45

j=5a=50

i=5

j=5a=55

27、语句语句printf(“%-8.4d”,-36);的运行结果是()。

A.-036□□□□

B.-036□□□□□

C.□□□□-036

D.□□□□□-036

%-8.4d

%d表示输出整数

-表示靠左对齐

8表示占8个字符位置

.4表示小数点后位置数,没有小数,则填空格

28、如下程序段的运行结果是()。

main()

{inta[10]={34,22,12,66,8,33,22,338,56,99};

inti,x=0;

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

if(a[i]

printf(“%d”,a[x]);

}

A.8B.34C.99D.338

选出数组中的最小值,x是最小值的下标。

29、如下程序段的运行结果是()。

main()

{charstr[]={‘s’,’t’,’u’,’d’,’e’,’n’,’t’,’\0’};

char*q=str;

while(*q!

=’\0’)q++;

printf(“%d”,q-str);

}

A.5B.6C.7D.8

计算数组中非0字符的个数。

30、如下程序段的运行结果是()。

#definen5

structstudent{

intno;

floatscore;

};

main(){

structstudentstr[n]={

{1,12.5},{2,55.5},{3,90.5},{4,78.0},{5,34.0}

};

inti;floata=0,b;

for(i=0;i

b=a/n;/*b是平均分*/

printf(“%08.4f”,b);

/*%08.4f表示含小数点一共8位,四位小数*/

}

A.0054.1000

B.054.1000

C.0054.1

D.54.10000

二、程序阅读题(4小题,每小题5分,共20分)

31、#include

voidmain(){

charstr1[]=”goodmorning”,str2[20];

char*p,*q;

for(p=str1;*p!

=’\0’;p++);

for(q=str2;--p>=str1;q++)*q=*p;

*q=’\0’;

printf(“%s”,str2);

}

p先走到str1的尾部,然后从尾部向头部退

同时q从str2头部开始向尾部走,边走边复制字符,

最后将str1的内容反过来放到str2中。

打印结果是

gninromdoog

32、#include

#definen10

voidde(inta[],intx,int*m){

inti=x+1;

for(;i<=*m;i++)a[i-1]=a[i];

*m=*m-1;

}

voidmain(){

staticinta[n]={32,12,12,56,78,12,78,5,32,12};

inti,j,x,m=n-1;

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

{x=a[i];

for(j=i+1;j<=m;j++)

if(a[j]==x)de(a,j,&m);

}

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

printf(“%d”,a[i]);

}

25637

33、#include

voidch(int*a,int*b){

intc;

c=*a;*a=*b;*b=c;/*交换*/

}

voidmain(){

staticinta[10]={32,5,18,56,98,52,78,15,132,112};

intx=0,y=1,i;

if(a[x]>a[y])ch(&x,&y);

/*如果a[0]>a[1]则交换x,y,于是x=1,y=0*/

for(i=2;i<10;i++)

if(a[i]

/*x是2开始比a[1]小的最小者下标,后面没有,即x不变*/

elseif(a[i]>a[y])y=i;

/*y是2开始比a[0]大的最大者下标,即132*/

ch(&a[x],&a[y]);/*交换a[x]和a[y],5和132*/

for(i=0;i<10;i++)printf(“%d,”,a[i]);/*打印数组*/

}

原来数组:

32,5,18,56,98,52,78,15,132,112

最后结果:

32,132,18,56,98,52,78,15,5,112

34、#include

voidmain(){

charstr[]=”0342201411”;

staticinta[10];

inti;char*p;

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

for(p=str;*p!

=’\0’;p++){

i=*p-‘0’;

a[i]++;

}

for(i=0;i<10;i++)printf(“%d”,a[i]);

}

a[i]开始全是0。

p从str的头部开始向尾部走,i是str[]的字符对应的数字,将a[i]++;

注意str数组是0342201411

其中有2个0,故a[0]=2

其中有1个3,故a[3]=1

其中有2个4,故a[4]=2

其中有2个2,故a[2]=2

其中有3个1,故a[1]=3

没有比4大的数字,故a[5-9]保持0

最后结果:

2321200000

三、程序填空题(2小题,每空4分,共20分)

35、下面程序求出二维数组的最大值

#include

#definem3

#definen4

intfindmax(inta[][n])

{inti,j,max=a[0][0];

for(i=0;i

(1)i++____)

for(j=0;j

if(a[i][j]>max)max=a[i][j];

_____

(2)returnmax____________;

}

voidmain(){

inti,j,max,_____(3)a[m][n]_____;

for(i=0;i

(1)____)

for(j=0;j

scanf(“%d”,&a[i][j]);

max=findmax(a);

printf(“%d”,max);

}

36、下面程序求出100-200之间的全部素数

#include

voidmain(){

intm,k,i;

for(m=101;m<=200;m=m+2)

{k=sqrt(m);

for(i=2;i<=k;__(4)i++____)

if(m%i==0)__(5)break_______;

if(i>k)printf(“%d”,m);

}

}

09年专升本数据结构考题解答(共100分)

一、单项选择题(12小题,每小题2分,共24分)

1、要表示高校校、系、班级的有关数据及其关系,选择______比较合适。

A.线性结构B.树结构

C.图结构D.集合结构

2、下列函数中复杂度最小的是

A.T(n)=nlog2n+5000n

B.T(n)=n2-8000n

C.T(n)=nlog22n-6000n

D.T(n)=2nlog22n-7000n

nlog22n=nlog22+log2n=n1+log2n=n*nlog2n

3、已知一个栈s以及一个输入序列(A,B,C,D,E),每个元素按照A,B,C,D,E顺序进栈一次,进栈后可立即出栈,也可在栈中停留一段时间后再出栈,则不能得到()序列。

A.A、B、C、D、EB.B、A、E、D、C

C.C、B、A、D、ED.D、C、A、B、E

4、平均排序效率最好的排序方法是()。

A.直接插入排序B.快速排序

C.简单选择排序D.冒泡排序

5、某链表中最常用的操作是在已知的一个结点之前插入一个新结点和删除其之前一个结点,则采用()存储方式最节省运算时间。

A.双向链表B.带头指针的单向链表

C.带尾指针的单向链表D.单向循环链表

6、在逻辑结构不变的情况下,不是导致一个图的遍历序列不唯一的因素是()。

A.出发点不同B.存储(物理)结构不同

C.遍历方法不同D.画法不同

7、散列函数有一个共同的要求,即函数值应当尽量以()取其值域的每个值。

A.最大概率B.最小概率

C.正态分布概率D.均等概率

8、下面()方法可以判断出一个图中是否存在环(回路)。

A.排序B.深度和广度遍历

C.求最短路径D.求关键路径

9.最佳二叉搜索(排序)树是()。

A.关键码个数最小的二叉搜索树

B.退化为线性的二叉搜索树,

C.搜索中平均比较次数最小的二叉搜索树

D.任何结点的度数为0或2的二叉搜索树

10.()是数据的基本单位,即数据集合(对象)中的个体。

A.数据结构B.数据项

C.数据元素D.数据对象

11.(线性)表是一个()。

A.有限序列,可以为空B.有限序列,不能为空

C.无限序列,可以为空D.无限序列,不能为空

12.树是结点的集合,它()根结点。

A.有0个或1个B.有0个或多个

C.有且只有1个D.有1个或1个以上

二、填空题(本大题共7小题,每空2分,共16分)

请将答案写在答题纸相应的位置上。

13.在有n个顶点的有向图中,每个顶点的度(=入度+出度)最大可达(2n-2)。

14.以下程序段的时间复杂度是()。

i=0;j=0;

while(i+j<=n)

{

if(i>j)j++;

elsei++;

}

每次只做i++或j++,不会同时i++而且j++,

n的值不变,因此循环n次,复杂度O(n)

15.右图所示的二叉树后序遍历的结果是(EDCBIHJGFA)。

16.在一个双向链表中p所指结点之前插入一个由指针s所指的新结点,写出可执行的操作序列:

()。

(前指和后指的指针域分别为prior和next)

1.s->prior=p->prior;

2.s->next=p;1和2顺序可换

3.p->prior->next=s;

4.p->prior=s;注意p->prior要最后改变,因为之前要用

17.(线性)表有两种存储结构:

顺序存储

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1