大学c语言结构体类型课件

上传人:沈*** 文档编号:180731479 上传时间:2023-01-07 格式:PPT 页数:148 大小:1.16MB
收藏 版权申诉 举报 下载
大学c语言结构体类型课件_第1页
第1页 / 共148页
大学c语言结构体类型课件_第2页
第2页 / 共148页
大学c语言结构体类型课件_第3页
第3页 / 共148页
资源描述:

《大学c语言结构体类型课件》由会员分享,可在线阅读,更多相关《大学c语言结构体类型课件(148页珍藏版)》请在装配图网上搜索。

1、大学c语言结构体类型9.1 定义和使用结构体变量定义和使用结构体变量9.2 使用结构体数组使用结构体数组9.3 结构体指针结构体指针9.4 用指针处理链表用指针处理链表9.5 共用体类型共用体类型9.6 使用枚举类型使用枚举类型9.7 用用typedef声明新类型名声明新类型名P293大学c语言结构体类型9.1.1 自己建立结构体类型自己建立结构体类型9.1.2 定义结构体类型变量定义结构体类型变量9.1.3 结构体变量的初始化和引用结构体变量的初始化和引用P293大学c语言结构体类型用户自己建立由不同类型数据组成的组用户自己建立由不同类型数据组成的组合型的数据结构,它称为合型的数据结构,它称

2、为结构体结构体例如,一个学生的学号、姓名、性别、例如,一个学生的学号、姓名、性别、年龄、成绩、家庭地址等项,是属于同年龄、成绩、家庭地址等项,是属于同一个学生的一个学生的,因此,因此组成一个组合数据,组成一个组合数据,如如student_1的变量,反映它们之间的的变量,反映它们之间的内在联系内在联系P293大学c语言结构体类型struct Student /定义类型定义类型 int num;char name20;char sex;int age;float score;char addr30;struct Student a,b;/定义变量定义变量u由程序设计者指定了由程序设计者指定了一个结

3、构体类型一个结构体类型struct Studentu它包括它包括num,name,sex,age,score,addr等不同类等不同类型的型的成员成员类型名,类似类型名,类似intP293下下大学c语言结构体类型声明一个结构体类型的一般形式为:声明一个结构体类型的一般形式为:struct 结构体名结构体名 成员表列成员表列 ;类型名类型名 成员名成员名;注意:注意:结构体类型结构体类型名,前面一定有名,前面一定有struct例如:例如:struct Student 习惯上,首字母大写习惯上,首字母大写P294黑体字黑体字大学c语言结构体类型说明:说明:(1)结构体类型并非只有一种,而是可以设计

4、出结构体类型并非只有一种,而是可以设计出许多种结构体类型,例如许多种结构体类型,例如:struct Teacherstruct Workerstruct Datestruct Student1等结构体类型等结构体类型u各自包含不同的成员各自包含不同的成员大学c语言结构体类型前面只是建立了一个结构体类型,它相当于一前面只是建立了一个结构体类型,它相当于一个模型,并没有定义变量,其中并无具体数据个模型,并没有定义变量,其中并无具体数据,系统对之也不分配存储单元。,系统对之也不分配存储单元。相当于设计好了图纸,但并未建成具体的房屋相当于设计好了图纸,但并未建成具体的房屋。为了能在程序中使用结构体类型

5、的数据,应。为了能在程序中使用结构体类型的数据,应当定义结构体类型的变量,并在其中存放具体当定义结构体类型的变量,并在其中存放具体的数据。的数据。P295大学c语言结构体类型方式方式1.先声明结构体类型,再定义该类型先声明结构体类型,再定义该类型变量变量声明结构体类型声明结构体类型struct Student,可可以用它来定义变量以用它来定义变量 struct Student student1,student2;类型名类型名变量名变量名 P295大学c语言结构体类型方式方式1.先声明结构体类型,再定义该类型变量先声明结构体类型,再定义该类型变量10001 Zhang Xin M 19 90.5

6、 Shanghaistudent110002Wang LiF 2098Beijingstudent2P295int num;char name20;sex;age;score;addr30;大学c语言结构体类型方式方式2.在声明类型的同时定义变量在声明类型的同时定义变量struct Student int num;char name20;char sex;int age;float score;char addr30;student1,student2;P295定义类型定义类型定义变量定义变量类型名类型名大学c语言结构体类型方式方式3.不指定类型名而直接定义结构体类型不指定类型名而直接定义结构

