x));}2、有以下程序,程序运行" />
当前位置:文档之家› 第八章结构体、共用体与枚举实验报告

第八章结构体、共用体与枚举实验报告

第八章结构体、共用体与枚举实验报告
第八章结构体、共用体与枚举实验报告

一、实验目的(参见实验指导书P159)

二、实验内容(参见课本及实验指导书)

实验内容提要:结构体、共用体、枚举类型、typedef使用具体内容:

1、有以下程序,程序运行后的输出结果是()。

struct s

{ int x, y;

} data[2] = { 10, 100, 20, 200 } ;

main ( )

{ struct s *p = data;

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

}

2、有以下程序,程序运行后的输出结果是()。

struct STU

{ char num[10]; float score[3]; } ;

main ( )

{ struct STU s[3] = { { "201201", 90, 95, 85 } ,

{ "201202", 95, 80, 75 } ,

{ "201203", 100, 95, 90 } }, *p = s;

int i; float sum = 0;

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

sum = sum+p->score[i];

printf ( "%6.2f\n", sum ) ;

}

3、下面程序的输出结果是( )

typedef struct{

float x ;

char z ;

}mytype;

mytype a ;

main()

{

printf("%d",sizeof(a));

}

4、下面程序的输出结果是( )

typedef union{

long a[1] ;

char y ;

char c[10];

}S;

S a ;

main()

{

printf("%d",sizeof(a));

}

5、下面程序的输出结果为()

#include "stdio.h"

main()

{ union{unsigned int t;

unsigned char c;

}u;

u.c='a';

printf("%c\n",u.t); getch();

}

结论:一个共用体中可能有若干个不同类型的成员,但在任何时刻,只有一个成员的值被存储。

这就是最后赋给它的值。

6、设有以下语句

char x=3,y=6,z;

z=x^y<<2;

则z的二进制值是多少?提示,左移的优先级高于^

三、实验结果与思考

第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/a513143340.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/a513143340.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;

第11章 结构体与共用体

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

结构体共用体与枚举课后习题

1.定义一结构体,成员项包括一个字符型、一个整型。编程实现结构体变量成员项的输入、输出,并通过说明指针引用该变量。 #include void main() { struct a { char b; int c; }d,*p; p=&d; printf("输入:\n"); scanf("%c",&(*p).b); scanf("%d",&p->c); printf("输出:\n"); printf("%c\n",(*p).b); printf("%d\n",p->c); } 2.建立一结构体,其中包括学生的姓名、性别、年龄和一门课程的成绩。建立的结构体数组通过输入存放全班(最多45人)学生信息,输出考分最高的同学的姓名、性别、年龄和课 程的成绩。 #include void main() { int i,b,n; float a; printf("请输入班级的人数:"); scanf("%d",&n); getchar(); struct person { char name[20]; char sex[10]; int year; float score; }stu[45]; for(i=0;i

