数据结构实用教程补充知识.ppt

上传人:本田雅阁 文档编号:3185665 上传时间:2019-07-22 格式:PPT 页数:72 大小:2.87MB
返回 下载 相关 举报
数据结构实用教程补充知识.ppt_第1页
第1页 / 共72页
数据结构实用教程补充知识.ppt_第2页
第2页 / 共72页
数据结构实用教程补充知识.ppt_第3页
第3页 / 共72页
数据结构实用教程补充知识.ppt_第4页
第4页 / 共72页
数据结构实用教程补充知识.ppt_第5页
第5页 / 共72页
点击查看更多>>
资源描述

《数据结构实用教程补充知识.ppt》由会员分享,可在线阅读,更多相关《数据结构实用教程补充知识.ppt(72页珍藏版)》请在三一文库上搜索。

1、C程序设计 (第二版),新世纪计算机基础教育丛书丛书 主编 谭浩强,总 目 录,第1章 C语言概述 第2章 程序的灵魂算法 第3章 数据类型、运算符与表达式 第4章 最简单的C程序设计顺序程序设计 第5章 选择结构程序设计 第6章 循环控制 第7章 数组 第8章 函数,第9章 预处理命令 第10章 指针 第11章 结构体与共用体 第12章 位运算 第13章 文件 第14章 C+对C的扩充 第15章 C+的面向对象基础 第16章 常见错误和程序调试,C+的特点 最简单的C+程序 C+的输入输出 运算符和函数的重载 * 带缺省参数的函数 变量的引用类型 作用域运算符 动态分配/撤销内存的运算符ne

2、w和delete 结构、联合和枚举名都是类型名,C+ 对 C 的 扩 充,1. C+的特点 C语言是结构化和模块化的语言,它是面向过程的。在处理较小规模的程序时,程序员用C语言较得心应手。但是当问题比较复杂、程序的规模比较大时,结构化程序设计方法就显出它的不足。 C程序的设计者必须细致地设计程序中的每一个细节,准确地考虑到程序运行时每一时刻发生的事情,例如各个变量的值是如何变化的,什么时候应该进行哪些输入,在屏幕上应该输出什么等。这对程序员的要求是比较高的,如果面对的是一个复杂问题,程序员往往感到力不从心。当初提出结构化程序设计方法的目的是解决软件设计危机,但是这个目标并未完全实现。,为了解决

3、软件设计危机,在20世纪80年代提出了面向对象的程序设计(Object-Oriented programming,简称OOP) ,在这种形势下,C+应运而生。C+是由贝尔实验室的Bjarne Stroustrup博士及其同事在C语言的基础上开发成功的。 C+保留了C语言原有的所有优点,增加了面向对象的机制。C+与C完全兼容,用C语言写的程序可以不加修改地用于C+。从C+名字可以看出它是对C的扩充,是C的超集。它既可以用于结构化程序设计,又可用于面向对象的程序设计,因此它是一个功能强大的混合型的程序设计语言。,使用C+必须事先安装C+编译系统,在windows系统下可以使用Visual C+ 6

4、.0。 C源程序的后缀一般为.c, C+源程序的后缀一般为.cpp (为C plus plus的缩写,即C+)。 在Visual C+ 6.0开发环境中,既可以使用C语言,也可以使用C+语言。它有两个编译系统,根据源程序文件名的后缀是 .c还是.cpp来决定使用哪个编译系统。 如上所述,面向对象程序设计方法主要是解决大型软件的设计问题。只有编写过大型程序的人才会体会到C的不足和C+的优点。,C+对C的“增强”,表现在两个方面: (1) 在原来面向过程的机制基础上,对C语言的功能做了不少扩充。 (2) 增加了面向对象的机制。 本章介绍C+对C功能的扩充。,2. 最简单的C+程序 例:输出一行字符