7、体类型变量变量用得不多用得不多 P296中下中下其一般形式为其一般形式为:struct 成员表列成员表列 变量名表列变量名表列;不能再用此结构类型,定义其它变量不能再用此结构类型,定义其它变量。P296大学c语言结构体类型(1)结构体类型与结构体变量是不同的概结构体类型与结构体变量是不同的概念,不要混同。只能对变量赋值、存取念,不要混同。只能对变量赋值、存取或运算,而不能对一个类型赋值、存取或运算,而不能对一个类型赋值、存取或运算。在编译时,对类型是不分配空或运算。在编译时,对类型是不分配空间的,只对变量分配空间。间的,只对变量分配空间。参考:人类(类型),周杰伦(变量)参考:人类(类型),周

8、杰伦(变量)P296下下“说明说明”大学c语言结构体类型(2)结构体类型中的成员名可以与程序中的结构体类型中的成员名可以与程序中的变量名相同变量名相同,但二者不代表同一对象。但二者不代表同一对象。(3)对结构体变量中的成员(即对结构体变量中的成员(即“域域”),),可以单独使用,它的作用与地位相当于普通可以单独使用,它的作用与地位相当于普通变量。变量。例:例:struct Student s1,s2,s3;/定义定义 strcpy(s1.name,”周杰伦周杰伦”);/赋值赋值P296下下“说明说明”大学c语言结构体类型 例例9.1 把一个学生的信息把一个学生的信息(包括学号、姓名、性包括学号

9、、姓名、性别、住址别、住址)放在一个结构体变量中,然后输出这放在一个结构体变量中,然后输出这个学生的信息。个学生的信息。解题思路:解题思路:u自己建立一个结构体类型,包括有关学生信息自己建立一个结构体类型,包括有关学生信息的各成员的各成员u用它定义结构体变量,同时赋以初值用它定义结构体变量,同时赋以初值u输出该结构体变量的各成员输出该结构体变量的各成员P297大学c语言结构体类型#include int main()struct Student long int num;char name20;char sex;char addr20;a=10101,“Li Lin”,M,“123 Beiji

10、ng Road”;printf(NO.:%ldnname:%sn sex:%cnaddress:%sn,a.num,a.name,a.sex,a.addr);return 0;P297大学c语言结构体类型#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:%cnaddress:%sn,a.num,a.name,a.sex,a.addr);return 0;给

11、成员赋初值给成员赋初值P298大学c语言结构体类型#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大学c语言结构体类型#include int main()struct Student long int num;char name20;char sex;char ad

12、dr20;a=10101,“Li Lin”,M,“123 Beijing Road”;b=a;对对struct Student b;b.num+;对对注意:同结构类型变量可以直接赋值注意:同结构类型变量可以直接赋值大学c语言结构体类型 例例9.2 输入两个学生的学号、姓名和成绩输入两个学生的学号、姓名和成绩,输出成绩较高学生的学号、姓名和成绩,输出成绩较高学生的学号、姓名和成绩解题思路:解题思路:(1)定义两个结构相同的结构体变量定义两个结构相同的结构体变量student1和和student2;(2)分别输入两个学生的学号、姓名和成绩;分别输入两个学生的学号、姓名和成绩;(3)比较两个学生的成

13、绩,如果学生比较两个学生的成绩,如果学生1的成绩高的成绩高于学生于学生2,就输出学生,就输出学生1的全部信息,如果学的全部信息,如果学生生2的成绩高于学生的成绩高于学生1,就输出学生,就输出学生2的全部信的全部信息。如果二者相等,输出息。如果二者相等,输出2个学生的全部信息个学生的全部信息P299讲讲大学c语言结构体类型#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);不能加不能加&P297因为因为name是数组名是数组名大学c语言结构体类型 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

15、.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;大学c语言结构体类型9.2.1定义结构体数组定义结构体数组9.2.2 结构体数组的应用举例结构体数组的应用举例P300大学c语言结构体类型 例例9.3 有有3个候选人,每个选民只能个候选人,每个选民只能投票选一人,要求编一个统计选票的投票选一人,要求编一个统计选票的程序,先后输入被选

16、人的名字,最后程序,先后输入被选人的名字,最后输出各人得票结果。输出各人得票结果。P300大学c语言结构体类型解题思路:解题思路:u设一个结构体数组,数组中包含设一个结构体数组,数组中包含3个元素个元素u每个元素中的信息应包括候选人的姓名每个元素中的信息应包括候选人的姓名(字符型字符型)和得票数和得票数(整型整型)u输入被选人的姓名,然后与数组元素中的输入被选人的姓名,然后与数组元素中的“姓名姓名”成员比较,如果相同,就给这个成员比较,如果相同,就给这个元素中的元素中的“得票数得票数”成员的值加成员的值加1u输出所有元素的信息输出所有元素的信息P300大学c语言结构体类型#include#in

