结构一种数据类型.ppt

上传人:牧羊曲112 文档编号:5374910 上传时间:2023-07-01 格式:PPT 页数:28 大小:226KB
返回 下载 相关 举报
结构一种数据类型.ppt_第1页
第1页 / 共28页
结构一种数据类型.ppt_第2页
第2页 / 共28页
结构一种数据类型.ppt_第3页
第3页 / 共28页
结构一种数据类型.ppt_第4页
第4页 / 共28页
结构一种数据类型.ppt_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《结构一种数据类型.ppt》由会员分享,可在线阅读,更多相关《结构一种数据类型.ppt(28页珍藏版)》请在三一办公上搜索。

1、1,第9章 结 构,结构:一种数据类型,数据类型,基本类型构造类型指针类型空类型,整型实型字符型,数组结构联合枚举,单精度型双精度,C语言的数据类型,2,9.1 结构变量,一般一个事物有多个特征,要用几个数据共同描述例如 学生基本情况:学号、名字、性别、年龄、地址、成绩 日期:年、月、日、小时、分,事物的各种特征可以用若干变量和数组描述,但不能反映这些特征数据相互联系。为了将描述一个物体的各分量集合一起,C语言提供结构类型数据来描述。,定义类型 struct student_type int num;char name20;int score;定义变量 struct student_type

2、student;,对某学生定义一个结构变量structent,则可表示为strudent.numstrudent.namestrudent.score,可见结构类型数据是各种数据的集合,例如 每个学生有:学号num、名字name20、成绩score,变量名,成员名,3,结构类型的定义格式 struct 结构类型名 成员表列;,其中(1)结构类型名按标识符取名,(2)成员表列:类型标识符1 成员名1;类型标识符2 成员名2;类型标识符n 成员名n;,结构类型的定义,struct student int num;char nane20;int score;,例如 定义一个关于学生基本情况的结构,其

3、成员由学号、姓名、成绩组成:,注:结构的定义以分号结束。,定义struct student数据类型,又例 平面上的任意一点的结构,struct point float x;float y;,定义struct point数据类型,4,结构变量的定义和引用,1.结构变量的定义,(1)先定义结构类型再定义结构体变量 格式 struct 结构类型名 变量1,变量2,.,例如 struct student int num;char name20;int score;struct student student1,student2;,则内存分配,num name score,student1student

4、2,定义结构类型,定义结构变量,5,(2)定义结构类型时同时定义结构体变量格式 struct 结构类型名 成员表列变量表列;,例如 struct student int num;char name20;int score;student1,student2;,(3)直接定义结构变量 格式 struct 成员表列变量表列;,例如 struct int num;char name20;int score;student1,student2;,注(1)类型与变量是不同的概念 类型声明变量,(2)成员名可以与程序中的变量名相同,两者不代表同一对象,如 int num;struct student st

