第一部分 C语言程序设计.docx

上传人:b****8 文档编号:23658702 上传时间:2023-05-19 格式:DOCX 页数:32 大小:26.92KB
下载 相关 举报
第一部分 C语言程序设计.docx_第1页
第1页 / 共32页
第一部分 C语言程序设计.docx_第2页
第2页 / 共32页
第一部分 C语言程序设计.docx_第3页
第3页 / 共32页
第一部分 C语言程序设计.docx_第4页
第4页 / 共32页
第一部分 C语言程序设计.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

第一部分 C语言程序设计.docx

《第一部分 C语言程序设计.docx》由会员分享,可在线阅读,更多相关《第一部分 C语言程序设计.docx(32页珍藏版)》请在冰豆网上搜索。

第一部分 C语言程序设计.docx

第一部分C语言程序设计

2009第一部分C语言程序设计(共100分)

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

在每小题列出的四个备选项中只有一个是符合题目要求的,请将正确答案代码填写在答题纸相应的位置上。

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

(A)my_name

(B)$234

(C)myname

(D)23b

2、已知:

intx=5;执行完printf("%d",++x);后,输出的结果是()

(A)4

(B)5

(C)6

(D)不确定

3、已知:

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

(A)7

(B)2

(C)1

(D)0

4、已知:

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

a=a>b?

a:

(b

b:

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

(A)3

(B)6

(C)8

(D)17

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

main()

{

inta=11,b=3;

printf("%d,%d",a/b,a%b);

}

(A)3,2

(B)11,2

(C)3,3

(D)3.3,2

6、有如下程序段:

main()

{

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");

}

}

当运行时输入“B回车”,则输出结果是()

(A)4

(B)43

(C)432

(D)4321

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

main()

{

charc='d';

inti=c-32;

printf("%c,%d",i,i);

}

(A)d,68

(B)D,68

(C)d,100

(D)D,100

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

main()

{

intx=1,y=100;

while(y>0)

{

x*=2;

y/=3;

}

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

}

(A)8,0

(B)16,0

(C)32,0

(D)64,0

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

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

(B)staticinta[2]={3,4,5,6};

(C)staticinta[10]={3,4,5,6};

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

10、执行程序段:

charstr[12];scanf("%s",str);

如果输入如下字符串(其中□表示空格):

What's□you□name?

则str的值是()。

(A)What's

(B)What's□

(C)What's□your

(D)What's□your□name?

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

main()

{

inti=5,sum=100;

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

printf("%d",sum);

}

(A)100

(B)109

(C)105

(D)110

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

main()

{

inti;

for(i=1;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,

13、若有说明:

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

(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,12

(B)15,18

(C)18,15

(D)15,12

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,9

(B)8,6,26

(C)8,18,26

(D)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,13

(B)6,7

(C)9,10

(D)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;

则在C语言程序中给变量stu1赋值正确的是()。

(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]);

(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)

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;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

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)10

(B)25

(C)55

(D)75

27、语句:

printf("%-8.4d",-36);执行时的输出结果是(□表示空格)()。

//选项似乎有错误?

(A)-036□□□□

(B)-036□□□□□

(C)□□□□-036

(D)□□□□□-036

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)8

(B)34

(C)99

(D)338

29、如下程序段的输出结果是()。

main()

{

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

char*q=str;

while(*q!

='\0')q++;

printf("%d",q-str);

}

(A)5

(B)6

(C)7

(D)8

30、如下程序段的输出结果是()。

#definen5

structstudent

{

intno;

floatscore;

}

main()

{

structstudentstu[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;

printf("%08.4f",b);

}

(A)0054.1000

(B)054.1000

(C)0054.1

(D)54.10000

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

阅读下列程序,请将运行时输出的结果写在答题纸相应的位置上。

31、

/*程序中□表示空格*/

#include

voidmain()

{

charstr1[]="good□morning!

",str2[20];

char*p,*q;

for(p=str1;*p!

='\0';p++);

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

*q='\0';

printf("%s",str2);

}

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]);

}

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);

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

if(a[i]

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

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

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

}

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]);

}

三、完善下列程序(本大题共2小题,每空4分,共20分)

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

35、下面程序求一个二维矩阵的最大值。

#include

#definem3

#definen4

intfindmax(inta[][n])

