《高级语言程序设计教学课件》第9章.ppt_第1页
《高级语言程序设计教学课件》第9章.ppt_第2页
《高级语言程序设计教学课件》第9章.ppt_第3页
《高级语言程序设计教学课件》第9章.ppt_第4页
《高级语言程序设计教学课件》第9章.ppt_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1,第九章 结构体,2,学习目标,结构体的概念 结构体类型和结构体变量的差别 运算符“.”和“-” 结构体数组、结构体指针,3,9.1 结构体,问题:我们要处理一个学生的信息,包括: 学号、姓名、性别、年龄、成绩、地址 按照以往定义变量的方式,我们可以这样定义:,struct student int num; char name20; char sex; int age; float score; char addr50; ;,结构体,4,结构类型,【例】平面上点(x,y)的表示,struct point float x; float y; ;,关键字,结构体名,结构体成员,5,定义一个结构体的一般形式为: 注意: 1.结构体类型不分配空间,是一种数据类型; 2.结构体成员的类型可以不同,struct 结构名 数据类型 成员1; 数据类型 成员n; ;,6,struct student int num; char name20; char sex; int age; float score; char addr50; ;,结构体类型定义描述结构 的组织形式,不分配内存,7,【例】定义点结构变量并保存平面点(4,3),struct point float x; float y; ; struct point point1; point1.x = 4; point1.y = 3;,8,定义结构体变量的三种形式,形式1:先定义类型,再定义变量,struct 结构名 数据类型 成员1; 数据类型 成员n; ; struct 结构名 结构变量1, 结构变量2;,struct point float x; float y; ; struct point point1, point2;,9,形式2:在定义类型时,定义变量,struct 结构名 数据类型 成员1; 数据类型 成员 n; 结构变量1, 结构变量2;,struct point float x; float y; point1, point2;,10,形式3:无类型名的变量定义,注意 第三种定义形式省略了结构名,在此定义语句后面无法再定义这个类型的其它结构变量,struct 数据类型 成员1; 数据类型 成员 n; 结构变量1, 结构变量2;,struct float x; float y; point1, point2;,结构名,11,说明 结构体类型与结构体变量概念不同 类型:不分配内存 变量:分配内存 类型:不能赋值、存取、运算 变量:可以 结构体可嵌套 结构体成员名与程序中变量名可同,不会混淆,例 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 date int month; int day; int year; birthday; stu;,例 main() struct student int num; char name20; stu; int num; num = 0; stu.num = 1; ,12,【例9-1】结构变量初始化,#include main() struct student long int num; char name20; char addr20; a = 89031, “Li Lin“, “123 Beijing Road“; printf(“No.:%ldnname:%snaddress:%sn“, a.num, , a.addr); ,初值表,13,初始化的一般形式,在定义结构变量的时候对其进行初始化; 初始化表由 括起; 逗号隔开的数据对应赋值给结构变量的每个成员,14,结构体变量的引用,引用规则 结构体变量不能整体进行输入、输出、赋值、运算 引用方式: 结构体变量名.成员名 可以将一个结构体变量赋值给另一个结构体变量 结构体嵌套时逐级引用,struct student int num; char name20; struct date int month; int day; int year; birthday; stu1, stu2; stu1.birthday.month = 12;,15,【例】成员变量引用,struct student int num; char name20; char sex; int age; float score; char addr30; stu1, stu2;,stu1=101,“Wan Lin”,M,19,87.5,“DaLian”; printf(“%d,%s,%c,%d,%f,%sn”, stu1); if( stu1=stu2 ) = “WangLin”;,stu1.num = 101; strcpy(, “Wang Lin”); stu1.sex = M; Stu1.age = 19; stu1.score = 87.5; strcpy(stu1.addr, “DaLian”; stu2 = stu1;,16,【例】分别定义表示直线和矩形的结构体,struct point float x; float y; ; struct line struct point startp; struct point endp; ;,struct rect struct point pt1; struct point pt2; struct point pt3; struct point pt4; ;,17,常见编程错误,错例1,struct stu int no; char name10; float score; = 1, “wangbin”, 98;,错误分析:struct stu是结构类型,不占内存空间,不能对其赋值。,18,错例2,struct stu int no; char name10; float score; stu s;,错误分析:1)结构体类型定义之后“”后必须加“;” 2)结构体类型名为struct stu,不是stu; 申明变量应为:struct stu s;,19,错例3,struct stu int no; char name10; float score; ; struct stu s; scanf(“%d%s%f”,s);,错误分析:不能整体读入结构体变量值, 应为 scanf(“%d%s%f”,20,错例4,struct stu int no; char name10; float score; ; struct stu s, *p; scanf(“%d%s%f”, ,错误分析:1) p是结构指针变量,使用之前应赋初值; 2) p访问成员的方式应为p-no, p-name, p-score; 3) p-name为数组名,读入一个字符串时,前面不能加“&”。,21,9.2 结构变量作为函数参数,【例9-2】 平面上两点之间的距离,(x1,y1),(x2,y2),22,#include #include struct point float x; float y; ; float GetDis(struct point, struct point);,23,main() struct point pt1, pt2; printf(“Please input pt1:“); scanf(“%f%f“, ,24,定义计算两点之间距离的函数,float GetDis(struct point p1, struct point p2) return sqrt(p2.x-p1.x) * (p2.x-p1.x) + (p2.y-p1.y) * (p2.y-p1.y); ,25,【例9-3】判断点是否在矩形内 应包含以下功能: 构造一个点; 构造一个矩形; 判断一个点是否在矩形内。 每一个功能都用函数来实现,26,#include #include struct point float x; float y; ; struct rect struct point pt1; struct point pt2; struct point pt3; struct point pt4; ; struct point makepoint(float x, float y); void MakeRect(struct point pt1, struct point pt2, struct point pt3, struct point pt4, struct rect *screen); int PtInRect(struct point p, struct rect r);,27,main() struct point pt1 = MakePoint(0, 0); struct point pt2 = MakePoint(50, 0); struct point pt3 = MakePoint(50, 10); struct point pt4 = MakePoint(0, 10); struct rect screen; MakeRect( pt1, pt2, pt3, pt4, ,运行结果 The middle point of the screen is (25.0,5.0) The middle point is in screen! Press any key to continue,28,struct point MakePoint(float x, float y) struct point temp; temp.x = x; temp.y = y; return temp; void MakeRect(struct point pt1, struct point pt2, struct point pt3, struct point pt4, struct rect *screen) (*screen).pt1 = pt1; (*screen).pt2 = pt2; (*screen).pt3 = pt3; (*screen).pt4 = pt4; ,29,int PtInRect(struct point p, struct rect r) return p.x = r.pt1.x ,30,9.3 结构体数组,结构体数组的定义 三种形式:,形式一: struct student int num; char name20; char sex; int age; ; struct student stu2;,形式二: struct student int num; char name20; char sex; int age; stu2;,形式三: struct int num; char name20; char sex; int age; stu2;,31,结构体数组初始化 顺序初始化 分行初始化,结构体数组引用 引用方式: 结构体数组名下标.成员名,顺序初始化: struct student int num; char name20; char sex; int age; ; struct student stu3=100,“Wang Lin”,M,20, 101,“Li Gang”,M,19, 110,“Liu Yan”,F,19;,32,【例9-7】计算学生的平均成绩和不及格的人数,#include #include struct stu int num; char *name; char sex; float score; boy5= 101,“Li ping“,M,45, 102,“Zhang ping“,M,62.5, 103,“He fang“,F,92.5, 104,“Cheng ling“,F,87, 105,“Wang ming“,M,58,;,33,main() int i,c=0; /循环控制变量、不及格人数 float ave,s=0; /平均成绩、总成绩 for(i=0;i5;i+) s += boyi.score; if( boyi.score60 ) c+=1; printf(“s=%fn“, s); ave = s/5; printf(“average=%fncount=%dn“, ave, c); ,运行结果: s=345.0 average=69.0 count=2 Press any key to continue,34,【例9-5】 编写候选人得票统计程序。设有3个候选人,10张选票,每次输入一个得票的候选人名字,统计每个候选人票数并输出,#include #include struct person char name20; int count; leader3 = “Li“,0, “Zhang“,0, “Wang“,0;,35,main() char name20; printf(“input 10 names:n“); for(int i=1; i=10; i+) scanf(“%s“,name); for(int j=0; j3; j+) if(strcmp(name,) = 0) leaderj.count+; printf(“result:n“); for(i=0; i3; i+) printf(“%5s:%dn“,,leaderi.count); ,运行结果: input 10 names: Li Li Li Zhang Zhang Zhang Wang Li Li Li result: Li:6 Zhang:3 Wang:1 Press any key to continue,36,9.4 结构体和指针,指向结构体变量的指针 定义形式:struct 结构体名 * 结构体指针名; 例: struct student *p; 使用结构体指针变量引用成员形式 结构指针使用前必须初始化,存放结构体变量在内存的起始地址,(*结构体指针名).成员名结构体指针名-成员名结构体变量名.成员名,struct student stu1; struct student *p = ,37,【例9-6】设图书信息包括:书号、书名、售空标志、价格。写程序,输出某本图书信息。,#include #include struct book long num; /书号 char name20; /书名 char marking; /售空标志 float price; /价格 ,38,main() struct book boo_1, *p; p = ,运行结果: 书号:89101 书名:math 售空:T 书价:30.000000 书号:89101 书名:math 售空:T 书价:30.000000 书号:89101 书名:math 售空:T 书价:30.000000 Press any key to continue,39,指向结构数组的指针,【例9-7】 设学生信息包括:学号、姓名、性别和成绩。写程序,初始化五个学生信息,然后将其输出,40,struc

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论