admin 管理员组

文章数量: 1087139


2024年1月23日发(作者:配置java)

2013年 结构体与联合体习题

选择题

1、若程序中有以下的说明和定义:

struct abc

{ int x;char y; } 花括号后少了分号。

struct abc s1,s2;

则会发生的情况是______。

A) 编译时错 B) 程序将顺序编译、连接、执行

C) 能顺序通过编译、连接、但不能执行 D) 能顺序通过编译、但连接出错

2、有以下程序段

struct st

{ int x; int *y;}*pt;

int a[]={1,2};b[]={3,4};

struct st c[2]={10,a,20,b};

pt=c;

以下选项中表达式的值为11的是

A) *pt->y B) pt->x C) ++pt->x D) (pt++)->x

3、有以下说明和定义语句

struct student

{ int age; char num[8];};

struct student stu[3]={{20,"200401"},{21,"200402"},{19,"200403"}};

struct student *p=stu;

以下选项中引用结构体变量成员的表达式错误的是______。

A) (p++)->num B) p->num C) (*p).num D) stu[3].age

4、设有如下枚举类型定义

enum language {Basic=3,Assembly=6,Ada=100,COBOL,Fortran};

枚举量Fortran的值为______。

A) 4 B) 7 C) 102 D) 103

5、以下叙述中错误的是_________。

A)可以通过typedef增加新的类型

B)可以用typedef将已存在的类型用一个新的名字来代表

C)用typedef定义新的类型名后,原有类型名仍有效

D)用typedef可以为各种类型起别名,但不能为变量起别名

6、有以下程序段

typedef struct NODE

{ int num; struct NODE *next;

} OLD;

以下叙述中正确的是

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

C) OLD是一个结构体类型 D) OLD是一个结构体变量

7、以下选项中不能正确把cl定义成结构体变量的是______。

1.typedef struct

{int red;

int green;

int blue;

} COLOR;

1

COLOR cl;

2.struct color cl

{ int red;

int green;

int blue;

};

3.struct color

{ int red;

int green;

int blue;

}cl;

4.struct

{int red;

int green;

int blue;

}c1;

A) 1 B) 2 C) 3 D) 4

8、设有以下语句

typedef struct S

{ int g; char h;} T;

则下面叙述中正确的是______。

A)可用S定义结构体变量

B)可以用T定义结构体变量

C) S是struct类型的变量

D) T是struct S类型的变量

9、设有如下说明

typedef struct ST

{long a;int b;char c[2];} NEW;

则下面叙述中正确的是_____。

A)以上的说明形式非法

B) ST是一个结构体类型

C) NEW是一个结构体类型

D) NEW是一个结构体变量

10、以下对结构体类型变量td的定义中,错误的是______。

A) typedef struct aa

{ int n;

float m;

}AA;

AA td;

C) struct

{ int n;

float m;

}aa;

struct aa td;

B) struct aa

{ int n;

float m;

};

struct aa td;

D) struct

{ int n;

float m;

}td;

2

11、根据下面的定义,能打印出字母M的语句是_____。

struct person { char name[9]; int age;};

struct person class[10]={"John",17, "Paul",19,"Mary",18, "Adam",16};

A) printf("%cn",class[3].name); B) printf("%cn",class[3].name[1]);

C) printf("%cn",class[2].name[1]); D) printf("%cn",class[2].name[0]);

12、设有以下语句:

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

13、下面程序的输出结果为

struct st

{ int x;

int *y;

} *p;

这里是设了一个结构体指针变量*p。这个结构体中又嵌套了一个指针变量*y。

然后再设了一个普通数数组dt[4]。然后下一步是给结构体定义的一个变量数组:de[4],并且分别给结构体内的成员直接赋值:里面分别赋了四次。

int dt[4]={10,20,30,40};

struct st aa[4]={ 50,&dt[0],60,&dt[1],70,&dt[2],80,&dt[3] };

main()

{ p=aa;

这里面是给结构体里的x和*y直接赋值。因为是dt[4]所以赋了四次。第一次:x对应50;

*y对应的是地址de[0]也就是10.然后这样一次下去。

printf("%dn", ++p->x );

printf("%dn", (++p)->x);

printf("%dn", ++( *p->y));

}

A) 10 B) 50 C) 51 D) 60

20 60 60 70

20 21 21 31

14、若已建立下面的链表结构,指针p、s分别指向图中所示的结点,则不能将s所指的结点插入到链表末尾的语句组是__________。

3

data next

head

E F NULL

p

s G

A) s->next=NULL; p=p->next; p->next=s;

B) p=p->next; s->next=p->next; p->next=s;

C) p=p->next; s->next=p; p->next=s;

D) p=(*p).next; (*s).next=(*p).next; (*p).next=s;

15、下面程序的输出是

main()

{ enum team {my,your=4,his,her=his+10};

printf("%d %d %d %dn",my,your,his,her);}

A) 0 1 2 3 B) 0 4 0 10 C) 0 4 5 15 D) 1 4 5 15

16、下面程序的输出是

main()

{ struct cmplx { int x; int y; } cnum[2]={1,3,2,7};

printf("%dn",cnum[0].y /cnum[0].x * cnum[1].x);}

