Untitled Document

一：选择题
1．当说明一个结构变量时，系统分配给它的内存是（ ）
a. 各成语所需内存量的总和
b. 结构中第一个成员所需内存量
c. 成员中占内存量最大的成员所需的容量
d. 结构中最后一个成员所需内存量
2．下面四个运算符中，优先级最低的是（ ）
a. ()
b. ．
c. ->
d. ++
3．选择下面程序的运行结果。 （ ）
#include <stdio.h>
struct cmplx
{
int x;
int y;
}cnum[2]={1,3,2,7};
int main( )
{
printf("%d\n",cnum[0].y*cnum[1].x);
return 0;
}
a. 0
b. 1
c. 3
d. 6
4．已知：
struct sk
{ int a;
float b;
}data,*p;
若有p=&data，则对data中的成员a的正确引用是（ ）
a. (*p).data.a
b. (*p).a
c. p->data.a
d. p.data.a
5．设有以下定义和语句，
struct student
{ int num,age;
};
struct student stu[3]={{2001,20},{2001,21},{2001,19}};
struct studeng *p=stu;
则以下错误的引用是（ ）
a．(p++)->num
b．p++
c．(*p).num
d．p=&stu.age
6．设有以下说明语句，
stuct ex
{ int x; float y; char z;}example;
则下面的叙述中不正确的是（ ）
a.struct是结构类型的关键字
b.example是用户定义的结构类型名
c.x,y,z都是结构成员名
d.struct ex是用户定义的结构类型
7． 有以下定义和语句，则以下引用形式非法的是（ ）
struct s
{ int i1;
s *i2,*i0;
};
static s a[3]={2,&a[1],NULL,4,&a[2],&a[0],6,NULL,&a[1]};
static s *ptr;
ptr=a;
a.ptr->i1++
b.*ptr->i2
c.++ptr->i0
d.*ptr->i1
8．设有以下语句：
struct st
{ int n;
st *next;
};
static st a[3]={5,&a[1],7,&a[2],9,NULL},*p;
p=&a[0];
则以下表达式值为6的是（ ）
a.p++->n
b.++p->n
c.(*p).n++
d.p->n++
9．在对typedef的叙述中错误的是( )
a.用typedef可以定义各种类型名，但不能用来定义变量
b.用typedef可以增加新类型
c.用typedef只是将已存在的类型用一个新的标识符来代表
d.使用typedef有利于程序的通用和移植
10．选择下面程序的运行结果是（ ）
#include <iostream.h>
struct stu
{ int num;
char name[10];
int age;
};
void fun(stu *p)
{ cout<<(*p).name<<endl; }
main()
{ stu students[3]={{9801,"Zhang",20},
{9802,"Long",21},
{9803,"Xue",19}};
fun(students+2);
}
a.Zhang
b.Xue
c.Long
d.18
二：填空题
1、 有以下说明和定义语句，请给结构变量w赋初值，使w.a的值为7，w.b指向a数组的首地址。
double a[5];
struct exp{ int a; double *b;}w={ , };
2、下面程序的输出是 .
struct two
{ int x, *y ; }*p;
int a[8]={1,2,3,4,5,6,7,8};
two b[4]={100,&a[1],200,&a[3],10,&a[5],20,&a[7]};
main()
{ p=b;
printf("%d\n",++(p->x));
}
3、有以下定义和语句，则表达式++ptr->i的值为 .
struct s
{ int i;
int *j;
};
int a[]={1,2,3,4,5,6};
s a[3]={5,&a[1],7,&a[2],9,'\0'},*ptr;
void main()
{ …
ptr=&a[0];
…
}
4、 以下程序用以输出结构变量ex所占存储单元的字节数，请填空。
#include<stdio.h>
struct st
{ char name[20]; double score; };
void main()
{ st ex;
printf("ex size:%d\n", );
}
5、已知：
struct
{
int x,y;
}s[2]={ {1,2},{3,4} },*p=s;
则表达式++p->x的值为 ，表达式（++p）->x的值为
6、为了建立如下结点的链表，结点的正确描述形式是：
struct node
{ int data;
;
}
7、 用typedef定义整型一维数组：
typedef int ARRAY[10];
则对整型数组a[10]、b[10]、c[10]可以定义为 .
8、下面程序的执行结果是 .
#include <stdio.h>
struct n_c
{
int x;
char c;
};
main( )
{
struct n_c a={10,'x'};
func(a);
printf("%d%c",a.x,a.c);
return 0;
}
void func(struct n_c b)
{
b.x=20;
b.c='y';
}
三：简答和编程题
1． 结构类型数据有什么特性，在什么场合下使用结构处理数据？
2． 定义结构变量和对结构变量进行初始化的时候应该注意些什么问题？
3． 链表是怎样的一种数据结构，它与数组有什么不同？链表的插入和删除是怎样实现的？
4． 阅读下面的程序，分析结构在其中的定义，使用，思考程序的输出结果。
#include <iostream.h>
struct clock
{
int hour;
int minute;
int second;
}aClock;
void updata()
{
aClock.second++;
if(aClock.second==60)
{
aClock.second=0;
aClock.minute++;
}
if(aClock.minute==60)
{
aClock.minute=0;
aClock.hour++;
}
if(aClock.hour==24)
aClock.hour=0;
}
void display()
{
cout<<aClock.hour<<":"<<aClock.minute<<":"<<aClock.second<<endl;
}
void main()
{
aClock.hour=aClock.minute=aClock.second=0;
for(int i=0;i<10000;i++)
{
updata();
display();
}
}
5．编写一个函数day，该函数使用data结构作为参数，函数返回某日是这年的第几天。
6．有4个学生，每个学生包括学号，姓名，成绩。要求找出成绩最高者的姓名和成绩。