c语言学习第十章结构和杂类

上传人:san****019 文档编号:70612580 上传时间:2019-01-17 格式:PPT 页数:63 大小:338.51KB
返回 下载 相关 举报
c语言学习第十章结构和杂类_第1页
第1页 / 共63页
c语言学习第十章结构和杂类_第2页
第2页 / 共63页
c语言学习第十章结构和杂类_第3页
第3页 / 共63页
c语言学习第十章结构和杂类_第4页
第4页 / 共63页
c语言学习第十章结构和杂类_第5页
第5页 / 共63页
点击查看更多>>
资源描述

《c语言学习第十章结构和杂类》由会员分享,可在线阅读,更多相关《c语言学习第十章结构和杂类(63页珍藏版)》请在金锄头文库上搜索。

1、第十章 结构体和杂类,2,本章教学内容、要求,内容 、结构体类型的定义,结构体变量的定义、引用、初始化及结构体数组; 2、 指向结构体类型数据的指针及用指针处理链表; 3、 共用体的概述; 4、 枚举类型的说明; 5、 用 typedef 定义类型。 要求 、了解结构体类型变量及结构体数组; 2、 掌握结构指针; 3、 掌握用指针处理链表; 4、 了解共用体的概述和枚举类型的说明; 5、 简单了解用 typedef 定义类型。,3,重点与难点,重点 1. 结构体及结构体数组的引用; 2. 用指针处理链表。 难点 用指针处理链表,4,10.1 结构,在实际问题中,一组数据往往具有不同的数据类型。

2、例如, 在学生登记表中,姓名应为字符型;学号可为整型或字符型; 年龄应为整型;性别应为字符型;成绩可为整型或实型。 显然不能用一个数组来存放这一组数据。 如: 语言中提供了另一种构造数据类型“结构体”。 它相当于其它高级语言中的记录。“结构体”是一种构造类型,它是由若干“成员”组成的。,5,10.1 结构,一、定义一个结构体的一般形式为: struct 结构名 成员表列 ; 二、成员类型说明形式为: 类型说明符 成员名; 因此若有n个成员,其结构体定义形式为: struct 结构名 类型说明符1 成员名1; 类型说明符2 成员名2; . 类型 说明符n 成员名n; ;,例如: struct s

3、tudent int num; char name20; char sex; int age; float score; char addr30; ; 注意在括号后的分号是不可少的。,6,定义结构体类型变量的三种方法,一、先定义结构体类型,再定义变量名: 定义结构体类型的一般形式: struct 结构体名 成员表列 ; 定义结构体变量的一般形式: struct 结构体名 变量名; 二、定义结构类型的同时定义结构变量:. 定义的一般形式: struct 结构体名 成员表列 变量名表列; 三、直接定义结构类型变量 定义的一般形式: struct 成员表列 变量名表列;,7,定义结构体类型变量的三种

4、方法,一、先定义结构体类型,再定义变量名: 如: struct student int num; char name20; char sex; int age; float score; char addr30; ; struct student s1, s2; /*变量定义*/,8,定义结构体类型变量的三种方法,二、定义结构类型的同时定义结构变量:. 如: struct student int num; char name20; char sex; int age; float score; char addr30; s1, s2;,9,定义结构体类型变量的三种方法,三、直接定义结构类型变量

5、: 如: struct int num; char name20; char sex; int age; float score; char addr30; s1, s2;,10,定义结构体类型变量的三种方法,四、关于结构体类型的说明: 1、 类型与变量是不同的概念 2、 结构体成员可象变量一样单独使用 3、 成员还可以是结构体变量 如: struct date int month; int day; int year; ; 4、 成员名可以与变量同名,struct student int num; char name20; char sex; int age; struct date bir

