第三讲  结构体与共用体
一、选择题
1.在说明一个结构体变量时系统分配给它的存储空间是     
A)结构体中第一个成员所需存储空间
B)结构体中最后一个成员所需存储空间
C)结构体中占用最大存储空间的成员所需存储空间
D)结构体中所有成员所需存储空间的总和
2.若有以下说明和语句:
  struct  worker
  { int no;  char  ﹡name;  }work, ﹡p=&work;
则以下引用方式不正确的是        *
A) work.no  B) (﹡p).no    C) p->no  D)work->no
3.有如下定义:
  struct  date  { int  year, month, day;  };
  struct  worklist  { char name[20];  char  sex;
struct  date  birthday;  }person;
  对结构体变量person的出生年份进行赋值时,下面正确的赋值语句是         
  *
  A) year=1958                          B) birthday.year=1958   
C) person.birthday.year=1958          D) person.year=1958
4.以下对结构体类型变量的定义中不正确的是          *
A)#define  STUDENT struct student    B) struct student
STUDENT                         { int  num;
{ int  num;                          float  age; 
float  age;  }std1;                    }std1;
C)  struct                            D) struct 
  { int  num;                          { int  num;
          float  age;                            float  age;  } student;
          }std1;                                struct student std1;
    5.设有以下说明语句
struct stu
{ int  a;  float  b; }stutype;
  则下面的叙述不正确的是          *
A)struct是结构体类型的关键字
B)struct stu是用户定义的结构体类型
C)stutype是用户定义的结构体类型名
D)a和b都是结构体成员名
6.C语言结构体类型变量在程序执行期间       
A)所有成员一直驻留在内存中
B)只有一个成员主留在内存中
C)部分成员驻留在内存中
D)没有成员驻留在内存中
7.以下程序的运行结果是        *
  # include  <stdio.h>
  main( )
{ struct  date 
{ int  year, month, day;  }today;
printf(%d\n,sizeof(struct date));  }
    A) 6      B)     C) 10    D)12
8.有如下定义
struct person{char name[9]; int age;};
struct person class[10]={“Johu”, 17,
“Paul”, 19
“Mary”, 18,
“Adam 16,};
根据上述定义,能输出字母M的语句是        *
A prinft(“%c\n”,class[3].mane);
sizeof结构体大小B pfintf(“%c\n”,class[3].name[1]);
C prinft(“%c\n”,class[2].name[1]);
D printf(“%^c\n”,class[2].name[0]);
9.设有如下定义
struct ss
{ char name[10];
int age;
char sex;
} std[3],* p=std;
下面各输入语句中错误的是        *
A) scanf("%d",&(*p).age);
B) scanf("%s",&std.name);
C) scanf("%c",&std[0].sex);
D) scanf("%c",&(p->sex))
10.设有以下说明语句,则下面的叙述中不正确的是        *
struct ex {
int x ; float y; char z ;
} example;
A) struct结构体类型的关键字          B) example是结构体类型名
C) x,y,z都是结构体成员名              D) struct ex是结构体类型
11.若程序中有下面的说明和定义:
struct  stt
{  int x;
  char b;
}
struct stt a1,a2;
则会发生的情况是        *
A)程序将顺利编译、连接、执行。
B)编译出错。
C)能顺利通过编译、连接,但不能执行。
D)能顺利通过编译,但连接出错。
12.已知教师记录定义为:
struct student
{  int no;
  char name[30];
  struct
  {  unsigned int year;
      unsigned int month;
      unsigned int day;
  }birthday;
} stu;
struct student *t = &stu;
若要把变量t中的生日赋值为“1980年5月1日”,则正确的赋值方式为        *
A)  year = 1980;                    B)  t.year = 1980;
          month = 5;                          t.month = 5;
          day = 1;                            t.day = 1;
C)  ar = 1980;          D)  t-> ar = 1980;
          h = 5;                  t-> h = 5;
              t.birthday.day = 1;                    t-> birthday.day = 1;
13.以下结构类型可用来构造链表的是        *
        A  struct aa{ int aint * b} 
B  struct bb{ int abb * b}
        C  struct cc{ int * acc b}   
D  struct dd{ int * aaa b}
14.以下程序的输出结果是      **
amovep(int *p, int a[3][3],int n)
{ int i, j;
for( i=0;i<n;i++)
for(j=0;j<n;j++){ *p=a[i][j];p++; }
}
main()
{ int *p,a[3][3]={{1,3,5},{2,4,6}};
p=(int *)malloc(100);
amovep(p,a,3);
printf("%d %d \n",p[2],p[5]);free(p);
}
A 56       B 25     C 34       D) 程序错误
15.以下程序的输出结果是      **
struct HAR
{ int x, y; struct HAR *p;} h[2];
main()
{ h[0].x=1;h[0].y=2;
h[1].x=3;h[1].y=4;
h[0].p=&h[1].x;
h[1].p=&h[0].x;
printf("%d %d \n",(h[0].p)->x,(h[1].p)->y);
}
A 12           B 23         C 14           D 32
二、填空题
1.有如下定义:*
struct    {int  x;  int  y;  }s[2]={{1,2},{3,4}}, ﹡p=s;
则:表达式 ++p->x 的结果是       
    表达式 ++p->x 的结果是     
    2.若有定义:**
struct  num  {int  a;  int  b;  float f;  }n={1, 3, 5.0}};
struct  num ﹡pn=&n;
则表达式pn->b/n.a﹡++pn->b的值是      ,表达式(﹡pn).a+pn->f的值是     
    3.若要使指针p指向一个double类型的动态存储单元,请填空。*
p=         malloc(sizeof(double));
4.设有以下结构类型说明和变量定义,则变量a在内存所占字节数是        
*
Struct stud
{ char num[6];
int s[4];
double ave;
} a,*p;
三、程序填空题
1.结构数组中存有三人的姓名和年龄,以下程序输出三人中最年长者的姓名和年龄。请填空。*
  static  struct  man
  { char name[20]; int age; }person[ ]={ “li-ming”,18, “wang-hua”,19,”zhang-ping”,20};
  main( )
  {struct  man  *p,*q;  int old=0;    p=person;  for( ;  (1)    )
    if(old<p->age)  {q=p;    (2)    ;}