17、clude struct Person char name20;int count;leader3=“Li”,0,“Zhang”,0,“Sun”,0;全局的结构体数组全局的结构体数组name countleader0Li0Zhang0Sun0P300大学c语言结构体类型int 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(

18、%5s:%dn“,leaderi.name,leaderi.count);return 0;leaderj.count=leaderj.count+1;P300大学c语言结构体类型int 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

19、;大学c语言结构体类型说明:说明:(1)定义结构体数组一般形式是定义结构体数组一般形式是 struct 结构体名结构体名 成员表列成员表列 数组名数组名数组长度数组长度;先声明一个结构体类型,然后再用此类型定先声明一个结构体类型,然后再用此类型定义结构体数组:义结构体数组:结构体类型结构体类型 数组名数组名数组长度数组长度;如:如:struct Person leader3;P300大学c语言结构体类型说明:说明:(2)对结构体数组初始化的形式是在定义数对结构体数组初始化的形式是在定义数组的后面加上:组的后面加上:初值表列初值表列;如:如:struct Person leader3=Li,0,

20、Zhang,0,Fun,0;P300下下大学c语言结构体类型课堂练习课堂练习参考参考P302程序程序已有如下结构类型定义:学生已有如下结构类型定义:学生(学号,姓名,得分学号,姓名,得分)struct Student int num;char name20;float score;1.写主函数,定义该类型数组写主函数,定义该类型数组a有三个元素,按参考有三个元素,按参考程序赋值前三个元素初值;程序赋值前三个元素初值;2.重新输入三人成绩,输入前先提示学号与姓名;重新输入三人成绩,输入前先提示学号与姓名;3.把第二、三个学生数据交换;把第二、三个学生数据交换;3.求平均成绩;求平均成绩;5.输出

21、平均成绩。输出平均成绩。大学c语言结构体类型 例例9.4 有有n个学生的信息个学生的信息(包括学号、包括学号、姓名、成绩姓名、成绩),要求按照成绩的高低顺,要求按照成绩的高低顺序输出各学生的信息。序输出各学生的信息。解题思路:用结构体数组存放解题思路:用结构体数组存放n个学生个学生信息,采用选择法对各元素进行排序信息,采用选择法对各元素进行排序(进行比较的是各元素中的成绩进行比较的是各元素中的成绩)。P301大学c语言结构体类型#include struct Student /全局类型,各函数可用!全局类型,各函数可用!int num;char name20;float score;int m

22、ain()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;常变量常变量若人数变为若人数变为3030P301大学c语言结构体类型#include struct Student int num;char name20;float score;int main()struct Student stu5=10101,Zhang,78 ,10103,Wang,98.5

23、,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大学c语言结构体类型 printf(The order is:n);for(i=0;in-1;i+)k=i;for(j=i+1;jstuk.score)k=j;temp=stuk;stuk=stui;stui=temp;for(i=0;in;i+)printf(%6d%8s%6.2fn,stui.num,stui.name,stui.score);pri

24、ntf(n);return 0;写法上与普通变量一致写法上与普通变量一致大学c语言结构体类型作业、复习、预习作业、复习、预习作业本作业本u写主函数,写主函数,声明如下结构类型:声明如下结构类型:struct Productchar code50;float price;定义该类型数组定义该类型数组prod四个元素;四个元素;输入输入4个产品的数据;个产品的数据;用选择法按价格升序排序;用选择法按价格升序排序;依序输出依序输出4个产品的数据。个产品的数据。u主函数:定义主函数:定义int数组数组a有有10个元素,输入个元素,输入10个数,用个数,用sort函数对函数对a升序排序,输出这升序排序,

25、输出这10个数。个数。sort函数:参函数:参数为数为int数组数组arr和数组长度和数组长度n,用选择法作升序排序。,用选择法作升序排序。复习:结构类型的定义、结构变量的初始化与引用复习:结构类型的定义、结构变量的初始化与引用1.预习:文件的输入与输出预习:文件的输入与输出大学c语言结构体类型9.3.1 指向结构体变量的指针指向结构体变量的指针9.3.2 指向结构体数组的指针指向结构体数组的指针9.3.3 用结构体变量和结构体变量的指用结构体变量和结构体变量的指针作函数参数针作函数参数P303大学c语言结构体类型指向结构体对象的指针变量既可以指向指向结构体对象的指针变量既可以指向结构体变量,

26、也可以用来指向结构体数结构体变量,也可以用来指向结构体数组中的元素。组中的元素。指针变量的基类型必须与结构体变量的指针变量的基类型必须与结构体变量的类型相同。例如:类型相同。例如:struct Student*pt;P303大学c语言结构体类型 例例9.5 通过指向结构体变量的指针变通过指向结构体变量的指针变量输出结构体变量中成员的信息。量输出结构体变量中成员的信息。解题思路:在已有的基础上,本题要解解题思路:在已有的基础上,本题要解决两个问题:决两个问题:u怎样对结构体变量成员赋值;怎样对结构体变量成员赋值;u怎样通过指向结构体变量的指针访问结构怎样通过指向结构体变量的指针访问结构体变量中成

