
c++程序设计谭浩强完整版.ppt
930页1,,,C++程序设计 谭浩强编著 清华大学出版社 课件制作:南京理工大学 陈清华 朱红,2,第一章C++概述,C++语言发展历史,,自从1946年第一台电子数字计算机ENIAC问世以来,随着计算机应用领域的不断扩大,促进了计算机技术的高速发展,尤其是近年来计算机的硬件和软件都是日新月异作为应用计算机的一种工具—程序设计语言,得到不断的充实和完善每年都有新的程序设计语言问世,老的程序设计语言不断地更新换代3,20世纪60年代,Martin Richards为计算机软件人员在开发系统软件时,作为记述语言使用而开发了BCPL语言(Basic Combined Programming Language)1970年,Ken Thompson在继承BCPL语言的许多优点的基础上发明了实用的B语言到了1972年,贝尔实验室的Dennis Ritchie和Brian kernighan在B语言的基础上,作了进一步的充实和完善,设计出了C语言当时,设计C语言是为了编写UNIX操作系统的以后,C语言经过多次改进,并开始流行C++是在C语言的基础上发展和完善的,而C是吸收了其它语言的优点逐步成为实用性很强的语言。
4,C语言的主要特点是: 1、C语言是一种结构化的程序设计语言,语言本身简洁、使用灵活方便既适用于设计和编写大的系统程序,又适用于编写小的控制程序,也适用科学计算2、它既有高级语言的特点,又具有汇编语言的特点运算符丰富,除了提供对数据的算术逻辑运算外,还提供了二进制的位运算并且也提供了灵活的数据结构用C语言编写的程序表述灵活方便,功能强大用C语言开发的程序,其结构性好,目标程序质量高,程序执行效率高5,3、程序的可移植性好用C语言在某一种型号的计算机上开发的程序,基本上可以不作修改,而直接移植到其它型号和不同档次的计算机上运行4、程序的语法结构不够严密,程序设计的自由度大这对于比较精通C语言的程序设计者来说,可以设计出高质量的非常通用的程序但对于初学者来说,要能比较熟练运用C语言来编写程序,并不是一件容易的事情与其它高级语言相比而言,调试程序比较困难往往是编好程序输入计算机后,编译时容易通过,而在执行时还会出错但只要对C语言的语法规则真正领会,编写程序及调试程序还是比较容易掌握的6,随着C语言应用的推广,C语言存在的一些缺陷或不足也开始流露出来,并受到大家的关注如:C语言对数据类型检查的机制比较弱;缺少支持代码重用的结构;随着软件工程规模的扩大,难以适应开发特大型的程度等等。
7,为了克服C语言本身存在的缺点,并保持C语言简洁、高效,与汇编语言接近的特点,1980年,贝尔实验室的Bjarne Stroustrup博士及其同事对C语言进行了改进和扩充,并把Simula 67中类的概念引入到C中并在1983年由Rick Maseitti提议正式命名为C++(C Plus Plus)后来,又把运算符的重载、引用、虚函数等功能加入到C++中,使C++的功能日趋完善 当前用得较为广泛的C++有:VC++ (Visual C Plus Plus)、 BC++(Borland C Plus Plus)、AT&T C++等8,简单的C++程序介绍,,高级语言编译过程,源程序 (文本文件) *.CPP,目标文件 (二进制文件) *.OBJ,可执行文件 (二进制文件) *.EXE,库文件 (各种函数),在Vitual C++系统中,可直接从源程序编译连接至可执行程序,但依然要生成*.OBJ及*.EXE这两个文件F7,,compile,link,9,一个简单的C++程序,#include void main(void ) { cout“I am a student.\n”; //输出字符串 },主函数,函数体开始,函数体结束,输出流,在屏幕上打印引号内的字符串,分号,一条完整语句的结束符,本程序编译执行后,在DOS屏幕上打印出 I am a student.,包含文件,注释或说明,10,编译过程: 1)启动Visual C++,选择“文件”菜单中的“新建”命令,选择“文件”标签中的“C++ Source File”选项。
2)选择源程序存放的目录和输入源程序名,单击“确定” 3)在编辑器中编写源程序 4)单击F7或“编译”中的“重建全部”编译源程序,若编译通过,单击“执行”,在DOS屏上看结果,任按一键返回编辑器11,启动VC++编译系统,12,VC++编译系统界面,单击“File”菜单中“New”命令,13,选择“Files”选项卡,选择C++源文件命令,输入文件名,输入文件存放位置,单击选择驱动器,选择驱动器或目录,14,C++源文件编辑界面,输入C++源代码,15,可以将此源代码另起文件名存盘,16,选择编译命令,将源文件.cpp生成.obj文件,17,如果编译出错,会出现提示信息,指出错误的位置及种类,错误所在行,错误的原因,18,双击错误所在行,光标移到该行,19,生成可执行文件,通过后单击该命令运行程序,20,运行结果显示在DOS屏上,注意:不可以在软盘上运行程序!应该把保存在软盘中的源文件拷贝到硬盘的目录中再运行!,21,源程序所在目录,未编译前,只有一个源程序,22,编译运行后,出现众多附加文件,同时,产生一个子目录Debug,23,Debug目录中,有obj和EXE文件,24,#include void main(void) { cout i; //从键盘上输入变量i的值 cout “i的值为:” i’\n’; // 输出变量i的值 },另一个例子,25,第二章 数据类型、运算符与表达式,26,,2000H 2001H 2002H 2003H 2004H,3,3+5=?,5,,运算器,,(2000H)+(2002H),用一个字节表示整数,范围为-128~127;用两个字节表示整数,范围为-32768~ 32767。
一般用四个字节表示整数举例),内存,,CPU,内存,data,,外存,Program,,8,硬盘 软盘,,,27,有符号数,无符号数,32767,32767,32766,32766,……,……,1,1,0,0,-1(补码),65535,-2,65534,……,……,-32767,32769,-32768,32768,28,常量与变量,常量:在程序运行过程中,其值一直保持不变的量为常量 常量也区分不同的类型:30,40 为整型,30.0,40.0为实型,编辑器只是根据其表面形式来判断其类型变量:在程序运行过程中,其值可以改变的量为变量 变量在程序的执行中能够赋值,发生变化变量有一个名字,并在使用之前要说明其类型,一经说明,就在内存中占据与其类型相应的存储单元29,#include #define PRICE 30 //常量,在程序中保持不变 void main(void) { int num, total; //定义变量,在内存中开辟区间 num=10; //变量赋值,10为常量 total=num*PRICE; cout“total=“total; //输出结果 },其中:num=10 total=num*PRICE,,,是赋值号,不同于数学意义上的等号。
num,,total,10,300,30,C++中有多种数据类型,均有常量与变量之分,各占不同的内存空间,正确定义与使用数据是编写程序的基本前提31,变量名的命名方法: 变量名、数组名、函数名…称为标识符 标识符只能由字母、数字、下划线这三种字符组成,且第一个字符必须为字母或下划线,长度不大于247个字符,大小写不通用关键字不能作为标识符) 关键字即是VC++的语法要求中使用的字 如 int if while 等 正确的标识符:INT, sum , de12, SUM等变量必须使用前定义,以分配空间 举例说明,32,abc English 2xy x-y if Else b(3) ‘def’ Chine_bb b3y AbsFloat float,一般变量都是用匈牙利命名法命名的int nCount; char chChoice;,33,整型数据,整型常量: 常量是根据其表面形式来判定,整型量即是没有小数点的整数,范围:-231~(231-1) ,有三种形式: 1)十进制(默认方式) 43 1345 87654 2)八进制 以0开头 043, 056, 011 3)十六进制 以0x开头 0x12 0xa3 0x34 0xdf(举例说明),34,#include void main(void) { int int10,int8,int16; //定义3个整型变量 int10=10; //默认为十进制 int8=010; //八进制 int16=0x10; //十六进制 cout“int10=“int10endl; cout“int8=“int8endl; cout“int16=“int16endl; },输出 int10=10 int8=8 int16=16,35,整型变量: 分为有符号型与无符号型。
有符号型: short 在内存中占两个字节,范围为-215~(215-1) int 在内存中占四个字节,范围为-231~(231-1) long在内存中占四个字节,范围为-2-31~231-1,无符号型:最高位不表示符号位 unsigned short 在内存中占两个字节,范围为0~216-1 unsigned int 在内存中占四个字节,范围为0~232-1 unsigned long在内存中占四个字节,范围为0~232-1,36,1)整型常量亦有长短之分,常量中无unsigned型,但一个非负的整型常量可以赋给unsigned型的变量 2)若一个常量定义为长整型数,则在其后加l或L进行区分 如:32l 32L 564L等,内存为其分配四个字节存储一个数在内存中为,当这个数为有符号数时,是-1;为无符号数时,是232-1 内存中的数是以补码的形式存放的举例说明),37,#include void main() { unsigned short a; short int b= -1; a=b; cout“a=“aendl; },结果:65535,不同类型的整型数据间的赋值归根到底就是一条:按存储单元中的存储形式直接传送。
a,b,,unsigned short a;,38,实型数据,实型数又称浮点数,有两种表示方式: 1)十进制形式: 23.0 24.5 3.56789 指数形式: 23E1 145e-1 356789e1 e前有数字,后面必须是整数实型变量分单精度 float 和双精度 double 两种形式: float:占四个字节,提供7~8位有效数字 double: 占八个字节,提供15~16位有效数字举例说明,39,#include void main(void) { float a, b; double c, d; a=0.01; b=3.45678e-2; c=3.45678e-2; d=9.7654e-5; cout“a=“a'\t'“b=“bendl; cout“c=“c'\t'“d=“dendl; },a=0.01 b=0.0345678 c=0.0345678 d=9.7654e-005 Press any key to continue,40,如果为实数,则用浮点数的形式在内存存储,表示如下:,实数是既有整数又有小数的数 实数可以表示成:N=S×RJ S 称为尾数,尾数决定有效数字,即数字的精度。
J 表示指数(阶码) R 是基数,可取2,4,8,16等,对具体机器而言,基数取好后,就不能再变了 数有正有负, 所以设置数符; 阶码亦有正负, 所以设置阶符。
