目 录  第 1 章 C++ 概述  第 2 章 数据类型、运算符和表达式  第 3 章 简单的输入 / 输出  第 4 章 C++ 的流程控制  第 5 章 函数  第 6 章 编译预处理  第 7 章 数组  第 8 章 结构体、共同体和枚举类型  第 9 章 指针和引用  第.

Slides:



Advertisements
Similar presentations
1 第二讲 C++ 编程基础. 2 主要内容 C++ 语言概述 C++ 编程基础 数据的简单输入输出 C++ 的发展 C++ 源程序结构与书写规范 C++ 编译器和集成开发环境.
Advertisements

程序设计导论 ——第15讲 结构与结构数组.
程序设计导论 结构与结构数组.
电子成绩单项目实现.
大学实用教程 C语言.
第14章 c++中的代码重用.
趙靖宇時間-專治你的Monday blue
第八章 类和对象.
补充内容 结构体 概述 定义结构体类型和定义结构体变量 结构体变量的引用 结构体变量的初始化 指针与结构体 用typedef定义类型的别名.
第7章 结构体、联合体和枚举类型 本章导读 本章主要知识点 《 C语言程序设计》 (Visual C++ 6.0环境)
C程序设计 第9章 自定义数据类型 主讲教师: 鲁 萍 西安建筑科技大学 理学院.
C 程式設計— 結構 台大資訊工程學系 資訊系統訓練班.
第九章 结构体 主讲教师 :贾月乐 电话:
第10章 结构体与共用体 概述 结构体 共用体 枚举类型.
C++程序设计 第二讲 清华大学软件学院.
补充内容 结构体 概述 定义结构体类型和定义结构体变量 结构体变量的引用 结构体变量的初始化 指针与结构体 用typedef定义类型的别名.
7.1 结构体类型 7.2 共用体 7.3 枚举类型 7.4 用typedef声明类型
结构体和共用体 2 梁春燕 华电信息管理教研室.
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
第9章 用户自己建立数据类型 9.1 定义和使用结构体变量 9.2 使用结构体数组 9.3 结构体指针 9.4 用指针处理链表
程序设计专题 第2讲 - 结构 刘新国.
自定义数据类型 潘荣江 山东大学计算机科学与技术学院
C++语言程序设计 C++语言程序设计 第四章 数组及自定义数据类型 C++语言程序设计.
第九章 结构体和共用体 结构体的定义 结构体的使用 共用体的定义 共用体的使用 主讲:李祥 时间:2015年10月.
C 程式設計— 結構 台大資訊工程學系 資訊系統訓練班.
辅导课程六.
第7讲 结构体与共用体 7.1 结构体 7.2 共用体.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
第11章 结构体和共用体.
第二章 Java语言基础.
C++语言程序设计 第二章 C++简单程序设计.
第七章 结构体、共同体和枚举类型.
第13章 结构体的应用 13.1 了解由用户构造的数据类型 13.2 结构体类型说明及结构体变量 13.3 结构体数组
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C语言复习3----结构体.
C语言程序设计.
第十章 用户自定义数据类型 目录 学生信息管理系统的开发 结构体数据类型的概述 结构体变量的使用 结构体数组
OOP6 結構Struct 黃兆武.
目录 9.1 结构体类型 9.2 共用体类型 9.3 枚举类型 9.4 类型声明符typedef 1.
第十章 结构体与链表 西安工程大学.
第二章 基本数据类型及运算 C数据类型概述 基本数据类型 运算符和表达式 混合运算与类型转换 数据的输入输出 顺序程序设计举例.
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
第9章 用户自己建立数据类型 C语言提供了一些系统已定义好的数据类型,如int,float,char,用户可以用它们定义变量。
浙江长征职业技术学院—计算机与信息技术系—相方莉制作
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
C++大学基础教程 第7章 其它自定义数据类型 北京科技大学 信息基础科学系.
2011 邀请中国姐妹学校韩国语研修团项目 申请时间: ~5月 27日 / 项目地点: 汉阳大学 安山校区 / 项目时间: (星期日) ~ 7.22(星期五) 费用: 100万元(韩币/人 (包含项目 - 学费, 教材费, 宿舍费, 接机费用及所有文化体验活动项目费用)
第九章 用户建立的数据类型.
<编程达人入门课程> 本节内容 内存的使用 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群: ,
C语言程序设计 第一章 数据类型, 运算符与表达式 第二章 顺序程序设计 第三章 选择结构程序设计 第四章 循环控制 第五章 数组.
第三章 数据抽象.
C++语言程序设计 C++语言程序设计 第四章 数组及自定义数据类型 C++语言程序设计.
第九节 赋值运算符和赋值表达式.
本节内容 结构体 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第二讲 基本数据类 型及数组等 此为封面页,需列出课程编码、课程名称和课程开发室名称。
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
第二章 Java基本语法 讲师:复凡.
结构体与共用体 结构体 结构体是一种构造数据类型 用途:把不同类型的数据组合成一个整体 自定义数据类型 结构体类型定义
本节内容 结构体.
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
基本知识 数据类型、变量、常量、运算符.
第14讲 结构体和共用体 计算机与通信工程学院.
C++语言程序设计 C++语言程序设计 第十章 多态 第十一组 C++语言程序设计.
第八章 结构体和共用体 结构体类型和结构体变量 结构体数组 结构体指针变量 共用体.
第9章 C++程序设计初步 9.1 C++的特点 9.2 最简单的C++程序 9.3 C++的输入输出 9.4 函数的重载
第六章 复合数据类型 指针的声明与使用 数组的声明与使用 指针与数组的相互引用 字符串及相关库函数 new与delete
安排座位.
Presentation transcript:

目 录  第 1 章 C++ 概述  第 2 章 数据类型、运算符和表达式  第 3 章 简单的输入 / 输出  第 4 章 C++ 的流程控制  第 5 章 函数  第 6 章 编译预处理  第 7 章 数组  第 8 章 结构体、共同体和枚举类型  第 9 章 指针和引用  第 10 章 类和对象  第 11 章 类和对象的其他特性  第 12 章 继承和派生  第 13 章 多态性  第 14 章 输入 / 输出流  第 15 章 模板  第一部分 面向过程的程序设计  第二部分 面向对象的程序设计

第 8 章 结构体、共用体和枚举类型

本章要点  了解结构  了解关于结构的各种操作  理解怎样使用结构操作数据  理解结构和函数之间的关系、掌握结构作 为参数传递与返回结构的函数方法  理解结构中数组的用法  理解怎样创建结构数组  了解共用体的特点  了解枚举类型

问题的提出 学号 姓名 年龄 性别 成绩 1 成绩 2 平均成绩 1 AA 19 M BB 18 F CC 17 M DD 18 F EE 19 M 每行的数据类型不相同,如何表示此二维数据? 如何交换两行值? 能否将一行看成一个整体? 定义一种类型,把不同的数据作为一个整体来处理 —— 结构体

数据类型 数组 有相同类型的数据集合 结构体 不同类型的数据集合 构造数据类型 : 由简单数据类型( int 、 float 、 char )组合而 成的(有机整体)数据类型。 基本类型 : 整型 、实型 、字符型

主要内容  结构体类型的定义 结构体类型的定义  结构体类型的变量和结构体类型数组 结构体类型的变量和结构体类型数组  共用体 共用体  枚举类型 枚举类型

结构体类型的定义 定义了一种新的数据类型 struct 结构体名或结构体名 struct 结构体名 { 类型标识符 成员名 1 类型标识符 成员名 类型标识符 成员名 n } ; 可为简单类型 也可为构造类型 关键字 不能少 成员 列表

例  以学生档案为例,假设包括如下数据项 学号( num ):整型 姓名( name ):字符串 性别( sex ):字符型 出生日期( birthday ): date 结构体 四门课成绩( sc ):一维实型数组

例 依此格式定义上例 struct date {int year,month,day;}; struct student {int num; char name[12]; char sex; date birthday; float sc[4]; }; 如 struct date 没事先说明可 写成: struct student {int num ; char name[12]; char sex; struct {int year; int month; int day; }birthday; float sc[4]; };

例 例 1 :一组相关变量 定义结构体类型 新数据类型 结构体成员 int month ; int day ; int year ; struct date { int year ; int month ; int day ; }; char name[30]; struct wage float salary ; { char name[30]; float salary ; }; 不同数据类型的成员 例 2 :一组相关变量 定义结构体类型

说明 (1) 结构体类型是一种构造数据类型,它与 int, char,float 等系统定义的基本数据类型具有同等地位, 是由用户自行定义的。 (2) 结构体类型不分配任何存储空间。 相应结构体类型的变量、数组及动态开辟的 存储单元占存储空间。 构造的数据类型可以用来定义变量

结构体类型的变量和数组的定义方法 先定义结构体类型,再单独进行定义 在定义类型的同时定义结构体变量 在定义一个无名结构体类型的同时,直接进行定义

方法一 先声明结构体类型再定义结构体变量 struct 结构体名 { 成员列表 } ; struct 结构体名 变量名列表; 或 结构体名 变量名列表

例 struct student { int num; char name[12]; char sex; date birthday ; float sc[4]; } ; struct student std,pers[3]; 或 student std,pers[3]; std :结构体变量 pers :结构体数组, (三个元素均为结构体类型变量)

变量 std 的结构 num name sex year month day sc[0] sc[1] sc[2] sc[3] birthday 注意:各成员按顺序排列

方法二 在声明类型的同时定义结构体变量 struct student { int num; char name[12]; char sex; struct date birthday ; float sc[4]; } std,pers[3]; struct 结构体名 { 成员列表 } 变量名列表;

struct { int num; char name[12]; char sex; date birthday ; float sc[4]; } std,pers[3]; 方法三 直接定义结构体变量 struct { 成员列表 } 变量名列表; 无结构体名

结构体类型的几点说明  结构体中的成员可以象变量一样使用。  成员名可以与程序中的变量同名  结构体中的成员也可为结构体变量  类型与变量是完全不同的概念。 先定义结构类型,再定义变量为该类型 。 类型:不可赋值、存贮、运算;系统不分配空间。 变量:可赋值、存贮、运算;系统要分配空间。

结构体类型变量初值 struct student { int num; char name[12]; char sex; date birthday ; float sc[4]; }std={10101,"LiMing",'M',1962,5,10,88,76,8 5.5,90}; 注意: 一一对应赋初值, 不允许跳跃赋值。 可只给前面的成员赋值

给结构体数组赋初值  数组中的每个元素是一个结构体类型的数据, 因此将此成员的值依次放在一对花括号中 例: struct bookcard {char num[5]; float money; }bk[3]={{"NO.1",35.5},{"NO.2",25.0}, {"NO.3",66.7}};

给二维结构体数组赋初值例 struct {char ch; int i; float x; }arr[2][3]={{{'a',1,3e10},{'a',2,4e10},{'a',3,5e10}},{{'b',1,6e5},{'b',2,7e5},{'b',3, 8e5}}};

结构体类型变量及其成员的引用  两种方式  引用成员  结构体变量名. 成员名  引用整体 struct t { int i, j; char name[10]; }; t t1={12, 48, "LiLi"}, t2; t2=t1; 其中 “ t2=t1; ” 等同于: t2.i=t1.i; t2.j=t1.j; strcpy(t2.name, t1.name); 结构体变量的成员可以像普 通变量一样进行各种运算, 如 stud1.num++ 、 stud1.sex=stud2.sex; 结构体变量不能 进行整体输入输出

优先级: 1 结合性: 左 例:有定义: struct date 对变量 today 作成员选择运算: { int year ; today. year int 型 int month ; today. month int 型 int day; today. day int 型 }today ; 成员选择运算的结果是得到了该结构变量的某个成 员,其数据类型是定义该结构体类型时成员列表中定 义的类型。 成员运算符 “.”

例 struct data { int month; int day; int year; }; struct student { char name[20]; char sex; data birthday; int sc[4] ; } std , arr[5] ; ( 1 )引用 sex std.sex (通过结构体变量引用) 引用 arr[0] 中的 sex : arr[0].sex 不能写作 arr.sex

例 struct data { int month; int day; int year; }; struct student { char name[20]; char sex; data birthday; int sc[4] ; } std , arr[5] ; ( 2 )引用 sc 中的元素,如 sc[1] std.sc[1] (通过结构体变量引用) 不能写成 std.sc C++ 语言不允许对数组 整体访问(字符串除外)

例 struct data { int month; int day; int year; }; struct student { char name[20]; char sex; data birthday; int sc[4] ; } std , arr[5] ; ( 3 )成员为字符串 如 name std.name (通过结构体变量引用) arr[0].name

例 struct data { int month; int day; int year; }; struct student { char name[20]; char sex; data birthday; int sc[4] ; } std , arr[5] ; ( 4 )内嵌结构体成员的引用 逐层使用成员名定位 引用 std 中的出生年份 std.birthday.year 只可引用最 低一级成员

例 std.name 是字符串,可以对它进行对任何 字符串允许的操作,包括输入输出。 对结构体变量中的每个成员,可对它进行同类 变量所允许的任何操作。 对结构体变量中的成员进行操作

例 struct data { int month; int day; int year; }; struct student { char name[20]; char sex; data birthday; int sc[4] ; } std , pers[5] ; ( 1 )对 name 的操作 cin>>std.name; 或 cin.getline(std.name,80); ( 2 )对 sex 的操作 ① cin>>std.sex; ② for(i=0;i<3;i++) cin>>pers[i].sex; ③ std.sex= 'M'; 注意: 不能写成 std.name="Li Ming"

struct data { int month; int day; int year; }; struct student { char name[20]; char sex; data birthday; int sc[4] ; } std , pers[5] ; 例 ( 3 )对 birthday 中 year 的操作 ① cin>>std.birthday.year; ② std.birthday.year=1962;

结构体数组 struct student {int num; char name[20]; char sex; int age; float score; char addr[30]; } stud[4] = { {23901, "Zang Li", 'F', 19, 78.5, "35 Shanghai Road"}, {23902, "Wang Fang", 'F', 19, 92, "101 Taiping Road"}, {23905, "Zhao Qiang", 'M', 20, 87, "56 Ninghai Road"}, {23908, "Li Hai", 'M', 19, 95, "48 Jiankang Road"}};

内存存储情况 stud[0] stud[1] "Zang Li" 'F' "35 Shanghai Road" "Wang Fang" 'F' "101 Taiping Road".

结构体数组的应用 P162 例 8.2 问题:建立一个学生档案的结构体数组,输入并输出学生的信息。 #include //li0802_2.cpp 输入输出学生信息 #include struct student { char num[16]; char name[20]; float score; }; student Input(student stud) { cout<<" 请输入学号、姓名和程序设计成绩 :"; cin>>stud.num>>stud.name>>stud.score; return stud; }

结构体数组的应用 P162 例 8.2 void Output(student stud) { cout<<setw(10)<<stud.num<<setw(10)<<stud.name <<setw(10)<<stud.score<<endl; } void main( ) {student studs[3]; for (int i=0;i<3;i++) studs[i]=Input(studs[i]); cout<<setw(10)<<" 学号 "<<setw(10)<<" 姓名 "<<setw(20)<<" 程 序设计成绩 "<<endl; for(i=0;i<3;i++) Output(studs[i]); cout<<endl; } 传值调用 演示

引用调用 #include //li0802_3.cpp 输入输出学生 信息 #include struct student { char num[16]; char name[20]; float score; }; void Input(student& stud) { cout<<" 请输入学号、姓名和程序设计成绩 :"; cin>>stud.num>>stud.name>>stud.score; }

引用调用 void Output(student& stud) { cout<<setw(10)<<stud.num<<setw(10)<<stud.name <<setw(10)<<stud.score<<endl; } void main( ) {student studs[3]; for (int i=0;i<3;i++) Input(studs[i]); cout<<setw(10)<<" 学号 "<<setw(10)<<" 姓名 "<<setw(20)<<" 程 序设计成绩 "<<endl; for(i=0;i<3;i++) Output(studs[i]); cout<<endl; }

求若干学生的平均成绩 struct stud {int num; char name[20]; int age; char sex; int score; }; #include //li0803.cpp float average(stud studs[], int n) { float aver=0; for(int i=0; i<n; i++) aver += studs[i].score; aver /= n; return aver; } void main(void) {stud studs[4]={ { , "Wu", 19, 'M', 80}, ……}; float aver ; aver=average(studs, 4); cout << " 平均成绩为 : "<< aver << endl; }

结构体变量所占字节数 结果均为 2 sizeof(float) sizeof(x) 结果均为 4 sizeof(struct stud) sizeof(stud) sizeof(stud1) 结果均为 33 实际运行输出 36(4 的倍数 ) struct stud { int num; /* 学号 */ char name[20];/* 姓名 */ int age; /* 年龄 */ char sex; /* 性别 */ int score; /* 成绩 */ }; 例 short i ; float x; struct stud stud1; sizeof(short) sizeof(i) 用 sizeof( 类型标识 / 变量名 )

共用体的定义及应用  问题的提出:表格 “ 学生班级 / 教师职务 ” name num sex job Li 1011 F S 501 Zhou 2085 M T prof Class Position struct people { char name[10]; int num; char sex; char job; union { int class; char position[20]; } category; }; Class 和 Position 的使用是互斥的,可分成两列, 为节省空间,合并成一列。

共用体变量的定义 不同数据类型的一组变量使用同一组内存单元。 union data { char c; float f; int i ; } ; union data a,b,c; 或 data a,b,c; union data { char c; float f; int i ; }a,b,c; union { char c; float f; int i ; }a,b,c; 共用体变量的定义同结构体一样有三种形式: 关键字共用体名 共用体类型

使用共用体变量 引用成员 a.i // 引用共用体变量中的整型变量 i a.c // 引用共用体变量中的字符变量 c a.f // 引用共用体变量中的实型变量 f 引用整体 a.i=2; b=a; // 引用整体 union {short int i; char c; float f; }a, b, c;

共用体类型的特点 f i c 起始地址 相同 特点:三个成员共享存储单元, 即三个成员起始地址相等 (部分存储单元共用) 同一时刻,只能有一个成员有效!!! 图 c 占 1 个字节 i 占 2 个字节 f 占 4 个字节 (1) 采用内存覆盖技术,使不同 数据类型的各个成员变量共用 同一存储区。 (2) 共用体变量所占内存长度为 其最长成员的长度。 sizeof(union data) = sizeof(a) = sizeof(b) ==> 4 ( 3 )结构体和共用体可以互相 嵌套。 ( 4 )作为一种数据类型, 共用 体变量也可以作为函数的参数 及返回值。

枚举类型  有时需将一个变量的取值范围限定在某个集合内  如 一周内天数:周一、周二、周三、周四、周五、周六、 周日  三基色:红、绿、兰  可将其定义成枚举类型  枚举 -- 将变量的取值范围列举出来 enum weekday { Sun, Mon, Tue, Wed, Thu, Fri, Sat }; 用户取名 枚举常量 enum basic_color { Red, Green, Blue }; 类型标识符为: enum weekday 或 weekday

枚举类型变量的定义 enum weekday { Sun, Mon, Tue, Wed, Thu, Fri, Sat }; weekday day1, day2  意义:变量 day1, day2 的值只能取上述括号中的 值 如: day1 = Sun; day2 = Wed;

特点  不能对枚举常量赋值 如 Sun=7 ×  枚举常量有默认值,为 0 , 1 , 2 ,  在定义时,可以改变枚举常量的值(通常周日是一周的 第七天)  enum weekday { Sun=7, Mon=1, Tue, Wed, Thu, Fri, Sat };  Tue 以后的枚举常量虽然没有显式赋值,但它们已有 值

特点  不能直接通过键盘输入枚举变量的值,  可以输出枚举常量和变量的值,实际上输出的是序号。 enum weekday { Sun, Mon, Tue, Wed, Thu, Fri, Sat }; weekday day1, day2; cin >> day2; // 此行错 cout << Sun << '\t' << Sat << endl; day1 = Tue; cout << day1 << '\n'; 输出?

取球 - 穷举法 P169 例 8.6  演示 li0806.cpp