27、员。体变量中成员。P303大学c语言结构体类型#include#include int main()struct Student long num;char name20;char sex;float score;P303大学c语言结构体类型 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);pr

28、intf(sex:%cn”,stu_1.sex);printf(”score:%5.1fn”,stu_1.score);return 0;stu_110101Li LinM89.5pP303下下大学c语言结构体类型 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”,

29、stu_1.sex);printf(”score:%5.1fn”,stu_1.score);return 0;stu_110101Li LinM89.5p(*p).num(*p).name(*p).sex(*p).score大学c语言结构体类型说明:说明:u为了使用方便和直观,为了使用方便和直观,C语言允许把语言允许把(*p).num用用p-num来代替来代替u(*p).name等价于等价于p-nameu如果如果p指向一个结构体变量指向一个结构体变量stu,以下等价:,以下等价:stu.成员名成员名(如如stu.num)(*p).成员名成员名(如如(*p).num)p-成员名成员名(如如p-n

30、um)P304大学c语言结构体类型 例例9.6 有有3个学生的信息,放在个学生的信息,放在结构结构体体数组中,要求输出全部学生的信息。数组中,要求输出全部学生的信息。P304大学c语言结构体类型解题思路:用指向结构体变量的指针处理解题思路:用指向结构体变量的指针处理(1)声明声明struct Student,并定义结构体数,并定义结构体数组组、初始化初始化(2)定义指向定义指向struct Student类型指针类型指针p(3)使使p指向数组首元素,输出元素中指向数组首元素,输出元素中各各信息信息(4)使使p指向下一个元素,输出元素中指向下一个元素,输出元素中各各信息信息(5)再使再使p指向结

31、构体数组的下一个元素,输指向结构体数组的下一个元素,输出它指向的元素中的有关信息出它指向的元素中的有关信息P305大学c语言结构体类型#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大学c语言结构体类型int main()struct Student*p;printf(No.Name sex agen);for(p=stu;pnum,p-name,p-sex

32、,p-age);return 0;10101Li LinM1810102 Zhang Fang M1910104Wang MinF20stu0stu1stu2大学c语言结构体类型int main()struct Student*p;printf(No.Name sex agen);for(p=stu;pnum,p-name,p-sex,p-age);return 0;10101Li LinM1810102 Zhang Fang M1910104Wang MinF20pstu0stu1stu2大学c语言结构体类型int main()struct Student*p;printf(No.Name

33、sex agen);for(p=stu;pnum,p-name,p-sex,p-age);return 0;10101Li LinM1810102 Zhang Fang M1910104Wang MinF20pstu0stu1stu2大学c语言结构体类型int main()struct Student*p;printf(No.Name sex agen);for(p=stu;pnum,p-name,p-sex,p-age);return 0;10101Li LinM1810102 Zhang Fang M1910104Wang MinF20pstu0stu1stu2大学c语言结构体类型P306

34、将一个结构体变量的值传递给另一个函数,有将一个结构体变量的值传递给另一个函数,有3种种方法方法。(设设 struct Student stu3;)(1)用结构体变量的成员作参数用结构体变量的成员作参数:fun(stu1.num)(2)用结构体变量作实参用结构体变量作实参:fun(stu2)(3)用指向结构体变量或数组元素的指针作实参,将用指向结构体变量或数组元素的指针作实参,将结构体变量或数组元素的地址传给形参结构体变量或数组元素的地址传给形参:fun()大学c语言结构体类型方法方法(1)用结构体变量的成员作参数。用结构体变量的成员作参数。P306 例如,用例如,用stu1.num或或stu2

35、.name作作函数实参,将实参值传给形参。函数实参,将实参值传给形参。u用法和用普通变量作实参是一样的,属于用法和用普通变量作实参是一样的,属于“值值传递传递”方式。方式。u应当注意实参与形参的类型保持一致。应当注意实参与形参的类型保持一致。大学c语言结构体类型方法方法(2)用结构体变量作实参。用结构体变量作实参。P306u用结构体变量作实参时,将结构体变量所占的用结构体变量作实参时,将结构体变量所占的内存单元的内容全部按顺序传递给形参,形参内存单元的内容全部按顺序传递给形参,形参也必须是同类型的结构体变量也必须是同类型的结构体变量u在函数调用期间形参也要占用内存单元。这种在函数调用期间形参也

