《C语言程序设计》课程授课教案(讲义)结构体与共用体

·52 C程序设计要点分析与题解 第6章结构与联合 6.1结构的定义 1.结构的定义及其一般格式 数组是将同举刑元素组成单个罗辑整体的一种新据类型而结构则是将不同类刑元素组成 单个逻辑整体的一种数据类型。结构是C语言中一种强有力的数据类型, 是很重要的概念之 例如,日期由年、月、日构成: int year: int month: struct date int month: int day: int year 这样,就可把年、月、日当作一个整体处理。年、月、日是该结构的成员。结构的成员 也可以是不同数据类型的变量,例如: char name [30]: float salary: 上面定义了两个结构数据类型,date和age。可用这些已定义的结构类型来说明一组具 体结构类型变量。例如: struct date today,tomorraw: /体定义了两个结构类型变量today,tomorraw*/ struct wage workerl,worker2,worker3:/*定义了三个结构类型变量*/ 结构定义的一般格式为: struct[结构类型名] 类型说明符成员变量名 类型说明符成员变量名: 】[结构变量列表]:
·52· C 程序设计要点分析与题解 第 6 章 结构与联合 6.1 结构的定义 1.结构的定义及其一般格式 数组是将同类型元素组成单个逻辑整体的一种数据类型。而结构则是将不同类型元素组成 单个逻辑整体的一种数据类型。结构是 C 语言中一种强有力的数据类型, 是很重要的概念之 一。 例如,日期由年、月、日构成: int year; int month; int day; 上述表示方法不能看出它们是彼有关系的三个量。可以采用下面的定义表示: struct date { int month; int day; int year; }; 这样,就可把年、月、日当作一个整体处理。年、月、日是该结构的成员。结构的成员 也可以是不同数据类型的变量,例如: struct wage { char name[30]; float salary; }; 上面定义了两个结构数据类型,date 和 wage。可用这些已定义的结构类型来说明一组具 体结构类型变量。例如: struct date today,tomorraw; /*定义了两个结构类型变量 today,tomorraw*/ struct wage worker1,worker2,worker3;/*定义了三个结构类型变量*/ 结构定义的一般格式为: struct[结构类型名] { 类型说明符 成员变量名; . 类型说明符 成员变量名; }[结构变量列表];

第6章结构与联合 ·53· 结构变量列表是指以逗号分隔开的若干结构类型变量,例如: struct date int month: int day: int year: }today: 或 struct int month: int day: int year: }today: struct date /定义了一种结构类型*/ int year: struct date today:/*说明了一个具体的结构变量*/ 这三种说明结构类型变量的方式都可以使用,第三种写法的风格较好 2.结构的存取 结构变量成员可作为单独变量来操作,也就是说,可以直接访问结构中的一个成员变量, 其格式为: 结构变量名。成员变量名 例61:显示输入的年、月、日 #include main() struct date /*定义了结构类型*/ int montha int day: int year: struct date today: /*结构体变量today*/
第 6 章 结构与联合 ·53· 结构变量列表是指以逗号分隔开的若干结构类型变量,例如: struct date { int month; int day; int year; }today; 或 struct { int month; int day; int year; }today; 或 struct date /* 定义了一种结构类型 */ { int month; int day; int year; }; struct date today;/* 说明了一个具体的结构变量 */ 这三种说明结构类型变量的方式都可以使用,第三种写法的风格较好。 2.结构的存取 结构变量成员可作为单独变量来操作,也就是说,可以直接访问结构中的一个成员变量, 其格式为: 结构变量名.成员变量名 例 6.1: 显示输入的年、月、日 #include <stdio.h> main() { struct date /* 定义了结构类型 */ { int month; int day; int year; }; struct date today; /* 结构体变量 today */