A) 0 B) 1 C) 3 D) 6

17、设有如下定义:

struct sk

{int a;float b;}data,*p;

若有p=&data;,则对data中的a域的正确引用是__________。

A) (*p).data.a B) (*p).a C) p->data.a D) .a

18、有以下程序: *

#include

union pw

{ int i; char ch[2]; } a;

main()

{ [0]=13; [1]=0; printf("%dn",a.i); }

程序的输出结果是 。(注意: ch[0]在低字节,ch[1]在高字节。)

A) 13 B) 14 C) 208 D) 209

19、已知字符0的ASCII码为十六进制的30,下面程序的输出是___________。

main()

{ union { unsigned char c;

unsigned int i[4];

} z;

4

z.i[0]=0x39;

z.i[1]=0x36;

printf("%cn",z.c);}

A) 6 B) 9 C) 0 D) 3

20、字符'0'的ASCII码的十进制数为48,且数组的第0个元素在低位,则以下程序的输出结果是_____________。

#include

main( )

{ union { int i[2]; long k; char c[4]; }r,*s=&r;

s->i[0]=0x39;

s->i[1]=0x38;

printf("%cn",s->c[0]) ; }

A) 39 B) 9 C) 38 D) 8

填空题

1、以下函数creat用来建立一个带头结点的单向链表,新产生的结点总是插在链表的末尾。单向链表的头指针作为函数值返回.请填空:

#include

struct list { char data; struct list * next; };

struct list * creat()

{ struct list * h,* p,* q;

char ch;

h= (struct list *) malloc(sizeof(struct list));

p=q=h;

ch=getchar();

while(ch!='?')

{ p= (struct list *)malloc(sizeof(struct list));

p->data=ch;

p->next=p;

q=p;

ch=getchar();

}

p->next='0';

return(h);

}

2、有以下说明定义和语句,可用引用结构体成员day, 请写出引用结构体成员的其它两种形式 (*b).day 、 b->day 。

struct{int day;char mouth;int year;}a,*b; b=&a;

3、现有如图所示的存储结构,每个结点含两个域,data是指向字符串的指针域,next是指向结

head

data next data

5

next

data next

点的指针域。请填空完成此结构的类型定义和说明。

struct link

{ char *data ; struct link *next ;} *head;

4、若有以下说明和定义语句,则变量w在内存中所占的字节数是 40 。

union aa

{ float x, y;

char c[6];

};

struct st { union aa v; float w[5]; double ave; } w;//32

5、设有以下结构类型说明和变量定义,则变量a在内存所占字节数是 32__ 。

Struct stud

{ char num[6];

int s[4];

double ave;

} a,*p;

6、以下程序用来输出结构体变量ex所占存储单元的字节数,请填空。

struct st

{ char name[20]; double score; };

main()

{ struct st ex;

printf(“ex size: %dn”,sizeof( _ex_____ ));

}

7、以下程序段用于构成一个简单的单向链表,请填空。

struct STRU

{ int x, y ;

float rate;

_struct STRU_* p;

} a, b;

a.x=0; a.y=0; =0; a.p=&b;

b.x=0; b.y=0; =0; b.p=NULL;

8、若有如下结构体说明:

struct STRU

{ int a, b ; char c; double d:

struct STRU p1,p2;

};

请填空,以完成对t数组的定义,t数组的每个元素为该结构体类型

_ struct STRU_____ t[20];

9、若以下定义和语句,则sizeof(a)的值是 ____12_____ ,而sizeof(b)的值是 __4______

struct { int day; char mouth; int year;} a, *b;

b=&a;

10、变量root有如图所示有存储结构,其中sp是指向字符串的指针域,next 是指向该结构的指针域,data用以存放整型数. 请填空 , 完成此结构的类型说明和变量root的定义

sp next data

┌─┬─┬─┐

root│ │ │ │

└─┴─┴─┘

6

struct list

{ char *sp;

_ struct list *next______;

_int data______;

}root;

11、设有以下定义

struct ss

{ int info; struct ss *link;}x,y,z;

且已建立如下图所示链表结构:

_____ _____ _____

| | | | | | | | |

| | -|→| | -|→| | |

|__|__| |__|__| |__|__|

x y z

请写出删除结点y的赋值语句_ =z;_____。

12、以下程序的运行结果是 2002Shangxian

# include

typedef struct student{

char name[10];

long sno;

float score;

}STU;

main( )

{ STU

a={“zhangsan”,2001,95},b={“Shangxian”,2002,90},c={“Anhua”,2003,95},d,*p=&d;

d=a;

if(strcmp(,)>0) d=b;

if(strcmp(,)>0) d=c;

printf(“%ld%sn”,,p->name); }

13、以下程序运行后的输出结果是 13431

struct NODE

{ int k;

struct NODE *link;

};

main()

{

struct NODE m[5],*p=m,*q=m+4;

int i=0;

while(p!=q)

{ p->k=++i; p++;

q->k=i++; q--;

}

q->k=i;

for(i=0;i<5;i++)

printf("%d",m[i].k);

7

printf("n");

}

8


本文标签: 结构 变量 定义 链表