36、要占用内存单元。这种传递方式在空间和时间上开销较大传递方式在空间和时间上开销较大u在被调用函数期间改变形参(也是结构体变量在被调用函数期间改变形参(也是结构体变量)的值,不能返回主调函数)的值,不能返回主调函数u一般较少用这种方法一般较少用这种方法大学c语言结构体类型方法方法(3)用指向结构体变量(或数组元素用指向结构体变量(或数组元素)的指针作实参,将结构体变量(或数)的指针作实参,将结构体变量(或数组元素)的地址传给形参。组元素)的地址传给形参。P306大学c语言结构体类型 例例9.7 有有n个结构体变量,内含学生学个结构体变量,内含学生学号、姓名和号、姓名和3门课程的成绩。要求输出门课程

37、的成绩。要求输出平均成绩最高的学生的信息平均成绩最高的学生的信息(包括学号包括学号、姓名、姓名、3门课程成绩和平均成绩门课程成绩和平均成绩)。大学c语言结构体类型解题思路:将解题思路:将n个学生的数据表示为结构个学生的数据表示为结构体数组。按照功能函数化的思想,分别用体数组。按照功能函数化的思想,分别用3个函数来实现不同的功能:个函数来实现不同的功能:u用用input函数输入数据和求各学生平均成绩函数输入数据和求各学生平均成绩u用用max函数找平均成绩最高的学生函数找平均成绩最高的学生u用用print函数输出成绩最高学生的信息函数输出成绩最高学生的信息u在主函数中先后调用这在主函数中先后调用这

38、3个函数,用指向结个函数,用指向结构体变量的指针作实参。最后得到结果。构体变量的指针作实参。最后得到结果。u本程序本程序假设假设n=3大学c语言结构体类型#include#define N 3struct Student int num;char name20;float score3;float aver;4个成员个成员输入前输入前3个成员值个成员值计算最后成员值计算最后成员值大学c语言结构体类型int main()void input(struct Student stu);struct Student max(struct Student stu);void print(struct S