5、。 #include #include /* 本程序的作用是输出一行字符 */ void main( ) printf(“This is a c+ program. n“); cout “ This is a c+ program. n“ ; /本行输出一行字符 本程序和以前见过的C程序有什么不同?,除了可以用 /*/ 形式 的注释行外,还允许使用 以/ 开头的注释。,用cout进行输出,#include命令将该头文件iostream.h“包含”进来,C/C+中包含文件的语句,文件包含:是指一个源文件可以将另外一个源文件的全部内容包含进来。 格式 #include “文件名” 或:#inclu

6、de 在作预处理时,从磁盘上读取被包含文件的内容,然后将它插入到 include命令处,成为源程序的一部分。,说明: 1.一个include命令只能指定一个被包含文件。 2.文件名可以用双引号或尖括号括起来。 #include “file2.c” 先在 用户当前目录中查找, 若无,再按系统标准方式查找 file2.c #include 按系统标准方式查找 file2.c 3.被包含文件与所在文件经预编译后成为一个文件。 4. 文件包含可嵌套,(1) 在C+程序中一般习惯在主函数main前面加了一个类型声明符void,表示main函数没有返回值。 (2) 除了可以用 /*/ 形式的注释行外,还允

7、许使用以/ 开头的注释。从程序最后一行中可以看到:以/开头的注释可以不单独占一行,它出现在语句之后。编译系统将/ 以后到本行末尾的所有字符都作为注释。应注意:它是单行注释,不能跨行。C+的程序设计人员多愿意用这种注释方式,它比较灵活方便。 (3) 除了可以用printf函数输出信息外,还可以用cout进行输出。cout要与运算符配合使用,程序中cout的作用是将运算符右侧的内容送到输出设备中输出。 (4) 使用cout需要用到头文件iostream.h,在程序的第一行用#include命令将该头文件“包含”进来。,#include #include /* 本程序的作用是输出一行字符 */ vo

8、id main( ) printf(“This is a c+ program. n“); cout “ This is a c+ program. n“ ; /本行输出一行字符 程序运行时输出: This is a c+ program. This is a c+ program. 可以看到程序中最后两个语句的作用相同,都是输出This is a c+ program.。,3. C+的输入输出 在C语言中文件不是由记录构成的。对文件的存取是以字节为单位的,对一个C文件的输入和输出是一个字节流。 输入和输出的数据流的开始和结束只受程序控制而不受物理符号(如回车换行符)的控制。这种文件称为流式文

9、件。在输入操作中,字节从输入设备流向内存,在输出操作中,字节从内存流向输出设备。 C+为了方便使用,除了可以利用printf和scanf函数进行输出和输入外,还增加了标准输入输出流cout和cin。cout是由c和out两个单词组成的,代表C+的输出流,cin是由c和in两个单词组成的,代表C+的输入流。它们是在头文件iostream.h中定义的。在键盘和显示器上的输入输出称为标准输入输出,标准流是不需要打开和关闭文件即可直接操作的流式文件。,C+预定义的标准流如表1所示。 表 1,3.1 用cout进行输出 cout必须和输出运算符一起使用。 ( 常称为“插入运算符” )。 例如:cout“

10、Hello!n”; 也可以不用n控制换行,在头文件iostream.h中定义了控制符endl代表回车换行操作,作用与n相同。 可以在一个输出语句中使用多个运算符 将多个输出项插入到输出流cout中 。 运算符的结合方向为自左向右,因此各输出项按自左向右顺序插入到输出流中。例如:,可以在一个输出语句中使用多个运算符 将多个输出项插入到输出流cout中,运算符的结合方向为自左向右,因此各输出项按自左向右顺序插入到输出流中。 例如: for (int i=1; i=3;i+) cout“count=“iendl; 输出结果为: count=1 count=2 count=3 注意:每输出一项要用一个

