当前位置:文档之家› 第11章 结构体

第11章 结构体

第11章 结构体
第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];};

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

struct student *p=stu;

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

A. stu[3].age

B. (p++)->num

C. p->num

D. (*p).num

1010. 在VC++6.0下,定义以下结构体类型

struct s

{

int a;

char b;

float f;

};

则语句printf("%d",sizeof(struct s))的输出结果为( )。

A. 9

B. 8

C. 7

D. 6

1011. 在VC++6.0下,定义以下结构体类型

struct s

{ int x;

float f;

}a[3];

语句printf("%d",sizeof(a))的输出结果为( )。

A. 24

B. 20

C. 16

D. 12

1012. 定义以下结构体数组

struct c

{ int x;

int y;

}s[2]={1,3,2,7};

语句printf("%d",s[0].x*s[1].x)的输出结果为( )。

A. 2

B. 3

C. 4

D. 5

1013. 在VC++6.0下,定义以下结构体类型

struct student

{

char name[10];

int score[50];

float average;

}stud1;

则stud1占用内存的字节数是( )。

A. 214

B. 210

C. 206

D. 202

1014. 如果有下面的定义和赋值,

struct SNode

{

unsigned id;

int data;

}n,*p;

p=&n;

则使用( )不可以输出n中data的值。

A. p.data

B. n.data

C. p->data

D. (*p).data

1015. 根据下面的定义,能输出Mary语句的是( )。

struct person

{

char name[9];

int age;

};

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

A. printf("%s\n",class[2].name);

B. printf("%s\n",class[1].name);

C. printf("%s\n",class[0].name);

D. printf("%s\n",class[3].name);

1016. 定义以下结构体数组

struct date

{ int year;

int month;

int day; };

struct s

{ struct date birthday;

char name[20];

} x[4]={{2008, 10, 1, "guangzhou"}, {2009, 12, 25, "Tianjin"}};

语句printf("%s,%d",x[0].name,x[1].birthday.year);的输出结果为( )。

A. guangzhou,2009

B. guangzhou,2008

C. Tianjin,2008

D. Tianjin,2009

1017. 定义以下结构体数组

struct

{

int num;

char name[10];

}x[3]={1,"china",2,"USA",3,"England"};

语句printf("\n%d,%s",x[1].num,x[2].name)的输出结果为( )。

A. 2,England

B. 2,USA

C. 3,England

D. 1,china

1018. 定义以下结构体数组

struct date

{

int year;

int month;

};

struct s

{

struct date birth;

char name[20];

}x[4]={{2008,8,"hangzhou"},{2009,3,"Tianjin"}};

语句printf("%c,%d",x[1].name[1],x[1].birth.year);的输出结果为( )。

A. i,2009

B. a,2008

C. hangzhou,2008

D. Tianjin,2009

1019. 根据下面的定义,能打印出字母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[2].name[0]);

B. printf("%c\n",class[2].name[1]);

C. printf("%c\n",class[3].name[1]);

D. printf("%c\n",class[3].name);

1020. 设有以下语句:

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

1021. 设有如下定义:

struct sk

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

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

A. (*p).a

B. (*p).data.a

C. p->data.a

D. p.data.a

1022. 在VC++6.0下,变量a在内存所占字节数是( )。

Struct stud

{ char num[6];

int s[4];

double ave;

} a;

A. 30

B. 26

C. 32

D. 34

1023.在VC++6.0下,变量a所占的内存字节数是( )。

struct stu

{

char name[20];

long int n;

int score[4];

}

A. 40

B. 28

C. 30

D. 36

1024.设有以下定义语句,输出结果是( )。

struct date

{

int cat;

char next[10];

double dog;

}too;

printf(”%d”,sizeof(too));

A.22

B.20

C.24

D. 26

1025. 设有变量定义

struct stu

{

int age;

int num;

}std,*p=&std;

能正确引用结构体变量std中成员age的表达式是( )。

A.(*p).age

B.*p.age

C.*std->age

D. std->age

1026.根据下面的定义,能打印出字符串"Mary"的语句是( )。

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

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

A. printf("%s\n",class[2].name);

B. printf("%s\n",class[2].name[0]);

C. printf("%s\n",class[3].name[0]);

D. printf("%s\n",class[3].name);

1027.设有变量定义

struct stu

{

int age;

int num;

}std,*p=&std;

不能正确引用结构体变量std中成员age的表达式是( )。

A.*p.age

B.(*p).age

C.p->age

D. std.age

1028.设有以下语句:

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+1

B. (*p).n++

C. p->n++

D. p++ ->n

1029.定义以下结构体数组

struct date

{

int year;

int month;

};

struct s

{

struct date birth;

char name[20];

}x[4]={{2008,8,"hangzhou"},{2009,3,"Tianjin"}};