39、tudent stu);struct Student stuN,*p=stu;input(p);print(max(p);return 0;大学c语言结构体类型void input(struct Student stu)int i;printf(请输入各学生的信息:请输入各学生的信息:学号、姓名、三门课成绩学号、姓名、三门课成绩:n);for(i=0;iN;i+)scanf(%d%s%f%f%f,&stui.num,stui.name,&stui.score0,&stui.score1,&stui.score2);stui.aver=(stui.score0+stui.score1+stui.

40、score2)/3.0;输入第输入第1个成员值个成员值 输入第输入第2个成员值个成员值输入第输入第3个成员值个成员值计算第计算第4个成员值个成员值stu0stu1stu2stu10101Li78 89 9888.33i=0大学c语言结构体类型void input(struct Student stu)int i;printf(请输入各学生的信息:请输入各学生的信息:学号、姓名、三门课成绩学号、姓名、三门课成绩:n);for(i=0;iN;i+)scanf(%d%s%f%f%f,&stui.num,stui.name,&stui.score0,&stui.score1,&stui.score2)

41、;stui.aver=(stui.score0+stui.score1+stui.score2)/3.0;输入第输入第1个成员值个成员值 输入第输入第2个成员值个成员值输入第输入第3个成员值个成员值计算第计算第4个成员值个成员值stu0stu1stu2stu10101Li78 89 9888.3310103Wang98.5 87 6984.83i=1大学c语言结构体类型void input(struct Student stu)int i;printf(请输入各学生的信息:请输入各学生的信息:学号、姓名、三门课成绩学号、姓名、三门课成绩:n);for(i=0;iN;i+)scanf(%d%s%

42、f%f%f,&stui.num,stui.name,&stui.score0,&stui.score1,&stui.score2);stui.aver=(stui.score0+stui.score1+stui.score2)/3.0;输入第输入第1个成员值个成员值 输入第输入第2个成员值个成员值输入第输入第3个成员值个成员值计算第计算第4个成员值个成员值stu0stu1stu2stu10101Li78 89 9888.3310103Wang98.5 87 6984.8310106Sun 88 76.5 8984.5i=2大学c语言结构体类型struct Student max(struct

43、Student stu)int i,m=0;for(i=0;istum.aver)m=i;return stum;stu0stu1stu2stu10101Li78 89 9888.3310103Wang98.5 87 6984.8310106Sun 88 76.5 8984.5最大最大返回返回大学c语言结构体类型void print(struct Student stud)printf(n成绩最高的学生是成绩最高的学生是:n);printf(学号学号:%dn姓名姓名:%sn 三门课成绩三门课成绩:%5.1f,%5.1f,%5.1fn 平均成绩平均成绩:%6.2fn”,stud.num,stud

44、.name,stud.score0,stud.score1,stud.score2,stud.aver);stud10101Li78 89 9888.3310103Wang98.5 87 6984.8310106Sun 88 76.5 8984.5num namescoreaverstu0stu1stu2大学c语言结构体类型以上以上3个函数的调用,情况各不相同:个函数的调用,情况各不相同:u调用调用input函数时,实参是指针变量,形参是函数时,实参是指针变量,形参是结构体数组,传递的是结构体元素的地址,函结构体数组,传递的是结构体元素的地址,函数无返回值。数无返回值。u调用调用max函数时,

45、实参是指针变量,形参是函数时,实参是指针变量,形参是结构体数组,传递的是结构体元素的地址,函结构体数组,传递的是结构体元素的地址,函数的返回值是结构体类型数据。数的返回值是结构体类型数据。u调用调用print函数时,实参是结构体变量,形参函数时,实参是结构体变量,形参是结构体变量,传递的是结构体变量中各成员是结构体变量,传递的是结构体变量中各成员的值,函数无返回值。的值,函数无返回值。大学c语言结构体类型9.4.1 什么是链表什么是链表9.4.2 建立简单的静态链表建立简单的静态链表9.4.3 建立动态链表建立动态链表9.4.4 输出链表输出链表大学c语言结构体类型链表是一种常见的重要的数据结

46、构链表是一种常见的重要的数据结构它是动态地进行存储分配的一种结构它是动态地进行存储分配的一种结构head12491249A135613561475B1475C10211021D0头指针头指针各结点地址不连续各结点地址不连续各结点含有两个部分各结点含有两个部分表尾表尾大学c语言结构体类型链表是一种常见的重要的数据结构链表是一种常见的重要的数据结构它是动态地进行存储分配的一种结构它是动态地进行存储分配的一种结构链表必须利用指针变量才能实现链表必须利用指针变量才能实现大学c语言结构体类型struct Student int num;float score;struct Student*next;a,

47、b,c;1010189.510103901010785a结点结点b结点结点c结点结点a.next=&b;b.next=&c;numscorenext大学c语言结构体类型 例例9.8 建立一个如图所示的简单链表建立一个如图所示的简单链表,它由,它由3个学生数据的结点组成,要求个学生数据的结点组成,要求输出各结点中的数据。输出各结点中的数据。1010189.510103901010785a结点结点b结点结点c结点结点numscorenext大学c语言结构体类型解题思路:解题思路:1010189.510103901010785a结点结点b结点结点c结点结点numscorenextheadhead=&

48、a;a.next=&b;b.next=&c;NULLc.next=NULL;大学c语言结构体类型#include struct Student int num;float score;struct Student*next;大学c语言结构体类型int main()struct Student a,b,c,*head,*p;a.num=10101;a.score=89.5;b.num=10103;b.score=90;c.num=10107;c.score=85;head=&a;a.next=&b;b.next=&c;c.next=NULL;p=head;do printf(“%ld%5.1fn

49、”,p-num,p-score);p=p-next;while(p!=NULL);return 0;大学c语言结构体类型 p=head;do printf(“%ld%5.1fn”,p-num,p-score);p=p-next;while(p!=NULL);return 0;1010189.510103901010785a结点结点b结点结点c结点结点numscorenextheadNULLp相当于相当于p=&b;大学c语言结构体类型 p=head;do printf(“%ld%5.1fn”,p-num,p-score);p=p-next;while(p!=NULL);return 0;1010

50、189.510103901010785a结点结点b结点结点c结点结点numscorenextheadNULLp相当于相当于p=&b;大学c语言结构体类型 p=head;do printf(“%ld%5.1fn”,p-num,p-score);p=p-next;while(p!=NULL);return 0;1010189.510103901010785a结点结点b结点结点c结点结点numscorenextheadNULLp相当于相当于p=&c;大学c语言结构体类型 p=head;do printf(“%ld%5.1fn”,p-num,p-score);p=p-next;while(p!=NUL

51、L);return 0;1010189.510103901010785a结点结点b结点结点c结点结点numscorenextheadNULLp相当于相当于p=&c;大学c语言结构体类型 p=head;do printf(“%ld%5.1fn”,p-num,p-score);p=p-next;while(p!=NULL);return 0;1010189.510103901010785a结点结点b结点结点c结点结点numscorenextheadNULLp相当于相当于p=NULL;静态链表静态链表大学c语言结构体类型所谓建立动态链表是指在程序执行过所谓建立动态链表是指在程序执行过程中从无到有地建

52、立起一个链表,即程中从无到有地建立起一个链表,即一个一个地开辟结点和输入各结点数一个一个地开辟结点和输入各结点数据,并建立起前后相链的关系。据,并建立起前后相链的关系。大学c语言结构体类型 例例9.9 写一函数建立一个有写一函数建立一个有3名学生数名学生数据的单向据的单向动态动态链表。链表。大学c语言结构体类型解题思路:解题思路:u定义定义3个指针变量:个指针变量:head,p1和和p2,它们都是,它们都是用来指向用来指向struct Student类型数据类型数据struct Student*head,*p1,*p2;大学c语言结构体类型解题思路:解题思路:u用用malloc函数开辟第一个结