11、 符号。 不能写成 couta,b,c,“A“; 形式。,C+允许对变量的声明放在程序的任何位置(但必须在使用该变量之前)。这是C+对C限制的放宽。,用cout和 可以输出任何类型的数据, 如: float a=3.45; int b=5; char c=A; cout“a=”a“,”“b=”b“, “c=“cendl; 输出结果为 a=3.45,b=5,c=A,输出时未指定数据的类型,系统会自动按数据的类型进行输出,如果要指定输出所占的列数,可以用控制符setw设置 注意:若使用setw,必须包含头文件 iomanip.h, 如: cout“a=“setw(6)aendl“b=“setw(6

12、)bendl “c=“setw(6)cendl; 输出结果为: a= 3. 45 b= 5 c= A,setw(6) 是为后面一个输出项预留6列,如输出项的长度不足6列则数据默认向右对齐,若超过6列则按实际长度输出,在C+中将数据送到输出流称为“插入” (inserting) ,或“放到”(putting) 。 常称为“插入运算符”。,3.2 用cin进行输入 输入流是指从输入设备向内存流动的数据流。 标准输入流cin是从键盘向内存流动的数据流。用 运算符从输入设备键盘取得数据送到输入流cin中,然后送到内存。 在C+中,这种输入操作称为“提取” 或“得到” 。 常称为“提取运算符”。,cin

13、要与 配合使用。例如: int a; float b; cinab; /输入一个整数和一个实数。 注意不要写成cina,b; 可以从键盘输入: 20 32.45 (数据间以空格分隔) a和b分别获得值20和32.45。,用cin和 输入数据同样不需要在本语句中指定数据类型,例: cin与cout一起使用。 #include void main( ) coutname; cinage; cout“your name is “nameendl; cout“your age is “ ageendl; ,对变量的定义放 在执行语句之后,运行情况如下: please enter your name a

14、nd age: Wang-li 19 your name is Wang-li your age is 19 C+允许对变量的声明放在程序的任何位置(但必须在使用该变量之前)。这是C+对C限制的放宽。,函数和运算符的重载 重载: 是对一个符号或一个名字(字符)赋予多重的意义。,函 数 的 重 载,用C语言编程时,有时会发现有几个不同名的函数,实现的是同一类的操作。例如要求从3个数中找出其中最大者,而这3个数的类型事先不确定,可以是整数、实数或长整数。程序设计者必须分别设计出3个函数,其原型为:,int max1(int a, int b, int c); (求3个整数中的最大者) float

15、max2(float a, float b, float c); (求3个实数中的最大者) long max3(long a, long b, long c); (求3个长整数中的最大者) C语言规定在同一作用域(如同一文件模块中)中不能有同名的函数,因此3个函数的名字不相同。,C+允许在同一作用域中用同一函数名定义多个函数,这些函数的参数类型不同或参数个数不同。这就是函数的重载,即一个函数名多用。 对上面的问题可以编写如下的C+程序。 例:求3个数中最大的数(分别考虑整数、实数、长整数的情况)。,#include int max(int a, int b, int c) /求3个整数中的最大

16、者 if (ba) a=b; if (ca) a=c; return a; float max(float a,float b, float c) /求3个实数中的最大者 if (ba) a=b; if (ca) a=c; return a; long max(long a,long b,long c) /求3个长整数中的最大者 if (ba) a=b; if (ca) a=c; return a; ,void main( ) int a,b,c; float d,e,f; long g,h,i; cinabc; cindef; cinghi; int m; m= max(a,b,c); /调

17、用int max(int a, int b, int c) cout “max-i=“mendl; float n; n=max(d,e,f);/调用float max(float a,float b, float c) cout“max-f=“nendl; long int p; p=max(g,h,i); /调用long max(long a,long b,long c) cout“max-l=“pendl; ,运行情况如下:,8 5 -6 56.9 90.765 43.1 67543 567 78123 max-i=8 (3个整数的最大值) max-f=90.765 (3个实数的最大值)

18、 max-l=78123 (3个长整数的最大值) main函数3次调用max函数,每次实参的类型不同。系统会根据实参的类型找到与之匹配的函数,然后调用该函数。 上例3个max函数的参数个数相同而类型不同。 另外的例子参数个数也可以不同,见下例。,另外的例子参数个数也可以不同,见下例。 例:求n个整数中的最大数。n的值为2和3。 #include int max(int a, int b, int c) /求3个整数中的最大者 if (ba) a=b; if (ca) a=c; return a; int max(int a, int b) /求两个整数中的最大者 if (ab) return

