结构体共用体及枚举.PPT

结构体共用体及枚举

第六章 结构体、枚举和联合 结构体类型定义和引用 结构体数组、指针、参数 链表的构造与使用 共用体与枚举 结构体的提出 单一对象有许多相关信息,这些信息彼此相关,物理上(文件/内存)连续,要求能用统一、简单方法引用整体或各子信息。 将相关各子信息进行打包,打包的结果就是结构体。这是一种自定义的、新的数据类型。用“结构体名.分量名”的方法可对子信息进行引用。 结构体做为C的数据类型,有数组、指针等形式。 结构体类型的定义 例:职工 (worker)信息 职工号 num 姓名 name 性别 sex 工资 pay 家庭地址 adr 定义了新的数据类型 struct worker 结构体类型定义 struct worker { int num; char name[20]; char sex; float pay; char adr[30]; }; 结构体类型变量的定义和引用 例:若有职工wang和li。 则有变量定义: struct worker wang; struct worker li; 职工wang的工号为100,姓名为“WangWu”,性别男‘M’,工资和地址从键盘上输入。 struct worker wang; struct worker li; wang.num = 100; strcpy( wang.name,”WangWu”); wang.sex = ‘M’; scanf( “%f”, wang.pay ); scanf( “%s”, wang.adr ); 结构体变量的内存分配 结构变量的地址 wang 结构成员的地址 wang.num wang.name[0] (wang.name) 结构变量占用空间 sizeof(wang) sizeof(struct worker) 结构体变量的初始化/输入出 struct worker li = {4801,“LiWay”,’f’,806.68,“416BeijingRoad”}; 结构体变量的输出 printf(“%d,%s,%c,%0.2f,%s\n”, li.num, li.name, li.sex, li.pay, li.adr ); 结构体变量的输入 scanf(“%d %s %c %f %s”, li.num, li.name, li.sex, li.pay, li.adr ); 结构体定义的方式 先定义结构体、再变量 struct worker { … }; struct worker wang; 结构与变量同时定义 struct worker { … } wang; 结构体数组 100个职工的信息 struct worker per[100]; 结构体数组的初始化 结构体数组的内存分配 结构体数组的引用、输入、输出 per[i].num per[i].name per[i].adr[1] 结构体指针 指向结构体变量的指针 struct worker *pw; 指针的初始化 pw = wang; 通过指针引用结构体 (*pw).num pw-num (*pw).name pw-name 结构体与函数:通过指针传递 参数传递:单个结构体变量 void printworker( struct worker *pw ); 参数传递:结构体数组 float averpay1(struct worker per[], int n ); float averpay2( struct worker *pw, int n ); 函数返回:结构体变量 struct worker *findworker( struct worker per[], int n, int num ); 练习1 若有定义 stuct worker per[100]; 输入:第i个职工的工号、姓名、工资 输出:第i个职工的工号、姓名、工资 输入/输出所有职工的全部信息 用gets输入第i个职工的姓名 将第i个职工的内容赋值给第j个职工 整体赋值、各分量赋值 例子1 void printworker( struct worker *p ) { printf( “%d %s %f\n”, p-num, p-name, p-pay ); } void scanworker( struct worker *p) { scanf( “%d %s %f”, p-num, p-name, p-pay } 例子2 求平均工资 averpay1 float averpay1(struct worker per[], int n) { float sum; int i; for( i=0, sum=0; i n; i++ )

文档评论(0)

1亿VIP精品文档

相关文档