文档库 最新最全的文档下载
当前位置:文档库 › 11第十一章结构体和联合体练习

11第十一章结构体和联合体练习

11第十一章结构体和联合体练习
11第十一章结构体和联合体练习

第十一章结构体和共用体

一、单项选择题:

1、在说明一个结构体变量时系统分配给它的存储空间是()。

A、该结构体第一个成员所需存储空间

B、该结构中最后一个成员所需存储空间

C、该结构体中占用最大存储空间的成员所需存储空间

D、结构体中所有成员所需存储空间的总和

2、在说明一个共用体变量时系统分配给它的存储空间是()。

A、该共用体中第一个成员所需存储空间

B、该共用中最后一个成员所需存储空间

C、该共用体中占用最大存储空间的成员所需存储空间

D、共用体中所有成员所需存储空间的总和

3、共用体类型在任何给定时刻,()。

A、所有成员一直驻留在结构中

B、只有一个成员驻留在结构中

C、部分成员驻留在结构中

D、没有成员驻留在结构中

4、使用共用体union的目的是()。

A、将一组数据作为一个整体,以便于其中

的成员共享同一存储空间

B、将一组具有相同数据类型的数据作为一

个整体,以便于其中的成员共享同一存

储空间

C、将一组相关数据作为一个整体,以便程

序中使用

D、将一组具有相同数据类型的数据作为

一个整体,以便程序中使用

5、以下typedef的叙述不正确的是()。

A、用typedef可以定义各种类型名,但不

能用来定义变量

B、用typedef可以增加新类型

C、用typedef只是将已存在的类型用一个

新的名称来代表

D、使用typedef便于程序的通用

6、以下关于枚举的叙述不正确的是()。

A、枚举变量只能取对应枚举类型的枚举

元素表中元素

B、可以在定义枚举类型时对枚举元素进行

初始化C、枚举元素表中的元素有先后次序,可以

进行比较

D、枚举元素的值可以是整数或字符串

7、在下列程序段中,枚举变量c1和c2的值分别是()和()。

main()

{

enum color {red,yellow,blue=4,green,white} c1,c2;

c1=yellow;

c2=white;

printf(“%d,%d\n”,c1,c2);

}

A、1

B、3

C、5

D、6

8、若有以下说明和语句:

struct worker

{

int no;

char *name;

}work,*p=&work;

则以下引用方式不正确的是()。

A、work.no

B、(*p).no

C、p—>no

D、work—>no

9、以下程序执行后的正确结果是()。struct tree

{

int x;

char *s;

}t;

func(struct tree t)

{

t.x=10;

t.s=”computer”;

return(0);

}

main()

{

t.x=1;

t.s=”minicomputer”;

func(t);

printf(“%d,%s\n”,t.x,t.s);

}

A、10,computer

B、1,minicomputer

C、1,computer

D、10,minicomputer

10、有如下定义:

struct date

{

int year,month,day;

};

struct worklist

{

char name[20];

char sex;

struct date birthday;

}person;

对结构体变量person的出生年份进行赋值时,下面正确的赋值语句是()。

A、year=1958

B、b irthday.year=1958

C、p erson.birthday.year=1958

D、person.year=1958

11、在如下结构体定义中,不正确的是()。

A、struct student

{

int no;

char name[10];

float score;

}

B、struct stud[20]

{

int no;

char name[10];

float score;

}

C、struct student

{

int no;

char name[10];

float score;

}stud[20];

D、struct

{

int no;

char name[10];

float score;

}stud[100];

12、正确的k值是()。enum {a,b=5,c,d=4,e} k;

k=e;

A、3

B、4

C、5

D、6

13、正确的k值是()。

enum {a,b=5,c,d=4,e} k;

k=a;

A、0

B、1

C、4

D、6

14、以下程序的执行结果是()。main()

{

union

{

int x;

struct

{

char c1;

char c2;

}b;

}a;

a.x=0x1234;

printf(“%x,%x\n”,a.b.c1,a.b.c2);

}

A、12,34

B、34,12

C、12,00

D、34,00

15、以下程序的执行结果是()。

minin()

{

union

{

char s[2];

int i;

}a;

a.i=0x1234;

printf(“%x,%x\n”,a.s[0],a.s[1]);

}

A、12,34

B、34,12

C、12,00

D、34,00

16、以下程序的功能是读入一行字符,且每个字符存入一个结点,按输入顺序建立一个链表的结点序列,然后再按相反顺序输出并释放全部结点,请选择正确的编号填空。#include

#include

#define getnode(type) ((type

*)malloc(sizeof(type)))

#define NULL 0

main()

{

struct node

{

char info;

struct node (1) ;

}*top, *p;

char c;

top=NULL;

while ((c=getchar())!=’\n’)

{

p=getnode( (2) );

p—>info=c;

p—>link= (3) ;

top= (4) ;

}

while (top!=NULL)

{

p= (5) ;

top=p—>link;

printf(“%c”,p—>info);

free(p);

}

}

(1)A、*p B、*link C、*top D、link

(2) A、top B、p C、node D、struct node

(3) A、top B、top—>link C、p D、p—>link

(4) A、link B、p C、p—>link D、top—>link

(5) A、p—>link B、top—>link C、top D、link 18、阅读以下程序,请选择正确的编号填空。#include

typedef struct str1

{

char c[5];

char *s;

}st;

main()

{

static st s1[2]={{“ABCD”,”EFGH”},

{“IJK”,”LMN”}};

static struct str2

{

st sr;

int d;

}s2={“OPQ”,”RST”,32767};

st *p[ ]={&s1[0],&s1[1]};

printf(“%c\n”,p[0]—>c[1]); /*输出(1)*/ printf(“%s\n”,(++p[0])—>s);/*输出(2)*/ printf(“%c\n”,s2.sr.c[2]); /*输出(3)*/ printf(“%d\n”,s2.d+1); /*输出(4)*/

}