{

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

for(i=0;i

for(j=0;j

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

__________;

}

voidmain()

{

inti,j,max,__________;

for(i=0;i

for(j=0;j

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

max=findmax(a);

printf("%d",max);

}

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

#include

#include

voidmain()

{

intm,k,i;

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

{

k=sqrt(m);

for(i=2;i<=k;__________)

if(m%i==0)__________;

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

}

}

第二部分数据结构(共100分)

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

在每小题列出的四个备选项中只有一个是符合题目要求的,请将正确答案代码填写在答题纸相应位置上。

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

(A)线性结构

(B)树结构

(C)图结构

(D)集合结构

2、下列函数中渐进时间复杂度最小的是()。

(A)T(n)=nlogn+5000n

(B)T(n)=n*n-8000n

(C)T(n)=n的(log(2n))次方-6000n

(D)T(n)=2n的(log(2n))次方-7000n

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

(A)A,B,C,D,E

(B)B,A,E,D,C

(C)C,B,A,D,E

(D)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个顶点的有向图中,每个顶点的度最大可达__________。

14、以下程序段的时间复杂度是__________。

i=0;j=0;

while(i+j<=n)

{

if(i>j)j++;

elsei++;

}

15、下图所示的二叉树后序遍历的结果是__________。

A

/\

BF

/\\

ECG

//\

DHJ

/

I

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

__________。

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

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

顺序存储结构和链式存储结构,请就这两种存储结构完成下列填充:

__________存储密度较大,可以随机存取;__________不可以随机存取,插入和删除操作比较方便。

18、递归的程序执行时使用__________来保存各层递归调用时的现场信息,以保证可以正确返回。

19、设数组a[M](M为最大空间个数)作为循环队列Q的存储空间,front为队头指针(指向第一个存放数据的位置),rear为队尾指针(指向最后一个存放数据位置的下一个),则判定Q队列的队满条件是__________。

三、应用题(本大题共4小题,每小题10分,共40分)

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

20、设字符集D={A,B,C,D,E},各字符使用频率W={10,2,5,6,4}。

画出对字符进行哈夫曼编码时所对应的哈夫曼树,并给出各字符的编码。

 

21、用普里姆(Prim)算法从右图中的顶点1开始逐步构造最小支撑(代价生成)树,要求画出构造的每一步。

16

①───────②

│╲╱│╲5

│╲21╱│╲

│╲╱19│╲

14│⑥│9③

│26╱╲│╱

│╱11╲│╱

│╱╲│╱6

⑤───────④

18

 

22、给定待排序关键字集合为{23,14,48,25,5,19},按关键字非递归递减(从小到大)排序,写出采用冒泡排序的每一趟(最外层循环的每一次)排序结果。

 

23、

(1)图示表示右边有向图的邻接表。

(4分)

(2)写出从顶点1开始分别进行深度优先和广度优先遍历的顶点序列各一种。

(6分)

②────→④

↗↑╲╲

╱│╲↘

①│╲⑥

╲│╲↗

↘│↘╱

③────→⑤

 

四、算法设计题(本大题共2小题,每小题10分,共20分)

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

24、假定用一个有头结点循环链表来存储一个有序的线性表,线性表从头到尾为非递减(从小到大)有序(如下图)。

用指针current从head开始搜索数据域等于key的元素在线性表中位置,如果搜索成功则current指向搜索到的结点,函数返回该指针;如果搜索不成功,函数返回空指针NULL。

请在函数SortedlistLocate(head,ky)内填空,完成下列算法以实现这种搜索,并使得搜索不成功的平均比较次数小于链表长度。

 

┌───────────────────────────────────────────────────────────────┐

│┌──┬──┐┌──┬──┐┌──┬──┐┌──┬──┐┌──┬──┐┌──┬──┐┌──┬──┐│

head→└→│^│─┼─→│10│─┼─→│20│─┼─→│30│─┼─→│40│─┼─→│50│─┼─→│60│─┼─┘

└──┴──┘└──┴──┘└──┴──┘└──┴──┘└──┴──┘└──┴──┘└──┴──┘

current

typedefstructnode

{

elemtypedata;//数据域

structnode*next;//指针域

}lnode,*linklist;

linklistSortedlistLocate(linklisthead,elemtypekey)

{

linklistcurrent;

if(__________)returnERROR;//错误提示

current=__________;

whil

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

当前位置:首页 > 工作范文 > 行政公文

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

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