53、点,并使函数开辟第一个结点,并使p1和和p2指向它指向它p1p1=p2=(struct Student*)malloc(LEN);p2大学c语言结构体类型解题思路:解题思路:u读入一个学生的数据给读入一个学生的数据给p1所指的第一个结点所指的第一个结点p1scanf(%ld,%f,&p1-num,&p1-score);p21010189.5大学c语言结构体类型解题思路:解题思路:u读入一个学生的数据给读入一个学生的数据给p1所指的第一个结点所指的第一个结点u使使head也指向新开辟的结点也指向新开辟的结点headp1p2scanf(%ld,%f,&p1-num,&p1-score);10101

54、89.5大学c语言结构体类型解题思路:解题思路:u再开辟另一个结点并使再开辟另一个结点并使p1指向它,接着输入该指向它,接着输入该结点的数据结点的数据headp1p21010189.5大学c语言结构体类型解题思路:解题思路:u再开辟另一个结点并使再开辟另一个结点并使p1指向它,接着输入该指向它,接着输入该结点的数据结点的数据headp1p21010189.5p1=(struct Student*)malloc(LEN);scanf(%ld,%f,&p1-num,&p1-score);1010390大学c语言结构体类型解题思路:解题思路:u使第一个结点的使第一个结点的next成员指向第二个结点成

55、员指向第二个结点,即,即连接第一个结点与第二个结点连接第一个结点与第二个结点u使使p2指向刚才建立的结点指向刚才建立的结点headp1p21010189.5p2-next=p1;1010390大学c语言结构体类型解题思路:解题思路:u使第一个结点的使第一个结点的next成员指向第二个结点成员指向第二个结点,即,即连接第一个结点与第二个结点连接第一个结点与第二个结点u使使p2指向刚才建立的结点指向刚才建立的结点headp1p21010189.5p2-next=p1;1010390p2=p1;大学c语言结构体类型解题思路:解题思路:u再开辟另一个结点并使再开辟另一个结点并使p1指向它,接着输入该指

56、向它,接着输入该结点的数据结点的数据headp1p21010189.51010390大学c语言结构体类型解题思路:解题思路:u再开辟另一个结点并使再开辟另一个结点并使p1指向它,接着输入该指向它,接着输入该结点的数据结点的数据headp1p21010189.51010390p1=(struct Student*)malloc(LEN);scanf(%ld,%f,&p1-num,&p1-score);1010785大学c语言结构体类型解题思路:解题思路:u使第使第二二个结点的个结点的next成员指向第成员指向第三三个结点个结点,即,即连接第二个结点与第三个结点连接第二个结点与第三个结点u使使p2

57、指向刚才建立的结点指向刚才建立的结点headp1p21010189.510103901010785p2-next=p1;大学c语言结构体类型解题思路:解题思路:u使第使第二二个结点的个结点的next成员指向第成员指向第三三个结点个结点,即,即连接第二个结点与第三个结点连接第二个结点与第三个结点u使使p2指向刚才建立的结点指向刚才建立的结点headp1p21010189.510103901010785p2-next=p1;p2=p1;大学c语言结构体类型解题思路:解题思路:u再开辟另一个结点并使再开辟另一个结点并使p1指向它,接着输入该指向它,接着输入该结点的数据结点的数据headp1p2101

58、0189.5101039010107850大学c语言结构体类型解题思路:解题思路:u再开辟另一个结点并使再开辟另一个结点并使p1指向它,接着输入该指向它,接着输入该结点的数据结点的数据headp1p21010189.5101039010107850p1=(struct Student*)malloc(LEN);scanf(%ld,%f,&p1-num,&p1-score);大学c语言结构体类型解题思路:解题思路:u输入的学号为输入的学号为0,表示建立链表的过程完成,表示建立链表的过程完成,该结点不应连接到链表中该结点不应连接到链表中headp1p21010189.510103901010785

59、0NULLp2-next=NULL;大学c语言结构体类型#include#include#define LEN sizeof(struct Student)struct Student long num;float score;struct Student*next;int n;struct Student类型数据的长度类型数据的长度大学c语言结构体类型struct Student*creat(void)struct Student*head,*p1,*p2;n=0;p1=p2=(struct Student*)malloc(LEN);scanf(“%ld,%f”,&p1-num,&p1-sc