·54· C程序设计要点分析与题解 printf("Enter today's date(年,月,日)n"): scanf("dd&today.year,&today.month,&today.day) printf("Today's date is/dn",today.year,today.month, today.day 执行后可以显示出所输入的今天的年、月、日。 例6.2:对外部存储类型的结构体变量的初始化。 /10-1*/ struct student /定义结构类型 long int num char name[20]; char sex. char addr[20]: )a=(89031,"Li Lin",M,"123 Beijing Road"); /*结构体变量赋初值*/ main fprintf("No.%1d\nname:%s\nsex:%c\naddress:%s\n".a.num.a.name. a.sex,a.addr): 例6.3:对静态存储类型的结构体变量的初始化。 Main ( static struct student /静态结构类型 {long int num char name[20] char sex; char addr[20]; )a=(89031,"Li Lin",'M,"123 Beijing Road") /*赋初值*/ printf("No.%1d\nname:%s\nsex:%c\naddress:%s\n".a.num.a.name a.sex,a.addr); 1 6.2结构数组 不仅结构变量成员可以是数组,而且,同一类结构变量的集合还可构成结构数组,例如: struct wage char name [30] float salary: 1: static wage persons [100]:
·54· C 程序设计要点分析与题解 printf(″Enter today′s date(年,月,日)\n″); scanf(″%d,%d,%d″,&today.year,&today.month,&today.day); printf(″Today′s date is %d/%d%/d\n″,today.year, today.month, today.day ) } 执行后可以显示出所输入的今天的年、月、日。 例 6.2:对外部存储类型的结构体变量的初始化。 /*L10-1*/ struct student /* 定义结构类型 */ { long int num; char name[20]; char sex; char addr[20]; }a={89031,”Li Lin”,’M’,”123 Beijing Road”}; /*结构体变量赋初值*/ main () {printf(“No.:%ld\nname:%s\nsex:%c\naddress:%s\n”,a.num,a.name, a.sex,a.addr); } 例 6.3: 对静态存储类型的结构体变量的初始化。 Main () { static struct student /* 静态结构类型 */ {long int num; char name[20]; char sex; char addr[20]; }a={89031,”Li Lin”,’M’,”123 Beijing Road”}; /*赋初值*/ printf(“No.:%ld\nname:%s\nsex:%c\naddress:%s\n”,a.num,a.name, a.sex,a.addr); } 6.2 结构数组 不仅结构变量成员可以是数组,而且,同一类结构变量的集合还可构成结构数组,例如: struct wage { char name[30]; float salary; }; static wage persons[100];