(1)A、M B、J C、D D、B

(2) A、ABCD B、EFGH C、LMN D、IJK

(3) A、Q B、V C、Y D、T

(4) A、-32768 B、32768 C、65535 D、0

二、填空题:

1、以下程序的执行结果是。typedef struct

{

long x[2];

int y[4];

char z[8];

}MYTYPE;

MYTYPE a;

main()

{

printf(“%d\n”,sizeof(a));

}

2、有如下定义:

struct

{

int x;

char * y;

}tab[2]={{1,”ab”},{2,”cd”}},*p=tab;

则:表达式*p—>y的结果是(1)。

表达式*(++p)—>y的结果是(2)。

3、有如下定义:

struct

{

int x;

int y;

}s[2]={{1,2},{3,4}},*p=s;

则:表达式++p—>x的结果是(1)。表达式(++p)—>x的结果是(2)。

4、以下程序的执行结果是。struct stru

{

int x;

char c;

};

main()

{

struct stru a={10,’x’};

func(a);

printf(“%d,%c\n”,a.x,a.c);

}

func(struct stru b)

{

b.x=20;

b.c=’y’;

}

5、以下程序的执行结果是。struct stru

{

int x;

char c;

};

main()

{

struct stru a={10,’x’},*p=&a;

func(p);

printf(“%d,%c\n”,a.x,a.c);

}

func(struct stru b)

{

b—>x=20;

b—>c=’y’;

}

6、以下程序的执行结果是。main()

{

union

{

int i[2];

long k;

char c[4];

}r,*p=&r;

p—>i[0]=0x39;

p—>i[1]=0x38;

printf(“%x,%x,%x\n”,p—>c[0],p—>c[1],

p—>c[2],p—>c[3]);

}

7、以下程序的执行结果是。typedef union

{

long x[2];

int y[4];

char z[8];

}MYTYPE;

MYTYPE a;

main()

{

printf(“%d\n”,sizeof(a));

}

8、以下程序的执行结果是。struct st

{

int x;

int *y;

}*p;

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

struct st a[ ]={1,&s[0],2,&s[1],3,&s[2],4,&s[3]}; main()

{

p=a;

printf(“%d,”,p—>x);

printf(“%d,”,(++p)—>x);

printf(“%d,”,*(++p)—>y);

printf(“%d\n”,++(*(++p)—>y));

}

9、以下程序的执行结果是。

#include

main()

{

union EXAMPLE

{

struct

{

int x;

int y;

}in;

int a;

int b;

}e;

e.a=1;e.b=2;

e.in.x=e.a*e.b;

e.in.y=e.a+e.b;

printf(“%d,%d\n”,e.in.x,e.in.y);

}

10、以下程序的执行结果是。

#include

main()

{

union u

{

char * name;

int age;

int income;

}s;

https://www.wendangku.net/doc/4b12073545.html,=”WANGLING”;

s.age=28;

s.income=1000;

printf(“%d\n”,s.age);

}

11、以下程序中使用一个结构体变量表示一个复数,然后进行复数加法和乘法运算。根据复数的定义,其代数式为:A=a+bi,则:复数的加法定义为:

(a+bi)+(c+di)=(a+c)+(b+d)i

复数的乘法定义为:

(a+bi)(c+di)=(ac-bd)+(bc+ad)i

请在程序的空白处填入一条语句或一个表达式。

#include

struct mulp_number

{

float real,virtual;

};

main()

{

struct mulp_number a,b,sum,mul;

printf(“输入a.real、a.virtual、

b.real、b.virtual:”);

scanf(“%f%f%f%f”,&a.real,&a.virtual,

&b.real,&b.virtual); sum.real= (1) ;

sum.virtual= (2) ;

mul.real= (3) —(4) ;

mul.virtual= (5) + (6) ;

printf(“sum.real=%f,sum.virtual=%f\n”,

sum.real,sum.virtual);

printf(“mul.real=%f,mul.virtual=%f\n”,

mul.real,mul.virtual);

}

12、以下程序用于在结构体数组中查找分数最高和最低的同学姓名和成绩。请在程序中的空白处填入一条语句或一个表达式。

#include

main()

