第9用户自己建立数据类型课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《第9用户自己建立数据类型课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 用户 自己 建立 数据类型 课件
- 资源描述:
-
1、9.1 定义和使用结构体变量定义和使用结构体变量9.2 使用结构体数组使用结构体数组9.3 结构体指针结构体指针9.4 用指针处理链表用指针处理链表9.5 共用体类型共用体类型9.6 使用枚举类型使用枚举类型9.7 用用typedef声明新类型名声明新类型名9.1.1 自己建立结构体类型自己建立结构体类型9.1.2 定义结构体类型变量定义结构体类型变量9.1.3 结构体变量的初始化和引用结构体变量的初始化和引用用户自己建立由不同类型数据组成的组用户自己建立由不同类型数据组成的组合型的数据结构,它称为合型的数据结构,它称为结构体结构体例如,一个学生的学号、姓名、性别、例如,一个学生的学号、姓名、
2、性别、年龄、成绩、家庭地址等项,是属于同年龄、成绩、家庭地址等项,是属于同一个学生的一个学生的,因此,因此组成一个组合数据,组成一个组合数据,如如student_1的变量,反映它们之间的的变量,反映它们之间的内在联系内在联系struct Student int num;char name20;char sex;int age;float score;char addr30;u由程序设计者指定了由程序设计者指定了一个结构体类型一个结构体类型struct Studentu它包括它包括num,name,sex,age,score,addr等不同类等不同类型的成员型的成员声明一个结构体类型的一般形式为
3、:声明一个结构体类型的一般形式为:struct 结构体名结构体名 成员表列成员表列 ;类型名类型名 成员名成员名;说明:说明:(1)结构体类型并非只有一种,而是可以设结构体类型并非只有一种,而是可以设计出许多种结构体类型,例如计出许多种结构体类型,例如struct Teacherstruct Workerstruct Date等结构体类型等结构体类型u各自包含不同的成员各自包含不同的成员说明:说明:(2)成员可以属于另一个结构体类型。成员可以属于另一个结构体类型。struct Date int month;int day;int year;struct Stu int num;char nam
4、e20;char sex;int age;struct Date birthday;char addr30;说明:说明:(2)成员可以属于另一个结构体类型。成员可以属于另一个结构体类型。num name sex agebirthdayaddrmonth day year前面只是建立了一个结构体类型,它相前面只是建立了一个结构体类型,它相当于一个模型,并没有定义变量,其中当于一个模型,并没有定义变量,其中并无具体数据,系统对之也不分配存储并无具体数据,系统对之也不分配存储单元。单元。相当于设计好了图纸,但并未建成具体相当于设计好了图纸,但并未建成具体的房屋。为了能在程序中使用结构体类的房屋。为了
5、能在程序中使用结构体类型的数据,应当定义结构体类型的变量型的数据,应当定义结构体类型的变量,并在其中存放具体的数据。,并在其中存放具体的数据。1.先声明结构体类型,再定义该类型变量先声明结构体类型,再定义该类型变量声明结构体类型声明结构体类型struct Student,可可以用它来定义变量以用它来定义变量 struct Student student1,student2;结构体类型名结构体类型名结构体变量名结构体变量名 1.先声明结构体类型,再定义该类型变量先声明结构体类型,再定义该类型变量声明结构体类型声明结构体类型struct Student,可可以用它来定义变量以用它来定义变量 str
6、uct Student student1,student2;10001 Zhang Xin M 19 90.5 Shanghaistudent110002Wang LiF 2098Beijingstudent22.在声明类型的同时定义变量在声明类型的同时定义变量struct Student int num;char name20;char sex;int age;float score;char addr30;student1,student2;3.不指定类型名而直接定义结构体类型变量不指定类型名而直接定义结构体类型变量其一般形式为其一般形式为:struct 成员表列成员表列 变量名表列变量名
7、表列;指定了一个无名的结构体类型指定了一个无名的结构体类型。(1)结构体类型与结构体变量是不同的概结构体类型与结构体变量是不同的概念,不要混同。只能对变量赋值、存取念,不要混同。只能对变量赋值、存取或运算,而不能对一个类型赋值、存取或运算,而不能对一个类型赋值、存取或运算。在编译时,对类型是不分配空或运算。在编译时,对类型是不分配空间的,只对变量分配空间。间的,只对变量分配空间。(2)结构体类型中的成员名可以与程序中的结构体类型中的成员名可以与程序中的变量名相同变量名相同,但二者不代表同一对象。但二者不代表同一对象。(3)对结构体变量中的成员(即对结构体变量中的成员(即“域域”),),可以单独
8、使用,它的作用与地位相当于普可以单独使用,它的作用与地位相当于普通变量。通变量。例例9.1 把一个学生的信息把一个学生的信息(包括学号、姓名包括学号、姓名、性别、住址、性别、住址)放在一个结构体变量中,然放在一个结构体变量中,然后输出这个学生的信息。后输出这个学生的信息。解题思路:解题思路:u自己建立一个结构体类型,包括有关学生信息自己建立一个结构体类型,包括有关学生信息的各成员的各成员u用它定义结构体变量,同时赋以初值用它定义结构体变量,同时赋以初值u输出该结构体变量的各成员输出该结构体变量的各成员#include int main()struct Student long int num;
9、char name20;char sex;char addr20;a=10101,“Li Lin”,M,“123 Beijing Road”;printf(NO.:%ldnname:%sn sex:%cnaddress:%sn,a.num,a.name,a.sex,a.addr);return 0;#include int main()struct Student long int num;char name20;char sex;char addr20;a=10101,“Li Lin”,M,“123 Beijing Road”;printf(NO.:%ldnname:%sn sex:%cna
10、ddress:%sn,a.num,a.name,a.sex,a.addr);return 0;#include int main()struct Student long int num;char name20;char sex;char addr20;a=10101,“Li Lin”,M,“123 Beijing Road”;a.num=10010;对对printf(“%sn”,a);不对不对#include int main()struct Student long int num;char name20;char sex;char addr20;a=10101,“Li Lin”,M,“1
11、23 Beijing Road”;b=a;对对struct Student b;b.num+;对对#include int main()struct Student long int num;char name20;char sex;char addr20;a=10101,“Li Lin”,M,“123 Beijing Road”;scanf(%ld,&a.num);对对printf(%o,&a);对对scanf(“%ld,%s,%c,%sn”,&a);错错#include int main()struct Date int month;int day;int year;struct Stu
12、int num;char name20;char sex;int age;struct Date birthday;char addr30;a,b;a.birthday.month=12;对对a.age=10;b.age=9;对对sum=a.age+b.age;对对 例例9.2 输入两个学生的学号、姓名和成绩输入两个学生的学号、姓名和成绩,输出成绩较高学生的学号、姓名和成绩,输出成绩较高学生的学号、姓名和成绩解题思路:解题思路:(1)定义两个结构相同的结构体变量定义两个结构相同的结构体变量student1和和student2;(2)分别输入两个学生的学号、姓名和成绩;分别输入两个学生的学号、姓
13、名和成绩;(3)比较两个学生的成绩,如果学生比较两个学生的成绩,如果学生1的成绩高的成绩高于学生于学生2,就输出学生,就输出学生1的全部信息,如果学的全部信息,如果学生生2的成绩高于学生的成绩高于学生1,就输出学生,就输出学生2的全部信的全部信息。如果二者相等,输出息。如果二者相等,输出2个学生的全部信息个学生的全部信息#include int main()struct Student int num;char name20;float score;student1,student2;scanf(%d%s%f,&student1.num,student1.name,&student1.scor
14、e);scanf(“%d%s%f”,&student2.num,student2.name,&student2.score);不能加不能加&printf(The higher score is:n);if(student1.scorestudent2.score)printf(%d%s%6.2fn,student1.num,student1.name,student1.score);else if(student1.scorestudent2.score)printf(%d%s%6.2fn,student2.num,student2.name,student2.score);else prin
15、tf(%d%s%6.2fn,student1.num,student1.name,student1.score);printf(%d%s%6.2fn,student2.num,student2.name,student2.score);return 0;9.2.1定义结构体数组定义结构体数组9.2.2 结构体数组的应用举例结构体数组的应用举例 例例9.3 有有3个候选人,每个选民只能个候选人,每个选民只能投票选一人,要求编一个统计选票的投票选一人,要求编一个统计选票的程序,先后输入被选人的名字,最后程序,先后输入被选人的名字,最后输出各人得票结果。输出各人得票结果。解题思路:解题思路:u设一个
16、结构体数组,数组中包含设一个结构体数组,数组中包含3个元素个元素u每个元素中的信息应包括候选人的姓名每个元素中的信息应包括候选人的姓名(字符型字符型)和得票数和得票数(整型整型)u输入被选人的姓名,然后与数组元素中的输入被选人的姓名,然后与数组元素中的“姓名姓名”成员比较,如果相同,就给这个成员比较,如果相同,就给这个元素中的元素中的“得票数得票数”成员的值加成员的值加1u输出所有元素的信息输出所有元素的信息#include#include struct Person char name20;int count;leader3=“Li”,0,“Zhang”,0,“Sun”,0;全局的结构体数组
17、全局的结构体数组name countleader0Li0Zhang0Sun0int main()int i,j;char leader_name20;for(i=1;i=10;i+)scanf(“%s”,leader_name);for(j=0;j3;j+)if(strcmp(leader_name,leaderj.name)=0)leaderj.count+;for(i=0;i3;i+)printf(%5s:%dn“,leaderi.name,leaderi.count);return 0;leaderj.count=leaderj.count+1;int main()int i,j;cha
18、r leader_name20;for(i=1;i=10;i+)scanf(“%s”,leader_name);for(j=0;j3;j+)if(strcmp(leader_name,leaderj.name)=0)leaderj.count+;for(i=0;i3;i+)printf(%5s:%dn“,leaderi.name,leaderi.count);return 0;说明:说明:(1)定义结构体数组一般形式是定义结构体数组一般形式是 struct 结构体名结构体名 成员表列成员表列 数组名数组名数组长度数组长度;先声明一个结构体类型,然后再用此类型定先声明一个结构体类型,然后再用此类
19、型定义结构体数组:义结构体数组:结构体类型结构体类型 数组名数组名数组长度数组长度;如:如:struct Person leader3;说明:说明:(2)对结构体数组初始化的形式是在定义数对结构体数组初始化的形式是在定义数组的后面加上:组的后面加上:初值表列初值表列;如:如:struct Person leader3=Li,0,Zhang,0,Fun,0;例例9.4 有有n个学生的信息个学生的信息(包括学号、包括学号、姓名、成绩姓名、成绩),要求按照成绩的高低顺,要求按照成绩的高低顺序输出各学生的信息。序输出各学生的信息。解题思路:用结构体数组存放解题思路:用结构体数组存放n个学生个学生信息,
20、采用选择法对各元素进行排序信息,采用选择法对各元素进行排序(进行比较的是各元素中的成绩进行比较的是各元素中的成绩)。#include struct Student int num;char name20;float score;int main()struct Student stu5=10101,Zhang,78 ,10103,Wang,98.5,10106,Li,86 ,10108,“Ling”,73.5,10110,“Fun”,100 ;struct Student temp;const int n=5;int i,j,k;常变量常变量若人数变为若人数变为3030#include str
21、uct Student int num;char name20;float score;int main()struct Student stu5=10101,Zhang,78 ,10103,Wang,98.5,10106,Li,86 ,10108,“Ling”,73.5,10110,“Fun”,100 ;struct Student temp;const int n=5;int i,j,k;#define N 5注意注意temp的类型的类型 printf(The order is:n);for(i=0;in-1;i+)k=i;for(j=i+1;jstuk.score)k=j;temp=st
22、uk;stuk=stui;stui=temp;for(i=0;in;i+)printf(%6d%8s%6.2fn,stui.num,stui.name,stui.score);printf(n);return 0;写法上与普通变量一致写法上与普通变量一致9.3.1 指向结构体变量的指针指向结构体变量的指针9.3.2 指向结构体数组的指针指向结构体数组的指针9.3.3 用结构体变量和结构体变量的指用结构体变量和结构体变量的指针作函数参数针作函数参数指向结构体对象的指针变量既可以指向指向结构体对象的指针变量既可以指向结构体变量,也可以用来指向结构体数结构体变量,也可以用来指向结构体数组中的元素。组
23、中的元素。指针变量的基类型必须与结构体变量的指针变量的基类型必须与结构体变量的类型相同。例如:类型相同。例如:struct Student*pt;例例9.5 通过指向结构体变量的指针变通过指向结构体变量的指针变量输出结构体变量中成员的信息。量输出结构体变量中成员的信息。解题思路:在已有的基础上,本题要解解题思路:在已有的基础上,本题要解决两个问题:决两个问题:u怎样对结构体变量成员赋值;怎样对结构体变量成员赋值;u怎样通过指向结构体变量的指针访问结构怎样通过指向结构体变量的指针访问结构体变量中成员。体变量中成员。#include#include int main()struct Student
24、 long num;char name20;char sex;float score;struct Student stu_1;struct Student*p;p=&stu_1;stu_1.num=10101;strcpy(stu_1.name,“Li Lin”);stu_1.sex=M;stu_1.score=89.5;printf(No.:%ldn”,stu_1.num);printf(name:%sn,stu_1.name);printf(sex:%cn”,stu_1.sex);printf(”score:%5.1fn”,stu_1.score);return 0;stu_110101
25、Li LinM89.5p struct Student stu_1;struct Student*p;p=&stu_1;stu_1.num=10101;strcpy(stu_1.name,“Li Lin”);stu_1.sex=M;stu_1.score=89.5;printf(No.:%ldn”,stu_1.num);printf(name:%sn,stu_1.name);printf(sex:%cn”,stu_1.sex);printf(”score:%5.1fn”,stu_1.score);return 0;stu_110101Li LinM89.5p(*p).num(*p).name(
展开阅读全文