资源预览内容
第1页 / 共61页
第2页 / 共61页
第3页 / 共61页
第4页 / 共61页
第5页 / 共61页
第6页 / 共61页
第7页 / 共61页
第8页 / 共61页
第9页 / 共61页
第10页 / 共61页
亲,该文档总共61页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第10章 用户自定义数据类型,10.1 结构体类型概述 10.2 结构体变量的使用 10.3 共用体类型 10.4 使用枚举类型 10.5 用typedef声明新类型名,数据类型,C语言允许使用的数据类型: 基本类型 枚举类型 空类型 派生类型 指针类型 数组类型 结构体类型 共用体类型 函数类型,算术类型,10.1 结构体类型概述,用户自己建立由多种类型数据组成的组合型的数据类型,它称为结构体类型 例如,学生的学号、姓名、性别、年龄、成绩、家庭地址等项,是属于同一个学生的,因此组成一个组合数据类型,10.1 结构体类型概述,struct Student int num; char name20; char sex; int age; float score; char addr30; ;,由程序设计者指定了一个结构体类型struct Student 它包括num,name,sex,age,score,addr等不同类型的成员,10.1 结构体类型概述,声明一个结构体类型的一般形式为:struct 结构体名 成员表列 ;,类型名 成员名;,10.1 结构体类型概述,说明: (1)结构体类型并非只有一种,而是可以设计出许多种结构体类型,例如 struct Teacher struct Worker struct Date等结构体类型 各自包含不同的成员,10.1 结构体类型概述,说明: (2) 成员可以属于另一个结构体类型。struct Date int month; int day; int year; ;struct Stu int num;char name20;char sex;int age;struct Date birthday; char addr30; ;,10.1 结构体类型概述,说明: (2) 成员可以属于另一个结构体类型。,10.2 结构体类型变量的使用,前面只是建立了一个结构体类型,它相当于一个模型,并没有定义变量,其中并无具体数据,系统对之也不分配存储单元。 相当于设计好了图纸,但并未建成具体的房屋。为了能在程序中使用结构体类型的数据,应当定义结构体类型的变量,并在其中存放具体的数据。,10.2 结构体类型变量的使用,1. 先声明结构体类型,再定义该类型变量 声明结构体类型struct Student,可以用它来定义变量struct Student student1,student2;,结构体类型名,结构体变量名,10.2 结构体类型变量的使用,1. 先声明结构体类型,再定义该类型变量 声明结构体类型struct Student,可以用它来定义变量struct Student student1,student2;,struct Student int num; char name20; char sex; int age; float score; char addr30; ;,student1,student2,10.2 结构体类型变量的使用,2.在声明类型的同时定义变量 struct Student int num; char name20; char sex; int age; float score; char addr30; student1,student2;,10.2 结构体类型变量的使用,3. 不指定类型名而直接定义结构体类型变量 其一般形式为:struct 成员表列 变量名表列; 指定了一个无名的结构体类型 。,结构体变量的引用,(1) 结构体类型与结构体变量是不同的概念,不要混同。只能对变量赋值、存取或运算,而不能对一个类型赋值、存取或运算。在编译时,对类型是不分配空间的,只对变量分配空间。,结构体变量的引用,(2) 结构体类型中的成员名可以与程序中的变量名相同,但二者不代表同一对象。 (3) 不能对一个结构体变量作为一个整体进行输入和输出 (4) 可以通过赋值运算符将一个结构体变量整体赋给另一个变量。 (5)使用成员运算符,来读写结构体变量的值 (6)如果成员本身又属一个结构体类型,则要用成员运算符,一级一级找到最低的成员 (7)对成员变量可以像普通变量一样做各种运算 (8)可以引用成员的地址,也可以引用结构体变量的地址,struct Student int num; char name20; char sex; int age; float score; char addr30; student1,student2; student1.num=1001; student.sex=F;,例10.1 把一个学生的信息(包括学号、姓名、性别、住址)放在一个结构体变量中,然后输出这个学生的信息。 解题思路: 自己建立一个结构体类型,包括有关学生信息的各成员 用它定义结构体变量,同时赋以初值 输出该结构体变量的各成员,#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:%snsex:%cnaddress:%sn“,a.num,a.name,a.sex,a.addr);return 0; ,#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:%snsex:%cnaddress:%sn“,a.num,a.name,a.sex,a.addr);return 0; ,#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);,#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+;,#include int main() struct Student long int num; char name20;char sex; char addr20;a=10101,“Li Lin”,M,“123 Beijing Road”; ,scanf(%ld,printf(%o,scanf(“%ld,%s,%c,%sn”,#include int main() struct Date int month; int day; int year; ;struct Stu int num;char name20;char sex;int age;struct Date birthday; char addr30; a,b;,a.birthday.month=12;,a.age=10; b.age=9;,sum=a.age+b.age;,10.3 使用结构体数组,10.3.1定义结构体数组 10.3.2 结构体数组的应用举例,10.3 使用结构体数组,例10.4 有n个学生的信息(包括学号、姓名、成绩),要求按照成绩的高低顺序输出各学生的信息。 解题思路:用结构体数组存放n个学生信息,采用选择法对各元素进行排序(进行比较的是各元素中的成绩)。,#include struct Student 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;,常变量,若人数变为30,30,#include struct Student 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;,#define N 5,注意temp的类型,printf(“The order is:n“);for(i=0;istuk.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);printf(“n“);return 0; ,写法上与普通变量一致,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; ,例10.2 有3个候选人,每个选民只能投票选一人,要求编一个统计选票的程序,先后输入被选人的名字,最后输出各人得票结果。,解题思路: 设一个结构体数组,数组中包含3个元素 每个元素中的信息应包括候选人的姓名(字符型)和得票数(整型) 输入被选人的姓名,然后与数组元素中的“姓名”成员比较,如果相同,就给这个元素中的“得票数”成员的值加1 输出所有元素的信息,#include #include struct Person char name20; int count; leader3=“Li”,0,“Zhang”,0,“Sun”,0;,
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号