{

int max,min,i,j;

static struct

{

char name[8];

int score;

}stud[5]={“李萍”,92,”王兵”,72,”钟虎”,83,”孙逊”,60,”徐军”,88};

max=min=1

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

if (stud[i].score>stud[max].score)

(1) ;

else if (stud[i].score

(2) ;

printf(“最高分:%s,%n\n”,(3) );

printf(“最低分:%s,%n\n”,(4) );

}

13、以下函数dele(h,x)用于删除一个整数单链表中值为x的结点,h是链表的首指针,删除成功返回0,否则返回-1,链表的结点结构定义如下:

struct link

{

int data;

struct link *next;

};

链表的首结点data域存放该链表中整数的个数,如果链表中整数个数为0,则h —>data为0,h—>next为NULL,而h不指向NULL,find(h,x)函数用于在首指针为h 的链表中查找值为x的结点,找到时返回一

个指向x的前趋的指针,否则返回NULL。函数dele(h,x)和find(h,x)的定义如下。请在程序中的空白处填入一条语句或一个表达式。

struct link *find(h,x)

struct link *h;

int x;

{

struct link *p, *q;

p=h—>next;

q=h;

while (p!=NULL&&p—>data!=x)

{q= (1) ;

p= (2) ;

}

if (p= =NULL) return (NULL);

return( (3) );

}

dele(h,x)

struct link *h;

int x;

{

struct link *q, *find();

if (!(h—>data)) return(-1);

if ((q=find(h,x))!= (4) )

{

struct link *p;

p=q—>next;

q—>next= (5) ;

free(struct link *p);

h—>data--;

return(0);

}

return(-1);

}

14、以下程序是对两个数x和y的正确性进行判断:若0<=x

{Right,Less0,Great100,MinMaxErr};

char *ErrorMessage[ ]={“输入数据正确”,”小于0错误”,”大于100错误”,”x>y错误”}; main()

{

int status,x,y;

do

{

printf(“输入两个数(x,y):”);

scanf(“%d%d”,&x,&y);

status= (1) ;

printf(ErrorMessage[ (2) ]);

}while (status!=Right);

printf(“Result=%d”,x*x+y*y);

}

int error(int min,int max)

{

if (max

if (max>100) return(Great100);

if (min<0) return(Less0);

(3) ;

}

15、给出如下程序的执行结果,并加以分析。struct tree

{

int x;

char *y;

struct tree *tpi;

}t[ ]={{1,”pascal”,0},{3,”basic”,0}};

main()

{struct tree *p=t;

char c,*s;

s=++p—>y;

printf(“%s\n”,s);

s=++p—>y;

printf(“%s\n”,s);

c=*p—>y;

printf(“%c\n”,c);

c=*p++—>y;

printf(“%c\n”,c);

c=*p—>y++;

printf(“%c\n”,c);

c=(*p—>y)++;

printf(“%c\n”,c);

}

第10章 结构体及共用体

第10章结构体与共用体 考核知识点 ●结构体与共用体类型数据的定义方法和引用方法 ●用指针和结构体构成链表,单向链表的建立、输出、插入与删除 重要考点 ●对结构体的声明及定义 ●访问结构体的成员的方法 ●熟悉对链表的操作 10.1 用typedef说明一种新类型名 C语言规定可以用typedef说明一种新的类型名,说明新类型名的语句一般形式为:typedef 类型名称标识符; 其中,“类型名”一定是在此语句之前已有定义的类型标识符。“标识符”是一个用户定义标识符,用来标识新的类型名。typedef语句的作用仅仅是用“标识符”来代表已存在的“类型名”,并没有产生新的数据类型,因此,原有的类型名依然有效。 提示: 声明一个新的类型名的具体步骤如下: ⑴先按定义变量的方法写出定义的主体(如float a;). ⑵将变量名换成新类型名(如将a换成FLO)。 ⑶在最左面加上关键字typedef(如typedef FLO). ⑷然后可以用新类型名去定义其他的变量(如FLO b;). 10.2 结构体类型 在实际工作中,当我们需要把一些不同类型,但相互之间又存在着联系的信息组合应用时,就要用到结构体。结构体是一种看似复杂却非常灵活的构造数据类型。在通常情况下,一个结构体类型由若干个称为成员(或称为域)的部分组成。不同的结构体类型可根据需要由不同的成员组成。但对于某个具体的结构体类型,其成员的数量必须固定,这一点与数组相同;但结构体中各个成员的类型可以不同,这是结构体与数组的重要区别。例如,我们常用的“时间”可以由以下3个部分描述:小时(hour)、分(minute)、秒(second)。它们都可以用整型数表示,可以把这3个成员组成一个整体,并给它取名为time,这就是一个简单的结构体。 声明一个结构体类型的一般形式为: struct 结构体名 {成员表列}; struct是C语言中的关键字,是结构体类型的标志。“结构体名”用做结构体类型的标志,它又称“结构体标记”(structure)。大括号内是该结构体中各成员,成员表列是由若干个变量类型名及变量名组成的。这些成员共同组成一个结构体。例如,上面提到的“时间”结构体类型可以说明如下: struct time { int hour; int minute; int second;

第11章 结构体与共用体

第十一章结构体与共用体 结构体变量引用规则: (1)不能将一个结构体变量作为一个整体进行输入和输出;只能对结构体变量中的各个成员分别进行输入和输出。“.”是成员(分量)运算符,它在所有的运算符中优先级最高。 (2)若成员本身又属于一个结构体类型,则要用若干个成员运算符,一级一级地找到最低的一级的成员。只能对最低级的成员进行赋值或存取以及运算。 (3)对结构体变量的成员可以像普通变量一样进行各种运算(根据其类型决定可以进行的运算)。 (4)可以引用结构体变量成员的地址,也可以引用结构体变量的地址。 —>是指向运算符,优先级为第一级。 结构体变量所占的内存长度是各成员所占内存长度之和。每个成员分别占有其自己的内存单元。 共用体变量所占的内存长度等于最长的成员的长度。 只先有定义了共用体变量才能引用它,而且不能引用共用体变量,而只能引用共用体变量中的成员。 将一个变量定义为结构体类型:不仅要求指定变量为结构体类型,而且要求指定为某一特定结构体类型。 类型与变量的区别: 定义时先定义结构体类型,然后定义变量。类型不分配空间,变量分配空间。 可以采取以下3种方法定义结构体类型变量: (1)先声明结构体类型再定义变量名 例如:struct student student1, student2; | | | 结构体类型名结构体变量名 (2)在声明类型的同时定义变量;这种形式的定义的一般形式为: struct 结构体名 { 成员表列 }变量名表列; (3) 直接定义结构体类型变量 其一般形式为: struct { 成员表列 }变量名表列; 即不出现结构体名。 引用结构体变量中成员的方式为 结构体变量名.成员名

数据结构习题及答案-第11章 文件

第十一章文件 一、选择题 1. 散列文件使用散列函数将记录的关键字值计算转化为记录的存放地址,因为散列函数是一对一的关系,则选择好的()方法是散列文件的关键。【哈尔滨工业大学 2001二、5 (2分)】 A. 散列函数 B. 除余法中的质数 C. 冲突处理 D. 散列函数和冲突处理 2. 顺序文件采用顺序结构实现文件的存储,对大型的顺序文件的少量修改,要求重新复制整个文件,代价很高,采用()的方法可降低所需的代价。【北京邮电大学 2000 二、 8 (20/8分)】 A. 附加文件 B. 按关键字大小排序 C. 按记录输入先后排序 D. 连续排序 3. 用ISAM组织文件适合于()。【中科院软件所 1998】 A.磁带 B.磁盘 4.下述文件中适合于磁带存储的是()。【中科院计算所 2000 一、7(2分)】 A. 顺序文件 B. 索引文件 C. 散列文件 D. 多关键字文件 5. 用ISAM和VSAM组织文件属于()。 A. 顺序文件 B. 索引文件 C. 散列文件 【中国科技大学 1998 二、5(2分)中科院计算所 1998 二、5(2分)】 6. ISAM文件和VASM文件属于()。【山东大学 2001 二、5 (1分)】 A. 索引非顺序文件 B. 索引顺序文件 C. 顺序文件 D. 散列文件 7. B+树应用在()文件系统中。【北京邮电大学 2001 一、1(2分)】 A. ISAM B. VSAM 二、判断题 1. 文件是记录的集合,每个记录由一个或多个数据项组成,因而一个文件可看作由多个记录组成的数据结构。【长沙铁道学院 1998 一、5 (1分)】 2. 倒排文件是对次关键字建立索引。【南京航空航天大学 1997 一、10(1分)】 3. 倒排序文件的优点是维护简单。【南京航空航天大学 1995 五、10(1分)】 4. 倒排文件与多重表文件的次关键字索引结构是不同的。【西安交通大学 1996 二、6 (3分)】 5. Hash表与Hash文件的唯一区别是Hash文件引入了‘桶’的概念。【南京航空航天大学1996六10(1分)】 6. 文件系统采用索引结构是为了节省存储空间。【北京邮电大学 2000 一、10 (1分)】 7. 对处理大量数据的外存介质而言,索引顺序存取方法是一种方便的文件组织方法。 【东南大学 2001 一、1-10 (1分)】 8. 对磁带机而言,ISAM是一种方便的稳健组织方法。【中科院软件所 1997 一、10(1分)】 9. 直接访问文件也能顺序访问,只是一般效率不高。【北京邮电大学 2002 一、10(1分)】 10. 存放在磁盘,磁带上的文件,即可以是顺序文件,也可以是索引结构或其他结构类型的文件。 【山东大学 2001 一、7 (1分)】 11. 检索出文件中的关键码值落在某个连续的范围内的全部记录,这种操作称为范围检索。对经常需要做范围检索的文件进行组织,采用散列法优于顺序检索法。【中山大学 1994 一、

C语言结构体习题及答案

第9章结构体 1.定义以下结构体类型 struct s { int a; char b; float f; }; 则语句printf("%d",sizeof(struct s))的输出结果为【】。 A) 3 B) 7 C) 6 D) 4 # 2.当定义一个结构体变量时,系统为它分配的内存空间是【】 A)结构中一个成员所需的内存容量 B)结构中第一个成员所需的内存容量 C)结构体中占内存容量最大者所需的容量 D)结构中各成员所需内存容量之和 3.定义以下结构体类型 struct s { int x; float f; }a[3]; < 语句printf("%d",sizeof(a))的输出结果为【】 A) 4 B) 12 C) 18 D) 6 7.定义以下结构体类型 struct student { char name[10]; int score[50]; float average; }stud1; 则stud1占用内存的字节数是【】。 ( A) 64 B) 114 C) 228 D) 7 9、设有一结构体类型变量定义如下: struct date { int year; int month; int day; }; struct worklist { char name[20]; char sex; $

