程序设计语言与数据结构重考题2010

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

命题人: 金旺春 试卷分类(A 卷或B 卷)
五邑大学 试 卷
学期: 至 学年度 第 学期 课程: 程序设计语言与数据结构 专业:
重考
班级:
姓名: 学号:
单项选择题(在每小题的四个备选答案中,选出一个正确答案,并将正确答案的序号填在题干的括号内。

每小题1分,共20分)
(1) 以下所列的C 语言常量中,错误的是(
) A) 0xFF B) 1.2e0.5 C) 2L D) '\72' (2) 下列选项中,合法的C 语言关键字是( ) A) V AR B) cher C) integer D) default
(3) 若a 为int 类型,且其值为3,则执行完表达式a+=a-=a*a 后,a 的值是( ) A) -3 B) 9 C) -12 D) 6 (4)
有以下程序段
int k=0; while(k=1)k++;
while 循环执行的次数是( ) A) 无限次
B) 有语法错,不能执行 C) 一次也不执行
D) 执行1次
(5)
若变量c 为char 类型,能正确判断出c 为小写字母的表达式是( )
A) 'a'<=c<= 'z' B) (c>= 'a')||(c<= 'z') C) ('a'<=c)and ('z'>=c)
D) (c>= 'a')&&(c<= 'z') (6)
若有说明:int n=2,*p=&n,*q=p;,则以下非法的赋值语句是( )。

A) p=q; B) *p=*q; C) n=*q; D) p=n; (7) 若有以下说明和定义 typedef int *INTEGER INTEGER p,*q;
以下叙述正确的是( )。

A) p 是int 型变量
B) p 是基类型为int 的指针变量 C) q 是基类型为int 的指针变量
D) 程序中可用INTEGER 代替int 类型名
B) printf("x=%Ld\n",x);
C) printf("x=%8dL\n",x);
D) printf("x=%LD\n",x);
(9)下列程序的输出结果是( ).
A) 非法B)a[4]的地址C)5 D)3
main()
{ char a[10]={9,8,7,6,5,4,3,2,1,0},*p=a+5;
printf("%d",*--p);
}
(10)当调用函数时,实参是一个数组名,则向函数传送的是( )
A) 数组的长度B) 数组的首地址
C) 数组每一个元素的地址D) 数组每个元素中的值
(11)设有以下说明语句
struct ex
{ int x ; float y; char z ;} example;
则下面的叙述中不正确的是( ).
A) struct结构体类型的关键字B) struct ex是结构体类型
C) x,y,z都是结构体成员名D) example是结构体类型名
(12)以下只有在使用时才为该类型变量分配内存的存储类说明是( ).
A) auto和static B) auto和register
C) register和static D) extern和register
(13)有一函数
1 x>0
y= 0 x=0
-1 x<0,
以下程序段中不能根据x的值正确计算出y的值的是( )。

A)if(x>0) y=1;else if(x==0) y=0;else y=-1;
B)y=0;if(x>0) y=1;else if(x<0) y=-1;
C)y=0;if(x>=0)if(x>0) y=1;else y=-1;
D)if(x>=0) if(x>0) y=1;else y=0;else y=-1;
(14)有以下程序段
int n=0,p;
do {scanf("%d",&p);n++;} while(p!=12345&&n<3);
此处do-while循环的结束条件是( )。

A)p的值等于12345或者n的值大于等于3
B)p的值等于12345并且n的值大于等于3
(15)设有如下定义:
struct sk
{ int a;
float b;
}data;
int *p;
若要使p指向data中的a域,正确的赋值语句是( )。

A) p=&a; B) p=data.a; C) p=&data.a; D) *p=data.a
(16)设有数组定义: char array [ ]="China"; 则数组array所占的空间为( )
A) 4个字节B) 5个字节C) 6个字节D) 7个字节
(17)若有以下调用语句,则不正确的fun函数的首部是( )
A) void fun(int m, int x[]) B) void fun(int s, int h[41])
C) void fun(int p, int *s) D) void fun(int n, int a)
main()
{ …
int a[50],n;

fun(n, &a[9]);
…}
(18)已知指针p的指向如下图所示,则执行语句*--p;后*p的值是( )
A) 30 B) 20 C) 19 D) 29
(19)设已有定义: char *st="how are you"; 下列程序段中正确的是( )
A)char a[11], *p; strcpy(p=a+1, st[4]);
B)char a[11]; strcpy(a, st);
C)char a[11]; strcpy(++a, st);
D)char a[], *p; strcpy(p=&a[1],st+2);
(20)下列程序执行后的输出结果是( )
A) 6 B)8 C) 10 D) 12
#define MA(x) x*(x-1)
main()
{ int a=1,b=2; printf("%d \n",MA(1+a+b));}
判断题(判断下列各小题,正确的在题后括号内打“√”,错的打“╳”。

每小题1分,共10分)
1.语言编译时不检查语法( )
2.C语言的函数可以嵌套定义( )
3.main()函数必须放在其它函数之前( )
4.所有被调用的函数一定要在调用之前进行定义( )
5.do-while语句构成的循环不能用其它语句构成的循环来代替。

