《C语言综合实验》构造数据类型.ppt
《《C语言综合实验》构造数据类型.ppt》由会员分享,可在线阅读,更多相关《《C语言综合实验》构造数据类型.ppt(44页珍藏版)》请在三一办公上搜索。
1、C语言综合实验,构造数据类型,主要内容,结构体 结构体的定义及引用 结构体数组 结构体与指针 共用体 枚举类型 类型标识符的自定义结构体与链表,1.结构体的定义及引用,有时候需要将不同类型的数据组合成一个有机的整体,这些组合在一个整体中的数据是互相联系的。,如一个学生的信息包括学号、姓名、性别、年龄、成绩、地址等。,int num;,char name20;,char sex;,int age;,float score;,char addr30;,应当把它们组织成一个组合项,在一个组合项内包含若干个类型不同(或相同)的数据项。,语言提供了这种数据结构:允许用户将不同类型的数据组合成一个有机的整
2、体,这些数据互相联系;这种数据结构称为结构体(structure)。,结构体的定义是指定义相应的数据结构及相应的变量。,步骤:先定义一个结构体类型标识符;用该标识符去定义相应的变量。,struct student int num;char name20;char sex;int age;float score;char addr30;,;,说明:,、struct是关键字,不能省略:表示定义结构体;,、student是用户自己定义的结构体类型标识符,即该结构体名;,、结构体中具体每项的定义,由 和 括起来。语言中把用户自己定义的数据项称为成员(或称为域),即每个成员也叫结构体中的一个域。,结构体
3、类型标识符的定义,定义一个结构体类型的一般形式:,struct 结构体类型标识符 类型标识符1成员名1;类型标识符2成员名2;类型标识符n成员名n;,;,结构体名,成员表列,结构体类型标识符的定义,1、定义形式:,struct 结构体类型标识符变量名列表;,2、定义结构体变量的三种方法:,、先定义结构体类型再定义变量名,struct student int num;char name20;float score;;,struct student stu1,stu2;,结构体类型名,结构体变量名,stu1,stu2,在定义了结构体变量后,系统会为之分配内存单元。,sizeof(stu1)=,2+
4、,20+,4,=26,结构体变量的定义,、在定义结构体类型的同时定义变量,struct 结构体类型标识符 类型标识符1成员名1;类型标识符2成员名2;类型标识符n成员名n;变量名列表;,struct student int num;char name20;float score;stu1,stu2;,、直接定义结构体类型变量,struct 类型标识符1成员名1;类型标识符2成员名2;类型标识符n成员名n;变量名列表;,(不出现结构体类型名),struct int num;char name20;float score;stu1,stu2;,3、关于结构体类型的几点说明:,、类型与变量是不同的概
5、念,不要混淆:,a、只能对变量赋值、存取或运算,而不能对一个类型赋值、存取或运算;,b、在编译时,对类型不分配内存空间,只对变量分配空间。,、只有在定义变量后,才为该变量开辟存储单元。结构体变量所占的内存长度等于每个成员长度之和;,struct student int num;char name20;float score;;,sizeof(struct student)=26,、对结构体中的成员(“域”),可以单独使用,它的作用与地位相当于普通变量;,、成员也可以是一个已定义的结构体类型变量:,struct date int year;int month;int day;,struct st
6、udent int num;char name20;char sex;struct date birthday;char addr30;,sizeof(student)=?,注意:结构体变量中各成员按照结构体类型说明的顺序依次存放在一片连续的内存单元中,但它们的长度不同,不能像访问数组元素那样通过下标访问,而是通过它们的名字(即成员名)访问。,、成员也可以是指向本结构体类型的指针变量;,struct student int num;char name20;float score;struct student*next;,、成员名可以与程序中的变量名相同,二者不代表同一对象。,在定义结构体变量的
7、同时可以给它的全部或部分成员赋初值,完成初始化。结构体类型名 变量名=初值表列;,struct student stu1=10001,“Li Ming”,“男”,1983,7,1,”武汉理工大学”;,结构体变量的初始化,struct student int num;char name20;char sex;struct date int year;int month;int day;birthday;char addr30;,注意:要将结构体变量的各成员的值按类型说明时的顺序一一对应;所赋的值可用常量或常量表达式表示;列出的值可以少于成员的个数,没有给出的初值,由系统自动赋予缺省值。,stru
8、ct student timeint hours,minutes,seconds;nowtime=10,30;,1、引用形式:,结构体变量名.成员名,“.”是成员运算符,在所有的运算符中优先级最高。,struct student int num;char name20;float score;stu1,stu2;,stu1.num=10001;,stu1.score=95;,stu1.name,=Li Ming;,strcpy(stu1.name,Li Ming);,结构体变量的引用,2、不能将一个结构体变量作为一个整体进行输入输出:,printf(%d%s%f,stu1);,scanf(%d
9、%s%f,只能对结构体中的各个成员分别进行输入输出。,printf(%d%s%f,stu1.num,stu1.name,stu1.score);,scanf(%d,gets(stu1.name);,结构体变量的引用,成员名也是一个变量(称为成员变量),具有自己的数据类型,使用与同类型的变量相同。,3、只有在对结构体变量赋值或作为函数参数时才可以对一个结构体变量进行整体操作;(赋值时要求具有相同结构),stu2=stu1;,stu2.num=stu1.num;strcpy(stu2.name,stu1.name);stu2.score=stu1.score;,void fun(student p
10、x);,fun(stu1);,4、如果成员本身又属于一个结构体类型,则要用若干个成员运算符,一级一级的找到最低一级的成员。只能对最低一级的成员进行赋值、存取或运算;,stu1.birthday.year=2002;,结构体变量的引用,5、对成员变量可以像普通变量一样进行各种运算(根据其类型决定可以进行的运算),sum=stu1.score+stu2.score;,stu1.age+;,结构体变量的引用,6、可以引用结构体变量成员的地址,也可以引用结构体变量的地址;,scanf(%d,printf(%x,结构体变量的地址主要用于作函数参数,传递结构体变量的地址;,7、在定义结构体变量的同时,可以
11、进行初始化。,struct student int num;char name20;char sex;char addr30;stu=15001,宋红,M,Beijing;,注意:结构体变量的各个初值用大括号、括起来,大括号内各个成员变量的值之间用逗号分隔,其值必须与成员变量一一对应,且数据类型应与成员变量一致。,结构体变量的引用,#include struct student int num;float score;void main()student stu,max;int i;float sum=0;max.score=0;for(i=0;imax.score)max=stu;sum+=
12、stu.score;printf(nMax:%d-%.1fn,max.num,max.score);printf(Sum is:%.1fn,sum);,例:输入5名学生的学号及成绩,求成绩最好的学生的学号、成绩和所有学生的总成绩。,结构体变量的引用,2.结构体数组,数组的每个元素都是结构体类型的数据,它们分别包含各个成员项。,1、先定义结构体类型,再定义结构体数组,struct student int num;float score;,struct student stu30;,2、定义结构体类型的同时定义结构体数组,struct student int num;float score;stu
13、30;,3、直接定义结构体数组,struct int num;float score;stu30;,一般形式:,struct 结构体类型标识符 类型标识符1成员名1;类型标识符2成员名2;类型标识符n成员名n;结构体数组=数组元素0的各个初值,数组元素1的各个初值,;,struct student int num;char name20;float score;stu3=10101,Li Ming,88,10102,Zhang Jin,92,10103,Wang Lin,98.5;,结构体数组的初始化,说明:,1、初始化时,数组元素的个数可以不指定,系统会根据初值的结构体常量的个数来确定数组元
14、素的个数;,struct student int num;char name20;float score;stu=10101,Li Ming,88,10102,Zhang Jin,92,10103,Wang Lin,98.5;,2、数组中各个元素的初值用大括号 括起来,同一数组元素的各个成员变量的初值用逗号分隔。,结构体数组应用举例,设李红、王建、赵明三名同学某学年考了8门课,要求分别统计出这3名同学该学年的总成绩,并按8门课总成绩的高低排序输出。,#include struct student char name20;float score;void main()student stu3=L
15、i Hong,0,Wang Jian,0,Zhao Ming,0;student temp;int i,j;float x;for(i=1;i=8;i+)printf(nInput the%dth course score:n,i);for(j=0;j3;j+)printf(Name:%-12sScore:,stuj.name);scanf(%f,3.结构体与指针,结构体变量的指针就是该变量所占据的内存段的起始地址。,(1)指向结构体变量的指针(2)指向结构体数组的指针(3)结构体指针作为函数参数,(1)指向结构体变量的指针,1、指向结构体变量指针的定义:,struct student int
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言综合实验 语言 综合 实验 构造 数据类型
链接地址:https://www.31ppt.com/p-6525821.html