struct date birthday; } person; 若对结构体变量person的出生年份进行赋值时,下面正确的赋值语句是。。。。 A. year=1976 B. =1976 C. D. =1976 1、若程序中有以下的说明和定义: struct abc { int x;char y; } 花括号后少了分号。 struct abc s1,s2; 则会发生的情况是______。 A) 编译时错B) 程序将顺序编译、连接、执行C) 能顺序通过编译、连接、但不能执行D) 能顺序通过编译、但连接出错

第10章 结构体、共用体、枚举类

1 声明一个结构体类型的一般形式为: struct 结构体名 {成员表列}; 如:struct student { int num;char name[20];char sex; int age;float score;char addr[30]; }; 2 定义结构体类型变量的方法 (1)先声明结构体类型再定义变量名 例如:struct student student1, student2; | | | 结构体类型名结构体变量名 (2)在声明类型的同时定义变量 这种形式的定义的一般形式为: struct 结构体名 { 成员表列 }变量名表列; (3)直接定义结构体类型变量 其一般形式为: struct { 成员表列 }变量名表列; 即不出现结构体名。 注意: 成员名可以与程序中的变量名相同,二者不代表同一对象。 3 可以引用结构体变量成员的地址,也可以引用结构体变量的地址。 例如: scanf(″%d″,&student1.num); (输入student1.num的值) printf(″%o″,&student1); (输出student1的首地址) 4 结构体数组的初始化 struct student {int num;char name[20]; char sex; int age; float score; char addr[30]; }stu[2]={{10101,″LiLin″,′M′,18,87.5,″103 BeijingRoad″},{10102,″Zhang Fun″,′M′,19,99,″130 Shanghai Road″}};

