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





《数据结构实用教程补充知识.ppt》由会员分享,可在线阅读,更多相关《数据结构实用教程补充知识.ppt(72页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数据结构实用教程补充知识 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望总 目 录第1章C语言概述第2章程序的灵魂算法第3章数据类型、运算符与表达式第4章最简单的C程序设计顺序程序设计第5章选择结构程序设计第6章循环控制第7章数组第8章函数 第9章预处理命令 第10章指针 第11章结构体与共用体 第12章位运算 第13章文件 第第14章章C+对对C的扩充的扩充 第第15章章C+的面向对象基础的面向对象基础 第16章常见错误和程序调试1.C+的特点2.最简单的C+程
2、序3.C+的输入输出4.运算符和函数的重载5.*带缺省参数的函数6.变量的引用类型7.作用域运算符8.动态分配/撤销内存的运算符new和delete9.结构、联合和枚举名都是类型名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的超集。它既可以用于结构化程序设计,又可用于面向对象的程序设计,因此它是一个功
4、能强大的混合型的程序设计语言。使用C+必须事先安装C+编译系统,在windows系统下可以使用Visual C+6.0。C源程序的后缀一般为源程序的后缀一般为.c,C+源程序的后缀一般为源程序的后缀一般为.cpp (为C plus plus的缩写,即C+)。在Visual C+6.0开发环境中,既可以使用C语言,也可以使用C+语言。它有两个编译系统,根据源程序文件名的后缀是 .c还是.cpp来决定使用哪个编译系统。如上所述,面向对象程序设计方法主要是解决大型软件的设计问题。只有编写过大型程序的人才会体会到C的不足和C+的优点。C+对C的“增强”,表现在两个方面:(1)在原来面向过程的机制基础上
5、,对在原来面向过程的机制基础上,对C语言语言的功能做了不少扩充。的功能做了不少扩充。(2)增加了面向对象的机制。增加了面向对象的机制。本章介绍C+对C功能的扩充。2.最简单的C+程序例:输出一行字符。#include#include/*本程序的作用是输出一行字符*/void main()printf(This is a c+program.n);cout This is a c+program.n;/本行输出一行字符 本程序和以前见过的C程序有什么不同?除了可以用/*/形式的注释行外,还允许使用以/开头的注释。用用cout进行输出进行输出#include命令将该头文件iostream.h“包含
6、”进来C/C+中包含文件包含文件的语句n文件包含:是指一个源文件可以将另外一个源文件的全部内容包含进来。n格式#include“文件名”或:#include n在作预处理时,从磁盘上读取被包含文件的内容,然后将它插入到include命令处,成为源程序的一部分。A#include”file2.h”file1.cBfile2.hBA预处理后的说明:1.一个include命令只能指定一个被包含文件。2.文件名可以用双引号或尖括号括起来。#include “file2.c”先在 用户当前目录中查找,若无,再按系统标准方式查找 file2.c#include 按系统标准方式查找 file2.c 3.被包
7、含文件与所在文件经预编译后成为一个文件。4.文件包含可嵌套A#include”file2.c”file1.cfile2.c#include”file3.h”Bfile3.hCABCfile1.c(1)在C+程序中一般习惯在主函数main前面加了一个类型声明符void,表示main函数没有返回值。(2)除了可以用/*/形式的注释行外,还允许使用以/开头的注释。从程序最后一行中可以看到:以/开头的注释可以不单独占一行,它出现在语句之后。编译系统将/以后到本行末尾的所有字符都作为注释。应注意:它是单行注释,不能跨行。C+的程序设计人员多愿意用这种注释方式,它比较灵活方便。(3)除了可以用printf
8、函数输出信息外,还可以用cout进行输出。cout要与运算符配合使用,程序中cout的作用是将运算符右侧的内容送到输出设备中输出。(4)使用cout需要用到头文件iostream.h,在程序的第一行用#include命令将该头文件“包含”进来。#include#include/*本程序的作用是输出一行字符*/void 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.可以看到程序中最后两个语句的作用相同,
9、都是输出This is a c+program.。3.C+的输入输出 在C语言中文件不是由记录构成的。对文件的存取是以字节为单位的,对一个C文件的输入和输出是一个字节流。输入和输出的数据流的开始和结束只受程序控制而不受物理符号(如回车换行符)的控制。这种文件称为流式文件。在输入操作中,字节从输入设备流向内存,在输出操作中,字节从内存流向输出设备。C+为了方便使用,除了可以利用printf和scanf函数进行输出和输入外,还增加了标准输入输出流cout和cin。cout是由c和out两个单词组成的,代表C+的输出流,cin是由c和in两个单词组成的,代表C+的输入流。它们是在头文件iostrea
10、m.h中定义的。在键盘和显示器上的输入输出称为标准输入输出,标准流是不需要打开和关闭文件即可直接操作的流式文件。C+预定义的标准流如表1所示。表 1流名流名含义含义 隐含设备隐含设备cin标准输入标准输入 键盘键盘cout 标准输出标准输出 屏幕屏幕cerr标准出错输出标准出错输出 屏幕屏幕3.1 用cout进行输出cout必须和输出运算符一起使用。(常称为“插入运算符插入运算符”)。例如:cout“Hello!n”;也可以不用n控制换行,在头文件iostream.h中定义了控制符endl代表回车换行操作,作用与n相同。可以在一个输出语句中使用多个运算符 将多个输出项插入到输出流cout中。运
11、算符的结合方向为自左向右,因此各输出项按自左向右顺序插入到输出流中。例如:可以在一个输出语句中使用多个运算符 将多个输出项插入到输出流cout中,运算符的结合方向为自左向右,因此各输出项按自左向右顺序插入到输出流中。例如:for(int i=1;i=3;i+)coutcount=iendl;输出结果为:count=1count=2count=3注意:每输出一项要用一个 符号。不能写成 couta,b,c,A;形式。C+允许对变量的声明放在程序的任何位置(但必须在使用该变量之前)。这是C+对C限制的放宽。用cout和 可以输出任何类型的数据,如:float a=3.45;int b=5;char
12、 c=A;cout“a=”a“,”“b=”b“,c=cendl;输出结果为a=3.45,b=5,c=A输出时未指定数据的类型,系统会自动按数据的类型进行输出n 如果要指定输出所占的列数,可以用控制符setw设置 注意:若使用setw,必须包含头文件 iomanip.h,n如:ncouta=setw(6)aendlb=setw(6)bendlnc=setw(6)cendl;n输出结果为:na=3.45nb=5nc=Asetw(6)是为后面一个输出项预留6列,如输出项的长度不足6列则数据默认向右对齐,若超过6列则按实际长度输出在C+中将数据送到输出流称为“插入”(inserting),或“放到”(
13、putting)。运算符从输入设备键盘取得数据送到输入流cin中,然后送到内存。在C+中,这种输入操作称为“提取”或“得到”。常称为“提取运算符提取运算符”。ncin要与 配合使用。例如:nint a;nfloat b;ncinab;/输入一个整数和一个实数。n注意不要写成cina,b;n可以从键盘输入:n20 32.45(数据间以空格空格分隔)na和b分别获得值20和32.45。用cin和 输入数据同样不需要在本语句中指定数据类型例:cin与cout一起使用。#include void main()coutplease enter your name and age:name;cinage;
14、coutyour name is nameendl;coutyour age is ageendl;对变量的定义放在执行语句之后运行情况如下:please enter your name and age:Wang-li 19 your name is Wang-liyour age is 19C+允许对变量的声明放在程序的任何位置(但必须在使用该变量之前)。这是C+对C限制的放宽。4.函数和运算符的重载重载重载:是对一个符号或一个名字(字符)赋予多重的意义。函函 数数 的的 重重 载载n用C语言编程时,有时会发现有几个不同名的函数,实现的是同一类的操作。例如要求从3个数中找出其中最大者,而这3
15、个数的类型事先不确定,可以是整数、实数或长整数。程序设计者必须分别设计出3个函数,其原型为:int max1(int a,int b,int c);(求3个整数中的最大者)float max2(float a,float b,float c);(求3个实数中的最大者)long max3(long a,long b,long c);(求3个长整数中的最大者)C语言规定在同一作用域(如同一文件模块中)中不能有同名的函数,因此3个函数的名字不相同。nC+允许在同一作用域中用同一函数名定义多个函数,这些函数的参数类型不同参数类型不同或参参数个数不同数个数不同。这就是函数的重载,即一个函数名多用。n对上
16、面的问题可以编写如下的C+程序。n例:求3个数中最大的数(分别考虑整数、实数、长整数的情况)。#include int max(int a,int b,int c)/求3个整数中的最大者 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
17、,f;long g,h,i;cinabc;cindef;cinghi;int m;m=max(a,b,c);/调用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)coutmax-f=nendl;long int p;p=max(g,h,i);/调用long max(long a,long b,long c)coutmax-l=pendl;运行情况如下:8 5-656.9 90.765 43.167543 567 78123max-i=8(3个
18、整数的最大值)max-f=90.765 (3个实数的最大值)max-l=78123 (3个长整数的最大值)nmain函数3次调用max函数,每次实参的类型不同。系统会根据实参的类型找到与之匹配的函数,然后调用该函数。n上例3个max函数的参数个数相同而类型不同。n另外的例子参数个数也可以不同,见下例。另外的例子参数个数也可以不同,见下例。例:求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)/求两个整数中的最大者 i
19、f(ab)return a;else return b;void main()int a=7,b=-4,c=9;coutmax(a,b,c)endl;/输出3个整数中的最大者 coutmax(a,b)endl;/输出两个整数中的最大者运行情况如下:97 两次调用max函数的参数个数不同,系统会根据参数的个数找到与之匹配的函数并调用它。参数的个数和类型可以都不同。应当注意:重载函数的参数个数或类型必须至少有一者不同,函数返回值类型可以相同也可以不同。但不允许参数个数和类型都相同而只有返回值类型不同,因为系统无法从函数的调用形式上判断哪一个函数与之匹配。运算符的重载(多重定义)运算符的重载(多重定
20、义)n在C/C+语言中用到了n 插入运算符。n 这两个运算符本来是左移运算符和右移运算符,现在把它作为输入输出运算符。即允许一个运算符用于不同场合,有不同的含义,这就叫运算符的“重载”(overloading),即重新赋予运算符新的含重新赋予运算符新的含义义。其实就是“一物多用”。n也可对+、-、*、/这些算术运算符进行重载,使其不只能进行整数或浮点数的运算,还能进行复数的运算。下面的例子是对语言中的关系运算符进行重载,使得记录和记录之间、记录同其中一个域类型的数据之间也能进行比较。假定一种记录类型为:nStruct pupiln char pnum8;n int grade;n1.4.4(程
21、序1-17.cpp)下面是对具有pupil类型的两个记录进行相等运算符(=)重载的函数nboolean operator=(pupil r1,pupil r2)n if(strcmp(r1.pnum,r2.pnum)=0)n return True;n elsen return False;n;下面是对具有pupil类型的一个记录和一个字符串进行相等运算符(=)重载的函数。nboolean operator=(pupil r,char*key)n if(strcmp(r.pnum,key)=0)n return True;n elsen return False;n;下面是对具有pupil类型
22、的两个记录进行大小比较运算符()重载的函数:nint operator (pupil r1,pupil r2)n return r1.grade r2.grade;nnoperator是C+的关键字,它经常和C+中的一个运算符联用,表示一个运算符函数名。5 带缺省参数的函数 一般情况下,实参个数应与形参个数相同。C+允许实参个数与形参个数不同。办法是在形参表列中对一个或几个形参指定缺省值(或称默认值)。例如某一函数的首部可用如下形式:void fun(int a,int b,int c=100)在调用此函数时如写成fun(2,4,6),则形参a,b,c的值分别为2,4,6(这是与过去一样的)。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实用教程 补充 知识

限制150内