getchar(); } for(b=0,a=stu[0].score,i=0;i #define N 4 struct person { char name[20]; long int number; float score1; float score2; }; void shuru(struct person stu[N]) { int i; for(i=0;i

实验11结构体、共用体和枚举类型

实验11 结构体、共用体和枚举类型 一、实验目的: 1、掌握结构体类型定义和结构体变量定义、初始化的方法; 2、掌握结构体成员的访问方法,熟悉结构体嵌套定义方法; 3、掌握结构体数组的定义和使用方法,能够用模块化方法设计程序; 4、熟悉共用体类型、枚举类型、typedef的基本用法。 二、实验内容 1、下列程序的功能是:先定义结构体Book,再定义两个变量book1、book2,其中一个初始化,另一个从键盘输入数据,最后输出book1、book2的值。程序运行结果如下: 请根据题意和注释填写下列程序所缺代码,并回答相关问题: #include //定义结构体Book,成员有:书名(title),字符数组,长度为100; //作者(authors),字符数组,长度为30;ISBN,字符数组,长度为20; //页数(pages),整型;价格(price),单精度浮点数。 /*代码段_1*/ int main() { //定义两个Book型变量book1、book2,其中book1用我们本学期所使用教材的数据初始化/*代码段_2*/ //从键盘输入我们本学期所使用实验指导书的数据给book2 /*代码段_3*/ printf("请输入实验指导书的信息:书名、作者、ISBN、页数、作者:\n"); /*代码段_4*/ printf("\n教材、实验书信息如下:\n"); /*代码段_5*/

return 0; } 问题: (1)如何定义结构体类型? (2)怎样定义结构体变量,并初始化? (3)怎样输入、输出结构体变量各成员的值? 2、请按下列要求编程: (1)先定义一个结构体Date,它包含三个成员:年(year,int)、月(month,int)、日(day,int); (2)再定义一个结构体,它包含三个成员:姓名(name,char[10])、性别(sex,char类型,’m’为男,’f’为女)、出生时间(birthday,Date类型)、身份证号(ID,char[19])、电子邮箱(email,char[60]),并用typedef将该结构体命名为Person类型; (3)然后定义一个Person类型的变量me,通过键盘输入自己的信息,然后输出me的各成员值。 程序执行如下图所示: (提示:由于输入内容有字符串、字符、整数等,建议在scanf()中的格式控制符用空格隔开,例如scanf("%s %c %d %d %d %s %s",https://www.doczj.com/doc/a513143340.html,,…);) 3、学生有三门课程:A、B、C,3名学生的成绩如下表所示: 姓名 A B C 平均分 张三78 84 67 李四88 90 95 王五66 79 80 请先定义一个结构体Student,其成员包括:name(姓名)、A、B、C、aver(平均分),再定义一个Student类型的数组stud[3]来存放学生资料。现欲先输入

第十一章结构体的试题

(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

结构体、共用体、枚举

最终排名 Time Limit: 1000MS Memory limit: 65536K 题目描述 第四届山东理工大学ACM网络编程擂台赛比赛完后需要产生一个最终排名,排名按照题数多少来决定。但是有太多的队伍参与,手动计算排名已经不能满足比赛的需求。现在有一份名单记录各个队伍的ID和做出的题目数,需要你写一个程序,产生最终的排名。 为了简化题目,这里的排名规则为:做出题目数量多的队伍排在前面,如果题数相等,保持输入时的相对顺序不要改变。 输入 第一行包含一个正整数T( 1≤T≤15),表示有T组测试数据。每组数据第一行有一个正整数N(1< N≤10000),表示队伍数量。接下来N 行包含两个整数,1≤ID≤10^7, 0≤M≤100。ID为队伍的编号,M为做出的题数。 输出 每组数据输出包含N行,第i行有两个整数,ID和M表示排在第i位的队伍的ID和做出的题数。 示例输入 1 8 1 2 16 3 11 2 20 3 3 5 26 4 7 1 22 4 示例输出 3 5 26 4 22 4

16 3 20 3 1 2 11 2 7 1

#include void main() { struct team { int ID; int M; }t[10000],T; int N,n,i,j,k,time=0; scanf("%d",&N); while(time!=N) { scanf("%d",&n); for(i=0;i

C语言6:结构体,共用体

选票统计 Time Limit: 1000MS Memory limit: 65536K 题目描述 某校学生会主席由全校学生投票选举产生,共有m名候选人报名参选,编号为1到m(0<m<1000),全校有n名学生(0<n<30000),每人都可以投票。但每人只能投一票,每票只能选1名候选人。请你设计一个程序能够统计出哪个候选人得票最高,得了多少票。不会出现得票数相同的情况。 输入 第一行输入候选人数m和学生数n,以空格分开; 下面依次输入每个学生所选的候选人的编号。 输出 第一行输出得票最多的候选人编号; 第二行输出该候选人所得的票数。 示例输入 3 10 1 2 3 2 3 1 2 3 1 3 示例输出 3 4 #include struct st { int sum; }man[1000]; void main() { int m,n,i,a,j,max; scanf("%d %d\n",&m,&n); for(i=0;imax) { max=man[i].sum; j=i; } } printf("%d\n%d\n",j,max); }

最终排名 Time Limit: 1000MS Memory limit: 65536K 题目描述 第四届山东理工大学ACM网络编程擂台赛比赛完后需要产生一个最终排名,排名按照题数多少来决定。但是有太多的队伍参与,手动计算排名已经不能满足比赛的需求。现在有一份名单记录各个队伍的ID和做出的题目数,需要你写一个程序,产生最终的排名。 为了简化题目,这里的排名规则为:做出题目数量多的队伍排在前面,如果题数相等,保持输入时的相对顺序不要改变。 输入 第一行包含一个正整数T( 1≤T≤15),表示有T组测试数据。每组数据第一行有一个正整数N(1< N≤10000),表示队伍数量。接下来N 行包含两个整数,1≤ID≤10^7, 0≤M≤100。ID为队伍的编号,M为做出的题数。 输出 每组数据输出包含N行,第i行有两个整数,ID和M表示排在第i位的队伍的ID和做出的题数。 示例输入 1 8 1 2 16 3 11 2 20 3 3 5 26 4 7 1 22 4 示例输出 3 5 26 4 22 4 16 3 20 3 1 2 11 2 7 1 #include struct st { int ID; int M; }p[10000]; void main() { struct st s; int t; scanf("%d\n",&t); while(t--) {

第八章结构体、共用体与枚举实验报告

一、实验目的(参见实验指导书P159) 二、实验内容(参见课本及实验指导书) 实验内容提要:结构体、共用体、枚举类型、typedef使用具体内容: 1、有以下程序,程序运行后的输出结果是()。 struct s { int x, y; } data[2] = { 10, 100, 20, 200 } ; main ( ) { struct s *p = data; printf ( "%d\n", ++ ( p->x ) ) ; } 2、有以下程序,程序运行后的输出结果是()。 struct STU { char num[10]; float score[3]; } ; main ( ) { struct STU s[3] = { { "201201", 90, 95, 85 } , { "201202", 95, 80, 75 } , { "201203", 100, 95, 90 } }, *p = s; int i; float sum = 0; for ( i = 0;i<3;i++ ) sum = sum+p->score[i]; printf ( "%6.2f\n", sum ) ; } 3、下面程序的输出结果是( ) typedef struct{ float x ;

char z ; }mytype; mytype a ; main() { printf("%d",sizeof(a)); } 4、下面程序的输出结果是( ) typedef union{ long a[1] ; char y ; char c[10]; }S; S a ; main() { printf("%d",sizeof(a)); } 5、下面程序的输出结果为() #include "stdio.h" main() { union{unsigned int t; unsigned char c; }u; u.c='a'; printf("%c\n",u.t); getch(); } 结论:一个共用体中可能有若干个不同类型的成员,但在任何时刻,只有一个成员的值被存储。 这就是最后赋给它的值。 6、设有以下语句 char x=3,y=6,z; z=x^y<<2; 则z的二进制值是多少?提示,左移的优先级高于^ 三、实验结果与思考

十一章 结构体与共用体

结构体与共用体 一、选择题: 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) 结构体的定义与结构体变量; (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;

第9章结构体类型与共用体类型习题及答案

第九章结构体类型与公用体类型习题及其答案9-3编写程序,使用结构体类型,输出一年十二个月的英文名称及相应天数。 解:#include "stdio.h" struct date { char month[10] ; int daynumber ; } main() { int i ; date a[12] ={{"January",31},{"February",29},{"March",31},{"Aprial",30}, {"May",31},{"June",30},{"july",31},{"August",31},{"September",30} ,{"October",31},{"November",30},{"December",31}} ; for(i=0;i<12;i++); printf("%d 月:%s %d\n",i+1,a[i].month,a[i].daynumber) ; } 思考:如何对结构体变量进行初始化?对结构体变量的引用为何要体现为分量(或成员)的引用? 9-4 编写程序求空间任一点到原点的距离,点用结构体描述。并请考虑求空间中任意两点的距离的程序。 解:#include "stdio.h" #include "math.h" struct point { float x ; float y ; float z ; } void main() { double d1,d2,d ;

point p1,p2 ; printf("请输入第一个点的坐标:"); scanf("%f,%f,%f",&p1.x,&p1.y,&p1.z); printf("请输入第二个点的坐标:"); scanf("%f,%f,%f",&p2.x,&p2.y,&p2.z); d1=sqrt(p1.x*p1.x+p1.y*p1.y+p1.z*p1.z); d2=sqrt(p2.x*p2.x+p2.y*p2.y+p2.z*p2.z); d=sqrt((p2.x-p1.x)*(p2.x-p1.x)+(p2.y-p1.y)*(p2.y-p1.y)+(p2.z-p1.z)*( p2.z-p1.z)); printf("第一个点到原点的距离:%f\n",d1); printf("第二个点到原点的距离:%f\n",d2); printf("两点间的距离:%f\n",d); } 9-5 编写输入、输出10个朋友数据的通讯录程序,每个朋友数据包括姓名、地址、邮编、电话、传呼、手机等数据。 解:#include "stdio.h" struct AddressBook { char name[10] ; char address[30] ; char mailnumber[7] ; char telphone[12] ; char byphone[16] ; char movephone[1] ; } void main() { int i ; AddressBook fd[10] ; for(i=0;i<10;i++) { printf("请输入第%d个朋友的信息:\n",i+1); printf("姓名:");

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

C++结构体,共用体,枚举,自定义类型

1.结构体类型: struct Student{ int num; char name[20]; char sex; int age; float score; char addr[30]; }; 上面代码声明了一个结构体类型,其结构体类型名为Student。声明一个结构体类型的一般形式为, struct 结构体类型名{ 成员列表 }; 大括号内是该结构体中的全部成员(member),在声明一个结构体类型时必须对各成员都进行类型声明: 类型名成员名; 每一个成员也称为结构体中的一个域(field)。成员列表又称为域表。 在C语言中,结构体的成员只能是数据。C++对此加以补充,结构体的成员既可以包括数据(成员),又可以包括函数(成员)。但由于C++提供了类(class)类型,所以不必使用带函数的结构体。 声明一个结构并不分配内存,内存分配发生在定义这个新数据类型的变量中。 2.结构体变量的定义与初始化 2.1定义结构体变量: 方法一:先声明结构体类型再定义变量名 struct Student{ int num; char name[20]; char sex; int age; float score; char addr[30]; }; Student stu1,stu2; 方法二:在声明时同时定义变量 struct Student{ int num; char name[20]; char sex; int age; float score; char addr[30]; }stu1,stu2; 2.2结构体变量赋初值

方法一:在定义结构体变量时赋初值 struct Student{ int num; char name[20]; char sex; int age; float score; char addr[30]; }stu1={001,"Jeff",'M',25,88,"Shanghai"}; 方法二:在定义变量时初始化 struct Student{ int num; char name[20]; char sex; int age; float score; char addr[30]; }; Student stu1={001,"Jeff",'M',25,88,"Shanghai"}; 3.结构体变量的使用 [1]可以将一个结构体变量的值赋给另一个具有相同结构的结构体变量。 struct Student{ int num; char name[20]; char sex; int age; float score; char addr[30]; }; Student stu1={001,"Jeff",'M',25,88,"Shanghai"}; Student stu2; stu2=stu1; [2]可以访问和设定结构体变量中的一个成员的值。 引用结构体变量中成员的一般方式为,结构体变量名.成员名。“.”是成员运算符,它在所有的运算符中优先级最高。 stu2.num=002; [3]可以访问结构体变量成员的地址,也可以访问结构体变量的地址。 int main(){ struct Student{ int num; char name[20];

第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

实验9 结构体、共用体与枚举类型答案

实验九结构体、共用体与枚举类型 实验时间:年月日 一、上机验证与分析题 1、写出程序ex9_1.c运行的结果。 /*文件名ex9_1.c*/ #include struct HAR { int x,y; struct HAR *p; }h[2]; int main() { 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); return 0; } 答案:3 2 2、写出程序ex9_2.c运行的结果。 /*文件名ex9_2.c*/ #include "stdio.h" void main() { int z; union data { int x; int y; }a; a.x=3; a.y=6; z=a.x+a.y; printf("z=%d\n",z);

} 答案:z=12 3、阅读程序ex9_3.c,预测结果并上机验证。 /*文件名ex9_3.c*/ #include void main() { union data { int i; char ch; float f; }a,b,c; a.i=9; b=a; c=b; printf("b.i=%d,c.i=%d\n",b.i,c.i); } 答案:b.i=9,c.i=9 4、运行下列程序,写出结果 /*文件名ex9_4.c*/ #include void main() { struct List { int data ; struct List *next; }; struct List a[3]={1,&a[1],2,&a[2],3,&a[0]}, * p; p=&a[1] ; printf("%d\n",--p->data); printf("%d\n",p->next->data); printf("%d\n",p--->data); } 答案:1 3 1

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