第4章结构体资料教程

上传人:yuzo****123 文档编号:141247904 上传时间:2020-08-05 格式:PPT 页数:79 大小:779.50KB
返回 下载 相关 举报
第4章结构体资料教程_第1页
第1页 / 共79页
第4章结构体资料教程_第2页
第2页 / 共79页
第4章结构体资料教程_第3页
第3页 / 共79页
第4章结构体资料教程_第4页
第4页 / 共79页
第4章结构体资料教程_第5页
第5页 / 共79页
点击查看更多>>
资源描述

《第4章结构体资料教程》由会员分享,可在线阅读,更多相关《第4章结构体资料教程(79页珍藏版)》请在金锄头文库上搜索。

1、,C语言程序设计,信息与电气工程学院 2012年4月,第四章 结构体数据类型工资管理系统之数据结构设计,任务一 学习目标 任务二 声明结构体类型 任务三 职工工资数据结构设计与结构体变量定义 任务四 输入职工工资 任务五 计算职工工资 任务六 输出职工工资,任务一 学习目标,1.理解结构体数据类型,2.学会定义结构体数据类型的变量,3.能够正确使用结构体成员,又如:职工工资管理系统中的职工信息。,.,每个成员的类型不一致,作为一个整体,如何表示和使用这种数据类型和变量呢?,?,任务二 声明结构体类型,声明一个结构体类型的一般形式为: struct 类型名 数据类型 成员名1; 数据类型 成员名

2、2; 数据类型 成员名n; ;,C语言允许将上述数据的集合定义为:结构体类型,关键字,基本型或 构造型,以分号;结尾,与成员名:合法标识符,例:struct date int year; /年 int month;/月 int day; /日 ;,补充:数组,数组:用来存放相同类型的数据,在内存中 连续存放。,说明: 使用前必须先定义数组类型和数组大小:,int a10; char name30;,C语言没有字符串数据类型,字符串存放在字符数组中。,数组名代表了数组的起始地址。,struct student unsigned num; char name20; char sex; int ag

3、e; float score; char addr30; ;,分号不能少,struct zhigong/*声明职工工资数据结构体*/ char gonghao10;/*职工工号*/ char name10;/*职工姓名*/ float gwgz;/*岗位工资*/ float xjgz;/*薪级工资*/ float zwjt;/*职务津贴*/ float jxgz;/*绩效工资*/ float yfgz;/*应发工资*/ float grsds;/*个人所得税*/ float sfgz;/*实发工资*/ ;,结构体是一种构造数据类型 用途:把不同类型的数据组合成一个整体。 优点:体现了数据项之间

4、的关系。,独立变量表示:,结构体变量表示:,注意: 结构体类型,与char、int等只是数据类型,系统不为数据类型分配实际内存空间。必须定义结构体类型的变量,系统才为分配内存空间。,结构体类型已经声明, 接下来该怎么做呢?,1. 先声明结构体类型再定义结构体变量。,有三种方法可用来定义结构体变量:,形式:,struct 结构体名 变量名表列;,如: struct date int year; int month; int day; ;,struct date birthday;/ 定义birthday变量 为已声明的date 结构体类型。,形式: struct 结构体名 成员表列 变量名表列;

5、,2. 在声明结构体类型的同时定义变量:,如: struct date int year; int month; int day; birthday;,形式: struct 结构体名 成员表列 变量名表列;,如: struct date int year; int month; int day; birthday;,3. 直接定义结构类型变量,形式: struct 成员列表 变量名列表;,不出现结构体类型名-“无名结构体”,如: struct int year; int month; int day; birthday;,struct zhigong char gonghao10; char

6、name10; float gwgz;/*岗位工资*/ float xjgz;/*薪级工资*/ float zwjt;/*职务津贴*/ float jxgz;/*绩效工资*/ float yfgz;/*应发工资*/ float grsds;/*个人所得税*/ float sfgz;/*实发工资*/ ;,struct zhigong zhigong1,zhigong2;,先定义结构体类型再定义结构体变量。,struct zhigong char gonghao10;/*职工工号*/ char name10;/*职工姓名*/ float gwgz;/*岗位工资*/ float xjgz;/*薪级工

7、资*/ float zwjt;/*职务津贴*/ float jxgz;/*绩效工资*/ float yfgz;/*应发工资*/ float grsds;/*个人所得税*/ float sfgz;/*实发工资*/ zhigong1,zhigong2;,定义结构体类型的同时定义变量:,直接定义结构类型变量,struct char gonghao10;/*职工工号*/ char name10;/*职工姓名*/ float gwgz;/*岗位工资*/ float xjgz;/*薪级工资*/ float zwjt;/*职务津贴*/ float jxgz;/*绩效工资*/ float yfgz;/*应发工

8、资*/ float grsds;/*个人所得税*/ float sfgz;/*实发工资*/ zhigong1,zhigong2;,几点说明:,(1) 结构体类型与结构体变量概念不同。 结构体类型: 不分配内存 结构体变量: 分配内存,(2) 结构体成员也可以嵌套是结构体类型。,例: struct date int month; int day; int year; ; struct student int num; char name20; struct date birthday; stu;,例: struct student int num; char name20; struct dat