5 指向结构体变量的指针 #include #include void main() {struct student{long num;char name[20]; char sex; float score;}; struct student stu_1; struct student* p; p=&stu_1; stu_1.num=89101;strcpy(stu_https://www.wendangku.net/doc/4b12073545.html,,”LiLin”); stu_1.sex=‘M’;stu_1.score=89.5; printf(″No.:%ld\nname:%s\nsex:%c\nscore:%f\n″,stu-1.num,https://www.wendangku.net/doc/4b12073545.html,,stu-1.sex,stu-1.score); printf(″No.:%ld\nname:%s\nsex:%c\nscore:%f\n″,(*p).num,(*p).name,(*p).sex,(*p).score); } 6 以下3种形式等价: 结构体变量.成员名 (*p).成员名 p->成员名 7 用指针处理链表 (1)malloc函数 (2) calloc函数 (3) free函数 其函数原型为void free(void *p); 7.1 typedef struct { int n; struct { int y,m,d; }date; }PERSON; 下面定义结构体数组并赋初值 PERSON x[2]={1,04,10,1,2,04,12,30}; PERSON x[2]={{1,04,10,1},{2,04,12,30}}; PERSON x[2]={1,{04,10,1},2,{04,12,30}}; 7.2 struct person { int id;

第十一章结构体的试题

(1)()是关于C语言数据类型的正确叙述。 A) 枚举类型不是基本类型 B) 变量使用前应定义相应的数据类型 C) 不允许使用空类型 D) 数组不是构造类型 (2) 下列()对结构类型变量定义是错误的。 A) struct teacher { int num; int age; }; struct teacher teach1; B) struct { int num; int age; } teach1, teach2; C) struct { int num; int age; } teacher; struct teacher teach1; D) struct teacher { int num; int age; } teach1; (3) 若有定义: char ch; int j,k; enum day {sun, mon, tue, wed, thu, fri, sat}; int a[sat]; 则()对下列语句是否符合语法规则的判断是正确的。 sun=0; /*语句1*/ j=mon+tue; /*语句2*/ if (a[mon]>0) j++; /*语句3*/ A) 语句1、2、3均正确 B) 语句2正确,语句1和语句3错误 C) 语句1错误,语句2和语句3正确 D) 语句1、2、3均错误 (4) 若有定义: struct teacher { int num; char sex;

int age; } teacher1; 则下面叙述错误的是()。 A) teacher1是结构类型名 B) struct teacher是用户定义的结构类型 C) num、sex、age都是结构变量teacher1的成员 D) struct是结构类型的关键字 (5) 下列程序段运行后,表达式()的值为3。 struct point { int x; int y; } *p; struct point a[3]={1,2,3,4,5,6}; p=a; A) p[1].x B) *(p+2) C) p[3].x D) p[2].x (6) 若有定义: typedef int NUM[100]; NUM n; 则()语句是正确的。 A) n[0]=2; B) NUM=2; C) NUM=n; D) n=2; (7) 若有定义int a=1,b=2,t=3; struct data { char a; float b[3]; long c; }d1; 则变量d1的长度是()。 A) 4 B) 17 C) 12 D) 15 (8) 若有定义 struct teacher { int num;

第十一章结构体与共用体

第^一章结构体与共用体教学内容 (1) 结构体的定义与结构体变量; (2) 结构体数组; (3) 结构体指针; ⑷链表; (5) 共用体; (6) 枚举类型; 基本要求 掌握结构体的定义方法及其作用;重点掌握链表及其应用了解共用体的概念及其应用

一、概述 、引入原由 我们前面讲过数组,数组类型中的各个元素的类型是相同的,在日常应用中,仅仅有这些数据类型是不够的。有时需要将不同类型的数据组合成一个有机的整体,以便于引用。这些组合在一个整体中的数据是互相联系的。例如:学生的信息(姓名、性别、年龄、成绩、学号)。那么如何实现这种结构呢?采用的是结构体。 女口:struct student { int num; char n ame[20]; char sex; int age; float score; }; 、结构体类型的一般形式 struct 结构体名 {成员表列}; 成员表列:类型名成员名 女口:struct student {int nu m;char sex;}; 二、结构体类型变量的定义、引用、初始化 、定义方法 1、先声明类型再定义变量名 struct stude nt {int nu m;char sex;}; struct stude nt stu1,stu2; 2、在声明类型的同时定义变量 struct stude nt {int nu m;char sex;} stu1,stu2; 3、直接定义结构体类型变量(不给出结构体名) struct {int nu m;char sex;} stu1,stu2; 4、说明: 1 )类型与变量不同(变量:分配空间,可以赋值、存储、运算) 2)成员与普通变量地位相当,域名可以单独使用 3)成员也可以是一个结构体变量 如: struct date

电子技术 第十章 结构体与共用体

第十章结构体与共用体 一、选择题 1.在说明一个结构体变量时系统分配给它的存储空间是。(0级) A)该结构体中第一个成员所需存储空间 B)该结构体中最后一个成员所需存储空间 C)该结构体中占用最大存储空间的成员所需存储空间 D)该结构体中所有成员所需存储空间的总和 2.若有以下说明和语句: struct worker {int no; char ﹡name;}work, ﹡p=&work; 则以下引用方式不正确的是。(1级) A) work.no B) (﹡p).noC) p->no D)work->no3.有如下定 义: struct date { int year,month,day; }; structworklist {char name[20]; char sex; struct datebirthday; }person; 对结构体变量person的出生年份进行赋值时,下面正确的赋值语句是。 (1级) A) year=1958B) birthday.year=1958 C) person.birthday.year=1958 D) person.year=19 58 4.以下对结构体类型变量的定义中不正确的是。(1级) A)#define STUDENT struct studentB) struct student STUDENT{ int num; { intnum;floatage; floatage; }std1; }std1; C)struct D) struct {intnum;{ intnum; float age;float age; } student; }std1;structstudent std1; 5.设有以下说明语句 struct stu { int a; float b;}stutype; 则下面的叙述不正确的是。(1级) A)struct是结构体类型的关键字 B)struct stu是用户定义的结构体类型 C)stutype是用户定义的结构体类型名

