结构与联合
1、已知学生记录描述为
struct student
{
int no;
char name[20];
char sex;
struct
{
int year;
int month;
int day;
} birth;
};
struct student s;
设变量s中的“生日”应是“1984年11月11日”,下列对“生日”的正确赋值方式是(  )
(A) year=1984;
month=11;
day=11;
(B) ar=1984;
birth.day=11;
(C) s.year=1984;
s.day=11;
(D) ar=1984;
h=11;
s.birth.day=11;
2、当说明一个结构变量时系统分配给它的内存是(  )
c语言中struct
(A) 各成员所需内存量的总和
(B) 结构中第一个成员所需内存量
(C) 成员中占内存量最大者所需的容量
(D) 结构中最后一个成员所需内存量
3、以下对结构变量的定义中不正确的是(  )
(A) #define STUDENT struct student
STUDENT
{
int num;
float age;
} std1;
(B) struct student
{
int num;
float age;
} std1;
(C) struct
{
int num;
float age;
} std1;
(D) struct
{
int num;
float age;
} student;
struct student std1;
4、设有以下说明语句
struct stu
{
int a;
float b;
} stutype;
则下面的叙述不正确的是(  )
(A) struct是结构类型的关键字
(B) struct stu是用户定义的结构类型
(C) stutype是用户定义的结构类型名
(D) a和b都是结构成员名
5、C语言结构变量在程序执行期间(  ) //此题不妥
(A) 所有成员一直驻留在内存中
(B) 只有一个成员驻留在内存中
(C) 部分成员驻留在内存中
(D) 没有成员驻留在内存中
6、在16位IBM_PC机上使用C语言,若有如下定义:
struct data
{
int i;
char ch;
double f;
} b;
则结构变量b占用内存的字节数是(  )
(A) 1
(B) 2
(C) 8
(D) 11
7、以下程序的运行结果是(  )
#include<stdio.h>
void main()
{
struct date
{
int year,month,day;
} today;
printf("%d\n",sizeof(struct date));
}
(A) 6
(B) 8
(C) 10
(D) 12
8、根据下面的定义,能打印出字母M的语句是(  )
struct person
{
char name[9];
int age;
};
struct person class[10]={"John",17,
"Paul",19,
"Mary",18,
"adam",16
};
(A) printf("%c\n",class[3].name);
(B) printf("%c\n",class[3].name[1]);
(C) printf("%c\n",class[2].name[1]);
(D) printf("%c\n",class[2].name[0]);
9、下面程序的运行结果是(  )
void main()
{
struct cmplx
{
int x;
int y;
}cnum[2]={1,3,2,7};
printf("%d\n",cnum[0].y/cnum[0].x*cnum[1].x);
}
(A) 0
(B) 1
(C) 3
(D) 6
10、若有以下定义和语句:
struct student
{
int age;
int num;
};
struct student stu[3]={{1001,20},{1002,19},{1003,21}};
void ma
in()
{
struct student *p;
p=stu;
...
}
则以下不正确的引用是(  )
(A) (p++)->num
(B) p++
(C) (*p).num
(D) p=&stu.age
11、以下scanf函数调用语句中对结构体变量成员的不正确引用是(  )
struct pupil
{
char name[20];
int age;
int sex;
} pup[5],*p;
p=pup;
(A) scanf("%s",pup[0].name);
(B) scanf("%d",&pup[0].age);
(C) scanf("%d",&(p->sex));
(D) scanf("%d",p->age);
12、若有以下定义和语句,则以下引用形式不合法的是
struct s
{
int i1;
struct s *i2,*i0;
};
static struct s a[3]={2,&a[1],'\0',4,&a[2],&a[0],6,'\0',&a[1]},*ptr;
ptr=a;
(A) ptr->i1++
(B) *ptr->i2
(C) ++ptr->i0
(D) *ptr->i1
13、设有以下定义: //此题有点硬拗
struct sk
{
int n;
float x;
} data,*p;
若要使p指向data中的n域,正确的赋值语句是(  )
(A) p=&data.n;
(B) *p=data.n;
(C) p=(struct sk *)&data.n;
(D) p=(struct sk *)data.n;
14、若有以下说明和语句
struct student
{
int age;
int num;
} std,*p;
p=&std;
则以下对结构变量std中成员age的引用方式不正确的是(  )
(A) std.age
(B) p->age
(C) (*p).age
(D) *p.age
15、若有以下程序段:
struct dent
{
int n;
int *m;
};
int a=1,b=2,c=3;
struct dent s[3]={{101,&a},{102,&b},{103,&c}};
void main()
{
struct dent *p;
p=s;
...
}
则以下表达式中值为2的是(  )
(A) (p++)->m
(B) *(p++)->m
(C) (*p).m
(D) *(++p)->m
16、若有以下说明和语句,则对pup中sex域的正确引用方式是(  )
struct pupil
{
char name[20];
int sex;
}pup,*p;
p=&pup;
(A) p.pup.sex
(B) p->pup.sex
(C) (*p).pup.sex
(D) (*p).sex
17、设有以下语句:
struct st
{
int n;
struct st *next;
};
static struct st a[3]={5,&a[1],7,&a[2],9,'\0'},*p;
p=&a[0];
则以下表达式的值为6的是(  )
(A) p++->n
(B) p->n++
(C) (*p).n++
(D) ++p->n
18、以下程序的输出结果是(  )
struct stu
{
int x;
int *y;
} *p;
int dt[4]={10,20,30,40};
struct stu a[4]={50,&dt[0],60,&dt[1],70,&dt[2],80,&dt[3]};
void main()
{
p=a;
printf("%d,",++p->x);
printf("%d,",(++p)->x);
printf("%d\n",++(*p->y));
}
(A) 10,20,20
(B) 50,60,21
(C) 51,60,21
(D) 60,70,31
19、若有以下说明和语句,则下面表达式中值为1002的是(  )
struct student
{
int age;
int num;
};
struct student stu[3]={{1001,20},{1002,19},{1003,21}};
struct student *p;
p=stu;
(A) (p++)->num
(B) (p++)->age
(C) (*p).num
(D) (*++p).age
20、以下对结构变量stu1中成员age的非法引用是(  )
struct student
{
int age;
int num;
} stu1,*p;
p=&stu1;
(A) stu1.age
(B) student.age
(C) p->age
(D) (*p).age
21、设有以下说明和定义语句,则下面表达式中值为3的是(  )
struct s
{
int i1;
struct s *i2;
};
static struct s a[3]={1,&a[1],2,&a[2],3,&a[0]},*ptr;
ptr=&a[1];
(A) ptr->i1++
(B) ptr++->i1
(C) *ptr->i1
(D) ++ptr->i1
22、以下程序的功能是:读入一行字符(如:a,...,y,z),按输入时的逆序建立一个链接式的节点序列,即先输入的位于链表尾(如下图),然后再按输入的相反顺序输出,并释放全部结点。请选择正确的内容填入【 】中。
【1】(  )
【2】(  )
【3】(  )
┌─┬─┐ ┌─┬─┐    ┌─┬──┐
│Z│ ┼→│Y│ ┼→...--→│a│NULL│
└─┴─┘ └─┴─┘    └─┴──┘
#include<stdio.h>
#define getnode(type) 【1】malloc(sizeof(type))
void main()
{
struct node
{
char info;
struct node *link;
} *top,*p;
char c;
top=NULL;
while((c=getchar())【2】)
{
p=getnode(struct node);
p->info=c;
p->link=top;
top=p;
}
while(top)
{
【3】
top=top->link;
putchar(p->info);
free(p);
}
}
【1】
(A) (type)
(B) (type *)
(C) type
(D) type *
【2】
(A) =='\0'
(B) !='\0'
(C) =='\n'
(D) !='\n'
【3】
(A) top=p
(B) p=top
(C) p==top
(D) top==p
23、若要利用下面的程序片断使指针变量p指向一个存储整型变量的存储单元,则【 】中应填入的内容是(  )
int *p;
p=【 】malloc(sizeof(int));
(A) int
(B) int *
(C) (* int)
(D) (int *)
24、若已建立下面的链表结构,指针p、q分别指向图中所示结点,则不能将q所指的结点插入链表末尾的一组语句是(  )
┌─┬─┐  ┌─┬──┐
...→│a│ ┼→│b│NULL│
└─┴─┘  └─┴──┘
↑   ┌─┬─┐
p   │c│ │
  └─┴─┘
   ↑
   q
