第十四部分:结构体与共用体及用户定义类型
一、选择题: (1)有以下程序段 typedef struct NODE
{ int num; struct NODE *next; } OLD;
以下叙述中正确的是
A)以上的说明形式非法 B)NODE是一个结构体类型 C)OLD是一个结构体类型 D)OLD是一个结构体变量
(2)有以下程序
# include
float TotalScore; }; void f(struct STU p)
{ struct STU s[2]={{20044,550},{20045,537}};
p.num = s[1].num; p.TotalScore = s[1].TotalScore; } main()
{ struct STU s[2]={{20041,703},{20042,580}}; f(s[0]);
printf(\ %3.0f\\n\ }
程序运行后的输出结果是 A)20045 537 B)20044 550 C)20042 580 D)20041 703 (3)有以下程序
# include
{ char name[10]; int num; };
void f(char *name, int num)
{ struct STU s[2]={{\ num = s[0].num;
strcpy(name, s[0].name); } main()
{ struct STU s[2]={{\ p=&s[1]; f(p->name, p->num);
printf(\ %d\\n\ }
程序运行后的输出结果是 A)SunDan 20042 B)SunDan 20044
C)LiSiGuo 20042 D)YangSan 20041 (4)有以下程序 struct STU
{ char name[10]; int num; float TotalScore; }; void f(struct STU *p)
{ struct STU s[2]={{\ ++p ; ++q; *p=*q; } main()
{ struct STU s[3]={{\ f(s);
printf(\ %d %3.0f\\n\ }
程序运行后的输出结果是
A)SunDan 20044 550 B)Penghua 20045 537
C)LiSiGuo 20042 580 D)SunDan 20041 703
(5)若有以下说明和定义 union dt {
int a; char b; double c; }data;
以下叙述中错误的是 A)data的每个成员起始地址都相同
B)变量data所占内存字节数与成员c所占字节数相等
C)程序段:data.a=5;printf(\输出结果为5.000000 D)data可以作为函数的实参
(6)设有如下说明 typedef struct ST {
long a; int b; char c[2]; } NEW;
则下面叙述中正确的是 A)以上的说明形式非法 B)ST是一个结构体类型
C)NEW是一个结构体类型 D)NEW是一个结构体变量
(7)有以下结构体说明和变量定义,如图所示,指针pqr分别指向此链表中三个连续结点。 struct node {
int data; struct node *next; } *p,*q,*r;
现要将q所指结点从链表中删除,同时保持链表的连续,以下不能完成指定操作的语句是 A)p->next=q->next; B)p->next=p->next->next; C)p->next=r; D)p=q->next;
(8)以下对结构体类型变量td的定义中,错误的是 A)typedef struct aa {
int n; float m; }AA; AA td; B)struct aa {
int n; float m; } td; struct aa td; C)struct {
int n; float m; }aa;
struct aa td; D)struct {
int n; float m; }td;
(9) 有以下说明和定义语句 struct student
{ int age; char num[8];};
struct student stu[3]={{20,\struct student *p=stu;
以下选项中引用结构体变量成员的表达式错误的是 A) (p++)->num
B) p->num C) (*p).num D) stu[3].age
10~12.以下程序的功能是:建立一个带有头结点的单向链表,并将存储在数组中的字符依次转储到链表的各个结点中,请从与下划线处号码对应的一组选若中选择出正确的选项。 #include
{ char data; struct node *next;};
(10) CreatList(char *s) { struct node *h,*p,*q);
h=(struct node *) malloc(sizeof(struct node)); p=q=h;
while(*s!='\\0')
{ p=(struct node *) malloc(sizeof(struct node)); p->data= (11) ; q->next=p; q= (12) ; s++; }
p->next='\\0'; return h; } main()
{ char str[]=\ struct node *head; head=CreatList(str); ... }
(10) A) char * B) struct node C) struct node* D) char (11) A) *s B) s C) *s++ D)(*s)++
(12) A) p->next B) p C) s D) s->next
(13) 设有以下语句 typedef struct S
{ int g; char h;} T; 则下面叙述中正确的是
A) 可用S定义结构体变量 B)可以用T定义结构体变量 C)S是struct类型的变量 D)T是struct S类型的变量
(14) 有以下程序 struc STU
{ char name[10]; int num; };
void f1(struct STU C)
{ struct STU b={“LiSiGuo”,2042}; c=b; }
void f2(struct STU *C)
{ struct STU b={“SunDan”,2044}; *c=b; } main( )
{ struct STU a={“YangSan”,2041},b={“WangYin”,2043}; f1(a) ;f2(&b) ;
printf(“%d %d\\n”,a.num,b.num); }
执行后的输出结果是 A)2041 2044 B)2041 2043 C)2042 2044 D)2042 2043
(15) 有以下程序 struct STU { char name[10]; int num; int Score; }; main( )
{ struct STU s[5]={{“YangSan”,20041,703},{“LiSiGuo”,20042,580},
{“wangYin”,20043,680},{“SunDan”,20044,550}, {“Penghua”,20045,537}},*p[5],*t; int i,j;
for(i=0;i<5;i++) p[i]=&s[i]; for(i=0;i<4;i++) for(j=i+1;j<5;j++)
if(p[i]->Score>p[j]->Score) { t=p[i];p[i]=p[j];p[j]=t;} printf(“5d %d\\n”,s[1].Score,p[1]->Score); }
执行后输出结果是 A) 550 550 B) 680 680 C) 580 550 D) 580 680
(16) 有以下程序 #include