练习题-第十章 结构体与共用体(有答案)

一、填空题 1.若有如下结构体定义: struct student { int num; float age; char sex; }stud; 则stud所占的内存空间是9 字节。 2.已有定义和语句: union data { int i; char c; float f; }a,*p; p=a; 则对a中成员c的正确访问形式可以是 a.c 或: p->c或:(*p).c。(只需 写出一种) 二、单项选择题: 1.若有下列定义: struct b { float a[5]; double c; int d;}x; 则变量x在内存中所占的字节为下列哪一个:( C ) A.6 B. 10 C. 30 D. 14 2.设有以下说明语句,则下面的叙述不正确的是( C ) struct stu { int a; float b; } stutype; A. struct 是结构体类型的关键字。 B. struct stu 是用户定义的结构体类型。 C. stutype是用户定义的结构体类型名。 D. a和b都是结构体成员名。 3.下面程序的运行结果是( ) #include main( ) { struct date { int year, month, day;

}today; printf(“%d\n”,sizeof(struct date)); } A. 6 B. 8 C. 10 D. 12 4.设有以下说明语句,则下面的叙述正确的是( B ) typedef struct { int a; float b; } stutype; A. stutype是结构体变量名。 B. stutype 是结构体类型名。 C. struct是结构体类型名。 D. typedef struct是结构体类型名。 三、填程序 1.结构数组中存有三人的姓名和年龄,以下程序输出三人中最年长者的姓名和年龄。请填 空。 static struct man { char name[20]; int age; }person[ ]={{“LiMing”,18},{“WangHua”,19},{“ZhangPing”,20}}; main( ) { struct man *p,*q; int old=0; p=person; for(; p age){ q=p; old=p->age ;} printf(“%s %d”, q->name,q->age ); }

第10章练习 结构体

7.2典型例题分析与解答 例题1:下列结构体定义,正确的是()。 A.B. record { struct record { int no; int no; char num[16]; char num[16]; float score ; float score ; } ; } C.D. struct record { struct record { int no; int no char num[16]; char num[16] float score ; } ; float score } 答案:C 分析:结构体类型定义必须以关键字struct 开头,即A不正确,不能选择。D中结构体中定义成员语名没有用分号结束,故不正确,不能选择D。根据结构体类型说明形式要求必须用分号结束,所以B和C中,只能选择C。 例题2:下列声明结构体变量错误的是()。 A.struct student B.struct student {{ int no; int no; char name[16]; char name[16]; }st1,st2; }; struct student st1,st2; C.D. struct student { struct student { int no; int no; char name[16]; char name[16]; }; }; student st1,st2; struct st1,st2; 答案:D 分析:结构体变量定义有两种方式,一是在定义结构体类型时说明结构体变量,如A,即A 是正确的。二是用结构体类型说明结构体变量。如B和C,即B和C也是正确。不能只用结构体关键字去说明结构体变量,即D不正确,只能选择D。 例题3:设有以下说明,则正确的赋值表达式为()。 struct x {int no; char name[20]; float score;} y;

十一章 结构体与共用体

结构体与共用体 一、选择题: 1.已知赋值语句wang.year=2004;则wang的变量类型是() A. 字符或文件 B. 整型或实型 C. 共用或结构 D. 实型或指针 2.Turbo C中,以下类型数据在存储器中占的字节数为 ( ) struct test { int x; float y; char z; } ; A. 2 B. 3 C. 6 D. 7 3.以下语句中,成员data的正确引用方式为( ) struct node { int data; char name[10]; }stree; struct node *p=&stree; A. p.data B. p->data C. (*p)->data D. stree->data 4、当执行以下程序段时,输出的结果是。()struct data { char a; int b; float c; }; printf(“%d”, sizeof(struct data)); A. 1 B. 2 C. 4 D. 7 5.下面程序段的运行结果是。 struct stu { int num; char name[10]; float scrose ; }; printf(“%d\n”, sizeof (struct stu )); (A)14 (B)12 (C)16 (D)3 6. 若有定义: typedef char* string; #define str char * int a=4; struct { int x, *y; }z={10, &a}, *p=&z; 则下列不等价的是: A. string name, sign; 与 str name, sign; B. *p->y++ 与 *(p->y++) C. ++*p->y 与 ++(*p->y) D. ++p->x与++(p->x) ()

结构体和共用体习题

习题六 1. 从下列四个选项中选择一个正确的填入括号中。 (1)在说明一个结构体变量时系统分配给它的存储空间是( D)。 A该结构体中第一个成员所需存储空间 B该结构体中最后一个成员所需存储空间 C该结构体中占用最大存储空间的成员所需存储空间 D该结构体中所有成员所需存储空间的总和 (2)在说明一个共用体变量时系统分配给它的存储空间是(D )。 A该共用体中第一个成员所需存储空间 B该共用体中最后一个成员所需存储空间 C该共用体中占用最大存储空间的成员所需存储空间 D该共用体中所有成员所需存储空间的总和 (3)共用体类型在任何给定时刻, ( B)。 A所有成员一直驻留在内存中 B只有一个成员驻留在内存中 C部分成员驻留在内存中 D没有成员驻留在内存中 (4)以下定义结构体类型的变量st1,其中不正确的是(A ) A typedef stuct student { int num; int age; }STD; STD st1; B struct student { int num,age; }st1; C struct { int num; float age; }st1; D struct student { int num; int age; }; struct student st1; (5)已知职工记录描述为: struct workers {

int no; char name[20]; char sex; struct { int day; int month; int year; }birth; }; struct workers w; 设变量w中的”生日”应是”1993年10月25日”,下列对”生日”的正确赋值方式是( C)。 A day=25; month=10; year=1993; B ==10; =1993; C =25; =10; =1993; (6)设有如下定义: struct sk { int a; float b; }data,*p; 若有p=&data;则对data中的a成员的正确引用是( B)。 A (*p). B (*p).a C p-> D 填空 (1)若有以下说明和定义且数组w和变量k已正确赋值,则对w数组中第k个元素中各成员的正确引用形式是 w[k-1].b、 w[k-1].c 、 w[k-1].d 。 struct aa { int b; char c; double d; }; struct aa w[10]; int k=3; (2)若有以下说明和定义,则对成员的另外两种引用形式是 x->b-> 和 . 。 struct st { int a; struct st *b; }*p, x; p=&x; 3.阅读下面程序,写出运行结果。