语句printf("%s,%d",x[1].name,x[1].birth.year);的输出结果为( )。

A. Tianjin,2009

B. a,2008

C. hangzhou,2008

D. i,2009

1030.根据下面的定义,能输出字符M的语句是( )。

struct person

{

char name[9];

int age;

};

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

A. printf("%c\n",class[2].name[0]);

B. printf("%c\n",class[1].name);

C. printf("%s\n",class[0].name[0]);

D. printf("%s\n",class[3].name);

1031.如果有下面的定义和赋值,

struct SNode

{

unsigned id;

int data;

}n,*p;

p=&n;

则使用( )可以输出n中data的值。

A. (*p).data

B. n->data

C. *p.data

D. p.data

1032.已知有如下定义:

struct a{char x; double y;}data,*t;

若有t=&data,则对data中的成员的不正确引用是( )。

A. (*t)->x

B. (*t).x

C. t->x

D. data.x

1033.有以下定义:

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

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

则下面能够输出字母M的语句是( )。

A. printf("%c\n",class[2].name[0]);

B. printf("%c\n",class[3].name);

C. printf("%s\n",class[0].name[0]);

D. printf("%s\n",class[3].name);

1034.有以下程序:

#include

main()

{

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

printf(“%d\n”,cunu[0].y/cunu[0].x*cunu[1].y);

}

程序的运行结果是( )。

A.21

B.6

C.7/3

D. 0

1035.设有如下定义:

struct sk

{ int a;

float b;

} data;

下面选项中正确定义指针变量,并指向data变量的()。

A. struct sk *p; p=&data;

B. struct sk p; p=&data;

C. struct sk *p; p=data;

D. struct sk *p; p=data;

1036.设有如下定义:

struct sk

{ int a;

float b;

} data;

下面选项中正确定义指针变量,并指向data变量a成员的()。

A. int *p; p=&data.a;

B. int *p; p=data.a;

C. int p; p=&data.a;

D. int p; p=data.a;

1037.设有以下说明语句

struct uu

{ int n;

char ch[8];

} PER;

则下面叙述中正确的是()。

A.PER是结构体变量名

B. PER 是结构体标识名

C. struct uu是结构体变量名

D. struct 是结构体标识名

1038.对于下面程序段的分析,以下四个选项中正确的是( )。

struct abc

{ int a, b, c, s; };

main()

{ struct abc s[2]={{1,2,3},{4,5,6}}; int t;

t=s[0].a+s[1].b;

printf("%d\n",t);

}

A.数组s占32个字节的存储空间

B.数组s占36个字节的存储空间

C.t的值为2

D. t的值为8

1039.设有如下程序定义:

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.数组cnum有2个元素

B.数组cnum有4个元素

C.数组cnum有6个元素

D. 编译错误

读程序题

1040. 以下程序的运行结果是

#include "stdio.h"

main()

{ struct date

{ int year,month,day; } today;

printf("%d\n",sizeof(struct date));

}

输出结果:6

1041. 以下程序的输出是

struct st

{ int x; int *y;} *p;

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

};

struct st aa[4]={ 50,&dt[0],60,&dt[0],60,&dt[0],60,&dt[0]};

main()

{ p=aa;

printf("%d\n",++(p->x));

}

输出结果:51

1042. 下列程序的输出结果是

struct abc

{ int a, b, c, s; };

main()

{ struct abc s[2]={{1,2,3},{4,5,6}}; int t;

t=s[0].a+s[1].b;

printf("%d\n",t);

}

输出结果:6

1043. 运行下列程序段,输出结果是

struct country

{ int num;

char name[10];

}x[5]={1,"China",2,"USA",3,"France",4, "England",5, "Spanish"};

struct country *p;

p=x+2;

printf("%d,%c",p->num,(*p).name[2]);

输出结果:3,a

1044. 下面程序的运行结果是

struct KeyWord

{

char Key[20];

int ID;

}kw[]={"void",1,"char",2,"int",3,"float",4,"double",5};

main()

{

printf("%c,%d\n",kw[3].Key[0], kw[3].ID);

}

输出结果:i,3

1045. 运行下列程序段,输出结果是

struct country

{ int num;

char name[20];

}x[5]={1, "China", 2, "USA", 3, "France", 4, "England", 5, "Spanish"};

struct country *p;

p=x+2;

printf("%d,%s",p->num,x[0].name);

输出结果:3,China

1046. 下面程序的运行结果是

struct contry

{

int num;

char name[20];

}x[5]={1,"China",2,"USA",3,"France",4,"Englan",5,"Spanish"};

main()

{

int i;

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

printf("%d%c",x[i].num,x[i].name[0]);

}

输出结果:4E5S

1047. 下面程序的运行结果是

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);} 输出结果:6

