kj-第10章结构体和其他数据类型

更新时间:2023-09-04 10:21:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

C语言程序设计\电子教案

第10章结构体与其它数据类型

本章概述 本章的学习目标 主要内容

C语言程序设计

第10章 结构体和其他数据类型

第1页

C语言程序设计\电子教案

本章概述

与之前学过的整型、实型及字符型等基本数据类型不同,本章即 将学习的各种数据类型都需要先定义数据类型,再定义变量。 针对现实生活中描述同一事物多方面属性的需要,结构体类型可 以包含多个成员,每个成员用于描述事物的某方面属性;共用体 类型在形式上与结构体类型相似,所不同的是,共用体类型的各 成员“共用”同一片内存单元,而结构体类型的各成员分配各自 不同的内存单元 链表是一种重要的数据结构,是实现动态存储分配重要方式,也 是实现诸如树、图等复杂数据结构的主要手段,与顺序结构(数 组)相比,最大的优点在于,链表在删除和插入元素时,不需要 移动其他元素。 枚举类型因为枚举常量往往具有明确含义,故可提高程序的可读 性,降低程序出错的概念 typedef用于为已有数据类型定义别名,可提高程序的可读性及通 用性。第10章 结构体和其他数据类型

C语言程序设计

第2页

C语言程序设计\电子教案

本章的学习目标

本章教学目的:理解结构体类型的概念及其应用环境, 熟练掌握结构体数据类型的定义、结构体变量的定义 及引用、结构体数组、掌握结构体指针,包括结构体 自身及其成员的指针。理解链表的概念,使用结构体 和指针定义并操作链表(单链表)。理解共用体类型 的概念及其应用环境,通过与结构体类型对比的方式, 掌握共用体类型的相关内容。理解枚举类型的含义, 掌握枚举类型的定义和使用。理解typedef的含义, 掌握typedef的使用方法和技巧。 本章教学重点:结构体类型的概念及其应用 本章教学难点:链表的概念,使用结构体和指针定义 并操作链表第10章 结构体和其他数据类型

C语言程序设计

第3页

C语言程序设计\电子教案

主要内容10.1 结构体的概念 10.2 结构体类型变量和数组

10.3 指向结构体的指针10.4 使用指针处理链表

10.5 共用体和枚举类型10.6 用typedef声明类型 10.7 程序设计举例

C语言程序设计

第10章 结构体和其他数据类型

第4页

C语言程序设计\电子教案

10.1 结构体的概念在数据库中为了表示一些相关的简单数据类型,如学 生的挡案、职工工资表、图书资料等,可以定义数据库中 表的结构,然后根据数据库中表的结构建立若干个“记 录”,形成数据库中的表文件,其中每个记录是由多项数 据构成的一个集合。 C语言为了表达此类问题,可使用结构体类型,并定 义其变量、赋值,形成一个包含多项数据的数据单元。

C语言程序设计

第10章 结构体和其他数据类型

第5页

C语言程序设计\电子教案

1

0.1 结构体的概念例如,可以用一个结构体来描述学生,包括学号、姓 名、年龄、性别、成绩等数据项。每项数据有不同的类型, 类型为:学号(无符号整型)、姓名(字符数组)、性别 (字符型)、年龄(整型)、成绩(单精度类型),则需 要声明以下结构体类型: struct student {unsigned int num; char name[10]; char sex; int age; float score; }; 其中struct 是结构体的关键字;student是结构体的 标识符,即结构体名;num、name[10]、sex、age、 score 等是结构体成员,组成成员表列。C语言程序设计 第10章 结构体和其他数据类型

第6页

C语言程序设计\电子教案

10.1 结构体的概念结构体的类型声明方式为: struct 结构体名 { 成员表列; }; 其中各成员应进行类型说明。结构体类型声明时应注意以下几点: (1)结构体类型声明并不引起内存分配, 结构体类型变量的定义才引起内存的 分配。 (2) 在声明结构体类型时,允许先声 明过的结构体类型作另一个结构体 类型的成员,如右所示。C语言程序设计 第10章 结构体和其他数据类型

struct score {float score_math; float score_english; float score_computer; }; struct student {unsigned num; char name[10]; char sex; int age; struct score class; };第7页

C语言程序设计\电子教案

10.2结构体类型变量和数组10.2.1 结构体类型变量1.结构体类型变量的定义结构体变量定义有三种方法 (1) 先声明结构体类型,后定义变量 这种方法的语法格式为: struct 结构体名 { 例如: struct student { unsigned num; char name[10]; char sex; int age; float score; }; struct student student1,student2; 定义了student结构体类型的2个变量: student1,student2。第8页

成员表列;}; struct 结构体名 结构体变量表;

C语言程序设计

第10章 结构体和其他数据类型

C语言程序设计\电子教案

10.2.1 结构体类型变量(2) 声明结构体类型 的同时定义变量。 一般形式: struct 结构体名 { 成员表列; }结构体变量表;例如: struct student { unsigned num; char name[10]; char sex; int age; float score; }student1,student2,student3; 定义了student结构体类型的三个变量: student1,student2,student3。

C语言程序设计

第10章 结构体和其他数据类型

第9页

C语言程序设计\电子教案

10.2.1 结构体类型变量例如: struct { unsigned num; char name[10]; char sex; int age; float score; }student1,student2,student3; 直接定义了结构体类型的三个变量 student1、student2和student3。 但这种定义方式因无类型名,所以不能 再定义更多的变量。第10章 结构体和其他数据类型

(3) 直接定义变量 一般格式: struct { 成员表列; } 结构体变量表;

