最新大学C语言第9章结构体类型PPT课件.ppt
《最新大学C语言第9章结构体类型PPT课件.ppt》由会员分享,可在线阅读,更多相关《最新大学C语言第9章结构体类型PPT课件.ppt(149页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、9.1.1 自己建立结构体类型自己建立结构体类型9.1.2 定义结构体类型变量定义结构体类型变量9.1.3 结构体变量的初始化和引用结构体变量的初始化和引用P293方式方式1. 先声明结构体类型,再定义该类型变量先声明结构体类型,再定义该类型变量10001 Zhang Xin M 19 90.5 Shanghaistudent110002Wang LiF 2098Beijingstudent2P295int num; char name20;sex; age; score; addr30;方式方式2. 在声明类型的同时定义变量在声明类型的同时定义变量struct Student int num
2、; char name20; char sex; int age; float score; char addr30; student1,student2;P295定义类型定义类型定义变量定义变量类型名类型名方式方式3. 不指定类型名而直接定义结构体类型不指定类型名而直接定义结构体类型变量变量用得不多用得不多 P296中下中下其一般形式为其一般形式为: struct 成员表列成员表列 变量名表列变量名表列; 不能再用此结构类型,定义其它变量不能再用此结构类型,定义其它变量 。P296(1) 结构体类型与结构体变量是不同的概结构体类型与结构体变量是不同的概念,不要混同。只能对变量赋值、存取念,不
3、要混同。只能对变量赋值、存取或运算,而不能对一个类型赋值、存取或运算,而不能对一个类型赋值、存取或运算。在编译时,对类型是不分配空或运算。在编译时,对类型是不分配空间的,只对变量分配空间。间的,只对变量分配空间。参考:人类(类型),周杰伦(变量)参考:人类(类型),周杰伦(变量)P296下下“说明说明”(2) 结构体类型中的成员名可以与程序中的结构体类型中的成员名可以与程序中的变量名相同变量名相同,但二者不代表同一对象。但二者不代表同一对象。(3) 对结构体变量中的成员(即对结构体变量中的成员(即“域域”),),可以单独使用,它的作用与地位相当于普通可以单独使用,它的作用与地位相当于普通变量。
4、变量。例:例:struct Student s1,s2,s3;/定义定义 strcpy(s1.name,”周杰伦周杰伦”);/赋值赋值P296下下“说明说明” 例例9.1 把一个学生的信息把一个学生的信息(包括学号、姓名、性包括学号、姓名、性别、住址别、住址)放在一个结构体变量中,然后输出这放在一个结构体变量中,然后输出这个学生的信息。个学生的信息。解题思路:解题思路:u自己建立一个结构体类型,包括有关学生信息自己建立一个结构体类型,包括有关学生信息的各成员的各成员u用它定义结构体变量,同时赋以初值用它定义结构体变量,同时赋以初值u输出该结构体变量的各成员输出该结构体变量的各成员P297#in
5、clude 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; P297#include int main()struct Student long int num; char name20; char sex; char addr20; a=10101,“
6、Li Lin”,M, “123 Beijing Road”; printf(NO.:%ldnname:%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); 不对不对不能使用整个变量,不能
7、使用整个变量,只能使用单个成员只能使用单个成员P297#include int main()struct Student long int num; char name20; char sex; char addr20; a=10101,“Li Lin”,M, “123 Beijing Road”; b=a; 对对struct Student b;b.num+; 对对注意:同结构类型变量可以直接赋值注意:同结构类型变量可以直接赋值 例例9.2 输入两个学生的学号、姓名和成绩输入两个学生的学号、姓名和成绩,输出成绩较高学生的学号、姓名和成绩,输出成绩较高学生的学号、姓名和成绩解题思路:解题思路:
8、(1)定义两个结构相同的结构体变量定义两个结构相同的结构体变量student1和和student2;(2)分别输入两个学生的学号、姓名和成绩;分别输入两个学生的学号、姓名和成绩;(3)比较两个学生的成绩,如果学生比较两个学生的成绩,如果学生1的成绩高的成绩高于学生于学生2,就输出学生,就输出学生1的全部信息,如果学的全部信息,如果学生生2的成绩高于学生的成绩高于学生1,就输出学生,就输出学生2的全部信的全部信息。如果二者相等,输出息。如果二者相等,输出2个学生的全部信息个学生的全部信息P299讲讲#include int main() struct Student int num; char
9、name20; float score; student1,student2; scanf(%d%s%f,&student1.num, student1.name, &student1.score); scanf(“%d%s%f”,&student2.num, student2.name, &student2.score); 不能加不能加&P297因为因为name是数组名是数组名 printf(The higher score is:n); if (student1.scorestudent2.score) printf(%d %s %6.2fn,student1.num, student1.
10、name, student1.score); else if (student1.scorestudent2.score) printf(%d %s %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.1定义结构体数组定义结构体数组9.2.2 结
11、构体数组的应用举例结构体数组的应用举例P300 例例9.3 有有3个候选人,每个选民只能个候选人,每个选民只能投票选一人,要求编一个统计选票的投票选一人,要求编一个统计选票的程序,先后输入被选人的名字,最后程序,先后输入被选人的名字,最后输出各人得票结果。输出各人得票结果。P300解题思路:解题思路:u设一个结构体数组,数组中包含设一个结构体数组,数组中包含3个元素个元素u每个元素中的信息应包括候选人的姓名每个元素中的信息应包括候选人的姓名(字符型字符型)和得票数和得票数(整型整型)u输入被选人的姓名,然后与数组元素中的输入被选人的姓名,然后与数组元素中的“姓名姓名”成员比较,如果相同,就给这
12、个成员比较,如果相同,就给这个元素中的元素中的“得票数得票数”成员的值加成员的值加1u输出所有元素的信息输出所有元素的信息P300#include #include struct Person char name20; int count; leader3=“Li”,0,“Zhang”,0,“Sun”,0; 全局的结构体数组全局的结构体数组name countleader0Li0Zhang0Sun0P300int main() int i,j; char leader_name20; for (i=1;i=10;i+) scanf(“%s”,leader_name); for(j=0;j3;j
13、+) 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;P300int 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)
14、 leaderj.count+; for(i=0;i3;i+) printf(%5s:%dn“,leaderi.name, leaderi.count); return 0;说明:说明:(1)定义结构体数组一般形式是定义结构体数组一般形式是 struct 结构体名结构体名 成员表列成员表列 数组名数组名数组长度数组长度; 先声明一个结构体类型,然后再用此类型定先声明一个结构体类型,然后再用此类型定义结构体数组:义结构体数组: 结构体类型结构体类型 数组名数组名数组长度数组长度; 如:如: struct Person leader3; P300说明:说明:(2)对结构体数组初始化的形式是在定义数
15、对结构体数组初始化的形式是在定义数组的后面加上:组的后面加上:初值表列初值表列; 如:如:struct Person leader3= Li,0,Zhang,0,Fun,0; P300下下课堂练习课堂练习参考参考P302程序程序已有如下结构类型定义:学生已有如下结构类型定义:学生(学号,姓名,得分学号,姓名,得分)struct Student int num; char name20; float score; 1.写主函数,定义该类型数组写主函数,定义该类型数组a有三个元素,按参考有三个元素,按参考程序赋值前三个元素初值;程序赋值前三个元素初值;2.重新输入三人成绩,输入前先提示学号与姓名;
16、重新输入三人成绩,输入前先提示学号与姓名;3.把第二、三个学生数据交换;把第二、三个学生数据交换;3.求平均成绩;求平均成绩;5.输出平均成绩。输出平均成绩。 例例9.4 有有n个学生的信息个学生的信息(包括学号、包括学号、姓名、成绩姓名、成绩),要求按照成绩的高低顺,要求按照成绩的高低顺序输出各学生的信息。序输出各学生的信息。解题思路:用结构体数组存放解题思路:用结构体数组存放n个学生个学生信息,采用选择法对各元素进行排序信息,采用选择法对各元素进行排序(进行比较的是各元素中的成绩进行比较的是各元素中的成绩)。P301#include struct Student /全局类型,各函数可用!全
17、局类型,各函数可用! 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;常变量常变量若人数变为若人数变为3030P301#include struct Student int num; char name20; float score; ;
18、 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;in-1;i+) k=i; for(j=i+1;jstuk.score) k=j; temp=stuk; stuk=stui; stui=
19、temp; for(i=0;in;i+) printf(%6d %8s %6.2fn, stui.num,stui.name,stui.score); printf(n); return 0;写法上与普通变量一致写法上与普通变量一致作业、复习、预习作业、复习、预习作业本作业本u写主函数,写主函数,声明如下结构类型:声明如下结构类型:struct Productchar code50; float price;定义该类型数组定义该类型数组prod四个元素;四个元素;输入输入4个产品的数据;个产品的数据;用选择法按价格升序排序;用选择法按价格升序排序;依序输出依序输出4个产品的数据。个产品的数据。
20、u主函数:定义主函数:定义int数组数组a有有10个元素,输入个元素,输入10个数,用个数,用sort函数对函数对a升序排序,输出这升序排序,输出这10个数。个数。sort函数:参函数:参数为数为int数组数组arr和数组长度和数组长度n,用选择法作升序排序。,用选择法作升序排序。复习:结构类型的定义、结构变量的初始化与引用复习:结构类型的定义、结构变量的初始化与引用1.预习:文件的输入与输出预习:文件的输入与输出9.3.1 指向结构体变量的指针指向结构体变量的指针9.3.2 指向结构体数组的指针指向结构体数组的指针9.3.3 用结构体变量和结构体变量的指用结构体变量和结构体变量的指针作函数参
21、数针作函数参数P303指向结构体对象的指针变量既可以指向指向结构体对象的指针变量既可以指向结构体变量,也可以用来指向结构体数结构体变量,也可以用来指向结构体数组中的元素。组中的元素。指针变量的基类型必须与结构体变量的指针变量的基类型必须与结构体变量的类型相同。例如:类型相同。例如: struct Student *pt; P303 例例9.5 通过指向结构体变量的指针变通过指向结构体变量的指针变量输出结构体变量中成员的信息。量输出结构体变量中成员的信息。解题思路:在已有的基础上,本题要解解题思路:在已有的基础上,本题要解决两个问题:决两个问题:u怎样对结构体变量成员赋值;怎样对结构体变量成员赋
22、值;u怎样通过指向结构体变量的指针访问结构怎样通过指向结构体变量的指针访问结构体变量中成员。体变量中成员。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; stu_1.num=10101; strcpy(stu_1.name,“Li Lin”); stu_1.sex=M; stu_1.score=89.5; printf(No.:%ldn”,s
23、tu_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.5pP303下下 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);
24、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(*p).sex(*p).score说明:说明:u为了使用方便和直观,为了使用方便和直观,C语言允许把语言允许把(*p).num用用p-num来代替来代替u(*p).name等价于等价于p-nameu如果如果p指向一个结构体变量指向一个结构体变量stu,以下等价:,以下等价: stu.成员名成员名(如如stu.num
25、) (*p).成员名成员名(如如(*p).num) p-成员名成员名(如如p-num)P304 例例9.6 有有3个学生的信息,放在个学生的信息,放在结构结构体体数组中,要求输出全部学生的信息。数组中,要求输出全部学生的信息。P304解题思路:用指向结构体变量的指针处理解题思路:用指向结构体变量的指针处理(1)声明声明struct Student,并定义结构体数,并定义结构体数组组、初始化初始化(2)定义指向定义指向struct Student类型指针类型指针p(3)使使p指向数组首元素,输出元素中指向数组首元素,输出元素中各各信息信息(4)使使p指向下一个元素,输出元素中指向下一个元素,输出
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新 大学 语言 结构 类型 PPT 课件
限制150内