11第十一章结构体和联合体练习

第十一章结构体和共用体 一、单项选择题: 1、在说明一个结构体变量时系统分配给它的存储空间是()。 A、该结构体第一个成员所需存储空间 B、该结构中最后一个成员所需存储空间 C、该结构体中占用最大存储空间的成员所需存储空间 D、结构体中所有成员所需存储空间的总和 2、在说明一个共用体变量时系统分配给它的存储空间是()。 A、该共用体中第一个成员所需存储空间 B、该共用中最后一个成员所需存储空间 C、该共用体中占用最大存储空间的成员所需存储空间 D、共用体中所有成员所需存储空间的总和 3、共用体类型在任何给定时刻,()。 A、所有成员一直驻留在结构中 B、只有一个成员驻留在结构中 C、部分成员驻留在结构中 D、没有成员驻留在结构中 4、使用共用体union的目的是()。 A、将一组数据作为一个整体,以便于其中 的成员共享同一存储空间 B、将一组具有相同数据类型的数据作为一 个整体,以便于其中的成员共享同一存 储空间 C、将一组相关数据作为一个整体,以便程 序中使用 D、将一组具有相同数据类型的数据作为 一个整体,以便程序中使用 5、以下typedef的叙述不正确的是()。 A、用typedef可以定义各种类型名,但不 能用来定义变量 B、用typedef可以增加新类型 C、用typedef只是将已存在的类型用一个 新的名称来代表 D、使用typedef便于程序的通用 6、以下关于枚举的叙述不正确的是()。 A、枚举变量只能取对应枚举类型的枚举 元素表中元素 B、可以在定义枚举类型时对枚举元素进行 初始化C、枚举元素表中的元素有先后次序,可以 进行比较 D、枚举元素的值可以是整数或字符串 7、在下列程序段中,枚举变量c1和c2的值分别是()和()。 main() { enum color {red,yellow,blue=4,green,white} c1,c2; c1=yellow; c2=white; printf(“%d,%d\n”,c1,c2); } A、1 B、3 C、5 D、6 8、若有以下说明和语句: struct worker { int no; char *name; }work,*p=&work; 则以下引用方式不正确的是()。 A、work.no B、(*p).no C、p—>no D、work—>no 9、以下程序执行后的正确结果是()。struct tree { int x; char *s; }t; func(struct tree t) { t.x=10; t.s=”computer”; return(0); } main() { t.x=1; t.s=”minicomputer”; func(t); printf(“%d,%s\n”,t.x,t.s); } A、10,computer B、1,minicomputer C、1,computer D、10,minicomputer

第11章 结构

第11 章结构与联合 一、单选题 1 下列关于结构的说法错误的是: A:结构是由用户自定义的一种数据类型 B:结构中可设定若干个不同数据类型的成员 C:结构中成员的数据类型可以是另一个已定义的结构D:在定义结构时,可以为成员设置默认值 答案:D 2 以下关于结构体的叙述中,错误的是: A:结构体是一种可由用户构造的数据类型 B:结构体中的成员可以具有不同的数据类型 C:结构体中的成员不可以与结构体变量同名 D:结构体中的成员可以是指向自身结构的指针类型 答案:C 3 以下结构体类型说明和变量定义中,正确的是:A:struct SS { char flag; float x; } struct SS a,b; B:struct { char flag; float x; }SS; SS a,b; C:struct ss { char flag; float x; }; D:typedef { char flag; float x; }SS; SS a,b; 答案:C 4 以下对结构体类型变量st的定义中,不正确的是:A:struct { char c; int a; }st; B:struct { char c; int a; }TT;

struct TT st; C:typedef struct { char c; int a; }TT; TT st D:#define TT struct TT { char c; int a; }st; 答案:B 5 设有以下说明语句: struct stu { int a; float b; }stutype; 则下面的叙述不正确的是: A:struct是结构体类型的关键字 B:struct stu是用户定义的结构体类型名 C:stutype是用户定义的结构体类型名 D:a和b都是结构体成员名 答案:C 6 在16位IBM-PC机上使用C语言时,若有如下定义:struct data { int i; char ch; double f; }b; 则结构变量b占用内存的字节数是: A:1 B:2 C:8 D: 11 答案:D 7 以下程序的运行结果是: #include "stdio.h" main( ) { struct date { int year; int month; int day: }today; printf("%d\n",sizeof(struct date) );

第10章 结构体和共用体-6向函数传递结构体

第10章结构体和共用体——向函数传递结构体

向函数传递结构体?向函数传递结构体的单个成员 复制单个成员的内容 ?向函数传递结构体的完整结构 复制结构体的所有成员 ?向函数传递结构体的首地址 仅复制一个地址值