9、e int month; int day; int year; birthday; stu;,(3) 结构体类型中的成员名,可以与程序中的变量同名。 如: struct student float gs_score; float C_score; stu1; main( ) float gs_score; ,(4)一个C程序可以定义多个结构体类型;定义的位置可在函数内,也可在函数外,其有效范围是从类型定义处开始到程序结束。,#include struct student /定义结构体类型 ; fun() /自定义函数fun ; ; main( ) struct student stu; ; ,

10、结构体类型的有效范围,一、 结构体变量的引用,成员(分量)运算符: .和- 优先级:最高(1级) 结合性: 左结合,非指针型结构体变量的引用: 结构体变量名.成员名,指针型结构体变量的引用:(后续讲) 结构体指针-成员名 (*结构体指针).成员名,任务四 输入职工工资,-成员的引用和赋值,例: struct date int year; int month; int day; birthday;,成员1:birthday.year,成员2:birthday.month,成员3:birthday.day,成员运算符,二、初始化,先声明结构体类型,然后定义结构体变量的同时为每一个成员赋初值。,st

11、ruct date birthday = 1990, 4, 7 ;,注意:赋初值时, 初值表中的数据顺序必须与结构体成员的定义顺序一致,否则就会出现混乱。,struct date birthday = 4,7,1990;,非初始化方法:声明结构体类型,定义结构体 变量之后,逐成员赋值。,birthday.day=7;,birthday.year=1990;,birthday.month=4;,struct date int year; int month; int day; birthday;,三、使用scanf()函数,从键盘输入各成员的值。,struct date int year; in

12、t month; int day; birthday;,scanf(“%d%d%d”,如何实现?,1.结构体变量不能整体引用,只能引用变量成员。,引用原则,printf(“%d%d%d”,birthday);,printf(“%d%d%d”,birthday.year , birthday.month ,birthday.day);,scanf(“%d%d%d”,(),(),(),如何正确引用成员?,例 struct student int num; char name20; float score; stu1,stu2;,printf(“%d,%s,%fn”,stu1); (),stu1=1

13、01,“Wang Lin”,87.5; (),只能在初始化时使用这种方式: struct student stu1=101,“Wang Lin”,87.5;,(),例 struct student int num; char name20; float score; stu1=101,“wang”,95.0, stu2;,stu1已有初值: stu2 = stu1; (),2.可以将一个结构体变量赋值给另一个结构体变量,例 struct student int num; char name20; float score; stu1, stu2;,stu1.score = 85.5;,stu1.

14、score += stu2.score; stu1.num+;,(),(),3.结构体变量的成员可以像普通变量一样进行运算。,注意: “.”运算符的优先级为1级( ( ) . -)zhigong1.age+ 应理解为?,(zhigong1.age)+,例 struct student int num; char name20; struct date int month; int day; int year; birthday; stu1, stu2;,stu1.birthday.month = 12;,stu2.birthday.year = 2011;,结构体变量名.成员名.子成员名最低级

15、子成员名,4.结构体嵌套时逐级引用,【思考1】下面程序的运行结果是什么? #include struct int b; /*分配4个字节*/ char e; /*1字节*/ char u; /*1字节*/ double s;/*8字节*/ y; main() printf(y=%dn,sizeof(y); ,5.结构体变量占用内存情况:各成员按定义顺序连续存储。结构体变量所占内存字节数并非各成员变量所占内存字节数之和。,根据最长字节成员对齐原则,分配字节数。,【思考2】下面程序的运行结果是什么? #include struct int b; /*分配4个字节*/ double s;/*8字节*/ char e; /*1字节*/ char u; /*1字节*/ yy; main() printf(yy=%dn,sizeof(yy); ,【案例4-1】对结构体变量进行初始化并输出。,分析定义结构体变量时指定初始值。,代码 #include main( ) struct zhigong char gonghao10;/*职工工号*/ char name10;/*职工姓名*/ float gwgz;/*岗位工资*/ float xjgz;/*薪级工资*/ float zwjt;/*职务津贴*/ float jxgz;/*绩效工资*/ a=0101,唐僧,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 教学课件 > 高中课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号