19、a; else return b; void main( ) int a=7,b=-4,c=9; coutmax(a,b,c)endl; /输出3个整数中的最大者 coutmax(a,b)endl; /输出两个整数中的最大者 运行情况如下: 9 7,两次调用max函数的参数个数不同,系统会根据参数的个数找到与之匹配的函数并调用它。 参数的个数和类型可以都不同。 应当注意:重载函数的参数个数或类型必须至少有一者不同,函数返回值类型可以相同也可以不同。但不允许参数个数和类型都相同而只有返回值类型不同,因为系统无法从函数的调用形式上判断哪一个函数与之匹配。,运算符的重载(多重定义) 在C/C+语言中

20、用到了 插入运算符。 这两个运算符本来是左移运算符和右移运算符,现在把它作为输入输出运算符。即允许一个运算符用于不同场合,有不同的含义,这就叫运算符的“重载”(overloading),即重新赋予运算符新的含义。其实就是“一物多用”。 也可对+、-、*、/ 这些算术运算符进行重载,使其不只能进行整数或浮点数的运算,还能进行复数的运算。,下面的例子是对语言中的关系运算符进行重载,使得记录和记录之间、记录同其中一个域类型的数据之间也能进行比较。 假定一种记录类型为:,Struct pupil char pnum8; int grade; ,1.4.4(程序1-17.cpp),下面是对具有pupil

21、类型的两个记录进行相等运算符(=)重载的函数,boolean operator = (pupil r1, pupil r2) if (strcmp(r1.pnum, r2.pnum)=0) return True; else return False; ;,下面是对具有pupil类型的一个记录和一个字符串进行相等运算符(=)重载的函数。,boolean operator = (pupil r, char * key) if (strcmp(r.pnum, key) = 0) return True; else return False; ;,下面是对具有pupil类型的两个记录进行大小比较运算

22、符()重载的函数:,int operator (pupil r1, pupil r2) return r1.grade r2.grade; operator是C+的关键字, 它经常和C+中的一个运算符联用, 表示一个运算符函数名。,5 带缺省参数的函数 一般情况下,实参个数应与形参个数相同。C+允许实参个数与形参个数不同。办法是在形参表列中对一个或几个形参指定缺省值(或称默认值)。例如某一函数的首部可用如下形式: void fun(int a, int b, int c=100) 在调用此函数时如写成fun(2,4,6),则形参a,b,c的值分别为2,4,6(这是与过去一样的)。如果写成fun

23、(2,4) ,即少写了最后一个参数,由于在函数定义时已指定了c的缺省值为100,因此a,b,c的值分别为2,4,100。请注意:赋予缺省值的参数必须放在形参表列中的最右端。 例如: void f1(float a, int b, int c=0, char d=a) (正确) void f2(float a, int c=0, char d=a, int b) (不正确),利用这一特性,可以使函数的使用更加灵活。例如上例两个数或3个数中的最大数。也可以不用重载函数,而将函数max的首行写成 int max(int a, int b, int c=-32768) 如果只想从两个数中找大者,则可以

24、在调用时写成max(100,675) ,c的值自动取-32768,由于-32768是最小整数,因此从100, 675, -32768中选大者和从100, 675中选大者的结果是一样的。 注意:不要同时使用重载函数和缺省参数的函数,因为当调用函数时少写一个参数,系统无法判定是利用重载函数还是利用缺省参数的函数,会发生错误。,如以下两种情况,不能构成函数的重载。 第一种情况:参数个数和类型都相同而只有返回值类型不同, (1)void output(); (2)int output(); 第二种情况:同时使用重载函数和缺省参数的函数 (1)void output(int a, int b=5); (

25、2)void output(int a);,6. 变量的引用类型 6.1 引用的概念 “引用”(reference)是C+的一种新的变量类型,是对C的一个重要扩充。它的作用是为一个变量起一个别名。定义引用使用特殊符号 这就声明了b是a的“引用”,即b是a的别名。经过这样的声明后,使用a或b的作用相同,都代表同一变量。注意:在上述声明中,&是“引用声明符”, 并不代表地址。不要理解为“把a的值赋给b的地址”。,声明引用并不另开辟内存单元,b和a都代表同一变量单元。 在声明一个引用型变量时,必须同时使之初始化,即声明它代表哪一个变量。 在声明一个变量的引用后,在本函数执行期间,该引用一直与其代表的

