1、2022-7-2911主讲主讲 中南大学软件学院中南大学软件学院 谭长庚谭长庚2015.92015.92022-7-292Chapter 1 2022-7-293 Some Questions1用过计算机?用过计算机?2都用过什么软件(程序)?都用过什么软件(程序)?3了解计算机信息的表示(补码)了解计算机信息的表示(补码),数制?数制?4程序是?学过编程?程序设计有多难?程序是?学过编程?程序设计有多难?2022-7-294第一个程序:第一个程序:Hello C+#include”stdafx.h”#include int main()std:coutHello C+;system(paus
2、e);return 0;如何学习程序设计语言如何学习程序设计语言1.1.模仿模仿2.2.多读、写多读、写3.3.提高自主学习的能力提高自主学习的能力 *主动性主动性 *发现问题发现问题 *解决问题:解决问题:*方法方法:网、讨论、试网、讨论、试 *表达(程序表达(程序,算法描述)算法描述)模仿输出模仿输出“Welcome to CSU”输出结果:输出结果:Hello C+2022-7-295扩展程序:求圆的面积扩展程序:求圆的面积,会求吗?会求吗?#include using namespace std;int main()double radius;double area;/Step 1:R
3、ead in radius-输入输入 cinradius;/Step 2:Compute area-处理处理 area=radius*radius*3.14;/Step 3:Display the area-输出输出 cout The area is;cout area endl;输入输入处理处理输出结果输出结果2022-7-296求长方形的面积:输入两条边到求长方形的面积:输入两条边到a,b,面积送,面积送s#include using namespace std;int main()double a,b;double ;cina;/Step 1:Read in a ;/:Read in b
4、 ;/Step 2:Compute area cout x-y=-00000011X-Y=-3求补运算:将一个补码连同符号位一起,按位求反、末位加一将一个补码连同符号位一起,按位求反、末位加一求真值:求真值:一个负数的补码再求补一个负数的补码再求补=该数正数的原码(该数正数的原码(补上负号就得负数的真值补上负号就得负数的真值)结果为补码结果为补码2022-7-29411.3.6 非数值信息的表示非数值信息的表示n西文字符:西文字符:nASCII码:用7位二进制数表示一个字符,最多可以表示27=128个字符nEBCDIC码:用8位二进制数表示一个字符,最多可以表示28=256个字符n汉字:应用较
5、为广泛的是国家标准信息交换用汉字编码(GB2312-80标准),简称国标码。是二字节码,用二个七位二进制数编码表示一个汉字。nUnicode:2字节字符编码,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。1990年开始研发,1994年正式公布。2022-7-29421.3.7 十进制数的十进制数的BCD码表示码表示nBCD(Binary Coded Decimal)码是十进制数的另)码是十进制数的另一种二进制编码形式。它有利于用二进制来精确表示一种二进制编码形式。它有利于用二进制来精确表示十进制数。十进制数。nBCD码有多种形式,常用的是
6、码有多种形式,常用的是8421码,每一位十进码,每一位十进数码用四位二进数码表示,不允许出现数码用四位二进数码表示,不允许出现10101111四种组合。四种组合。0 000050101100001 00001 000160110 110001 00012 001070111120001 00103 001181000 1230001 0010 00114 01009100112340001 0010 0011 0100nBCD码常采用压缩形式存贮:一个字节存放二位码常采用压缩形式存贮:一个字节存放二位BCD码。码。2022-7-29431.4 程序设计语言 n程序设计的结果必然要用一种能被计算
7、机程序设计的结果必然要用一种能被计算机接受的语言表示出来,即编程实现接受的语言表示出来,即编程实现(Coding)。)。n根据计算机指令系统和人们解决问题所采根据计算机指令系统和人们解决问题所采用的描述语言(如:数学语言)的接近程用的描述语言(如:数学语言)的接近程度,常常把程序语言分为:度,常常把程序语言分为:n 低级语言n 高级语言 n通常所讲的通常所讲的程序设计语言程序设计语言往往指的是高级往往指的是高级语言。语言。2022-7-29441.低级语言和高级语言n低级语言低级语言:是指特定计算机能够直接理解的语言:是指特定计算机能够直接理解的语言(或与之直接对应的语言):(或与之直接对应的
8、语言):n机器语言:采用指令编码和数据的存储位置来表示操作以及操作数;n汇编语言:是用符号名来表示操作和操作数位置,以增加程序的易读性。需要翻译(汇编)成机器语言才能执行。n高级语言高级语言:是指人容易理解和有利于人对解题过:是指人容易理解和有利于人对解题过程进行描述的程序语言。典型的高级语言有:程进行描述的程序语言。典型的高级语言有:nFORTRAN、COBOL、Basic、Pascal、C、Ada、Modula-2、Lisp、Prolog、Simula、Smalltalk、C+、Java等 2022-7-2945 2.低级语言与高级语言程序的比较低级语言与高级语言程序的比较n计算计算a+b
9、*c-d的值,的值,n用汇编语言可写成:mov ax,bmul ax,cadd ax,asub ax,dmov r,axn用高级语言可写成:r=a+b*c-d 2022-7-2946n低级语言低级语言n优点:写出的程序效率比较高,包括执行速度快和占用空间少。n缺点:程序难以设计、理解与维护,难以保证程序的正确性。另外,可移植性差。n高级语言高级语言n优点:程序容易设计、理解与维护,容易保证程序正确性。可移植性好n缺点:用其编写的程序相对于用低级语言编写的程序效率要低,翻译成的目标代码量较大。2022-7-29473.高级语言的翻译n用高级语言书写的程序须翻译成机器语言程序用高级语言书写的程序须
10、翻译成机器语言程序才能在计算机上运行。翻译方式有两种:才能在计算机上运行。翻译方式有两种:n编译n把高级语言程序(称为源程序)首先翻译成功能上等价的机器语言程序(称为目标代码程序)或汇编语言程序(再通过汇编程序把它翻译成目标代码程序),然后执行目标代码程序。n在目标代码程序的执行中不再需要源程序。n解释n对源程序中的语句进行逐条翻译并执行,翻译完了程序也就执行完了。n这种翻译方式不产生目标程序,程序的每次执行都需要源程序。2022-7-2948n把高级语言程序翻译成机器语言程序的工把高级语言程序翻译成机器语言程序的工作一般由程序来实现,根据翻译方式可把作一般由程序来实现,根据翻译方式可把翻译程
11、序分为:翻译程序分为:n编译程序编译程序n解释程序解释程序 n一般来说,一般来说,n编译执行比解释执行效率高n解释执行容易实现平台无关2022-7-29491.5 C+语言的产生nC+是贝尔实验室的是贝尔实验室的Bjarne Stroustrup 为支持为支持面向对象面向对象程序设计而设计的一种程序设计而设计的一种 系统程序语言系统程序语言http:/en.wikipedia.org/wiki/Bjarne_Stroustrupn从从C语言发展演变而来的,首先是一个更好的语言发展演变而来的,首先是一个更好的Cn引入了类的机制,最初的引入了类的机制,最初的C+被称为被称为“带类的带类的C”n19
12、83年正式取名为年正式取名为C+n从从1989年开始年开始C+语言的标准化工作语言的标准化工作n于于1994年制定了年制定了ANSI C+标准草案标准草案n于于1998年年11月被国际标准化组织(月被国际标准化组织(ISO)批准)批准为国际标准,成为目前的为国际标准,成为目前的C+2022-7-29501.6 C+程序的组成n逻辑上逻辑上,一个,一个C+程序程序n由一些函数(子程序)、类、全局变量/对象的定义构成,其中必须有且仅有一个名字为main的函数。n函数由函数名、参数和返回类型、局部变量/对象的定义以及语句序列构成;n类由数据成员和成员函数构成。n变量或对象的定义可以出现在函数的外部和
13、内部,而语句只能出现在函数内部。nC+程序从函数main开始执行。2022-7-2951 /This is a simple C+program#include /对对C+标准库中的程序实体进行声明标准库中的程序实体进行声明using namespace std;/指定使用标准库的名空间指定使用标准库的名空间std。int main()/主函数主函数 double x,y,z;/定义局部变量定义局部变量x、y和和zcout x y;/从键盘输入数据给变量从键盘输入数据给变量x和和yz=x+y;/将将x+y送送zcoutx+y=zendl;/输出结果输出结果z system(pause);ret
14、urn 0;/程序结束。程序结束。上述程序的运行结果为:上述程序的运行结果为:Enter two numbers:7.2 9.3 7.2+9.3=16.52022-7-2952n物理上物理上,一个,一个C+程序程序n可以放在一个或多个源文件(模块)中n每个源文件包含一些函数、类和外部变量/对象的定义,其中有且仅有一个文件中包含一个函数main。(一个工程中只能有一个main函数)n每个源文件可以分别编译。2022-7-29531.C+的字符集的字符集n构成语言的构成语言的基本符号基本符号称为语言的称为语言的字符集。nC+的字符集由下列符号构成:的字符集由下列符号构成:n大小写英文字母:az,A
15、Zn数字:09n特殊字符:!#%&*_ -+=/|.,:;?“()空格空格 横向制表横向制表 纵向制表纵向制表 换页换页 换行换行 2022-7-29542.标识符(Identifier,ID)n标识符由字母或下划线开始,由字母、数字、下划线组成。student、student_name、x_1、_name1合法合法 8bc、123不合法n标识符通常用来给程序中的标识符通常用来给程序中的实体实体命名,程序实体命名,程序实体包括:包括:常量常量、变量变量、函数函数、对象对象、类型类型(包括(包括类类)、)、标号标号等。等。n其有效长度为131个字符,长度超过31个字符者只识别前31个字符,VC+
16、标识符长度为1247个字符。2022-7-2955n在使用标识符时应注意以下几点:在使用标识符时应注意以下几点:n大小写字母有区别,如:abc、Abc与ABC不同。n关键词不能作为用户自定义的标识符,它们有特殊的作用。n具体编译程序可能会限制标识符的长度。n以两个下划线开头或以一个下划线后跟一个大写字母开头的标识符往往在C+语言内部实现中用到,程序中不要用这些标识符作为程序的全局标识符。n对不同种类的程序实体最好采用不同风格的标识符,以提高程序的易读性。例如:PI(常量)、StudentType(类型)、student(变量、对象或函数等)2022-7-2956例例:判断下面哪些是合法的标识符
17、:判断下面哪些是合法的标识符:MyFileSalary 94amountvoid94SalarySalary94$amountf3.5Num_of_Student2022-7-2957n关键字是指语言预定义的标识符,它们有固是指语言预定义的标识符,它们有固定的作用和含义,在程序中不能用作其它目定的作用和含义,在程序中不能用作其它目的。的。例如:例如:if、for、switch等等n关键字全部由关键字全部由小写字母小写字母组成。标准组成。标准C+(ISO14882)定义了)定义了74个关键字,具体的个关键字,具体的C+编译器会做一些增删。常用关键字参见编译器会做一些增删。常用关键字参见教材的表教
18、材的表1-13.关键字(keyword)2022-7-2958数据类型说数据类型说明符与修饰明符与修饰符符bool char wchar_t class const double enum float int long short signed struct union unsigned void volatile存储类型说存储类型说明符明符auto extern inline register static访问说明符访问说明符friend private protected public其它说明符其它说明符asm explicit namespace operator template th
19、is typedef typename using virtual 语句与标号语句与标号break case catch continue default do else for goto if return switch throw try while 运算符及逻运算符及逻辑值辑值delete false new sizeof true表表1-1 C+-1 C+常用关键字及分类常用关键字及分类 ok2022-7-2959n字面常量 用于表示在程序中直接书写的常量,又称用于表示在程序中直接书写的常量,又称直接量(literal)。如:)。如:128、3.14、A、“abcd”等等。n操作符 用
20、于描述运算。如:用于描述运算。如:+,-,*,/,=,=,=,|,&等。等。n标点符号 起到某些语法、语义上的作用。如:逗号、起到某些语法、语义上的作用。如:逗号、分号、冒号、括号等。分号、冒号、括号等。n空白符:空格符、制表符、回车符、注释符空格符、制表符、回车符、注释符 4.其它成分2022-7-2960n注释 是为了方便对程序的理解而加在程序是为了方便对程序的理解而加在程序中的说明性文字信息。注释分为:中的说明性文字信息。注释分为:n单行注释:从符号/开始到本行结束。n多行注释:以符号/*开始到符号*/结束。n续行符n一个单词如果在一行中写不下(如一个很长的一个单词如果在一行中写不下(如
21、一个很长的字符串),则可以把它分几行来写,这时,需字符串),则可以把它分几行来写,这时,需要在每一行(最后一行除外)的后面加上一个要在每一行(最后一行除外)的后面加上一个续行符续行符。n续行符由一个反斜杠(续行符由一个反斜杠()后面紧跟一个换行符)后面紧跟一个换行符构成。构成。2022-7-29615.基本术语基本术语n源程序:源程序:n用源语言写的,有待翻译的程序,如example.cppn目标程序:目标程序:n也称为结果程序,是源程序通过翻译程序加工以后所生成的程序。如example.objn翻译程序:翻译程序:n是指一个把源程序翻译成等价的目标程序的程序。2022-7-2962n汇编程序
22、:汇编程序:其任务是把用汇编语言写成的源程序,翻译成机器语言形式的目标程序。n编译程序:编译程序:若源程序是用高级程序设计语言所写,经翻译程序加工生成目标程序,那么,该翻译程序就称为编译程序。2022-7-2963n解释程序:解释程序:这也是一种翻译程序,同样是将高级语言源程序翻译成机器指令。它与编译程序不同点就在于:它是边翻译边执行的,即输入一句、翻译一句、执行一句,直至将整个源程序翻译并执行完毕。2022-7-29641.7 程序设计(Programming)n要使得计算机能完成各种任务,就必须为它编写要使得计算机能完成各种任务,就必须为它编写相应的程序。相应的程序。n简单地说,程序设计就
23、是为计算机编制程序的过简单地说,程序设计就是为计算机编制程序的过程,它涉及:程,它涉及:n程序设计方法n程序设计步骤 n程序设计语言等n程序设计本质上可归结为:程序设计本质上可归结为:n数据描述n数据操作(加工)描述n过程式(面向功能)、对象式(面向数据)、函数过程式(面向功能)、对象式(面向数据)、函数式等式等2022-7-29651.过程式程序设计n一种以一种以功能功能为中心、基于为中心、基于功能分解功能分解的程序设计范型。的程序设计范型。n一个过程式程序由一些一个过程式程序由一些子程序子程序构成,每个子程序对构成,每个子程序对应一个子功能。子程序描述了一系列的操作,它实应一个子功能。子程
24、序描述了一系列的操作,它实现了现了功能抽象功能抽象。n过程式程序的执行过程体现为一系列的子程序调用。过程式程序的执行过程体现为一系列的子程序调用。数据处于附属地位,它独立于子程序,在子程序调数据处于附属地位,它独立于子程序,在子程序调用时通过参数或全局变量传给子程序使用。用时通过参数或全局变量传给子程序使用。n下面的公式描述了过程式程序设计的本质:下面的公式描述了过程式程序设计的本质:程序程序=算法算法+数据结构数据结构2022-7-29662.程序设计过程n明确问题明确问题 n搞清楚要解决的问题并给出问题的明确定义,搞清楚要解决的问题并给出问题的明确定义,即:做什么?即:做什么?n系统设计系
25、统设计 n给出问题的解决方案,即:如何做?主要包括:给出问题的解决方案,即:如何做?主要包括:n数据结构的设计数据结构的设计n算法的设计算法的设计 n如何组织上述两者,属于不同的程序设计范型。如何组织上述两者,属于不同的程序设计范型。2022-7-2967n编程编程n选择用某种语言进行编程。n良好的程序设计风格可以通过学习和训练来获得。n测试与调试测试与调试 n程序写好之后,其中可能含有错误。程序的逻辑错误和运行异常错误一般可以通过测试(test)来发现。n发现错误给错误定位的过程称为调试(debug)。n运行维护运行维护 n所有的测试手段只能发现程序中的错误,而不能证明程序没有错误。n在使用
26、中发现错误并改错称为维护。程序设计步骤(续)2022-7-29683.C+程序的编辑、编译、调试与运行步骤程序的编辑、编译、调试与运行步骤 n编辑编辑 n利用某个编辑程序(如:利用某个编辑程序(如:Windows平台上的写字板、记平台上的写字板、记事本、事本、Word等)把等)把C+源程序输入到计算机中,并作源程序输入到计算机中,并作为文本文件(称为为文本文件(称为源文件源文件)保存到外存(如硬盘等)中。)保存到外存(如硬盘等)中。nC+源文件的文件名通常为:源文件的文件名通常为:*.cpp。n编译编译 n利用某个利用某个C+编译程序对保存在外存中的编译程序对保存在外存中的C+源程序进源程序进
27、行编译,编译结果作为目标文件保存到外存。行编译,编译结果作为目标文件保存到外存。n目标文件的文件名通常为:目标文件的文件名通常为:*.obj。n编译预处理程序:执行编译预处理命令。编译预处理程序:执行编译预处理命令。2022-7-2969n链接链接n通过一个链接程序把所有目标文件以及程序中用到通过一个链接程序把所有目标文件以及程序中用到的一些系统功能所在的目标文件(通常称为库文件)的一些系统功能所在的目标文件(通常称为库文件)连接起来,作为一个可执行文件保存到外存。连接起来,作为一个可执行文件保存到外存。n可执行文件的文件名通常为:可执行文件的文件名通常为:*.exe。n运行运行n通过操作系统
28、提供的应用程序运行机制,把某个可通过操作系统提供的应用程序运行机制,把某个可执行文件装入内存,运行其中的可执行程序。执行文件装入内存,运行其中的可执行程序。n在上述的编译、链接和运行过程中都有可能发在上述的编译、链接和运行过程中都有可能发现程序有错。现程序有错。整个过程可能会重复多次,直到整个过程可能会重复多次,直到程序得出正确的运行结果。程序得出正确的运行结果。编辑编辑(.cpp)编译编译(.obj)链链接接(.exe)运行运行输出结果输出结果2022-7-2970Creating,Compiling,and Running Programs Source Code Create/Modif
29、y Source Code Compiler Executable Code Run Executable Code e.g.,Welcome Result If compilation errors If runtime errors or incorrect result#include int main()/Display Welcome to C+to the console std:cout Welcome to C+!std:endl;return 0;Saved on the disk stored on the disk Source code(developed by the
30、 programmer)Machine Code program Linker stored on the disk An object file(e.g.,Welcome.obj)is created.An executable file(e.g.,Welcome.exe)is created.2022-7-29714.C+集成开发环境 n出现了很多出现了很多C+集成程序开发环境,如:集成程序开发环境,如:nVisual C+nTurbo C+nC+BuildernDev C+,等n在这些集成环境中,往往使用一条命令在这些集成环境中,往往使用一条命令(菜单项)就能完成所有的步骤,并且,(菜单
31、项)就能完成所有的步骤,并且,一些开发环境还提供了可视化的程序设计一些开发环境还提供了可视化的程序设计支持和功能强大的程序动态调试等工具。支持和功能强大的程序动态调试等工具。n(Visual C+6.0演示)演示)2022-7-2972在VC环境下的编程步骤nstep 1 启动启动VC6.0nstep2 建立项目文件建立项目文件 3.选选控控制制 台台应应用用4.输输入入项项目目名名称称2022-7-2973nstep3 编辑源程序编辑源程序n点文件菜单的新建新建,选定源文件类型选定源文件类型,输入文件名,点输入文件名,点确定确定2.输输入入源源文文件件名名1.选选c+源源文文件件3.在此输入
32、程序语句在此输入程序语句2022-7-2974nstep4 点点文件文件菜单的菜单的存盘存盘(另存为另存为可以修改路径与文件名)可以修改路径与文件名)nstep5 编译源程序编译源程序nstep6 组建组建nstep7 运行运行1.点组建菜单点组建菜单或或点工具栏快捷图标点工具栏快捷图标2.观察下面的信息提示,观察下面的信息提示,0 errors,成功,成功2022-7-2975常见的语法错误n缺少语句结束符缺少语句结束符“;”nC+语句以;结尾,在缺;号的语句后补上。n语句中出现有语句中出现有未知字符未知字符。nC2018是未知字符错误编号。0 xa3、0 xbb是使用了全角分号(中文);改
33、为英文的即可。2022-7-2976常见的语法错误n未定义的标识符未定义的标识符nC+标识符要先定义后使用,变量c没有定义,因之前有分号。该错有时是拼写错误导致n一个项目中出现有多个一个项目中出现有多个main函数。函数。n一个项目只能有一个main函数n当要编一个新的程序时必须新建一个项目2022-7-2977Trace a Program Execution#include using namespace std;int main()double radius;double area;/Step 1:Read in radius radius=20;/Step 2:Compute area
34、 area=radius*radius*3.14;/Step 3:Display the area cout The area is;cout area endl;no valueradiusallocate memory for radius2022-7-2978Trace a Program Executionno valueradiusmemory#include using namespace std;int main()double radius;double area;/Step 1:Read in radius radius=20;/Step 2:Compute area are
35、a=radius*radius*3.14;/Step 3:Display the area cout The area is;cout area endl;no valueareaallocate memory for area2022-7-2979Trace a Program Execution20radiusno valueareaassign 20 to radius#include using namespace std;int main()double radius;double area;/Step 1:Read in radius radius=20;/Step 2:Compu
36、te area area=radius*radius*3.14;/Step 3:Display the area cout The area is;cout area endl;2022-7-2980Trace a Program Execution20radiusmemory1256.636areacompute area and assign it to variable area#include using namespace std;int main()double radius;double area;/Step 1:Read in radius radius=20;/Step 2:
37、Compute area area=radius*radius*3.14;/Step 3:Display the area cout The area is;cout area endl;2022-7-2981Trace a Program Execution20radiusmemory1256.636areaprint a message to the console#include using namespace std;int main()double radius;double area;/Step 1:Read in radius radius=20;/Step 2:Compute area area=radius*radius*3.14159;/Step 3:Display the area cout The area is;cout area endl;2022-7-2982Thanks!2022-7-29830 5 C 3 H3 D 2 5 H 3 D 2 5 H0 5 C 3 H1 11 1例:十六进制数:例:十六进制数:逢十六进一逢十六进一 借一为十六借一为十六4 2 E 8 H3 7 6 2 H