Before:0,0,0 After:0,0,0 position ); printf("After:%d,%d,%d\n", position.x, position.y, position.z); typedef struct point { int x; int y; int z; }POINT; void Func(POINT p ) { p.x = 1; p.y = 1; 复制结构体的所有成员给函数 p.z = position.z;

&position ); printf("After:%d,%d,%d\n", position.x, position.y, position.z); Before:0,0,0 After:1,1,1 向函数传递结构体变量的地址 typedef struct point { int x; int y; int z; }POINT; void Func(POINT *pt { pt->x = 1;

结构体变量做函数返回值 position =Func(position); printf("After:%d,%d,%d\n", position.x, position.y, position.z); return 0; typedef struct point { int x; int y; int z; }POINT; POINT { return p; Before:0,0,0 After:1,1,1

第11章 结构体

单项选择题 1101. 当说明一个结构体变量时系统分配给它的内存是( )。 A. 各成员所需内存量的总和 B. 结构中第一个成员所需内存量 C. 成员中占内存量最大者所需的容量 D. 结构中最后一个成员所需内存量 1002. 设有以下说明语句 struct uu { int n; char ch[8]; } PER; 则下面叙述中正确的是( )。 A. uu 是结构体标识名 B. PER 是结构体标识名 C. struct uu是结构体标识名 D. struct 是结构体标识名 1003. 已知有如下定义: struct a{char x; double y;}data,*t; 若有t=&data,则对data中的成员的正确引用是( )。 A. (*t).x B. (*t).data.x C. t->data.x D. t.data.x 1004. 设有如下定义: struct sk { int a; float b; } data; int *p; 若要使P指向data中的b域,正确的赋值语句是( )。 A. p=&data.b; B. p=&b; C. p=data.b; D. *p=data.b; 1005. 已知学生记录描述为: struct student { int no; char name[20],sex; struct { int year,month,day;

} birth; }; struct student s; 设变量s中的“生日”是“1984年11月12日”,对“birth”正确赋值的程序段是( )。 A. s.birth.year=1984;s.birth.month=11;s.birth.day=12; B. birth.year=1984;birth.month=11;birth.day=12; C. s.year=1984;s.month=11;s.day=12; D. year=1984;month=11;day=12; 1006. 有如下定义 struct person{char name[9];int age;}; struct person class[10]={"John",17,"paul",19,"Mary",18,"Adam",16,}; 根据上述定义,能输出字母M的语句是( )。 A. printf("%c\n",class[3].name[1]); B. printf("%c\n",class[3].name); C. printf("%c\n",class[2].name[1]); D. printf("%c\n",class[2].name[0]); 1007. 若程序中有以下的说明和定义: struct abc { int x;char y; } struct abc s1,s2; 则会发生的情况是( )。 A. 编译出错 B. 程序将顺序编译、连接、执行 C. 能顺序通过编译、连接、但不能执行 D. 能顺序通过编译、但连接出错 1008. 有以下程序段 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->x B. *pt->y C. pt->x D. (pt++)->x 1009. 有以下说明和定义语句 struct student { int age; char num[8];};

C程第十一章结构体上机习题

第十一章结构体与共用体 问题与思考 1.下面程序的运行结果是___________. 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 2.以下对结构体变量stu1中成员age的非法引用是____b____. struct student {int age; int num; }stu1,*p; p=&stu1; a) b) c)p->age d)(*p).age 3.以下scanf函数调用语句中对结构体变量成员的不正确引用是_____d___. 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); 4.以下程序的运行结果是___10,x_____. struct n{ int x; char c; }; main() {struct n a={10,'x'}; func(a); printf("%d,%c",,;

} func(struct n b) { =20; ='y'; } 5.若有定义: struct num {int a; int b; float f; }n={1,3,}; struct num *pn=&n; 则表达式pn->b/*++pn->b的值是___12_____,表达式(*pn).a+pn->f的值是. 6.以下程序的运行结果是____7,3____. struct ks {int a; int *b; }s[4],*p; main() { int n=1; printf("\n"); for(i=0;i<4;i++) { s[i].a=n; s[i].b=&s[i].a; n=n+2; } p=&s[0]; p++; printf("%d,%d\n",(++p)->a,(p++)->a); } 7.结构数组中存有三人的姓名和年龄,以下程序输出三人中最年长者的姓名和年龄。请在_______内填入正确内容。 stati struct man{ char name[20]; int age; }person[]={"li=ming",18, "wang-hua",19, "zhang-ping",20

电子技术第十章结构体与共用体

第十章结构体与共用体 、选择题 1?在说明一个结构体变量时系统分配给它的存储空间是___________ 。(0级)A该结构体中第一个成员所需存储空间 B)该结构体中最后一个成员所需存储空间 C)该结构体中占用最大存储空间的成员所需存储空间 D)该结构体中所有成员所需存储空间的总和 2?若有以下说明和语句: struct worker { int no; char * name; }work, * p=&work; 则以下引用方式不正确的是。(1级) A)work . no B) ( * p). no C) p->no D)work->no3.有如下定义: struct date { int year, mon th, day; }; struct worklist { char n ame[20]; char sex; struct date birthday; }pers on; 对结构体变量person的出生年份进行赋值时, (1级) A) year=1958 C) person. birthday . year=1958 4.以下对结构体类型变量的定义中不正确的是A) #define STUDENT struct student STUDENT { int num; float age; }std1; C) struct { int num; float age; }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)没有成员驻留在内存中 下面正确的赋值语句是 _______________ B)birthday . year=1958 D) person. year=1958 ___________ 。(1 级) B)struct stude nt { int num; float age; }std1; D) struct { int num; float age; } stude nt; struct stude nt std1; (1级)

相关文档