26、变量相联系,不能再作为其他变量的别名。 下面的用法不对: int a1,a2; int (企图使b变成a2的引用(别名)是不行的),6.2 引用的简单使用 通过下面的例子可以了解引用的简单使用。 例:了解引用和变量的关系。 #include #include void main( ) int a=10; int ,b=20 a=20,a=100 b=100,a的值开始为10,b是a的引用,它的值当然也应该是10,当a的值变为100(a*a的值)时,b的值也随之变为100。在输出a和b的值后,b的值变为20,显然a的值也应为20(见图14.1)。运行记录如下: 100 100 20 20 图1,

27、6.3 引用作为函数参数 有了变量名,为什么还需要一个别名呢? C+之所以增加“引用”, 主要是把它作为函数参数,以扩充函数传递数据的功能。 在C语言中,函数的参数传递有以下两种情况。 (1) 将变量名作为实参。这时传给形参的是变量的值。传递是单向的,在执行函数期间形参值发生变化并不传回给实参,因为在调用函数时,形参和实参不是同一个存储单元。下面的程序无法实现两个变量的值互换。,例6 错误的程序。 #include void swap(int a, int b) int temp; temp=a; a=b; b=temp; /希望实现a和b的值互换 void main( ) int i=3,j

28、=5; swap(i,j); couti“,“jendl; /i和j的值未互换 输出i和j的值仍为3和5。,输出i和j的值仍为3和5。 见图2示意。图2(a) 表示调用函数时的数据传递,图2(b) 是执行swap函数体后的情况,a和b值的改变不会改变i和j的值。 为了解决这个问题,在C语言中采用了传递变量地址的方法。 图 2,(2) 传递变量的指针。使形参得到一个变量的地址,这时形参指针变量指向实参变量单元。 例: 使用指针变量作形参,实现两个变量的值互换。 #include void swap(int *p1, int *p2) int temp; temp=*p1; *p1= *p2; *

29、p2=temp; void main( ) int i=3,j=5; swap( 输出i=5和j=3; i和j的值改变了。,形参得到变量的地址,形参与实参的结合见图3示意。调用函数时把变量i和j的地址传送给形参p1和p2(它们是指针变量),因此*p1和i为同一内存单元,*p2和j为同一内存单元,图3(a) 表示刚调用swap函数时的情况,图3(b) 表示执行完函数体语句时的情况。 图3,显然,i和j的值改变了。 这种方法其实也是采用“值传递”方式,向一个指针变量传送一个地址。然后再通过指针变量访问有关变量。这样做能得到正确结果,但是在概念上“兜了一个圈子” ,不那么直截了当。在PASCAL语言

30、中有“值形参”和“变量形参”(即var形参) ,对应两种不同的传递方式,前者采用值传递方式,后者采用地址传递方式(传送的是变量的地址而不是变量的值,使形参指向一个变量)。在C语言中,只有“值形参”而无“变量形参”,全部采用值传递方式。C+把引用型变量作为函数形参,就弥补了这个不足。 C+提供了向函数传递数据的第三种方法,即传送变量的别名。,例8 利用“引用形参”实现两个变量的值互换。 #include void swap(int 输出结果为 i=5 j=3,在swap函数的形参表列中声明变量a和b 是整型的引用变量(和其他变量一样,既可以在函数体中声明变量的类型,也可以在定义函数时在形参表列中

31、声明变量的类型)。 请注意:在此处&a不是“a的地址”,而是指“a是一个引用型变量”。 但是此时并未对它们初始化,即未指定它们是哪个变量的别名。当main函数调用swap函数时由实参把变量名传给形参。i的名字传给引用变量a,这样a就成了i的别名。同理,b成为j的别名。a和i代表同一个变量,b和j代表同一个变量。在swap函数中使a和b的值对换,显然,i和j的值同时改变了(见图4示意,其中(a)是刚开始执行swap函数时的情况,(b)是执行完函数体语句时的情况)。在main函数中输出i和j已改变了的值。,实际上,实参传给形参的是变量的地址,也就是使形参a具有变量i的地址,从而使a和i共享同一单元