C语言程序设计

第10页

C语言程序设计\电子教案

10.2.1 结构体类型变量

定义了一个结构体类型的变量后,系统就为其按结构分配相

应的内存,其大小取决于结构体的具体成员,如前面所举的 例子中,一个struct student的结构体类型变量应分配: num(2字节)+name(10字节)+sex(1字节) +age(2字节)+score(4字节)=19字节

无论是否给每个成员赋值,它都以占据19个字节而存在。

C语言程序设计

第10章 结构体和其他数据类型

第11页

C语言程序设计\电子教案

10.2.1 结构体类型变量2.结构体变量的初始化结构体变量初始化是在定义 变量时,指定变量各个成员 的初始值。 例如: struct student { unsigned num; char name[10]; char sex; int age; float score; }student1={9805, “liliang ”, m ,20,80.0};

main() { static struct student { unsigned num; char name[10]; char sex; int age; float score; }student2={9807,wangning”, m ,19,90.0}; … … } student1为全局变量, student2为静态局部变量。第12页

C语言程序设计

第10章 结构体和其他数据类型

C语言程序设计\电子教案

10.2.1 结构体类型变量3.结构体成员的引用

结构体类型变量定义之后即可在程序中使用。但不像其他简单变量那样, 直接使用其名,而只能对其成员进行操作,结构体成员的引用形式为: 结构体变量名.成员名 其中 “.” 为成员运算符,如: scanf(”%d,%s,%c,%d,%f”,&student1.num,http://www.77cn.com.cn, &student1.sex,&student1.age,&student1.score); printf(”%d,%s,%c,%d,%f\n”,student1.num,http://www.77cn.com.cn, student1.sex,student1.age, student1.score);

而下面 scanf(”%d,%s,%c,%d,%f”, &student1); printf(”%d,%s,%c,%d,%f\n”, student1); 则是错误的

C语言程序设计

第10章 结构体和其他数据类型

第13页

C语言程序设计\电子教案

10.2.1 结构体类型变量 —注意事项(1) 如果成员是另一定义过的结构体类型变量,则要用若干个成 员运算符,逐级找到最低一级的成员,各级成员按顺序用成员 运算符连接起来。只能对最低一级成员进行赋值或运算。struct score {float score_math; float score_english; float score_computer; }; struct student { unsigned num; char name[10]; char sex; int age; struct score report; }student1;

这里可用student1.num形式引用num这个成员,而对report这个成 员,则必须用student1.report.score_math , student1. report.score_english , student1. report.score_computer 形式来引用。C语言程序设计 第10章 结构体和其他数据类型

第14页

C语言程序设计\电子教案

10.2.1 结构体类型变量 —注意事项(2) 可以像简单变量一样,对结构体成员进行运算等各种 操作,且成员运算符“.”优先级最高。 (3) &student1 表示student1这个结构体变量所占的首地 址,&student1.num表示成员num的地址。

C语言程序设计

第10章 结构体和其他数据类型

第15页

C语言程序设计\电子教案

10.2.1 结构体类型变量例10.1 编写程序,从键盘输入一个学生的学号、姓名、数学成绩、英语成绩、计算机 成绩,然后输

出学生的学号、姓名和三门课的平均成绩。

#include <stdio.h> struct student { unsigned num; char name[10] float score_math; float score_english; float score_computer }; int main() { struct student st; float aver; printf(“Input number:”); scanf(“%d”,&st.num); printf(“Input name:”); scanf(“%s”,http://www.77cn.com.cn);

printf(“Input score of mathmatics:”); scanf(“%f”,&st.score_math); printf(“Input score of english:”); scanf(“%f”,&st.score_english); printf(“Input score of computer:”); scanf(“%f”,&st.score_computer); aver=(st.score_math+ st.score_english+ st.score_computer)/3; printf(“Number=%d\n”, st.num); printf(“Name=%s\n”, http://www.77cn.com.cn); printf(“average=%f\n”, aver); return 0; }第16页

C语言程序设计

第10章 结构体和其他数据类型

C语言程序设计\电子教案

10.2.2 结构体类型数组1.结构体类型数组的定义方法

结构体类型数组与普通数组不同之处在于,结构体 数组的每个数组元素都存储一组数据(各成员的数据), 而普通数组的每个数组元素只存储一个数据。 与定义结构体类型变量的方法相仿,三种定义方法如 下表所示。

C语言程序设计

第10章 结构体和其他数据类型

第17页

C语言程序设计\电子教案

10.2.2 结构体类型数组2.结构体类型数组成员的初始化struct date {int year; int month; int day; }person[2]={{1997,7,1},{2000,8,8}}; 定义了数组person,数组中含有2个元素,每个元素都是 struct date结构体类型,定义的同时对其成员进行了初始化。下 表给出了结构体类型数组person的逻辑存储结构。 year person[0] person[1]C语言程序设计

month 7 8

day 1 8第18页

1997 2000

第10章 结构体和其他数据类型

C语言程序设计\电子教案

10.2.2 结构体类型数组3.结构体类型数组元素的引用结构体类型数组元素也是通过数组名和下标来引用的, 结构体类型数组元素的引用与结构体类型变量的引用一样, 也是逐级找到最低一级成员,对最低一级成员进行赋值或 运算。引用形式为: 数组名[下标].成员名 可用如下形式来引用数组元素: person[1].year=2000; person[1].month=person[0].month+1; person[1].day=6+2;C语言程序设计 第10章 结构体和其他数据类型

第19页

本文来源:https://www.bwwdw.com/article/o3gi.html

Top