1、C+程序设计基础程序设计基础第第1章章 C+初步初步北京邮电大学信通院北京邮电大学信通院方莉方莉2第一章第一章 C+C+入门入门vC+C+语言是一门优秀的程序设计语言,在计语言是一门优秀的程序设计语言,在计算机科学领域中有着广泛的应用算机科学领域中有着广泛的应用。v本章学习:本章学习:C+C+语言的发展史语言的发展史 开发开发C+C+程序的步骤程序的步骤 第一个第一个C+C+程序程序3第一章第一章 C+C+入门入门 1.1 1.1 程序设计语言的发展程序设计语言的发展1 1.2 1.2 面向过程的程序设计面向过程的程序设计2 1.3 1.3 面向对象的程序设计面向对象的程序设计3 1.4 1.
2、4 C+C+的诞生的诞生4 1.5 1.5 程序开发过程程序开发过程5 1.6 1.6 最简单的最简单的C+C+程序程序6 1.1.7 7 内存的表示和使用内存的表示和使用74第一章第一章 C+C+入门入门 1.1 1.1 程序设计语言的发展程序设计语言的发展1 1.2 1.2 面向过程的程序设计面向过程的程序设计2 1.3 1.3 面向对象的程序设计面向对象的程序设计3 1.4 1.4 C+C+的诞生的诞生4 1.5 1.5 程序开发过程程序开发过程5 1.6 1.6 最简单的最简单的C+C+程序程序6 1.1.7 7 内存的表示和使用内存的表示和使用71.1 1.1 程序设计语言的发展程序
3、设计语言的发展v 计算机程序计算机程序 计算机的工作是用程序来控制的;计算机的工作是用程序来控制的;程序是指令的集合;程序是指令的集合;指令是计算机可以识别的命令。指令是计算机可以识别的命令。61.1 1.1 程序设计语言的发展程序设计语言的发展v机器语言机器语言简单的简单的“0 0”和和“1 1”的组合,与硬件相关。的组合,与硬件相关。v汇编语言汇编语言 将机器语言映射为一些可以被人们读懂的助记将机器语言映射为一些可以被人们读懂的助记符,如符,如“ADDADD”、“SUBSUB”等,与硬件相关。等,与硬件相关。v高级语言高级语言接近自然语言,与硬件无关。接近自然语言,与硬件无关。71.1 1
4、.1 程序设计语言的发展程序设计语言的发展v高级语言:高级语言:1 1、面向过程的语言、面向过程的语言 BASICBASIC、PASCALPASCAL、C C 2 2、面向对象的语言、面向对象的语言 C+C+、JAVAJAVA 81.1 1.1 程序设计语言的发展程序设计语言的发展v例如:要向屏幕打印一个例如:要向屏幕打印一个“A A”字符字符 1 1、BASICBASIC语言:语言:PRINT PRINT“A A”2 2、PASCALPASCAL语言:语言:writeln(writeln(A A););3 3、C C语言:语言:printf(printf(“A A”);4 4、C+C+语言:
5、语言:cout cout-实数的加法实数的加法 -复数的加法复数的加法1.3 1.3 面向对象的程序设计面向对象的程序设计v面向对象的软件工程是面向对象方法在软件工程面向对象的软件工程是面向对象方法在软件工程领域的全面应用。领域的全面应用。它包括它包括:面向对象的分析(面向对象的分析(OOAOOA)面向对象的设计(面向对象的设计(OODOOD)面向对象的编程(面向对象的编程(OOPOOP)面向对象的测试(面向对象的测试(OOTOOT)面向对象的软件维护(面向对象的软件维护(OOSMOOSM)29第一章第一章 C+C+入门入门 1.1 1.1 程序设计语言的发展程序设计语言的发展1 1.2 1.
6、2 面向过程的程序设计面向过程的程序设计2 1.3 1.3 面向对象的程序设计面向对象的程序设计3 1.4 1.4 C+C+的诞生的诞生4 1.5 1.5 程序开发过程程序开发过程5 1.6 1.6 最简单的最简单的C+C+程序程序6 1.1.7 7 内存的表示和使用内存的表示和使用7301.4 C+1.4 C+的诞生的诞生vC+C+语言从语言从C C语言的基础上发展起来的。语言的基础上发展起来的。C C语言历史:语言历史:1 1、贝尔实验室的、贝尔实验室的Dennis RitchieDennis Ritchie开发开发 2 2、在、在B B语言的基础语言的基础 3 3、作为、作为UnixUn
7、ix操作系统的开发语言操作系统的开发语言 优点:优点:1 1、与硬件无关、与硬件无关 2 2、设计严谨、设计严谨311.4 C+1.4 C+的诞生的诞生v19781978年年,Brian KernighanBrian Kernighan与与Dennis RitchieDennis Ritchie 出版了出版了The C Programming LanguageThe C Programming Language是最早的经典是最早的经典传统传统C C语言的书,很薄,只有两百多页,所以这本语言的书,很薄,只有两百多页,所以这本C C语言的圣经又称语言的圣经又称 K&RK&R“。v当时很快出现了多个
8、不兼容的当时很快出现了多个不兼容的C C语言版本,因此需语言版本,因此需要制订一种标准要制订一种标准C C。所以所以19881988年年,第二版第二版The C The C Programming LanguageProgramming Language,是最经典的是最经典的标准标准C C的的书籍。书籍。321.4 C+1.4 C+的诞生的诞生C C语言之父语言之父Dennis Dennis RitchieRitchie331.4 C+1.4 C+的诞生的诞生vC C语言是一门语言是一门面向过程面向过程的程序语言的程序语言 优点:优点:1 1、丰富的运算符和数据类型;、丰富的运算符和数据类型;
9、2 2、可直接访问内存、可直接访问内存3 3、程序运行效率高、程序运行效率高4 4、可移植性好、可移植性好 缺点:缺点:1 1、类型检查机制较弱,许多错误编译时不能发现;、类型检查机制较弱,许多错误编译时不能发现;2 2、不支持代码重用;、不支持代码重用;3 3、对于大规模程序,很难控制程序的复杂性。、对于大规模程序,很难控制程序的复杂性。341.4 C+1.4 C+的诞生的诞生v C+C+语言的优点:语言的优点:1 1、简化程序复杂性、简化程序复杂性 2 2、促进代码重用、促进代码重用 3 3、使用先进的面向对象技术、使用先进的面向对象技术vBjarneBjarne出版了的经典出版了的经典C
10、+C+著作著作The C+The C+Programming LanguageProgramming Language ,19911991年第年第2 2版,版,19971997年第年第3 3版,版,20002000年特别版,他被誉为年特别版,他被誉为C+C+之父。之父。351.4 C+1.4 C+的诞生的诞生 C+C+之父之父Bjarne stroustrupBjarne stroustrup36Bjarne语录语录v1 1 不用害怕,一切都会随着时间的推移而逐渐明不用害怕,一切都会随着时间的推移而逐渐明朗起来。朗起来。v2 2 你并不需要在知道了你并不需要在知道了C+C+的所有细节之后才能的
11、所有细节之后才能写出好的写出好的C+C+程序。程序。v3 3 请特别关注程序设计技术,而不是各种语言特请特别关注程序设计技术,而不是各种语言特征。征。371.4 C+1.4 C+的诞生的诞生vC+C+语言是从语言是从C C语言发展演变而来。语言发展演变而来。vC+C+包含了整个包含了整个C C,C C是建立是建立C+C+的基础。的基础。vC+C+包含包含C C的所有特征、属性、优缺点,并添的所有特征、属性、优缺点,并添加了面向对象的支持。加了面向对象的支持。C+C+语言语言C C语言语言面向对象面向对象38第一章第一章 C+C+入门入门 1.1 1.1 程序设计语言的发展程序设计语言的发展1
12、1.2 1.2 面向过程的程序设计面向过程的程序设计2 1.3 1.3 面向对象的程序设计面向对象的程序设计3 1.4 1.4 C+C+的诞生的诞生4 1.5 1.5 程序开发过程程序开发过程5 1.6 1.6 最简单的最简单的C+C+程序程序6 1.1.7 7 内存的表示和使用内存的表示和使用71.5 1.5 程序开发过程程序开发过程v 基本术语基本术语 源程序源程序 用源语言写的,有待翻译的程序用源语言写的,有待翻译的程序 目标程序目标程序 也称为也称为“结果程序结果程序”,是源程序通过翻译程序加工以,是源程序通过翻译程序加工以后所生成的程序。后所生成的程序。可执行程序可执行程序 目标程序
13、和所用的其他资源进行链接,生成的可以直目标程序和所用的其他资源进行链接,生成的可以直接运行的程序。接运行的程序。翻译程序:翻译程序:指一个把指一个把源程序源程序翻译成等价的翻译成等价的目标程序目标程序的工具。的工具。1.5 1.5 程序开发过程程序开发过程v三种不同类型的翻译程序三种不同类型的翻译程序 汇编程序汇编程序 把用汇编语言写成的源程序,翻译成机器语言形式的目把用汇编语言写成的源程序,翻译成机器语言形式的目标程序。标程序。编译程序编译程序 若源程序是用高级程序设计语言所写,经翻译程序加工若源程序是用高级程序设计语言所写,经翻译程序加工生成目标程序,那么,该翻译程序就称为生成目标程序,那
14、么,该翻译程序就称为 编译程序编译程序。1.5 1.5 程序开发过程程序开发过程v三种不同类型的翻译程序三种不同类型的翻译程序 解释程序解释程序 这也是一种翻译程序,同样是将高级语言源程序翻译成这也是一种翻译程序,同样是将高级语言源程序翻译成机器指令。它与编译程序不同点就在于:它是边翻译边机器指令。它与编译程序不同点就在于:它是边翻译边执行的,即输入一句、翻译一句、执行的,即输入一句、翻译一句、执行一句,直至将整执行一句,直至将整个源程序翻译并执行完毕。个源程序翻译并执行完毕。1.5 1.5 程序开发过程程序开发过程v 基本术语基本术语 链接程序链接程序 对汇编程序或目标程序与所需的其他资源进
15、行链对汇编程序或目标程序与所需的其他资源进行链接,生成可执行文件的程序。接,生成可执行文件的程序。431.5 1.5 程序开发过程程序开发过程v源程序:源程序:.cppcpp compile(Ctrl+F7)compile(Ctrl+F7)v目标程序:目标程序:.objobj Build(F7)Build(F7)v可执行程序:可执行程序:.exeexe1.5 1.5 程序开发过程程序开发过程v编辑编辑 将源程序输入到计算机中,生成后缀为将源程序输入到计算机中,生成后缀为cppcpp的磁盘文件。的磁盘文件。v编译编译 将程序的源代码转换为机器语言代码。将程序的源代码转换为机器语言代码。v链接链接
16、 将多个源程序文件以及库中的某些文件连在一起,生成一将多个源程序文件以及库中的某些文件连在一起,生成一个后缀为个后缀为exeexe的可执行文件。的可执行文件。v运行调试运行调试45第一章第一章 C+C+入门入门 1.1 1.1 程序设计语言的发展程序设计语言的发展1 1.2 1.2 面向过程的程序设计面向过程的程序设计2 1.3 1.3 面向对象的程序设计面向对象的程序设计3 1.4 1.4 C+C+的诞生的诞生4 1.5 1.5 程序开发过程程序开发过程5 1.6 1.6 最简单的最简单的C+C+程序程序6 1.1.7 7 内存的表示和使用内存的表示和使用7461.6 1.6 简单的简单的C
17、+C+程序程序/*程序文件:程序文件:ch1_1.cppch1_1.cpp程序功能:在屏幕上输出程序功能:在屏幕上输出Hello worldHello world!作作 者:者:XXXXXX创建时间:创建时间:XXXX年年XXXX月月XXXX日日*/#include include using namespace std;using namespace std;void main()void main()cout“Hello world!endl;cout“Hello world!endl;注释注释编译预处理编译预处理程序主体程序主体471.6 1.6 简单的简单的C+C+程序程序v “注释注
18、释”是程序员为读者作的说明,用来提是程序员为读者作的说明,用来提高程序的可读性,高程序的可读性,C+C+程序在编译过程中忽略程序在编译过程中忽略注释。注释。1 1、“/”用来注释一行说明,在用来注释一行说明,在“/”之后的文字直到之后的文字直到换行都为注释。一般用来对于程序中换行都为注释。一般用来对于程序中难懂的代难懂的代码进行说明码进行说明。2 2、“/*”和和“*/”用来注释一段说明,在用来注释一段说明,在“/*”和和“*/”之间的之间的部分,不管多长都为注释。部分,不管多长都为注释。481.6 1.6 简单的简单的C+C+程序程序v 所有以所有以“#”开头的代码,称为开头的代码,称为编译
19、预处理编译预处理。v 例:例:#include#include 每次启动编译器时,先运行预处理器,预处理器找到每次启动编译器时,先运行预处理器,预处理器找到所有以所有以“#”开头的代码行进行处理。开头的代码行进行处理。includeinclude是一条是一条预处理指令预处理指令,意思是,意思是“后面跟的是一个后面跟的是一个文件名,请找到该文件并将其加入。文件名,请找到该文件并将其加入。”iostreamiostream是系统定义的一个是系统定义的一个“头文件头文件”,它设置了,它设置了C+C+的的I/OI/O相关环境,并定义了输入输出流对象相关环境,并定义了输入输出流对象coutcout和和c
20、incin等。等。491.6 1.6 简单的简单的C+C+程序程序v using namespace std;using namespace std;1998 1998年批准的标准年批准的标准C+C+使用使用namespacenamespace命名空间标准。命名空间标准。iostreamiostream是一个标准函数库,是一个标准函数库,coutcout是标准库函数提供的是标准库函数提供的一个对象,标准库函数在一个对象,标准库函数在namespacenamespace说明书中被指定为说明书中被指定为“stdstd”。因此这句代码的意思是因此这句代码的意思是使用标准命名空间使用标准命名空间std
21、std中中的函数。的函数。501.6 1.6 简单的简单的C+C+程序程序v正式的程序从代码正式的程序从代码“void main()void main()”开始,它包含一开始,它包含一个名为个名为main()main()的函数,也称为的函数,也称为主函数主函数。每个。每个C+C+程序程序有且仅有有且仅有一个一个main()main()函数,程序在开始运行函数,程序在开始运行时会自动调用时会自动调用main()main()函数。函数。v main()main()前面的前面的voidvoid表示函数的返回值的类型,意表示函数的返回值的类型,意味着程序执行结束后味着程序执行结束后无需向操作系统返回无
22、需向操作系统返回。函数:是指能实现一个或多个功能的代码块函数:是指能实现一个或多个功能的代码块。511.6 1.6 简单的简单的C+C+程序程序v 所有的函数都以左大括号所有的函数都以左大括号 开始,右大括号开始,右大括号 结束,结束,在大括号在大括号 之间的部分称为函数体。之间的部分称为函数体。v coutcout“Hello world!Hello world!”endl;endl;1 1、coutcout:标准输出流对象,标准输出流对象,2 2、:插入操作符可以连续使用插入操作符可以连续使用 3 3、endlendl:代表换行符代表换行符 意思是使用意思是使用coutcout将将“”后面
23、的内容打印在屏幕上。后面的内容打印在屏幕上。v在函数体的每一句代码后面都有一个分号在函数体的每一句代码后面都有一个分号“;”表示一个表示一个C+C+语句的结束。语句的结束。521.6 1.6 简单的简单的C+C+程序程序v操作步骤操作步骤1 1、新建一个工程、新建一个工程 1)1)启动启动VC+6.0VC+6.0(或(或VC2005VC2005)2)2)新建一个项目,选择新建一个项目,选择“win32win32控制台应用程序控制台应用程序”,空项,空项目目 3)3)编写源程序编写源程序2 2、编译和连接、编译和连接 编译:编译:compile(Ctrl+F7)compile(Ctrl+F7)链
24、接:链接:Build(F7)Build(F7)3 3、运行、运行 使用的命令:使用的命令:Ctrl+F5Ctrl+F553程序编译环境和简单设计及调试程序编译环境和简单设计及调试v编译环境:编译环境:VC+6.0VC+6.0v文件的建立文件的建立1 1、工程的建立、工程的建立File-new-projects-win32 Console ApplicationFile-new-projects-win32 Console Application调试运行调试运行 2 2、文件的建立、文件的建立File-new-files-c+source fileFile-new-files-c+source
25、file 3 3、调试、运行调试、运行 1.1 1.1 程序设计语言的发展程序设计语言的发展1 1.2 1.2 面向过程的程序设计面向过程的程序设计2 1.3 1.3 面向对象的程序设计面向对象的程序设计3 1.4 1.4 C+C+的诞生的诞生4 1.5 1.5 程序开发过程程序开发过程5 1.6 1.6 最简单的最简单的C+C+程序程序6 1.1.7 7 内存的表示和使用内存的表示和使用7第一章第一章 C+C+入门入门1.1.7 7 内存的抽象表示和使用内存的抽象表示和使用v内存的抽象表示内存的抽象表示 每个存储单元可以存放一个字节(每个存储单元可以存放一个字节(8 bit8 bit)数据,
26、每个内)数据,每个内存单元有一个存单元有一个唯一的地址唯一的地址。101100106781.1.7 7 内存的抽象表示和使用内存的抽象表示和使用v操作系统一般会把内存划分区域来使用,便于管操作系统一般会把内存划分区域来使用,便于管理,比如理,比如代码区、数据区代码区、数据区 等。等。v被编译成机器码的被编译成机器码的程序程序在执行时就会被复制到内在执行时就会被复制到内存的存的代码区代码区。v数据区分为:数据区分为:栈区栈区,也叫堆栈区,用于存放程序函数中的,也叫堆栈区,用于存放程序函数中的局部变量局部变量。全局变量和静态变量区全局变量和静态变量区,是长期存放数据的区域。是长期存放数据的区域。常
27、量区常量区:一般是存放字符串常量的地方。:一般是存放字符串常量的地方。堆区堆区:在程序执行过程中申请内存要在堆区分配空间。:在程序执行过程中申请内存要在堆区分配空间。1.1.7 7 内存的抽象表示和使用内存的抽象表示和使用/例例1-2 1-2 显示不同数据的地址显示不同数据的地址#include#include using namespace std;using namespace std;int a=10;int a=10;/全局变量全局变量void main()void main()int b=20,c=30;int b=20,c=30;/局部变量局部变量 char char*ch=Bei
28、jing;ch=Beijing;static int e=50;static int e=50;/静态变量静态变量 int int*p=new int(60);p=new int(60);/申请堆区空间申请堆区空间 float float*f=new float(0);f=new float(0);int int*q=new int(60);q=new int(60);1.1.7 7 内存的抽象表示和使用内存的抽象表示和使用/例例1-2 1-2 显示不同数据的地址显示不同数据的地址 cout cout全局变量全局变量a a的地址:的地址:&aendl;&aendl;cout cout局部变量局
29、部变量b b的地址:的地址:&bendl;&bendl;cout cout局部变量局部变量c c的地址:的地址:&cendl;&cendl;cout cout常量区的地址:常量区的地址:(void(void*)chendl;)chendl;cout cout静态变量静态变量e e的地址:的地址:&eendl;&eendl;cout cout堆区变量堆区变量p p的地址:的地址:pendl;pendl;cout cout堆区变量堆区变量f f的地址:的地址:fendl;fendl;cout cout堆区变量堆区变量q q的地址:的地址:qendl;qendl;总结总结1 1、程序设计语言的发展过程:程序设计语言的发展过程:机器语言、汇编语言和高级语言。机器语言、汇编语言和高级语言。2 2、C C和和C+C+的关系。的关系。3 3、如何编写、编译、运行一个、如何编写、编译、运行一个C+C+程序。程序。4 4、内存的工作模型。、内存的工作模型。60作业作业v 熟悉熟悉C+C+的编程环境的编程环境