32、。为便于理解,我们说把变量i的名字传给引用变量a,使a成为i的别名。 请注意这种传递方式和使用指针变量作形参时有什么不同?分析例8(对比例7),可以发现: 不必在swap函数中设立指针变量,指针变量要另外开辟内存单元,其内容是地址。而引用变量不是一个独立的变量,不单独占内存单元,在本例中其值为一整数。 在main函数中调用swap函数时实参不必在变量名前加&以表示地址。这种传递方式相当于PASCAL语言中的“变量形参”,系统传送的是实参的地址而不是实参的值。显然,这种用法比使用指针变量简单、直观、方便。,当读者看到&a这样的形式时,怎样区别是声明引用变量还是取地址的操作呢?请记住,当&a的前面

33、有类型符时(如int &a),它必然是对引用的声明;如果前面无类型符(如&a),则是取变量的地址。,7. 作用域运算符 每一个变量都有其有效的作用域,只能在变量的作用域内使用该变量,不能直接使用其它作用域中的变量。,例如: #include float a=13.5; void main( ) int a=5; couta; 程序中有两个a变量:一个是全局变量a,实型;另一个是main函数中的整型变量a,它是在main函数中有效的局部变量。根据规定,在main函数中局部变量将屏蔽全局变量。因此用cout输出的将是局部变量a的值5,而不是实型变量的值13.5。,如果想输出全局实型变量的值,有什么

34、办法呢?C+提供作用域运算符 ,它能指定所需要的作用域。可以把main函数改为: void main( ) int a=5; coutaendl; coutaendl; 运行时输出: 5(局部变量a的值) 13.5 (全局变量a的值) a表示全局作用域中的变量a。请注意:不能用 访问函数中的局部变量。,8. 动态分配/撤销内存的运算符new和delete 在软件开发中,常常需要动态地分配和撤销内存空间。在C语言中是利用库函数malloc和free分配和撤销内存空间的。但是使用malloc函数时必须指定需要开辟的内存空间的大小。其调用形式为malloc(size) 。size是字节数,需要人们事

35、先求出或用sizeof运算符由系统求出。此外,malloc函数只能从用户处知道应开辟空间的大小而不知道数据的类型,因此无法使其返回的指针指向具体的数据。其返回值一律为void *类型,必须在程序中进行强制类型转换,才能使其返回的指针指向具体的数据。,C+提供了较简便而功能较强的 运算符new和delete来取代malloc和free函数(为了与C语言兼容,仍保留这两个函数)。 new运算符使用的一般格式为 new 类型 初值 用new分配数组空间时不能指定初值。 delete运算符使用的一般格式为 delete 指针变量 例如: new int; /*开辟一个存放整数的空间,返回一个 指向整型

36、数据的指针 */ new int(100); /*开辟一个存放整数的空间,并指定该 整数的初值为100 */ char *pt=new char10; /* 开辟一个存放字符数组的空 间,该数组有10个元素, 返回一个指向字符数据的指针 */ new int54; /*开辟一个存放二维整型数组的空间, 该数组大小为5*4 */,new运算符使用的一般格式为 new 类型 初值 用new分配数组空间时不能指定初值。 char *pt=new char10; /* 开辟一个存放字符数组的空 间,该数组有10个元素, 返回一个指向字符数据的指针 */ new int54; /*开辟一个存放二维整型数

37、组的空间, 该数组大小为5*4 */ float *p=new float(3.14159) /*开辟一个存放实数的空间,并指定该实数的初值为 3.14159,将返回的指向实型数据的指针赋给指针变量p */,delete运算符使用的一般格式为 delete 指针变量 例如: 要撤销上面用new开辟的存放实数的空间(float *p=new float(3.14159) ),应该用 delete p; 前面用char *pt=new char10 开辟的空间,则应该用以下形式的delete运算符撤销: delete pt; (在指针变量前面加一对方括号,表示对数组空间的操作),例10 开辟空间以

