大学C语言第9章结构体类型.ppt
《大学C语言第9章结构体类型.ppt》由会员分享,可在线阅读,更多相关《大学C语言第9章结构体类型.ppt(148页珍藏版)》请在三一办公上搜索。
1、第9章 用户自己建立数据类型,9.1 定义和使用结构体变量9.2 使用结构体数组9.3 结构体指针9.4 用指针处理链表9.5 共用体类型9.6 使用枚举类型9.7 用typedef声明新类型名,P293,9.1 定义和使用结构体变量,9.1.1 自己建立结构体类型9.1.2 定义结构体类型变量9.1.3 结构体变量的初始化和引用,P293,9.1.1 自己建立结构体类型,用户自己建立由不同类型数据组成的组合型的数据结构,它称为结构体例如,一个学生的学号、姓名、性别、年龄、成绩、家庭地址等项,是属于同一个学生的,因此组成一个组合数据,如student_1的变量,反映它们之间的内在联系,P293
2、,9.1.1 自己建立结构体类型,struct Student/定义类型 int num;char name20;char sex;int age;float score;char addr30;struct Student a,b;/定义变量,由程序设计者指定了一个结构体类型struct Student它包括num,name,sex,age,score,addr等不同类型的成员,类型名,类似int,P293下,9.1.1 自己建立结构体类型,声明一个结构体类型的一般形式为:struct 结构体名 成员表列;,类型名 成员名;,注意:结构体类型名,前面一定有struct例如:struct St
3、udent,习惯上,首字母大写,P294黑体字,9.1.1 自己建立结构体类型,说明:(1)结构体类型并非只有一种,而是可以设计出许多种结构体类型,例如:struct Teacherstruct Workerstruct Datestruct Student1等结构体类型各自包含不同的成员,9.1.2 定义结构体类型变量,前面只是建立了一个结构体类型,它相当于一个模型,并没有定义变量,其中并无具体数据,系统对之也不分配存储单元。相当于设计好了图纸,但并未建成具体的房屋。为了能在程序中使用结构体类型的数据,应当定义结构体类型的变量,并在其中存放具体的数据。,P295,9.1.2 定义变量,方式1
4、.先声明结构体类型,再定义该类型变量声明结构体类型struct Student,可以用它来定义变量 struct Student student1,student2;,类型名,变量名,P295,9.1.2 定义结构体类型变量,方式1.先声明结构体类型,再定义该类型变量,student1,student2,P295,int num;char name20;sex;age;score;addr30;,9.1.2 定义结构体类型变量,方式2.在声明类型的同时定义变量struct Student int num;char name20;char sex;int age;float score;char
5、 addr30;student1,student2;,P295,定义类型,定义变量,类型名,9.1.2 定义结构体类型变量,方式3.不指定类型名而直接定义结构体类型变量用得不多 P296中下其一般形式为:struct 成员表列 变量名表列;不能再用此结构类型,定义其它变量。,P296,9.1.2 定义结构体类型变量,(1)结构体类型与结构体变量是不同的概念,不要混同。只能对变量赋值、存取或运算,而不能对一个类型赋值、存取或运算。在编译时,对类型是不分配空间的,只对变量分配空间。参考:人类(类型),周杰伦(变量),P296下“说明”,9.1.2 定义结构体类型变量,(2)结构体类型中的成员名可以
6、与程序中的变量名相同,但二者不代表同一对象。(3)对结构体变量中的成员(即“域”),可以单独使用,它的作用与地位相当于普通变量。例:struct Student s1,s2,s3;/定义 strcpy(s1.name,”周杰伦”);/赋值,P296下“说明”,例9.1 把一个学生的信息(包括学号、姓名、性别、住址)放在一个结构体变量中,然后输出这个学生的信息。解题思路:自己建立一个结构体类型,包括有关学生信息的各成员用它定义结构体变量,同时赋以初值输出该结构体变量的各成员,9.1.3 结构体变量的初始化和引用,P297,#include int main()struct Student lon
7、g int num;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;,P297,#include int main()struct Student long int num;char name20;char sex;char addr20;a=10101,“Li Lin”,M,“123 Beijing Road”;printf(NO.:%ldnn
8、ame:%sn sex:%cnaddress:%sn,a.num,a.name,a.sex,a.addr);return 0;,给成员赋初值,P298,#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);不对,不能使用整个变量,只能使用单个成员,P297,#include int main()struct Student long int num;ch
9、ar name20;char sex;char addr20;a=10101,“Li Lin”,M,“123 Beijing Road”;,b=a;对,struct Student b;,b.num+;对,注意:同结构类型变量可以直接赋值,例9.2 输入两个学生的学号、姓名和成绩,输出成绩较高学生的学号、姓名和成绩解题思路:(1)定义两个结构相同的结构体变量student1和student2;(2)分别输入两个学生的学号、姓名和成绩;(3)比较两个学生的成绩,如果学生1的成绩高于学生2,就输出学生1的全部信息,如果学生2的成绩高于学生1,就输出学生2的全部信息。如果二者相等,输出2个学生的全部
10、信息,P299,讲,#include int main()struct Student int num;char name20;float score;student1,student2;scanf(%d%s%f,不能加&,P297,因为name是数组名,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%
11、6.2fn,student2.num,student2.name,student2.score);else printf(%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 使用结构体数组,9.2.1定义结构体数组9.2.2 结构体数组的应用举例,P300,9.2.1定义结构体数组,例9.3 有3个候选人,每个选民只能投票选一人,要求编一个统计选票的程序,先后输入被选人的名字,最后输出各人得
12、票结果。,P300,9.2.1定义结构体数组,解题思路:设一个结构体数组,数组中包含3个元素每个元素中的信息应包括候选人的姓名(字符型)和得票数(整型)输入被选人的姓名,然后与数组元素中的“姓名”成员比较,如果相同,就给这个元素中的“得票数”成员的值加1输出所有元素的信息,P300,#include#include struct Person char name20;int count;leader3=“Li”,0,“Zhang”,0,“Sun”,0;,全局的结构体数组,name,count,leader0,Li,0,Zhang,0,Sun,0,P300,int main()int i,j;c
13、har 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;,P300,int main()int i,j;char leader_name20;for(i=1;i=10;i+)scanf(“%s”,leader_
14、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 结构体名 成员表列 数组名数组长度;先声明一个结构体类型,然后再用此类型定义结构体数组:结构体类型 数组名数组长度;如:struct Person leader3;,P300,说明:(2)对结构体数组初始化的形式是在定义数组的后面加上:初值表列;如:struct P
15、erson leader3=Li,0,Zhang,0,Fun,0;,P300下,课堂练习参考P302程序,已有如下结构类型定义:学生(学号,姓名,得分)struct Student int num;char name20;float score;1.写主函数,定义该类型数组a有三个元素,按参考程序赋值前三个元素初值;2.重新输入三人成绩,输入前先提示学号与姓名;3.把第二、三个学生数据交换;3.求平均成绩;5.输出平均成绩。,9.2.2 结构体数组的应用举例,例9.4 有n个学生的信息(包括学号、姓名、成绩),要求按照成绩的高低顺序输出各学生的信息。解题思路:用结构体数组存放n个学生信息,采用
16、选择法对各元素进行排序(进行比较的是各元素中的成绩)。,P301,#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;,常变量,若人数变为30,30,P301,#include struct Student int
17、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的类型,P301,printf(The order is:n);for(i=0;istuk.score)k=j;temp=stuk;stuk=stui;stui=temp;for(i=0;in;i+)pr
18、intf(%6d%8s%6.2fn,stui.num,stui.name,stui.score);printf(n);return 0;,写法上与普通变量一致,作业、复习、预习,作业本写主函数,声明如下结构类型:struct Productchar code50;float price;定义该类型数组prod四个元素;输入4个产品的数据;用选择法按价格升序排序;依序输出4个产品的数据。主函数:定义int数组a有10个元素,输入10个数,用sort函数对a升序排序,输出这10个数。sort函数:参数为int数组arr和数组长度n,用选择法作升序排序。复习:结构类型的定义、结构变量的初始化与引用预
19、习:文件的输入与输出,9.3 结构体指针,9.3.1 指向结构体变量的指针9.3.2 指向结构体数组的指针9.3.3 用结构体变量和结构体变量的指针作函数参数,P303,9.3.1 指向结构体变量的指针,指向结构体对象的指针变量既可以指向结构体变量,也可以用来指向结构体数组中的元素。指针变量的基类型必须与结构体变量的类型相同。例如:struct Student*pt;,P303,9.3.1 指向结构体变量的指针,例9.5 通过指向结构体变量的指针变量输出结构体变量中成员的信息。解题思路:在已有的基础上,本题要解决两个问题:怎样对结构体变量成员赋值;怎样通过指向结构体变量的指针访问结构体变量中成
20、员。,P303,#include#include int main()struct Student long num;char name20;char sex;float score;,P303,struct Student stu_1;struct Student*p;p=,stu_1,10101Li LinM89.5,p,P303下,struct Student stu_1;struct Student*p;p=,stu_1,10101Li LinM89.5,p,说明:为了使用方便和直观,C语言允许把(*p).num用p-num来代替(*p).name等价于p-name如果p指向一个结构体
21、变量stu,以下等价:stu.成员名(如stu.num)(*p).成员名(如(*p).num)p-成员名(如p-num),(*p).num 与 p-num P304,9.3.2 指向结构体数组的指针,例9.6 有3个学生的信息,放在结构体数组中,要求输出全部学生的信息。,P304,解题思路:用指向结构体变量的指针处理(1)声明struct Student,并定义结构体数组、初始化(2)定义指向struct Student类型指针p(3)使p指向数组首元素,输出元素中各信息(4)使p指向下一个元素,输出元素中各信息(5)再使p指向结构体数组的下一个元素,输出它指向的元素中的有关信息,P305,#
22、include struct Student int num;char name20;char sex;int age;struct Student stu3=10101,Li Lin,M,18,10102,Zhang Fun,M,19,10104,Wang Min,F,20;,P305,int main()struct Student*p;printf(No.Name sex agen);for(p=stu;pnum,p-name,p-sex,p-age);return 0;,stu0,stu1,stu2,int main()struct Student*p;printf(No.Name s
23、ex agen);for(p=stu;pnum,p-name,p-sex,p-age);return 0;,p,stu0,stu1,stu2,int main()struct Student*p;printf(No.Name sex agen);for(p=stu;pnum,p-name,p-sex,p-age);return 0;,p,stu0,stu1,stu2,int main()struct Student*p;printf(No.Name sex agen);for(p=stu;pnum,p-name,p-sex,p-age);return 0;,p,stu0,stu1,stu2,9
24、.3.3 用结构体变量和结构体变量的指针作函数参数 P306,将一个结构体变量的值传递给另一个函数,有3种方法。(设 struct Student stu3;)(1)用结构体变量的成员作参数:fun(stu1.num)(2)用结构体变量作实参:fun(stu2)(3)用指向结构体变量或数组元素的指针作实参,将结构体变量或数组元素的地址传给形参:fun(),方法(1)用结构体变量的成员作参数。P306 例如,用stu1.num或stu2.name作函数实参,将实参值传给形参。用法和用普通变量作实参是一样的,属于“值传递”方式。应当注意实参与形参的类型保持一致。,方法(2)用结构体变量作实参。P3
25、06用结构体变量作实参时,将结构体变量所占的内存单元的内容全部按顺序传递给形参,形参也必须是同类型的结构体变量在函数调用期间形参也要占用内存单元。这种传递方式在空间和时间上开销较大在被调用函数期间改变形参(也是结构体变量)的值,不能返回主调函数一般较少用这种方法,方法(3)用指向结构体变量(或数组元素)的指针作实参,将结构体变量(或数组元素)的地址传给形参。P306,例9.7 有n个结构体变量,内含学生学号、姓名和3门课程的成绩。要求输出平均成绩最高的学生的信息(包括学号、姓名、3门课程成绩和平均成绩)。,解题思路:将n个学生的数据表示为结构体数组。按照功能函数化的思想,分别用3个函数来实现不
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 大学 语言 结构 类型
链接地址:https://www.31ppt.com/p-5934922.html