资源预览内容
第1页 / 共100页
第2页 / 共100页
第3页 / 共100页
第4页 / 共100页
第5页 / 共100页
第6页 / 共100页
第7页 / 共100页
第8页 / 共100页
第9页 / 共100页
第10页 / 共100页
亲,该文档总共100页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
C语言提供了一些由系统已定义好的数据类型,如:整型、实型、字符型、指针等类型,C语言还允许用户根据需要自己建立数据类型,用它来定义变量。,第9章 使用结构体类型处理组合数据-用户自定义数据类型,P248,9.1 定义和使用结构体变量 9.2 结构体数组 9.3 结构体指针 9.4 用结构体变量和结构体变量的指针作函数参数 9.5 用指针处理链表 9.6 提高部分,9.1 定义和使用结构体变量,9.1.1 自己建立结构体类型 9.1.2 定义结构体类型变量 9.1.3 结构体变量的初始化和引用,P248,9.1.1 自己建立结构体类型,P248,用户自己建立由不同类型数据组成的组合型的数据结构,它称为结构体 例如,一个学生的学号、姓名、性别、年龄、成绩、家庭地址等项,是属于同一个学生的,因此组成一个组合数据,如student_1的变量,反映它们之间的内在联系,声明一个结构体类型的一般形式为: struct 结构体名 成员表列 ;,类型名 成员名;,说明: (1)结构体类型并非只有一种,而是可以设计出许多种结构体类型,例如 struct teacher struct worker struct date等结构体类型 各自包含不同的成员,说明: (2) 成员可以属于另一个结构体类型。 struct date int month; int day; int year; ; struct student int num;char name20; char sex; int age; struct date birthday; char addr30; ;,说明: (2) 成员可以属于另一个结构体类型。,9.1.2 定义结构体类型变量,P250,前面只是建立了一个结构体类型,它相当于一个模型,并没有定义变量,其中并无具体数据,系统对之也不分配存储单元。 相当于设计好了图纸,但并未建成具体的房屋。为了能在程序中使用结构体类型的数据,应当定义结构体类型的变量,并在其中存放具体的数据。,1. 先声明结构体类型,再定义该类型变量 声明结构体类型struct student,可以用它来定义变量 struct student student1,student2;,结构体类型名,结构体变量名,1. 先声明结构体类型,再定义该类型变量 声明结构体类型struct student,可以用它来定义变量 struct student student1,student2;,student1,student2,2.在声明类型的同时定义变量 struct student int num; char name20; char sex; int age; float score; char addr30; student1,student2;,3. 不指定类型名而直接定义结构体类型变量 其一般形式为: struct 成员表列 变量名表列; 指定了一个无名的结构体类型 。,说明: (1) 结构体类型与结构体变量是不同的概念,不要混同。只能对变量赋值、存取或运算,而不能对一个类型赋值、存取或运算。在编译时,对类型是不分配空间的,只对变量分配空间。,(2) 结构体类型中的成员名可以与程序中的变量名相同,但二者不代表同一对象。 (3) 对结构体变量中的成员(即“域”),可以单独使用,它的作用与地位相当于普通变量。,9.1.3 结构体变量的初始化和引用,例9.1 把一个学生的信息放在一个结构体变量中,然后输出这个学生的信息。 解题思路: 先在程序中自己建立一个结构体类型,包括有关学生信息的各成员 然后用它来定义结构体变量,同时赋以初值 最后输出该结构体变量的各成员,P91,#include void main() struct student int num; char name20; char sex; char addr20; student1=10101,“Li Lin”,M, “123 Beijing Road”; printf(NO.:%dnname:%sn sex:%cnaddress:%sn, student1.num, student1.name, student1.sex, student1.addr); ,#include void main() struct student int num; char name20; char sex; char addr20; student1=10101,“Li Lin”,M, “123 Beijing Road”; printf(NO.:%dnname:%sn sex:%cnaddress:%sn, student1.num, student1.name, student1.sex, student1.addr); ,#include void main() struct student int num; char name20; char sex; char addr20; student1=10101,“Li Lin”,M, “123 Beijing Road”; ,student1.num=10010; 对,printf(“%sn”,student1); 不对,#include void main() struct student int num; char name20; char sex; char addr20; student1=10101,“Li Lin”,M, “123 Beijing Road”; ,struct date birthday;,student1.num=10010; 对,student1.birthday.month=11; 对,#include void main() struct student int num; char name20; char sex; char addr20; student1=10101,“Li Lin”,M, “123 Beijing Road”; ,student2.num=student1.num; 对,sum=student1.num+student2.num; 对,student1.num+; 对,student2;,#include void main() struct student int num; char name20; char sex; char addr20; student1=10101,“Li Lin”,M, “123 Beijing Road”; ,student2=student1; 对,student2;,scanf(“%d”, 对,scanf(“%d”, 错,例9.2 输入两个学生的学号、姓名和成绩,输出成绩较高学生的学号、姓名和成绩 解题思路: (1)定义两个结构相同的结构体变量student1和student2; (2)分别输入两个学生的学号、姓名和成绩; (3)比较两个学生的成绩,如果学生1的成绩高于学生2,就输出学生1的全部信息,如果学生2的成绩高于学生1,就输出学生2的全部信息。如果二者相等,输出2个学生的全部信息,#include void main() struct student int num; char name20; float score; student1,student2; scanf(%d%s%f,不能加 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.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); ,9.2 结构体数组,P255,例9.3 有3个候选人,每个选民只能投票选一人,要求编一个统计选票的程序,先后输入被选人的名字,最后输出各人得票结果。,解题思路: 设一个结构体数组,数组中包含3个元素 每个元素中的信息应包括候选人的姓名(字符型)和得票数(整型) 输入被选人的姓名,然后与数组元素中的“姓名”成员比较,如果相同,就给这个元素中的“得票数”成员的值加1 输出所有元素的信息,#include #include struct person char name20; int count; leader3=“Li”,0,“Zhang”,0,“Sun”,0;,全局的结构体数组,name,count,leader0,Li,0,Zhang,0,Sun,0,void 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); ,leaderj.count=leaderj.count+1;,void 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); ,说明: (1)定义结构体数组一般形式是 struct 结构体名 成员表列 数组名数组长度; 先声明一个结构体类型,然后再用此类型定义结构体数组: 结构体类型 数组名数组长度; 如: struct person leader3;,说明: (2)对结构体数组初始化的形式是在定义数组的后面加上: =初值表列; 如: struct person leader3= Li,0,Zhang,0,“Sun,0;,例9.4 有n个学生的信息(包括学号、姓名、成绩),要求按照成绩的高低顺序输出各学生的信息。 解题思路:用结构体数组存放n个学生信息,采用选择法对各元素进行排序(进行比较的是各元素中的成绩)。,#include #define N 5 struct student int num; char name20; float score; ; void main() struct student stuN =10101,Zhang,78 , 10103,Wang,98.5, 10106,Li“,86, 10108,“Ling”, 73.5, 10110,“Sun”, 100 ; struct student temp; int i,j,k;,printf(The order i
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号