结构体与共用体及用户定义类型 下载本文

第十四部分:结构体与共用体及用户定义类型

一、选择题: (1)有以下程序段 typedef struct NODE

{ int num; struct NODE *next; } OLD;

以下叙述中正确的是

A)以上的说明形式非法 B)NODE是一个结构体类型 C)OLD是一个结构体类型 D)OLD是一个结构体变量

(2)有以下程序

# include struct STU { int num;

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 struct STU

{ 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 stuct node

{ 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 struct NODE{ int num;