第6章结构与联合 ·55· 这就说明了100个结构变量所组成的数组。 例6.4:输入后选人名,对后选人投票计数,统计输出每个人的得票结果 Struct person /体全局结构类型*/ (char name [20] int count: J1 eader[3]=Li”,0,"Zhang”,0,"fun“,0 /*初始化*/ in0 (int I,j; char leader name [20] for(1=1:I<e10:I+) {scanf(%s",leader_name): /*输入人名* for(j=0:j<3:j++) if (strcmp(leader_name,leader[j].name) ==0 leader[j].count++; /*紫加票数*/ printf(\n") s:%dn”,leader[I.name,leader[I.count):/*每人得票数*/ 6.3结构与函数 L.向函数传递结构变量成员 结构变量成员可作为参数传递给函数。例如有一结构为: struct fred char x: int y: float z: char s [10] lmike: 其中各个成员均可作为函数的参数,例如: funcO(mike.x) /字符型参数* func1(mike.y) /整数型参数为 func2 (mike.z): /浮点型参数* func3(mike.s): /字符型数组参数*/ func4(mike.s [2]) /字符型参数*/ 2.向函数传递完整的结构
第 6 章 结构与联合 ·55· 这就说明了 100 个结构变量所组成的数组。 例 6.4:输入后选人名,对后选人投票计数,统计输出每个人的得票结果。 Struct person /* 全局结构类型 */ {char name[20]; int count; }leader[3]={“Li”,0,”Zhang”,0,”Fun”,0}; /*初始化*/ main () {int I,j; char leader_name[20]; for (I=1;I<=10;I++) {scanf(“%s”,leader_name); /*输入人名*/ for (j=0;j<3;j++) if (strcmp(leader_name,leader[j].name)==0) leader[j].count++; /*累加票数*/ } printf(“\n”); for (I=0;I<3;I++) printf(“%5s:%d\n”,leader[I].name,leader[I].count);/* 每人得票数*/ } 6.3 结构与函数 1.向函数传递结构变量成员 结构变量成员可作为参数传递给函数。例如有一结构为: struct fred { char x; int y; float z; char s[10]; }mike; 其中各个成员均可作为函数的参数,例如: func0(mike.x); /*字符型参数*/ func1(mike.y); /*整数型参数*/ func2(mike.z); /*浮点型参数*/ func3(mike.s); /*字符型数组参数*/ func4(mike.s[2]); /*字符型参数*/ 2.向函数传递完整的结构

·56· C程序设计要点分析与题解 不仅结构元素可作为参数传递给函数,整个结构也可作为参数传递的函数。完整结构向 函数传递的操作中,应注意: 整个结构按传值方式传 。和普通变量一样,与数组不同,在函数内所引起结构参数中 某个值的变化,只影响函数调用时所产生的结构拷贝,不影响原来的结构。 (②)结构分全局定义和局部定义,定义在所有函数外部的结构称为全局结构,定义在函数内 部的结构称为局部结构。它们被引用的范围不同。 例6.5:局部定义的结构 main( struct /*局部定义*/ int a,b: char cha arg: arg.a=1000: fl(arg): printf("a=%d\n",arg.a): fl(parm) struct /*形参说明定义* int x,y: char ch: }parm: /函数体* printf ("xl=%d\n",parm.x) Darm.x=20: printf("x2=%d\n",parm.x): eturn: 执行结果: x1=1000 ¥2=20 a=1000 例6.6:全局定义的结构 struct st /全局定义*/ int a.b:
·56· C 程序设计要点分析与题解 不仅结构元素可作为参数传递给函数,整个结构也可作为参数传递的函数。完整结构向 函数传递的操作中,应注意: (1)整个结构按传值方式传递。和普通变量一样,与数组不同,在函数内所引起结构参数中 某个值的变化,只影响函数调用时所产生的结构拷贝,不影响原来的结构。 (2)结构分全局定义和局部定义,定义在所有函数外部的结构称为全局结构,定义在函数内 部的结构称为局部结构。它们被引用的范围不同。 例 6.5:局部定义的结构 main() { struct /*局部定义*/ { int a,b; char ch; }arg; arg.a=1000; fl(arg); printf(″a=%d\n″,arg.a); } fl(parm) struct /*形参说明定义*/ { int x,y; char ch; }parm; { /*函数体*/ printf(″x1=%d\n″,parm.x); parm.x=20; printf(″x2=%d\n″,parm.x); return; } 执行结果: x1=1000 x2=20 a=1000 例 6.6:全局定义的结构 struct st /*全局定义*/ { int a,b;

第6章结构与联合 57 char cht main( struct st arg: arg.a=1000 f1(arg): 1 fl(parm) /定义函数据库*/ struct st parm: /*形参说明*/ printf("%d\n",parm.a): return: 其中,结构类型s1是全局定义的,各函数都可引用。 6.4结构的初始化 1.简单结构的初始化 结构说明时,行尾加上分号,随后在花括号中按结构定义的各成员顺序给以各自的初始 值,并用逗号分隔之。例如: struct date int montha int day: int year: }: /条行尾加上分号*/ static struct date today={11,19,1991): 注意:局部结构变量不能初始化。 6.5联合(union)) 1.联合的定义说明及其一般格式 在C语言中,不同数据类型的数据可以共用同一个存贮区。这是又一种构造类型的数据 类型,称为联合。联合定义说明的 一般格式如下 union[联合类型名] 类型说明符变量名:
第 6 章 结构与联合 ·57· char ch; }; main() { struct st arg; arg.a=1000; f1(arg); } f1(parm) /*定义函数据库*/ struct st parm; /*形参说明*/ { printf(″%d\n″,parm.a); return; } 其中,结构类型 st 是全局定义的,各函数都可引用。 6.4 结构的初始化 1.简单结构的初始化 结构说明时,行尾加上分号,随后在花括号中按结构定义的各成员顺序给以各自的初始 值,并用逗号分隔之。例如: struct date { int month; int day; int year; }; /*行尾加上分号*/ static struct date today={11,19,1991}; 注意:局部结构变量不能初始化。 6.5 联合(union) 1.联合的定义说明及其一般格式 在 C 语言中,不同数据类型的数据可以共用同一个存贮区。这是又一种构造类型的数据 类型,称为联合。联合定义说明的一般格式如下: union[联合类型名] { 类型说明符 变量名;

·58· C程序设计要点分析与题解 类型说明符变量名: }[联合变量列表]: 例如: union mixed char c: float f: short int i; }x 或 union char ci float f: short int i: }x 或 union mixed char c: float f: short int i: union mixed x: 从形式上看,联合的定义说明与结构很相似,然而,在内存的配合和使用上,两者有本 质的区别。上述例子中的联合变量X所占字节数应为三个成员变量©,f和1之中占用字节数 的最大值,即变量「所占字节数,可占4字节。同一时刻,只能存有三个成员变量之一。 联合的好处是可以节省空间。 2.联合的存取 联合成员的用引用,在表示方法上,类似于结构成员的引用,其一般形式如下: 联合类型变量名.成员变量名
·58· C 程序设计要点分析与题解 类型说明符 变量名; }[联合变量列表]; 例如: union mixed { char c; float f; short int i; }x; 或 union { char c; float f; short int i; }x; 或 union mixed { char c; float f; short int i; }; union mixed x; 从形式上看,联合的定义说明与结构很相似,然而,在内存的配合和使用上,两者有本 质的区别。上述例子中的联合变量 X 所占字节数应为三个成员变量 c,f 和 i 之中占用字节数 的最大值,即变量 f 所占字节数,可占 4 字节。同一时刻,只能存有三个成员变量之一。 联合的好处是可以节省空间。 2.联合的存取 联合成员的用引用,在表示方法上,类似于结构成员的引用,其一般形式如下: 联合类型变量名.成员变量名
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
- 《C语言程序设计》课程授课教案(讲义)枚举与位操作.doc
- 《C语言程序设计》课程授课教案(讲义)编译预处理.doc
- 《C语言程序设计》课程授课教案(讲义)数组与字符串.doc
- 《C语言程序设计》课程授课教案(讲义)函数与变量.doc
- 《C语言程序设计》课程授课教案(讲义)程序设计算法流程控制.doc
- 《C语言程序设计》课程授课教案(讲义)C语言程序的基本形式.doc
- 《C语言程序设计》课程教学大纲(公共基础必修课、选修课).doc
- 《过程流体机械》课程教学课件(PPT讲稿)第五章 离心机.ppt
- 《过程流体机械》课程教学课件(PPT讲稿)第三章 离心式压缩机.ppt
- 《过程流体机械》课程教学课件(PPT讲稿)第二章 往复式压缩机.ppt
- 《过程流体机械》课程教学课件(PPT讲稿)第四章 泵.ppt
- 《过程流体机械》课程教学课件(PPT讲稿)第一章 绪论.ppt
- 内蒙古科技大学:《C语言程序设计》课程教学课件(PPT讲稿)第一章 C语言概述.ppt
- 内蒙古科技大学:《C语言程序设计》课程教学课件(PPT讲稿)第四章 程序的控制结构.ppt
- 内蒙古科技大学:《C语言程序设计》课程教学课件(PPT讲稿)第五章 函数.ppt
- 内蒙古科技大学:《C语言程序设计》课程教学课件(PPT讲稿)第三章 简单的C程序设计.ppt
- 内蒙古科技大学:《C语言程序设计》课程教学课件(PPT讲稿)第二章 数据类型、运算符及表达式.ppt
- 内蒙古科技大学:《C语言程序设计》课程教学课件(PPT讲稿)第六章 数组.ppt
- 内蒙古科技大学:《C语言程序设计》课程教学课件(PPT讲稿)第九章 文件操作.ppt
- 内蒙古科技大学:《C语言程序设计》课程教学课件(PPT讲稿)第七章 指针.ppt
- 《C语言程序设计》课程授课教案(讲义)指针应用.doc
- 《C语言程序设计》课程授课教案(讲义)文件概念.doc
- 《C语言程序设计》课程实验指导(讲义)实验三 各种分支结构.doc
- 《C语言程序设计》课程实验指导(讲义)实验二 顺序结构与输入输出方法.doc
- 《C语言程序设计》课程实验指导(讲义)实验四 循环结构和转移语句.doc
- 《C语言程序设计》课程实验指导(讲义)实验七 定义编译预处理.doc
- 《C语言程序设计》课程实验指导(讲义)实验六 函数与变量.doc
- 《C语言程序设计》课程实验指导(讲义)实验五 数组和字符串.doc
- 《C语言程序设计》课程实验指导(讲义)实验十 指针与数组.doc
- 《C语言程序设计》课程实验指导(讲义)实验八 指针及其运算.doc
- 《C语言程序设计》课程实验指导(讲义)实验九 指针与字符串.doc
- 《C语言程序设计》课程实验指导(讲义)实验一 C语言程序设计准备.doc
- 《C语言程序设计》课程教学资源(作业习题)判断题样题(无答案).doc
- 《C语言程序设计》课程教学资源(作业习题)选择填空题(无答案).doc
- 《C语言程序设计》课程教学资源(作业习题)习题集(末页含答案).ppt
- 《C语言程序设计》课程教学资源(作业习题)选择题样题(无答案).doc
- 《C语言程序设计》课程教学课件(PPT讲稿)第一章 C语言概述.ppt
- 《C语言程序设计》课程教学课件(PPT讲稿)第二章 程序的灵魂——算法.ppt
- 《C语言程序设计》课程教学课件(PPT讲稿)第四章 最简单的c程序设计——顺序程序设计.ppt
- 《C语言程序设计》课程教学课件(PPT讲稿)第三章 数据描述.ppt