6、thday; char addr30; s1, s2;,11,结构体类型变量的引用,只有在对结构体变量赋值或作为参数传递给函数等特殊情况下可以直接对一个结构体变量整体操作。其他情况只能对结构体变量的各个成员分别引用。 一、结构体变量成员引用的一般形式: 结构体变量名 . 成员名 如: s1.num 成员变量可以进行各种运算(如普通变量一样), 如: +s1.num; 二、结构体嵌套引用:. 如: s1. birthday.day 三、同类型的结构体变量间可相互赋值 如: s1 = s2 四、可引用结构体变量或成员的地址 如: scanf(“%d“, /*输出s1的首地址*/ 结构体变量的地址主

7、要用于函数参数, 传递结构体的地址,成员运算符,12,结构体变量的初始化,外部、静态和自动结构体变量可以初始化 如:struct student long int num; char name20; char sex; char addr20; s1=99001,“Li Lin“,M,“Bejing“;,13,例如,下面的程序说明了访问结构成员的方法:结构成员变量的引用: . 如: stu.student_num=990505; strcpy(stu.name,”Li”); /*注意:不能用赋值语句*/ stu.sex=M; stu.age=18; stu.score=85.7; 因为我们用结

8、构来实现的目的,就是要区分一个数据聚集中的每个分量的类型和意义,每个分量数据类型可以相异,更重要的是,为了区分数据内容的意义。结构的成员有自己单独的名字,也就能区分每个成员各自的意义。,14,结构体变量的初始化,例10-1 输入某班32名学生的学号和考试成绩, 求成绩最好的学生的学号和成绩及总成绩。 分析: 定义结构体, 包含两个成员: 学号和成绩。,main() struct struct_name int num; float score; student, max; int i; float sum; max.score=0; sum=0;,定义结构体类型struct_name,结构体变

9、量student和max,用来存放成绩最好的那个学生的信息。,i 用来控制循环 sum用来存放总成绩,变量初始化,15,在数组中,数组是不能彼此赋值的。 例如,下面数组的赋值语句会导致一个编译错误: void main() char a10,b10; a=b; /error /. 这主要是因为数组名是一个常量指针,不允许被赋值。数组是一个数据类型的聚集,它本质上不是数据类型,定义的每个数组都认为是不同类型的,即使数组元素个数相同,如a与b。因而无法看作是同类型数据之间的赋值。结构就不同了,它大小固定,可以被赋值。,16,例【10-1】:本程序 的输出结果是什么 ? #include struc

10、t Person char name20; unsigned long id; float salary; ; Person pr1=“Frank Voltaire“,12345678,3.35; void main() Person pr2; pr2=pr1; /结构变量的赋值 printf(“%s %ld %f“,pr2.name,pr2.id ,pr2.salary); ,程序中定义了一个全局Person结构变量prl, 它使用与初始化数组相似的方法进行初始化。在main()函数中, 定义了一个结构变量pr2,然后使用赋值运算符将prl的内容赋值给pr2。 在结构Person中,成员na

11、me是一个字符数组,通过结构变量的赋值,该数组作为成员也被赋值了。,17,10.1.3结构体数组,一、结构体数组的定义 如:struct student long int num; char name20; char sex; int age; float score; char addr30; ; struct student stu3; 以上定义了一个数组 stu,数组有3个元素,元素类型为struct student 。,18,结构体数组,二、结构体数组的初始化 如:struct student long int num; char name20; char sex; int age;

12、float score; char addr30; stu3= 101,“Li ping“,M,45,80 , “Beijing“, 102,“Zhang ping“,M,30,62.5, “Shanghai“, 103,“He fang“,F,22,92.5, “Tianjin“ ;,19,例【10-2】下面的程序中,对一个Person结构数组进行“冒泡法”排序,分数高的排在后面: #include struct Person char name20; unsigned long id; float score; ; Person allone6= “jone“, 12345, 339.0,

13、 “david“, 13916, 449.0, “marit“, 27519, 311.0, “jasen“, 42876, 623.0, “peter“, 23987, 400.0, “yoke“, 12335, 511.0; void main() Person temp; for(int i=1; i allonej+1.score) /比较分数 temp=allonej; /结构变量的交换 allonej=allonej+1; allonej+1=temp; for(int k=0; k6; k+) /输出 printf(“%s“,allonek.name); printf(“%ld“

14、,allonek.id); printf(“%f“,allonek.score); ,20,10.1.4 结构与函数,结构变量可以作为一个整体被复制、赋值、传递给函有函数以及由函数返回。但不能将结构变量作为一个整体进行输入与输出。 【例10-3】打印某一学生的成绩。将结构变量整体作为函数参数。 #include “stdio.h“ struct studentinfo long student_num; char name10; char sex; int age; float score; char addr30; ; void print_score( struct studentinfo

15、 st) printf(“%5.2f“,st.score); main() struct studentinfo stu=990505, “Li“,M,18,85.7,“Rm303 Bldg4“; print_score(stu); ,21,10.2 指针在结构中的应用,一、指向结构体变量的指针 一个结构体变量的指针就是该变量所占据的内存段的首地址。 指向结构体指针的定义, 与结构体变量的定义完全类似。如: struct struct_name char name10; int num; float score; ; struc struct_name student, *p;,22,10.2 指针在结构中的应用,赋值语句 p=,指针变量p指向结构体变量student,引用结构体中的成员变量: (*p).成员名 或 p-成员名,相当于,student . 成员名,student,23,说明: 和成员运算符一样, “-”为指向运算符,是运算优先级最高的运算符。 由于成员运算符“.”的运算优先级高于运算符“*”,因此(*p).成员名中( ) 不能少。,*p.成员名,p=,不能用指向某个结构体变量的指

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号