1048. 下面程序的运行结果是

struct abc

{int a,b,c;};

main()

{ struct abc s[2]= { {1,2,3},{4,5,6}} ;int t;

t=s[0].a+s[1].b;

printf("%d\n",t}

输出结果:6

1049. 下面程序的运行结果是

struct HAR

{ int x,y;

struct HAR *p; } h[2];

main()

{ int h[0].x=1; h[0].y=2;

h[1].x=3;h[1].y=4;

h[0].p=&h[1]; h[1].p=h;

printf("%d%d\n",(h[0].p)->x,(h[1].p)->y);

}

输出结果:32

1050. 下面程序的运行结果是

struct HAR

{ int x,y;

struct HAR *p; } h[2];

main()

{ int h[0].x=1; h[0].y=2;

h[1].x=3;h[1].y=4;

h[0].p=&h[1]; h[1].p=h;

printf("%d\n",(*h[0].p).x*(h[1].p)->y);

}

输出结果:6

第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 { 成员表列 }变量名表列; 即不出现结构体名。 引用结构体变量中成员的方式为 结构体变量名.成员名

第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.doczj.com/doc/a5139977.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.doczj.com/doc/a5139977.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;

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 4.定义以下结构体数组 struct c { int x; int y; }s[2]={1,3,2,7}; 语句printf("%d",s[0].x*s[1].x)的输出结果为【】 A) 14 B) 6 C) 2 D) 21 5.运行下列程序段,输出结果是【】 struct country { int num; char name[10]; }x[5]={1,"China",2,"USA",3,"France",4, "England",5, "Spanish"}; struct country *p; p=x+2; printf("%d,%c",p->num,(*p).name[2]); A) 3,a B) 4,g C) 2,U D) 5,S

6.下面程序的运行结果是【】。 struct KeyWord { char Key[20]; int ID; }kw[]={"void",1,"char",2,"int",3,"float",4,"double",5}; main() { printf("%c,%d\n",kw[3].Key[0], kw[3].ID); } A) i,3 B) n,3 C) f,4 D) l,4 7.定义以下结构体类型 struct student { char name[10]; int score[50]; float average; }stud1; 则stud1占用内存的字节数是【】。 A) 64 B) 114 C) 228 D) 7 8.如果有下面的定义和赋值,则使用【】不可以输出n中data的值。struct SNode { unsigned id; int data; }n,*p; p=&n; A) p.data B) n.data C) p->data D) (*p).data 9.根据下面的定义,能输出Mary的语句是【】。 struct person { char name[9]; int age; }; struct person class[5]={"John",17,"Paul",19,"Mary",18,"Adam",16}; A) printf("%s\n",class[1].name); B) printf("%s\n",class[2].name); C) printf("%s\n",class[3].name);

十一章 结构体与共用体

结构体与共用体 一、选择题: 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章 结构

第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) );

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

第十章结构体与共用体 、选择题 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级)

第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];};

结构体与共用体习题

第十一章 结构体与共用体 1、 填空 (1) 为了建立如图所示的存储结构(即每个结点含两个域,data 是数据域,next 是指向结点的指针域),请填空。 Struct link {char data; ; }node; (2) 以下程序的输出结果是 。 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);} 2、 选择 (1) 根据以下定义,能输出字母M 的语句是 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]); struct person { char name[9];int age;}; struct person class[10]={ “John ”,17, “Paul ”,19, “Mary ”,18, “Adam ”,16,}; (2) 对整个结构能够进行的操作是 。 A. 对结构进行赋值 data next

B.对结构进行存取 C.对结构进行运算 D.对结构进行&操作 (3)不是结构类型的特点的选项为。 A.结构体变量可以有不同类型的成员 B.结构体中的成员都占有存储空间 C.结构体变量既可以做函数参数,又可以从函数中返回 D.结构体变量的成员既可以读又可以写 3、判断 (1)能在一个存储区内处理不同的类型的数据叫结构。() (2)在编译时对结构类型不分配空间,只能对变量分配空间。() (3)结构一旦定义,系统就给它分配所需的内存单元。() 4、程序设计 (1)设有以下结构类型说明: struct stud {char num[5],name[10]; int s[4]; double ave; } 请编写: <1>readrec把30名学生的学号、姓名、四项成绩及平均分放在一个结构体数组中,学生的学号、姓名和四项成绩由键盘输入,然后计算出平均分放在结构提对应的域中。

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) 结构体的定义与结构体变量; (2) 结构体数组; (3) 结构体指针; (4) 链表; (5) 共用体; (6) 枚举类型; ●基本要求 掌握结构体的定义方法及其作用;重点掌握链表及其应用。 了解共用体的概念及其应用

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

相关主题
文本预览
相关文档 最新文档