( )
6.do-while语句构成的循环只能用break语句退出。

( )
7.用do-while语句构成的循环,在while后的表达式为零时结束循环。

( )
8.如果有定义int a,*p=&a; 则*p与a意义相同。

( )
9.结构体变量中各成员共享空间。

( )
10.起泡排序法是稳定的。

( )
程序填空题(每题5分,共10分)
1.下面程序的功能是求出三个变量中的最大值,填写空缺部分
max(int a,int b)
{
if (a>b)
return (a);
else
return (b);
}
main()
{
int a,b,c;
scanf(“%d,%d,%d”,&a,&b,&c);
printf(“max=%d\n”,);
}
2.下面的程序的功能是从键盘输入一个字符串,按逆序显示出来,请填空:
#include <string.h>
main()
{
char s[20],*p;
scanf(“%s”,s);
for(p=s+strlen(s)-1;p>=s;_____)
printf(“%c”,*p);
}
应用题(每小题7分,共42分)
1. 下面程序段为起泡(冒泡)排序法,写出运行结果。

int r[11]={0,1,2,32,4,5,3,20,89,9,10} ;
int n=10,exchange,bound,temp;
for(int i=1;i<=n;i++)
printf("%d ",r[i]);
printf("\n");
exchange=n;
while (exchange)
{
bound=exchange;
exchange=0;
for (int j=1; j<bound; j++)
if (r[j]>r[j+1])
{
temp=r[j];
r[j]=r[j+1];
r[j+1]=temp;
exchange=j;
}
}
for(i=1;i<=n;i++)
printf("%d ",r[i]);
2. 指出下列函数的功能
template<class T>
int indexOfArray(T a[], int n)
{
if (n <= 0)
{
cerr<<"n must be > 0"<<endl;
exit(-1);
}
int indexOfA = 0;
for (int i = 1; i < n; i++)
if (a[indexOfA] < a[i])
indexOfA = i;
return indexOfA;
}
3. 已知有一函数定义如下:
template<class T>
void swap1(T a, T b)
{
T temp;
temp=a;
a=b;
主函数调用格式如下:
main()
{
int x=1,y=2;
printf(“x=%d y=%d\n”,x,y);
swap1(x,y);
printf(“x=%d y=%d\n”,x,y);
}
执行后输出结果为
x=1 y=2
x=1 y=2
本来是想交换x和y的值,但没有成功,请指出错误所在,并该正之。

4.有以下程序
float fun(int x,int y)
{return(x+y); }
main()
{
int a=2,b=5,c=8;
printf("%3.0f\n",fun((int)fun(a+c,b),a-c));
}
程序运行后的输出结果是______。

5.以下程序中的函数reverse的功能是将a所指数组中的内容进行逆置。

void reverse(int a[],int n)
{
int i,t;
for(i=0;i<n/2;i++)
{
t=a[i];a[i]=a[n-1-i];a[n-1-i]=t;
}
}
main()
{
int b[12]={1,2,3,4,5,6,7,8,9,10,11,12}; int i,s=0;
reverse(b,8);
for(i=6;i<12;i++) s+=b[i];
printf("%d\n",s);
}
程序运行后的输出结果是______。

6. 程序中头文件type1.h的内容是:
#define N 6
#define M1 N*3
程序如下:
#include "type1.h"
#define M2 N*2
main()
{
i=M1+M2; printf("%d\n",i); }
程序编译后运行的输出结果是______。

编程题(18分,第1题必做题目,2,3选择一题)
1. 编写下列函数: 格式声明
int maxmin(int a[],int n,int flag);
其中int a[]是待求的整型数组,n 为元素个数,由函数返回其值: 当flag=0 返回最大值 当flag=1 返回最小值
flag 为调用程序设定。

再编写一个主程序测试之。

(8分)
2.已知队列的头结点定义如下:(10分)
#include "node.h" template <class T> struct LinkedQueue {
Node<T> *front; Node<T> *rear; int count; };
其中node.h 中定义了带头结点单链表的结构并实现了一些基本操作。

单链表的结点结构为:
template <class T> struct Node{ T data; Node<T> *next; } ;
已实现的基本操作(可直接使用)有: template <class T>
void LinkInit(Node <T> *&head);初始化单链表
void InsertAfterhead(Node<T> *head, T x);// 将元素x 插入位置为头结点之后
void InsertAftercurrPtr(Node<T> *&currPtr, T x);// 在当前结点后插入新结点,currPtr 指向新插入结点 Node<T> *DeleteAfter(Node<T> *currPtr); // 删除当前结点之后的结点(摘链),并返回该结点指针
图一 链队列示意图
设链队列如图图一所示,完成下列操作:
(1) void InitQueue(LinkedQueue<T> &Q);//初始化队列Q (2) void QInsert(LinkedQueue<T> &Q,T x);//入队操作 (a) 空队列
(b)一般队列
3. 设有一带头结点的链表L结点定义如下:(10分)
typedef struct node{
int score ;
int rank;
struct node *next;
} ST, *stu;
试编写一算法按score的大小求出各个结点的排名rank:。

相关文档
最新文档