5、udent1,student2;num 与 student1.num、student2.num是不同量,6,2.结构类型变量的引用,形式 结构变量名.成员名 其中.是运算符,优先级为最高1级 表示访问某结构变量中的某成员,与简单变量和数组元素使用相同,stud1.num=201;strcpy(stud1.name,Zhang Hong);stud1.score=92;scanf(%d%s%d,如 struct int num;char name20;int score;stud1;,201,Zhang Hong,92,7,例9-2 在工资管理系统中,工资项目有编号、姓名、基本工资、奖金、保险、

6、实发工资。输入职工人数n,再输入每个职工的前5项信息,计算并输出实发工资。其中,实发工资=基本工资+奖金保险,#includestruct employee int num;char name20;float jbgz,jj,bx,sfgz;,void main(void)int i,n;struct employee e;printf(请输入职工人数n:);scanf(%d,请输入职工人数n:1请输入第1个职工的信息:102 Zhong 2200.5 800 85.2编号:102 姓名:Zhong 实发工资:2915.30,8,3.结构体类型变量初始化,与变量、数组的初始化相似,注 按顺序将

7、数据依次赋值于成员,数据类型与成员类型要一致,输出:201 Zhang Hong 92,struct studentint num;char name20;int score;struct student student1=201,Zhang Hong,92;main()printf(%d%s%dn,stud1.num,stud1.name,stud1.score);,例,9,4.整体赋值 结构名1=结构名2;如 student1=student2;注 赋值号=的左右的结构类型要一致,所有的成员一一对应赋值,例 将结构变量stud1的值赋给结构变量stud2。,#include main()s

8、tatic struct student int num;char name20;int score;stud1=201,Zhang Hong,92,stud2;stud2=stud1;printf(%d%s%d,stud2.num,stud2.name,stud2.score);,输出 201 Zhang Hong 92,stud2=stud1;等价与stud2.num=stud1.num;strcpy(stud2.name,stud1.name);stud2.score=stud1.score;,10,结构可以嵌套,即结构的分量又是一个结构的变量,结构的嵌套,例如 struct date

9、int month;int day;int year;struct student int num;char name20;int score;struct date birthday;student1,student2;,或 struct student int num;char name20;int score;struct int month;int day;int year;birthday;student1,student2;,2.引用时,当结构的分量名又是结构名时,继续使用.延伸,1.结构嵌套定义:用结构类型定义结构的分量,11,例 若学生的信息构成如下图,请为其定义合适的数据类型

10、,struct addresschar city20;char street20;int number;struct studentint num;char name20;struct address addr;int score;,void main()struct student stud1=201,Zhang Hong,Hangzhou,QS,11,92;printf(%dn,stud1.num);printf(%sn,stud1.name);printf(%sn,);printf(%sn,);printf(%dn,);printf(%dn,stud1.score);,输出:201Zha

11、ng HongHangzhouQS1192,12,结构变量作为函数的参数,形参为结构变量,实参要求同类型的结构变量。虚实结合:将实参结构变量的成员一一对应赋值于形参的结构变量,例9-3 改写例9-2。,#includestruct employee int num;char name20;float jbgz,jj,bx,sfgz;,float count_sfgz(struct employee m)return m.jbgz+m.jj-m.bx;void main(void)int i,n;struct employee e;printf(请输入职工人数n:);scanf(%d,虚实结合:

12、e.numm.nume.namem.namee.jbgzm.jbgze.jjm.jje.sfgzm.sfgz,13,9.2 结构数组,结构数组用结构类型定义的数组,例如 struct student int num;char name20;int score;struct student stud10;,数组元素 studi是一个数组元素(结构体变量),引用为 studi.num studi.score,或 struct int num;char name20;int score;stud10;,结构数组的定义和引用,14,结构数组的初始化,例 struct student int num;c

13、har name20;int score;struct student stud2=201,Zhang Hong,92,202,Wang Fang,80;或struct student stud2=201,Zhang Hong,92,202,Wang Fang,80;,每个.依次赋值于结构体数组元素,stud0.num=201;stud0.name=Zhang Hong;stud0.score=92;stud1.num=202;stud1.name=Wang Fang;stud1.score=80;,15,例9-4 建立有10个学生的结构记录,输出平均分数,并从高到低输出成绩。,#includ

14、e struct student int num;char name20;int score;struct student stud10,temp;void main()int i,sum=0;for(i=0;i10;i+)scanf(%d%s%d,for(i=0;i=0;i-)printf(%d%s%d,16,9.4 结构指针结构变量指针结构变量的地址指向结构变量的指针指针变量的值为结构变量的地址,1.定义结构指针变量格式 struct 结构体类型*结构体指针变量名;,&stud1ptr,例 struct student int num;char name20;int score;stud1

15、=201,Zhang Hong,92;struct student*ptr;ptr=,17,2.结构指针对结构分量访问格式(*指针名).分量名 或 指针名-分量名,如(*ptr).num(*ptr).name ptr-num ptr-name,#include#include main()struct student int num;char name20;int score;struct student stud1,*p;,p=,例,&stud1p,18,例 对于以下的变量定义,表达式_不符合C语言语法。struct node int len;char*pk;x=2,right,*p=A、p

16、-pk B、*x.pk C、*p-pk D、*p.pk,答案 D,注(*指针名).分量名中的括号是不可少的,分量运算符.的优先级高于*的优先级 如(*ptr).name 不能写成*ptr.name 而是*(ptr.name),不能用指向结构的指针直接指向结构体成员,如 struct student int num;char name20;int score;,struct student stud1,*p;int*q;p=允许,结构变量虽然存储多数据,但结构的变量名仍不是地址值,取地址必须&结构体变量名,19,3.指向结构数组的指针指向结构数组的指针指针变量的值为结构数组元素的地址,例 str

17、uct student int num;char name20;char sex;int age;struct student stud3,*p;p=stud;,stud,p&stud0,p+1&stud1,p+2&stud2,注 p+i 是作地址运算 p的地址值+sizeof(struct student)*i,20,#include#include void main()struct student int num;char name20;int score;struct student stud10,*p;int i,sum=0;for(p=stud;pnum,p-name,例 用结构指

18、针求10个学生的平均分数。,stu,p&stud0,p+1&stud1,p+2&stud2,21,4.结构指针作为函数参数,形参是结构数组或结构指针,实参应是同类型的结构数组名或结构指针。虚实结合方式:地址传递,例9-5 输入10个学生的学号、姓名和成绩,输出学生的成绩等级和不及格人数。每个学生的记录包括学号、姓名、成绩和等级要求定义和调用函数set_grade根据学生成绩设置等级,并统计不及格人数等级设置:A:85100;B:7084;C:6069;D:059,22,#define N 10struct student int num;char name20;int score;char g

19、rade;void main()struct student stuN,*ptr;ptr=stu;/*输入 略*/count=set_grade(ptr);,int set_grade(struct student*p)int i,n=0;for(i=0;iscore=85)p-grade=A;else if(p-score=70)p-grade=B;else if(p-score=60)p-grade=C;else p-grade=D;n+;return n;,23,例9-1 构建简单的手机通讯录联系人的基本信息:姓名、年龄和联系电话最多容纳50名联系人的信息 具有新建和查询功能,#incl

20、ude#include/*手机通讯录结构定义*/struct friends_list char name10;/*姓名*/int age;/*年龄*/char telephone13;/*联系电话*/;int count=0;/*全局变量记录当前联系人总数*/,24,/*新建联系人*/void new_friend(struct friends_list friends)struct friends_list f;if(count=50)printf(通讯录已满!n);return;printf(请输入新联系人的姓名:);scanf(%s,f.name);printf(请输入新联系人的年龄:

21、);scanf(%d,25,/*查询联系人*/void search_friend(struct friends_list friends,char*name)int i,flag=0;if(count=0)printf(通讯录是空的!n);return;for(i=0;icount;i+)if(strcmp(name,friendsi.name)=0)/*找到联系人*/flag=1;break;if(flag)printf(姓名:%st,friendsi.name);printf(年龄:%dt,friendsi.age);printf(电话:%sn,friendsi.telephone);else printf(无此联系人!);,26,void main(void)int choice;char name10;struct friends_list friends50;/*包含50个人的通讯录*/do printf(手机通讯录功能选项:1:新建 2:查询 0:退出n);printf(请选择功能:);scanf(%d,27,作业:第9章作业实验:第10次实验,28,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号