C语言第8章结构体和其他构造类型.ppt
《C语言第8章结构体和其他构造类型.ppt》由会员分享,可在线阅读,更多相关《C语言第8章结构体和其他构造类型.ppt(121页珍藏版)》请在三一办公上搜索。
1、第8章 结构体和其他构造类型,8.1 结构体类型变量的定义和使用8.2 结构体和函数调用8.3 提高部分,8.1 结构体类型变量的定义和使用P241,8.1.1 结构体类型的概念和声明8.1.2 结构体类型变量的定义和使用,8.1.1 结构体类型的概念和声明,迄今为止,已介绍了基本类型(或称简单类型)的变量(如整型、实型、字符型变量等),也介绍了一种构造类型数据数组,数组中的各元素是属于同一个类型的。但是只有这些数据类型是不够的。有时需要将不同类型的数据组合成一个有机的整体,以便于引用。这些组合在一个整体中的数据是互相联系的。C语言允许用户自己指定这样一种数据结构,它称为结构体(structu
2、re)。它相当于其他高级语言中的“记录”。,8.1.1 结构体类型的概念和声明,结构体类型的概念:把不同类型的数据组合在一个类型之中,作为一个整体进行处理 结构体类型。,要表示日期struct date int year,month,day;,要表示学生情况 struct student char name20,number9;float s1,s2,s3;,结构体类型,2.结构体类型的声明 结构体类型声明的一般形式为:struct 结构体名类型名1 成员名表1;类型名2 成员名表2;类型名n 成员名表n;,关键字,也称“域”,;,8.1.2 结构体类型变量的定义和使用P242,【例8.1】假
3、设学生基本情况包括学号和两门课成绩,编写程序计算某学生两门课的平均成绩,并输出该学生的有关信息。,编程点拨,声明结构体类型。struct ex1 long int num;float s1;float s2;,等价于float s1,s2;,在主函数中定义“struct ex1”类型变量wang和“float”类型变量ave。,main(),float ave;struct ex1 wang;,就像float、int 型一样使用。,计算平均成绩并通过变量wang输出有关信息。,main(),float ave;struct ex1 wang;,wang.num=1000101;,wang.s1
4、=89.5;,wang.s2=90;,ave=(wang.s1+wang.s2)/2;,printf(%10ld%8.1f%8.1f%8.1fn,wang.num,wang.s1,wang.s2,ave);,?ave占四个字节,wang占多少字节,main(),float ave;struct ex1 wang;,wang.num=1000101;,wang.s1=89.5;,wang.s2=90;,ave=(wang.s1+wang.s2)/2;,printf(%10ld%8.1f%8.1f%8.1fn,wang.num,wang.s1,wang.s2,ave);,wang,num,s1,s
5、2,4字节,4字节,4字节,1000101,89.5,90.0,12字节,main(),float ave;struct ex1 wang;,wang.num=1000101;,wang.s1=89.5;,wang.s2=90;,ave=(wang.s1+wang.s2)/2;,printf(%10ld%8.1f%8.1f%8.1fn,wang.num,wang.s1,wang.s2,ave);,wang,num,s1,s2,1000101,89.5,90.0,等价于,struct ex1 wang=1000101,89.5,90.0;,main(),float ave;struct ex1
6、wang;,wang.num=1000101;,wang.s1=89.5;,wang.s2=90;,ave=(wang.s1+wang.s2)/2;,printf(%10ld%8.1f%8.1f%8.1fn,wang.num,wang.s1,wang.s2,ave);,%ld%f%f,【例8.2】假设学生基本情况包括学号和多门课成绩,计算某学生的平均成绩。,#define N 3struct ex2 long int num;float sN;,要处理的成绩较多时,main()struct ex2 wang,*p;float ave,sum=0,x;int i;p=,等价于wang.num,p
7、rintf(学号:%ldn,p-num);for(i=0;i si;printf(%8.1f,p-si);printf(n);ave=sum/N;printf(平均成绩:%.1f,ave);,等价于(*p).num,等价于(*p).si,wang,num,s0,s1,s2,p,(*p),结构体变量名.成员名(*指针变量名).成员名指针变量名-成员名,“.”、“-”分别是结构体成员运算符和指向结构体成员运算符。在c语言的所有运算符中,这些运算符的优先级最高。(*p).num写成*p.num,由于“.”的优先级高于“*”,因此相当于*(p.num)形式。,【例8.3】设有5名学生,而且每位学生基本
8、情况都包括学号和多门课成绩,计算各学生3门课平均成绩。,#define N 3struct ex2 long int num;float sN;,main()struct ex2 stu5;float ave,sum,k;int i,j;for(i=0;i 5;i+)scanf(%ld,for(i=0;i 5;i+)printf(%10ld,stui.num);sum=0;for(j=0;j N;j+)printf(%8.1f,stui.sj);sum=sum+stui.sj;ave=sum/N;printf(%8.1f n,ave);,注此行的位置,stu0,stu1,stu2,stu3,s
9、tu4,num,s0,s1,s2,各学生平均分:86.2、67.7、64.2、81.0、91.5,【例8.4】假设学生基本情况包括学号和五门课成绩,找出某学生五门课成绩中的最高成绩。,struct ex3 char n10;float s5;,将学号定义为字符串,main()struct ex3 wang=1000101,89.5,90.0,79.0,99.0,69.0;float max;int i;max=0;for(i=0;i5;i+)if(maxwang.si)max=wang.si;printf(“%s号学生,%5.1f,wang.n,max);,scanf(“%s”,wang.n)
10、;功能?,gets(wang.n);功能?,strcpy(wang.n,1000101);功能?,puts(wang.n);功能?,【例8.5】假设学生基本情况包括学号和英语、C程序设计、数学三门课成绩,输出五个学生中,数学成绩最高的学生所有信息。,struct ex4 char n10;float s3;,main()struct ex4 stu5=1000101,89.5,90.0,79.0,1000102,68.0,80.0,55.0,1000103,56.5,59.0,77.0,1000104,81.0,88.0,74.0,1000105,90.5,95.0,89.0;int i,k=
11、0;,for(i=1;i 5;i+)if(stuk.s2 stui.s2)k=i;printf(“%s号学生n,stuk.n);for(i=0;i 3;i+)printf(%5.1f,stuk.si);,1000105 号学生90.5 95.0 89.0,8.2 结构体和函数调用 P249,结构体类型变量的成员作实参。,【例8.6】结构体类型变量的成员 作实参示例。,struct ex2 long int num;float s3;,long型,实型数组名,void myfun1(long int num,float*p),wang,num,s,p,num,*p,*(p+1),*(p+2),1
12、000101,printf(学号:%ld,成绩:,num);,for(i=0;i 3;i+),printf(%5.1f,*(p+i);,printf(n);,1000101 89.5 90.0 79.0,wang,num,s,p,num,*p,*(p+1),*(p+2),1000101,void myfun1(long int num,float*p),结构体类型变量作实参。,【例8.7】结构体变量作实参的示例。,struct ex2 long int num;float s3;,void myfun2(struct ex2 xiaowang),xiaowang.num=1000105;,xi
13、aowang.s2=95.5;,main(),struct ex2 wang=1000101,89.5,90.0,79.0;,int i;,myfun2(wang);,printf(学号:%ld,成绩:,wang.num);,for(i=0;i3;i+),printf(%5.1f,wang.si);,printf(n);,num,s,1000101 89.5 90.0 79.0,wang,xiaowang,num,s,xiaowang.num=1000105;,1000105,xiaowang.s2=95.5;,95.5,结构体类型变量地址作实参。,【例8.8】结构体变量地址作实参的示例。,s
14、truct ex2 long int num;float s3;,void myfun3(struct ex2*p),p-num=1000105;,p-s2=95.5;,main(),struct ex2 wang=1000101,89.5,90.0,79.0;,int i;,myfun3(,printf(学号:%ld,成绩:,wang.num);,for(i=0;i3;i+),printf(%5.1f,wang.si);,printf(n);,myfun3(,void myfun3(struct ex2*p),1000105,95.5,结构体类型数组名作实参。,【例8.9】结构体类型数组名作
15、实参的示例。,struct ex2 long int num;float s3;,void myfun4(struct ex2*p)int i;float k;struct ex2*q;for(q=p;q num);for(i=0;isi=k;,main()int i,j;struct ex2 stu5;myfun4(stu);for(i=0;i5;i+)printf(%ld 号学生成绩是:,stui.num);for(j=0;j 3;j+)printf(%5.1f,stui.sj);printf(n);,8.3 提高部分 P252,8.3.1 结构体的进一步讨论8.3.2 链表8.3.5 实
16、例的部分程序,8.3.1 结构体的进一步讨论 P252,在一个结构体类型中可以含有另一个结构体类型。,【例8.10】内嵌结构体类型的示例。,struct date inty,m,d;struct student char name10;struct date birthday;float s3;,main()struct student Li=LiLan,1982,12,25,88,75,85.5;printf(%sn,Li.name);printf(%d-%d-%dn,Li.birthday.y,Li.birthday.m,Li.birthday.d);printf(%f,%f,%fn,Li
17、.s0,Li.s1,Li.s2);,LiLan,1982-12-25,88.000000,75.000000,85.500000,y,m,d,s0,s1,s2,name,birthday,s,要改为1985,Li.birthday.y=1985;,y,m,d,s0,s1,s2,name,birthday,s,要改为10,Li.birthday.m=10;,y,m,d,s0,s1,s2,name,birthday,s,要输入值,scanf(%d,y,m,d,s0,s1,s2,name,birthday,s,要改为5,p-birthday.d=5;,p,(*p).birthday.d=5;,y,m
18、,d,s0,s1,s2,name,birthday,s,要输入值,p,scanf(%d,scanf(%d,声明可改为:struct student char name10;struct int y,m,d;birthday;float s3;,【例8.11】内嵌结构体类型为 本结构体类型的示例。,#include struct lst intnum;struct lst*next;;,能指向 struct lst 类型变量,a.num=1;,a.next=,b.num=2;,b.next=,c.num=3;,c.next=NULL;,p=,printf(%4d,p-num);,1,2,3,0,
19、p,1,a,b,c,num,next,num,next,num,next,a.num=1;,a.next=,b.num=2;,b.next=,c.num=3;,c.next=NULL;,p=,printf(%4d,p-num);,p=p-next;,printf(%4d,p-num);,1,2,3,0,p,1,2,a,b,c,num,next,num,next,num,next,a.num=1;,a.next=,b.num=2;,b.next=,c.num=3;,c.next=NULL;,p=,printf(%4d,p-num);,p=p-next;,printf(%4d,p-num);,p=
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 结构 其他 构造 类型
链接地址:https://www.31ppt.com/p-5426482.html