




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第7章自定义数据类型7.1结构体类型7.2共用体7.3枚举类型7.4用typedef声明类型基本的数据类型:int、float、double、char、 bool、指针类型、引用类型用户自定义数据类型:
数组 结构体(structure)类型 共用体(union)类型 枚举(enumeration)类型
类(class)类型有时需要将不同类型的数据组合成一个有机的整体,以供用户方便地使用。这些组合在一个整体中的数据是互相联系的。例如,一个学生的学号、姓名、性别、年龄、成绩、家庭地址等项,都是这个学生的属性。见图7.1。 图7.17.1结构体类型
7.1.1结构体概述利用结构体将若干个类型不同的数据项组合在一起。它相当于SQLServer中的记录(record)。例如,定义一个学生的结构体:structStudent
//声明一个结构体类型Student{
intnum;
//包括一个整型变量num
charname[20];
//包括一个字符数组name
charsex;
//包括一个字符变量sex
intage;
//包括一个整型变量age
floatscore;
//包括一个单精度型变量
charaddr[30];
//包括一个字符数组addr};
//最后有一个分号struct是声明结构体类型时所必须使用的关键字。Student是一个结构体类型名,与int、char、float、double等一样,可用来定义变量,只不过结构体类型需要事先由用户自己声明。声明一个结构体类型的一般形式为:struct结构体类型名{ 成员表列;};成员表列的声明:类型名成员名;声明结构体类型的位置一般在文件的开头,在所有函数(包括main函数)之前,以便本文件中所有的函数都能利用它来定义变量。当然也可以在函数中声明结构体类型。前面只是指定了一种结构体类型,它相当于一个模型,但其中并无具体数据,系统也不为之分配实际的内存单元。为了能在程序中使用结构体类型的数据,应当定义结构体类型的变量,并在其中存放具体的数据。1.定义结构体类型变量的方法可以采取以下3种方法定义结构体类型的变量。(1)先声明结构体类型再定义变量名如上面已定义了一个结构体类型Student,可以用它来定义结构体变量。如Studentstudent1,student2;7.1.2结构体类型变量以上定义了student1和student2为结构体类型Student的变量,即它们具有Student类型的结构。如图7.2所示。图7.2(2)在声明类型的同时定义变量structStudent{ intnum; charname[20]; charsex;
intage; floatscore; charaddr[30];}student1,student2;
定义的一般形式为:struct结构体名{ 成员表列}变量名表列;(3)直接定义结构体类型变量struct//结构体类型名省略{ 成员表列}变量名表列;提倡使用先定义类型后定义变量的第(1)种方法。struct{
intnum; charname[20]; charsex;
intage; floatscore; charaddr[30];}student1,student2;说明:(1)类型与变量是不同的概念,不要混淆。只能对结构体变量中的成员赋值,而不能对结构体类型赋值。在编译时,是不会为类型分配空间的,只为变量分配空间。(2)对结构体中的成员,可以单独使用,它的作用与地位相当于普通变量。(3)成员也可以是一个结构体变量。structDate//声明一个结构体类型Date{
intmonth;
intday;
intyear;};structStudent//声明一个结构体类型Student{
intnum; charname[20]; charsex;
intage; Datebirthday;
charaddr[30];}student1,student2;图7.3(5)结构体中的成员名可以与程序中的变量名相同,但二者没有关系。例如,程序中可以另定义一个整型变量num,它与student中的num是两回事,互不影响。Student的结构见图7.3所示。2.结构体变量的初始化Studentstudent1={10001,"ZhangXin",'M',19,90.5,"Shanghai"};3.结构体变量的引用(1)将一个结构体变量的值赋给另一个具有相同结构的结构体变量。如:student1=student2;(2)引用结构体变量中的一个成员的方式:
结构体变量名.成员名 如:student1.num=1001;(3)如果成员本身也是一个结构体类型,则要用若干个成员运算符,一级一级地找到最低一级的成员。如果想引用student1变量中的birthday成员中的month成员,则必须逐级引用:
student1.birthday.month(4)不能将一个结构体变量作为一个整体进行输入和输出。如:cout<<student1;只能对结构体变量中的各个成员分别进行输入和输出。(5)对结构体变量的成员可以像普通变量一样进行各种运算(根据其类型决定可以进行的运算种类)。 student2.score=student1.score; sum=student1.score+student2.score; student1.age++;//“.”运算符的优先级最高 ++student1.age;(6)可以引用结构体变量成员的地址,也可以引用结构体变量的地址。如
cout<<&student1;
//输出student1的首地址
cout<<&student1.age;
//输出student1.age的地址结构体变量的地址主要用作函数参数,将结构体变量的地址传递给形参。一个结构体变量中可以存放一组数据(如一个学生的学号、姓名、成绩等数据)。如果有10个学生的数据需要参加运算,显然应该用数组,这就是结构体数组。结构体数组与以前介绍过的数值型数组的不同之处在于:每个数组元素都是一个结构体类型的数据,它们都分别包括各个成员项。7.1.4结构体数组1.定义结构体数组和定义结构体变量的方法相仿,定义结构体数组时只需声明其为数组即可。如structStudent//声明结构体类型Student{intnum;charname[20];charsex;intage;floatscore;charaddr[30];};Studentstu[3];//定义Student类型的数组stustructStudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu[3];struct
{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu[3];或也可以直接定义一个结构体数组,如见图7.4。数组各元素在内存中连续存放,见图7.5示意。图7.4图7.52.结构体数组的初始化对结构体数组可以初始化。如structStudent{intnum; charname[20]; charsex;
intage;
floatscore; charaddr[30];}sty[3]={{10101,"LiLin",'M',18,87.5,"BeijingRoad"},{10102,"ZhangFun",'M',19,99,"ShanghaiRoad"},{10104,"WangMin",'F',20,78.5,"ZhongshanRoad"}};定义数组stu时,可以不指定元素个数,写成如下形式:
stu[]={{…},{…},{…}};数组的初始化也可以用以下形式:Studentstu[]={{…},{…},{…}};
//已事先声明了结构体类型Student通过指向结构体变量的指针引用结构体变量中的成员 形式:指针变量->成员名7.1.5指向结构体变量的指针也就是说,以下3种形式等价:①结构体变量.成员名。如stu.num。②(*p).成员名。如(*p).num。③p->成员名。如p->num。“->”称为指向运算符。2.用结构体变量和指向结构体变量的指针构成链表链表是一种常见的重要的数据结构。下图表示最简单的一种链表(单向链表)的结构。链表有一个“头指针”变量,图中以head表示,它存放一个地址。该地址指向一个元素。链表中的每一个元素称为“结点”,每个结点都应包括两个部分:一是用户需要用的实际数据,二是下一个结点的地址。链表中的各个结点不是通过new
和delete动态建立和释放。而是事先申请好的单元,但删除某节点时,不能释放空间。静态链表的建立链表中的各个结点通过new
和delete动态建立和释放。动态链表的建立本章到此结束谢谢! 第3篇基于对象的程序设计 第8章类和对象 4学时 第9章关于类和对象的进一步讨论 6学时 第10章运算符重载 (自学) 第4篇面向对象的程序设计 第11章继承与派生 8学时 第12章多态性与虚函数 8学时 第13章输入输出流 (自学) 第14章C++工具 4学时如何学好C++程序设计?考核办法综合成绩:平时成绩、期中考试成绩、 期末考试成绩不及格率:至少20%第1章C++的初步知识第2章数据类型与表达式第1篇
基本知识第1章C++的初步知识*1.1从C到C++*1.2最简单的C++程序1.3C++程序的构成和书写形式1.4C++程序的编写和实现1.5关于C++上机实践C语言产生于20世纪70年代,不是为初学者设计的,而是为计算机专业人员设计的。大多数系统软件和许多应用软件都是用C语言编写的。 优点:功能丰富、表达能力强、使用灵活方便、应用面广、目标程序效率高、可移植性好特点:面向过程的结构化和模块化的语言
*1.1从C到C++C++是于20世纪80年代初在C语言的基础上开发成功的。开发较大规模的程序,提高软件开发的效率。
特点:C++保留了C语言原有的所有优点,增加了面向对象的机制。C++是由C发展而来的,与C兼容。并在原来面向过程的机制基础上,对C语言的功能做了不少扩充。C++既可用于面向过程的结构化程序设计,又可用于面向对象的程序设计,不要把面向对象和面向过程对立起来。C++上机实践
C++编译系统有很多,如VisualC++、C++Builder等;无论在什么环境下编译和运行一个C++程序,应当掌握标准C++。应当能在不同的C++环境下运行自己的程序,并且了解不同的C++编译系统的特点和使用方法,在需要时能将自己的程序方便地移植到不同的平台上。例:输出一行字符:“ThisisaC++program.”。#include<iostream>//包含头文件iostreamusingnamespacestd;//使用命名空间stdintmain(){
cout<<″ThisisaC++program.″; return0;}*1.2最简单的C++程序例1.2求a和b两个数之和。#include<iostream>//预处理命令usingnamespacestd;//使用命名空间stdintmain()//主函数首部{//函数体开始
inta,b,sum;//定义变量
cin>>a>>b;//输入语句
sum=a+b;//赋值语句
cout<<″a+b=″<<sum<<endl;//输出语句
return0;}
//函数结束“//使用命名空间std”是一个注释,C++规定在一行中如果出现“//”,则从它开始到本行末尾之间的全部内容都作为注释。(思考)应用函数调用的方法编写程序?例1.3给出三个数a、b和c,求三个数中的最大数。例1.4包含类的C++程序。#include<iostream>usingnamespacestd;classStudent//声明一个类,类名为Student{private://以下为类中的私有部分
intnum;//私有变量num
intscore;//私有变量scorepublic://以下为类中的公用部分
voidsetdata()//定义公用函数setdata
{cin>>num;//输入num的值
cin>>score;//输入score的值 }
voiddisplay()//定义公用函数display{cout<<″num=″<<num<<endl;//输出num的值
cout<<″score=″<<score<<endl;//输出score的值
}};//类的声明结束Studentstud1,stud2;intmain()//主函数首部{ stud1.setdata(); //调用对象stud1的setdata函数
stud2.setdata(); //调用对象stud2的setdata函数
stud1.display();//调用对象stud1的display函数
stud2.display();//调用对象stud2的display函数
return0;}在一个类中包含两种成员:数据和函数。在C++中把一组数据和有权调用这些数据的函数封装在一起,组成一种称为“类(class)”的数据结构。类可以体现数据的封装性和信息隐蔽。在大多数情况下,会把所有数据指定为私有,以实现信息隐蔽。而把函数指定为公有。VisualC++编写C++程序的三种方式1、创建单个文件
2、创建工程(Win32ConsoleApplication)往工程里添加文件3、创建工作区往工作区中添加工程往工程里添加文件C++程序的结构和书写格式归纳如下:(1)一个C++程序可以由一个程序文件或多个程序文件构成。在程序编译时,编译系统分别对各个文件进行编译,因此,一个文件是一个编译单元。1.3C++程序的构成和书写形式(2)在一个程序单位中,可以包括以下几个部分:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广东省汕头市潮南实验学校2025届高考化学一模试卷含解析
- 2025届陕西省西安市西北工业大学高考适应性考试化学试卷含解析
- 急危重症病人管理
- 广东省肇庆第四中学2025届高三下学期联考化学试题含解析
- 2025年飞机空调车ACM项目合作计划书
- 2025届甘肃省天水市清水县第四中学高三第二次模拟考试化学试卷含解析
- 做自己和他人的“安全卫士”倡议书
- 心理信息融合课件
- 天津市五校2025届高考冲刺化学模拟试题含解析
- 中考数学高频考点专项练习:专题14 考点29 多边形和平行四边形及答案
- 楼梯踏步抹灰标准合同7篇
- 【厦门大学】DeepSeek大模型赋能高校教学和科研
- 巧手包出小混沌(课件)三年级下册劳动人民版
- 2025-2030中国IC卡读写器行业市场现状分析及竞争格局与投资发展研究报告
- 2024-2025学年人教版初中地理七年级下册课件 第8章 第4节 俄罗斯
- 2025年南京秦淮区一中七年级下3月份月考英语试卷
- 2025届高三化学二轮复习 化学工艺流程 课件
- 2024广东深圳市龙岗区产服集团“春雨”第二批招聘笔试笔试参考题库附带答案详解
- 2025年河南经贸职业学院单招职业适应性测试题库带答案
- 《清华大学介绍》课件
- 硫磺安全技术说明书MSDS
评论
0/150
提交评论