(A) p->next=NULL; p=p->next; p->next=q;
(B) p=p->next; q->next=p->next; p->next=q;
(C) p=p->next; q->next=p; p->next=q;
(D) p=(*p).next; (*q).next=(*)p.next; (*p).next=q;
25、当说明一个联合变量时系统分配给它的内存是(  )
(A) 各成员所需内存量的总和
(B) 结构中第一个成员所需内存量
(C) 成员中占内存量最大者所需内存量
(D) 结构中最后一个成员所需内存量
26、以下对C语言中联合类型数据的叙述正确的是(  )
(A) 可以对联合变量名直接赋值
(B) 一个联合变量中可以同时存放其所有成员
(C) 一个联合变量中不能同时存放其所有成员
(D) 联合类型定义中不能出现结构类型的成员
27、若有以下定义和语句
union data
{
int i;
char c;
float f;
} a;
int n;
则以下语句正确的是(  )
(A) a=5;
(B) a={2,'a',1.2};
(C) printf("%d\n",a);
(D) n=a;
28、设有以下说明,则下面不正确
的叙述是(  )
union data
{
int i;
char c;
float f;
} un;
(A) un所占的内存长度等于成员f的长度
(B) un的地址和它的各成员地址都是同一地址
(C) un可以作为函数参数
(D) 不能对un赋值,但可以在定义un时对它初始化
29、C语言联合类型变量在程序运行期间(  )
(A) 所有成员一直驻留在内存中
(B) 只有一个成员驻留在内存中
(C) 部分成员驻留在内存中
(D) 没有成员驻留在内存中
30、以下程序的运行结果是(  )
#include<stdio.h>
void main()
{
union
{
long a;
int b;
char c;
} m;
printf("%d\n",sizeof(m));
}
(A) 2
(B) 4
(C) 6
(D) 8
31、对下面程序中的每个打印语句后的注释行内的【x】小题,选择正确的运行结果。
#include<stdio.h>
void main()
{
union
{
int a[2];
long b;
char c[4];
} s;
s.a[0]=0x39;
s.a[1]=0x38;
printf("%lx\n",s.b);  /*【1】*/
printf("%c\n",s.c[0]);  /*【2】*/
}
【1】
(A) 390038
(B) 380039
(C) 3938
(D) 3839
【2】
(A) 39
(B) 9
(C) 38
(D) 8
32、对下面语句中的每个打印语句后的注释行内的【x】小题,选择正确的运行结果。
#include<stdio.h>
void main()
{
int j;
union
{
int a;
long b;
unsigned char c;
} m;
m.b=0x12345678;
printf("%x\n",m.a);  /*【1】*/
printf("%x\n",m.c);  /*【2】*/
}
【1】
(A) 1234
(B) 5678
(C) 12345678
(D) 0
【2】
(A) 12
(B) 78
(C) 1234
(D) 5678
33、在16位IBM-PC机上使用C语言,若有如下定义:
union data
{
int i;
char ch;
double f;
} b;
则联合变量b占用内存的字节数是(  )
(A) 1
(B) 2
(C) 8
(D) 11
34、以下程序的运行结果是(  )
#include<stdio.h>
union pw
{
int i;
char ch[2];
} a;
void main()
{
a.ch[0]=13;
a.ch[1]=0;
printf("%d\n",a.i);
}
(A) 13
(B) 14
(C) 208
(D) 209
35、使用typedef定义一个新类型的正确步骤是(  )
(A) 2,4,1,3
(B) 1,3,2,4
(C) 2,1,4,3
(D) 4,2,3,1
1、把变量名换成新类型名
2、按定义变量的方法写出定义体
3、用新类型名定义变量
4、在最前面加上关键字typedef
36、下面对typedef的叙述中不正确的是(  )
(A) 用typedef可以定义各种类型名,但不能用来定义变量
(B) 用typedef可以增加新类型
(C) 用typedef只是将已存在的类型用一个新的标识符来代表
(D) 使用typedef有利于程序的通用和移植
37、以下程序的运行结果是(  )
typedef union
{
long a[2];
int b[4];
char c[8];
} TY;
TY our;
void main()
{
printf("%d\n",sizeof(our));
}
(A) 32
(B) 16
(C) 8
(D) 24

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。