38、存放一个结构体变量。 #include struct student char name10; int num; char sex; ; void main ( ) student *p; p=new student; strcpy(p-name,“Wang Fun“ ); p-num=10123; p-sex=M; delete p; ,通过new操作,为结构体申请一个存储空间,先声明了一个结构体类型student,定义一个指向它的指针变量p,用new开辟一段空间以存放一个student类型的变量,空间的大小由系统根据student自动算出,不必用户指定。执行new返回一个指向student

39、类型数据的指针,存放在p中。然后对各成员赋值(通过指针变量p访问结构体变量),最后用delete撤销该空间。 如果由于内存不足等原因而无法正常分配空间,则new会返回一个空指针NULL,用户可以根据该指针的值判断分配空间是否成功。 注意:new和delete是运算符,不是函数,因此执行效率高。malloc要和free配合使用,new和delete配合使用。不要混合使用(例如用malloc函数分配空间,用delete撤销) 。,9、结构、联合、枚举都是类型名 在C语言中,结构名和枚举名都要加上各自的关键字才是类型名;在C+语言中,结构名、联合名和枚举名本身都是类型名。当定义变量时,不必在一个结构

40、名、联合名和枚举名之前冠以struct,union和enum。例如:,enum trafficred,green,yellow struct string char *str; int length; ; 当定义变量时,可以说明 traffic light; string str1; 而不必写为 enum traffic light; struct string str1;,用typedef定义类型,在C中可用typedef声明新的类型名来代替已有的类型名 格式:typedef oldtype newtype,相当于给已有的类型起一个别名,以下就可以用别名来代替原有的类型来定义变量。 例:ty

41、pedef int INTEGER; typedef float REAL;,INTEGER i,j; int i,j;,REAL x,y; float x,y;,用typedef声明一个新类型的方法 简单变量 先按定义变量的方法写出定义体 将变量名换成自己指定的新类型名 在前面加上关键字typedef 可以用新类型名定义变量,结构体 1) struct date int month; int day; int yeat; a;,2)、3) typedef struct date int month; int day; int yeat; BIRTHDAY;,4) BIRTHDAY a;,in

42、t i; typedef int COUNT; COUNT i;,数组,1) int n100; 2)、3) typedef int NUM100; 4) NUM n;,指针,1) char *p; 2)、3) typedef char *STRING; 4) STRING p;,小 结 在本章中介绍了在面向过程的机制基础上,C+对C功能的扩展。它包括: (1) 允许使用以 “ / ” 开头的注释行,用回车符结束。 (2) 对变量的定义可出现在程序中的任何位置(但必须在引用该变量之前)。 (3) 提供了标准输入输出流cin和cout,它们不用指定输入输出格式符(如%d),使输入输出更加方便。

43、(4) 可以利用函数重载实现用同一函数名代表功能类似的函数,用运算符的重载实现用同一运算符代表功能类似的运算以方便使用,提高可读性。 (5) 可以使用带缺省值的参数的函数,使函数的调用更加灵活。,(6) 提供变量的引用类型,即为变量提供一个别名,将“引用”作为函数形参,可以实现通过函数的调用来改变实参变量的值。 (7) 用new和delete运算符代替malloc和free函数,使分配动态空间更加方便。 C+对C的扩展还有其他一些。这些扩充使得人们使用结构化程序设计方法进行程序设计时,比以前更加方便和得心应手。有些人在编写小程序时,利用C+编写面向过程的程序,也取得很好的效果。,上机作业要求,1、编程可以用C/C+语言; 2、以E-Mail形式交: E-Mail: 内容: 一次作业一个附件,并在内容中写出运行结果; 注: 附件文件名为学号. 3、课程评分方法: 总分 (100) = 平时作业(20)+上机作业(10)+期末 (70),

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1