60、ore);head=NULL;while(p1-num!=0)n=n+1;if(n=1)head=p1;else p2-next=p1;p2=p1;p1=(struct Student*)malloc(LEN);scanf(“%ld,%f”,&p1-num,&p1-score);p2-next=NULL;return(head);p1总是总是开辟开辟新新结点结点p2总是总是指向最后结点指向最后结点用用p2和和p1连接连接两个两个结点结点大学c语言结构体类型int main()struct Student*pt;pt=creat();printf(“nnum:%ldnscore:%5.1fn”,

61、pt-num,pt-score);return 0;大学c语言结构体类型例例9.10 编写一个输出链表的函数编写一个输出链表的函数print。100167.5100387100599NULLp大学c语言结构体类型解题思路:解题思路:u输出输出p所指的结点所指的结点u使使p后移一个结点后移一个结点p100167.5100387100599NULLprintf(%ld%5.1fn,p-num,p-score);大学c语言结构体类型100167.5100387100599NULLp=p-next;解题思路:解题思路:u输出输出p所指的结点所指的结点u使使p后移一个结点后移一个结点printf(%ld

62、%5.1fn,p-num,p-score);p大学c语言结构体类型100167.5100387100599NULL解题思路:解题思路:u输出输出p所指的所指的新新结点结点u使使p后移一个结点后移一个结点printf(%ld%5.1fn,p-num,p-score);p大学c语言结构体类型100167.5100387100599NULLp=p-next;解题思路:解题思路:u输出输出p所指的所指的新新结点结点u使使p后移一个结点后移一个结点printf(%ld%5.1fn,p-num,p-score);p大学c语言结构体类型100167.5100387100599NULLp=p-next;解题思

63、路:解题思路:u输出输出p所指的所指的新新结点结点u使使p后移一个结点后移一个结点printf(%ld%5.1fn,p-num,p-score);p相当于相当于p=NULL;大学c语言结构体类型void print(struct Student*p)printf(nThese%d records are:n,n);if(p!=NULL)do printf(%ld%5.1fn,p-num,p-score);p=p-next;while(p!=NULL);大学c语言结构体类型9.5.1 什么是共用体类型什么是共用体类型9.5.2 引用共用体变量的方式引用共用体变量的方式9.5.3 共用体类型数据的

64、特点共用体类型数据的特点大学c语言结构体类型有时想用同一段内存单元存放不同类有时想用同一段内存单元存放不同类型的变量。型的变量。使几个不同的变量共享同一段内存的使几个不同的变量共享同一段内存的结构,称为结构,称为“共用体共用体”类型的结构。类型的结构。1000100110021003字符字符ch整整 型型 变变 量量 i实实 型型 变变 量量 f大学c语言结构体类型定义共用体类型变量的一般形式为:定义共用体类型变量的一般形式为:union共用体名共用体名 成员表列成员表列变量表列;变量表列;例如:例如:union Data int i;char ch;float f;a,b,c;union D

65、ata int i;char ch;float f;union Data a,b,c;大学c语言结构体类型“共用体共用体”与与“结构体结构体”的定义形式相似,的定义形式相似,但它们的含义是不同的。但它们的含义是不同的。结构体变量所占内存长度是各成员占的内结构体变量所占内存长度是各成员占的内存长度之和,每个成员分别占有其自己的存长度之和,每个成员分别占有其自己的内存单元。而共用体变量所占的内存长度内存单元。而共用体变量所占的内存长度等于最长的成员的长度。等于最长的成员的长度。大学c语言结构体类型只有先定义了共用体变量才能引用它,只有先定义了共用体变量才能引用它,但应注意,不能引用共用体变量,而只

66、但应注意,不能引用共用体变量,而只能引用共用体变量中的成员。能引用共用体变量中的成员。例如,前面定义了例如,前面定义了a,b,c为共用体变量,为共用体变量,下面的引用方式是正确的:下面的引用方式是正确的:a.i a.ch a.f 大学c语言结构体类型在使用共用体类型数据时要注意以下一在使用共用体类型数据时要注意以下一些特点:些特点:(1)同一个内存段可以用来存放几种不同类同一个内存段可以用来存放几种不同类型的成员,但在每一瞬时只能存放其中一型的成员,但在每一瞬时只能存放其中一个成员,而不是同时存放几个。个成员,而不是同时存放几个。大学c语言结构体类型在使用共用体类型数据时要注意以下一在使用共用体类型数据时要注意以下一些特点:些特点:(2)可以对共用体变量初始化,但初始化表可以对共用体变量初始化,但初始化表中只能有一个常量。中只能有一个常量。大学c语言结构体类型在使用共用体类型数据时要注意以下一在使用共用体类型数据时要注意以下一些特点:些特点:(3)共用体变量中起作用的成员是最后一次共用体变量中起作用的成员是最后一次被赋值的成员,在对共用体变量中的一个被赋值的成员,在对共用体变量中的一个

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!