c语言第11章 结构体new

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

二、结 构 体
1. 定义结构体类型的一般形式 定义结构体类型的一般形式:
83 }
序号 元素 值
结构体变量类型元素在内存中的排列次序 1 2 3 4 54 6 score name num sex age 0 … 19 1 0 ? ? … ? ? ? ? ? …
2 ?
Dos
如: struct student { int num; char name[20]; (1) 类型与变量分别定义 类型与变量分别定义. char s; struct 结构体名 {成员表列;}; 类型定义 float score[3]; }; struct 结构体名 变量名表列; 变量定义 struct student st; ; (2)类型与变量同时定义 类型与变量同时定义. 类型与变量同时定义
(1). 不能将结构体变量作为整体 进行输入和输出,只能对结构体变 量中的成员进行输入和输出 引用方式: 结构体变量名 . 成员名 如: s1. num 同类型的结构体变量间可相互赋值 如: s1 = s2 (2). 结构体嵌套的引用 如: s1. birthday. day
如: struct date {int month; int day; int year; }; struct student {int num; char name[20]; char sex; struct date birthday; char score[3]; } s1, s2;
结构体student表列(域表), 共四个成员
定义结构体变量st并初始化, 注意char和char数组的区别
Dos
5. 结 构 体 数 组
1.结构体数组的定义 如:struct student 2.结构体数组的初始化 如:
struct student { int num; { int num; char name[20]; char name[20]; char sex; char sex; int age; int age; float score; float score; char addr[30]; char addr[30]; }; , , ; struct student stu[3]; } stu[ ]={{…},{…},{…}};
序号 元素 值 1 2
name ?
count ?
(1)输入:选票中候选人名leader; (2)输出:三个候选人的得票数s[i].count; (3)模型:if(leader= =s[i].name)s[i].count++;
struct person {char name[20]; int count; } s[3] = { {"Li “,0},{ “Wu “,0},{ “Zhang “,0}},
2. 定义结构体变量的三种方法 定义结构体变量的三种方法:
如: struct student { int num; char name[20]; char s; (3) 直接定义变量 (相对(2)不出现结构体名) 直接定义变量. float score[3]; struct { 成员表列; }st;
如: date_ pt -> year
= & today ;
1.结构体指针变量名 -> 结构体成员名
2.*结构体指针变量名. 结构体成员名 如: (*date_ pt) . month , *(date_ pt). day Dos
(1). 指向结构体变量的指针
例: #include "string.h" P main( ) {struct student {long int num; char name[20]; stu_1 char sex; num name sex score float score; }; struct student stu_1, *p; p = &stu_1; 89101 Li Lin M 89.5 stu_1. num = 89101; strcpy (stu_1. name, "Li Lin"); 占4+20+1+4=29字节 stu_1.sex = 'M'; stu_1.score = 89.5; printf ("%ld,%s,%c,%f \n", (*p).num, (*p).name, (*p).sex, (*p).score); } 或printf ("%ld,%s,%c,%f \n", p->num, Dos p->name, p->sex, p->score);
注意以下三种形式等价: 注意以下三种形式等价 ① 结构体变量 . 成员名 ② (*p).成员名 成员名 成员名 ③ p->成员名 请分析以下几种运算: 请分析以下几种运算
p->n: 得到 p指向的结构体变量中的成员 n的值 p->n++: 得到 p指向的结构体变量中的成员n的值 后使其加 1 的值, ++p->n: 得到p指向的结构体变量中的成员n的值 使其先加 1 (先加 先加1) 先加
Dos
如: struct date {int month; int day; int year; (3).结构体变量 成员可以进行各种运算 }; 如: sum=s1.score[0]+s2.score[1] struct student {int num; char name[20]; char sex; (4). 可引用结构体变量或成员的地址 struct date birthday; char score[3]; 输出成员num地址 地址*/ 如: scanf("%d", &s1.num);/*输出成员 输出成员 地址 } s1, s2;
a[0] a[1] a[2] a[3] a[4] a[5] a[6] 15 21 30 45 50 65 80
定义结构体student,struct为关键字 用途:把一组具有内在联系的属于各种类型的数据组合在一起.
如: struct student 把一个学生的有关信息放在 { int num; 一起,表示与使用很直观方便 struct 结构体名 char name[20]; {成员1;/*类型标识符 成员名 char sex; 定义结构体变量st,类型student ········· 每一个成员也称为域*/ float score[3]; 成员n;}; }; struct student st; ; St: 9901, 李明” St:{ 9901, “李明”,‘1’,67,78.5, 1’,67,78.5,
struct
结构体名 {成员表列; } 变量名表列;
} 变量名表列;
结构体变量St占(2+20+1+3*4)字节
Dos
注意: 注意: 1、结构体成员还可以是结 、 构体变量。 构体变量。
注意:
为结构体名而非结构 体变量名
如: struct date {int month; int day; int year; }; struct student {int num; char name[20]; char sex; struct date birthday; char score[3]; } s1, s2;
第十一章 结构体与共用体
① 结构体类型变量的定义方法、引用、初始化及结构体数 * 教学内容 组;11.2~11.5 ② 指向结构体类型数据的指针及用指针处理链表; 11.6~11.7 ③ 共用体的概述;11.8 ④ 用 typedef 定义类型。11.11
* 教学目的
① 掌握结构体类型变量及结构体数组; ② 掌握结构体指针; ③ 掌握用指针处理链表; ④ 掌握共用体的概述和枚举类型的说明; ⑤ 会用 typedef 定义类型。
Dos
输入时注意首字母大写 程序如下: main( ) { int j , k ; char leader[20]; for (j = 1; j <= 10; j++) {scanf ( "%s", leader); for (k = 0; k < 3; k++) if (strcmp (leader, s[k].name) == 0) s[k].count++; } printf ( "\n" ); 字符串对比函数 for ( j = 0; j < 3; j++ ) printf ("%5s:%d\n", s[j].name, s[j].count); }
2、结构体成员可以是指向结构体的指针类型。 、结构体成员可以是指向结构体的指针类型。 3、结构体类型与变量不同,只有变量占内存。 、结构体类型与变量不同 只有变量占内存 只有变量占内存。 4、len=sizeof (struct student) /* 、
求结构体占用字节数 */
Dos
3.结构体类型变量成员的引用 结构体类型变量ቤተ መጻሕፍቲ ባይዱ员的引用
以上定义了一个数组 stu,数 , 组有3个元素,元素类型为结 构体类型struct student 。 Dos
张选票,每次输入选票的候 例:从三个候选人选出一位领导,10张选票 每次输入选票的候 从三个候选人选出一位领导 张选票 选人的名字, 选人的名字, 最后输出每个人得票结果 结构体:person
结构体变量s1的元素在内存中的排列次序 序号 1 2 3 4 元素 值
num
99001
name
LiLin
sex
M
addr
BeiJing
Dos
#define FORMAT " NO.:%d\n Name:%s\n Sex:%c\n stscore[0]:%5.2f\n score[1]:%5.2f\n score[2]:%5.2f\n" main() { struct student { int num; char name[20]; char sex; float score[3]; } st={9901,"Lilin",'F',67,78.5,83}; printf(FORMAT,st.num,st.name,st.sex,st.score[0],st.score[1],st.score[2]); };
Dos
6. 指 向 结 构 体 类 型 数据 的 指 针
•结构体指针定义 结构体指针定义:
例如 : struct date { int month, day, year ;} today, *date_pt ;
结构体指针变量 结构体变量
•结构体指针指向结构体变量date_ pt •用结构指针引用结构成员 用结构指针引用 引用结构成员
for ( k = 0; k < 3; k++ )
是得票人名 相同 不同 得票数增1
for ( j = 0; j < 3; j++ ) 输出第 j 个人的姓名及总得票数
Li Li Wu Zhang Zhang Wu Li Wu Zhang Li
(7) 输出情况:
Li : 4 Zhang : 3 Fun : 3
printf("%o", &s1);
/*输出s1的首地址*/
Dos
4. 结构体变量的初始化
如:struct student { int num; 定义时初始化,不可单独 char name[20]; 整体赋值 char sex; char addr[20]; } s1={99001,"Li Lin",'M',"Bejing"}; main( ) {….}
Dos
name Li
s[0] count 0 13 3 2 4
s数组 s[1] name count Zhang 0 1 3 2
s[2] name Fun
count 10 3 2
(4)框图(N-S图) for ( j = 1; j <= 10; j++ )
输入一张选票,人名:leader
(5)执行过程及数据输 ) 入/ 输出
Dos
一、引入 1-简单数组: 特点:同种类数据元素的集合。 记录对象为某种简单数据,如:int a[7]; 用途:可以表达整数、实数或字符的 集合。 2-一种需求分析 用途:我们班共有107人,现做一个成绩表,每个人的信息包 括:学号、姓名、性别、数学成绩、英语成绩、C语言成绩 特点:记录对象为学生个人信息。每个学生个人信息包括六 个相关简单数据。即找到某个学号就可找到对应的5个其他信 Dos 息。如只用简单数组记录,很难清晰有效的表达这种关系。
相关文档
最新文档