C及Windows可视化程序设计.pptx
《C及Windows可视化程序设计.pptx》由会员分享,可在线阅读,更多相关《C及Windows可视化程序设计.pptx(113页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、无论采用何种编程技术,总离不开最基本的结构化程序设计思想。本章将首先结合实例简要介绍C+语言的对象在基于过程设计中的使用方法,然后结合使用对象简要介绍结构化程序的基本设计原理,既为基于过程的编程打下基础,也加深使用对象的概念。第1页/共113页本节将通过求圆面积的程序,介绍典型的C+程序结构,目的是结合例题复习上一章的内容,并为通过编程学习和掌握程序控制结构打下基础。【例2.1】编写一个程序,在主函数中输入圆的半径,调用函数求圆的面积。为了便于介绍,在注释中给程序语句编上号,空行是为了说明程序风格而设的。#include /1标准库头文件#include /2数学运算函数pow的头文件usin
2、g namespace std;/3使用命名空间const double PI=3.14159;/4定义常量PI2.1 典型C+程序结构第2页/共113页double area(double);/5函数area的原型声明void main()/6无返回值的主程序 /7主函数开始double r(0),s=0;/8演示两种初始化方法coutr;/10将输入值赋给rs=area(r);/11调用area函数cout圆的面积是:sendl;/12输出结果 /13主函数结束/本函数计算圆的面积 14double area(double r)/15定义area函数 returnPI*pow(r,2);/
3、16函数体,调用pow求r的平方程序运行结果如下:请输入半径:10 圆的面积是:314.159第3页/共113页C+函数有库函数(标准函数)和自定义函数两类,本例求圆面积的函数area就是自定义函数。C+程序使用变量的基本规则是先声明,后使用;对函数调用也是如此。如果没有语句5,当编译主函数main扫描到语句 s=area(r);时,尚没有见到area函数,这时就会报错。所以在主函数之前使用语句5对area函数进行原型声明,即 double area(double);/函数area的原型声明2.1.1 函数和函数原型第4页/共113页上面的语句声明了area的函数原型,即只列出参数的数据类型。
4、它向编译系统声明,后面有一个area函数,该函数有一个double类型的参数,函数返回值类型也是double。编译系统记录下调用这个函数所需要的信息,然后根据函数原型对程序中调用函数的合法性进行全面的检查。因为是检查调用函数的类型是否和声明的一致,所以声明时不需要给出参数的变量名称。如果使用下述方式声明:double area(double r);因为编译系统不检查参数名,所以效果一样。为了全面严格检查调用函数是否匹配,应该养成使用函数原型声明的好习惯。第5页/共113页在C+中,每一个函数都有基本相同的形式:函数类型声明函数名(形式参数列表)变量声明 语句部分 函数可按任何顺序出现,且可出现
5、在一个源程序文件或多个源程序文件中。函数定义中不可缺少的部分是:函数类型声明 函数名()其他部分根据需要来确定有无。分析函数的定义形式,可以把定义分为两部分:函数声明部分和函数体。第6页/共113页1.函数声明部分函数类型声明用来定义函数返回值的数据类型,可使用基本数据类型和自定义类型。C+编译系统要求必须指定类型,无返回值函数的类型为void。在C+程序里,子程序和函数是一个意思,都称为函数。函数名是识别函数的名字,可用英文字母(az,AZ)、数字及下划线(_)组成的字符序列构成,可使用长名字,而且下划线可作为名字的开始,例如_func()。在编写程序时,这些书写方法都会碰到,应该熟练地掌握
6、它们。第7页/共113页形式参数列表在函数名后的圆括号“()”内,这里声明的参数是形式参数(例abs函数的int a),简称形参(亦称哑元)。当调用该函数时,形参将被实际参数(亦称实元)所替换,这种替换常叫做哑实结合。函数也可没有参数,但函数名后的圆括号“()”不能省略。2.函数体函数体是处理需要完成功能的部分,它从花括号“”开始,直到与此对应的花括号“”为止。变量说明通常接在“”的后面,接在变量说明后的是语句部分。函数体的最后是“”,表示该函数到此结束。C+中也常使用空的函数体函数。例如:void tmpc()第8页/共113页这里tmpc 是函数名。因为“”内没有任何可供执行的语句,所以该
7、函数一旦被调用,就什么也不做而立即返回到调用它的函数里去,这就是C+程序的最小函数形式。这种函数有两种用途:第1种是用在程序开发时,为给将来要设置的函数事先安排一个位置,往往给函数起个暂时的名字,待以后再设计这个函数。当设计正确之后,再将它改为合适的名字。第2种是用在继承中,基类声明一个函数作为接口,由派生类根据需要去定义它的功能。第9页/共113页C+语言仍然可以使用宏定义。无参数的宏作为常量,而带参数的宏则可以提供比函数调用更高的效率。预处理只是进行简单的文本代替而不进行语法检查,所以会存在一些问题。例如:#define BUFSIZE 100这里的BUFSIZE 只是一个名字,不占用存储
8、空间并且能被放在一个头文件中。在编译期间编译器将用“100”来代替所有的BUFSIZE。这种简单的置换常常会隐藏一些很难发现的错误,并且这种方法还存在类型问题。比如这个BUFSIZE 究竟是整数还是浮点数?而使用const,则把值代入编译过程即可2.1.2 const修饰符和预处理程序第10页/共113页解决这些问题。和上面宏定义等效的语句如下:const int BUFSIZE=100;这样就可以在任何编译器需要知道这个值的地方使用BUFSIZE,并且编译器在编译过程中可以通过必要的计算,把一个复杂的常量表达式缩减成简单的。对于某些更复杂的情况,宏定义往往不如常量来得简洁清楚,用const
9、完全可以代替无参数的宏。用关键字const 修饰的标识符是一类特殊的常量,称为符号常量,或称之为const 变量。第11页/共113页const 修饰符的使用也很简单。事实上,对基本数据类型的变量,一旦加上const 修饰符,编译器就将其视为一个常量,不再为它分配内存,并且每当在程序中遇到它时,都用在说明时所给出的初始值取代它。使用const 可以使编译器对处理内容有更多的了解,从而对其进行类型检查,同时还能避免对常量的不必要的内存分配并可改善程序的可读性。因为被const 修饰的变量的值在程序中不能被改变,所以在声明符号常量时,必须对符号常量进行初始化,除非这个变量是用extern 修饰的外
10、部变量。例如:第12页/共113页 const int i=8;const int d;/错误!extern const int d;/可以const 的用处不仅仅是在常量表达式中代替宏定义。如果一个变量在生存期中的值不会改变,就应该用const 来修饰这个变量,以提高程序的安全性。第13页/共113页C+语言预处理程序不是C+编译程序的一部分,它负责分析处理几种特殊的语句,这些语句称为预处理语句。预处理程序对这几种特殊语句的分析处理是在编译程序的其他部分之前进行的。为了与一般的+程序语句相区别,所有预处理语句都以位于行首的符号“”开始。预处理语句有3种,它们分别是宏定义、文件包含和条件编译。
11、C+预处理程序和有关语句能够帮助程序员编写易读、易改、易移植并便于调试的程序,对于模块化程序设计也提供了很大的帮助。例如语句 define PI 3.14159 第14页/共113页是用名字PI来代替数字3.14159,又例如:define YES 1 define NO 0则定义 YES和NO分别是1和0。当然,在这些场合下,最好是使用const语句。预处理程序把所有出现的、被定义的名字全部替换成对应的“字符序列”。define中的名字与C+中标识符有相同的形式,为了区别,往往用大写字母来表示(标识符用小写字母)。这也适合const语句。【例2.1】中的语句1是文件包含语句,它指的是一个程序
12、把另一个指定文件的内容包含进来。书写时,可以使用引号也可以用尖括号。例如:include filename或者 include 第15页/共113页都是在程序中把文件filename的内容(引号或尖括号是一定要的)包含进来。另外还要注意,文件名是用双引号还是尖括号括起来,其含义并不一样。使用尖括号时,C+编译系统将首先在C+语言系统设定的目录中寻找包含文件,如果没有找到,就到指定的目录中去寻找,这是引用系统提供的包含文件所采用的方法。自己定义的包含文件一般都放在自己指定的目录中,所以在引用它们时,就采用双引号,以通知C+编译器在用户当前目录下或指定目录下寻找包含文件。指定的目录不必在同一个逻辑
13、盘中。例如自己定义的包含文件myfile.h在E盘的prog目录中,则引用形式为 include e:progmyfile.h第16页/共113页在程序设计中,文件包含语句是非常有用的。一般C+系统中带有大量的.h文件,用户可根据不同的需要将相应的.h 文件包含起来。在【例2.1】中,因为要用到C+语言提供的幂运算函数pow,pow声明在数学运算库头文件math.h中,所以要用 include 语句。标准输入输出是定义在标准库 iostream.h 中的,所以要同时用到如下两条语句:include using namespace std;一般的C+程序都离不开这两条语句,初学C+语言的读者也最
14、容易遗漏这两条语句。第17页/共113页一个好的程序设计者应该在程序中正确使用注释来说明整个程序的功能、注意事项及有关算法等。有人认为,注释愈多,程序的可读性和可维护性愈好,其实不然,仅需在必要的地方进行注释即可。也就是说,应该加的是程序的注释,不是对程序的说明。行的注释形式是“/”,也可使用C语言的注释方式“/*/”,但一定要配对使用。2.1.3 程序注释第18页/共113页C+语言的语句是用来向计算机系统发出操作指令的。一条语句经过编译后生成若干条机器指令。一个为实现特定目的的程序应包含若干条语句,即一个C+程序可以由若干个源程序文件(分别编译的文件模块)组成,一个源文件可以由若干个函数和
15、预编译命令组成,一个函数又由数据定义和执行语句两部分组成。一条完整的语句必须以分号“;”结束。可以把程序语句分成如下几类。2.1.4 程序语句第19页/共113页1.声明语句用来声明对象的类型和初值。【例 2.1】中的第 8 条语句是把对象r和s声明为双精度的浮点对象,并赋初值为零。最好养成在声明对象的同时进行初始化。人们已经习惯于称这些对象为变量,所以在面向对象设计时,仍然喜欢称其为变量。从现实世界来看,它们确实映射着一个确定的对象。对这些简单而基本的对象,虽然习惯地称其为“变量”,但为了尽快养成使用对象思考问题的习惯,建议改称对象。第20页/共113页2.表达式语句由一个表达式构成一个语句
16、,用以描述算术运算、逻辑运算或产生某种特定动作。最典型的用法是由赋值表达式构成一个赋值语句。例如:“a=3”是一个赋值表达式,而“a=3;”就是一条赋值语句。从中可以看到,在一个表达式的最后加一个分号就构成了一条语句。一条语句最后必须出现分号,分号是语句中不可缺少的一部分。例如:i=i+1 /是表达式,不是语句 i=i+1;/是语句,作用是使i的值加1由此可见,任何表达式都可以加上分号而成为语句。第21页/共113页例如:x+y;也是一条语句,作用是完成x+y的操作,它是合法的,但没有实际意义。【例 2.1】中的语句 s=area(r);也是表达式语句。第22页/共113页3.程序控制语句程序
17、控制语句是用来描述语句的执行条件与执行顺序的语句。C+语言的控制语句有if()else 条件语句for()循环语句while()循环语句 dowhile()循环语句Continue 结束本次循环语句break 中止循环或switch语句Switch 多分支选择语句 goto 转移语句Return 从函数返回语句第23页/共113页以上9种语句中的括号()表示其中是一个条件,表示内嵌的语句。例如一条if()else的具体语句可写成:if(xy)z=x;else z=y;详细的使用方法在后续章节叙述。4.复合语句C+语句又可分为简单语句和复合语句两种。在C+语言中,诸如表达式 x=1 和 cout
18、x等,其后加上分号,即变成 x=1;和 cout=0)/1 /2 Cout输入为:a=0的条件成立时,执行if后的复合语句,否则执行else之后的复合语句。结束一个复合语句的右花括号之后不能带分号(语句5和10),否则有时可能会导致错误;不能遗漏在复合语句的最后一条语句与右花括号之间的分号(语句4和9)。复合语句可由若干语句组成,这些语句可以是简单语句,还可以是复合语句,这样C+语言的语句就形成了一种层次结构,原则上可以不断地扩大这种层次。复合语句在程序中是一种十分重要的结构。第26页/共113页5.函数调用语句这是由一次函数调用加一个分号而构成的一条语句。例如:area(r);6.空语句“;
19、”是一条空语句。它只有一个分号,所以什么也不做。第27页/共113页C+语言中严格区分大小写字母,如变量 B 和 b 是完全不同的两个变量。C+语言惯用小写字母,而且以下划线“_”字符开头的标识符一般由系统内部使用,最好不要用它作为标识符的第1个字符。习惯上把使用宏定义的标识符用大写字母表示,例如将圆周率定义为 PI。2.1.5 大小写字母的使用第28页/共113页C+语言的格式很自由,一行可以写几条语句。不过,使用适当的格式对于充分理解这种语言非常重要。一个适当格式的程序和一个不适当格式的程序就像一封打得很漂亮的信和一封写得非常凌乱的信,给人的印象是大不一样的。应该使源代码易于理解,特别是容
20、易被输入这些程序的程序员所理解,这有助于复杂程序的调试及修改以前输入的代码。上面的程序就是按此原则书写的。由此可见,应使用缩进格式和必要的空行的书写风格,并使源代码具有层次性和逻辑性,以增加程序的可读性和可操作性。2.1.6 程序的书写格式第29页/共113页一般来讲,每次缩进 5 个字符的位置,按程序特性设置空行。在本书中,为了节省篇幅,有意识地减少空行。读者在输入程序时,不要模仿,应注意养成良好的书写风格。在书写程序语句时,一般应注意如下规则:括号紧跟在函数名的后面,但在for和while后面,应用一个空格与左括号隔开以增加可读性。数学运算符的左右各留一个空格,以与表达式区别。在表示参数时
21、,逗号后面留一个空格。在for、dowhile和while语句中,合理使用缩进、一对花括号和空行。第30页/共113页C+的cout和cin流能自动识别数据类型,根据数据类型进行读写操作,完全不需要用户设置,使用非常方便。不过,有时对输入输出仍有一定的要求,尤其是输出格式。C+提供了两种格式控制方式,一种是使用iso 类提供的接口,另一种是使用操纵符的特殊函数,它的特点是可以直接包含在输入和输出表达式中,因此更为方便。注意,不带形式参数的操纵符定义在iostream.h中,带形式参数的操纵符定义在iomanip.h中。使用它们时,一是要正确包含相应的头部文件,二是只有与符号“”连接时才起作用,
22、三是无参数的操纵符函数不能带有“()”号。2.1.7 数据的简单输入输出格式第31页/共113页这些操纵符的含义如下:名称 含 义 输入/输出Dec 设置转换基数为十进制 输入/输出Oct 设置转换基数为八进制 输入/输出hex 设置转换基数为十六进制 输入/输出showbase(int base)输出 设置base为数制的基(0,8,10,16),默认为0ws 设置跳过输入中的前导空白字符 输入ends 插入一个空字符0以结束字符串 输出endl 输出一个换行符并刷新流 输出flush 强制刷新流 输出第32页/共113页名称 含 义 输入/输出resetiosflags(long flag
23、)清除flag指定的标志位 输出setiosflags(long flag)设置flag指定的标志位 输出setfill(char ch)设置ch为填充字符 输出setprecision(int n)设置浮点数输出精度n 输出setw(int width)设置输出数据字段 宽度width 输出需要说明的是resetiosflags 和setiosflags操纵符,它们的参数flag是引用C+的类ios里定义的枚举常量,所以要使用限定符。第33页/共113页下面是几个常用常量的含义:常量名 含 义iosleft 输出数据按输出域左边对齐输出iosright 输出数据按输出域右边对齐输出iossh
24、owbase 输出带有一个表示制式的字符iosshowpoint 浮点输出时必须带有一个小数点iosshowpos 在正数前添加一个+号iosscientific 使用科学计数法表示浮点数iosfixed 使用定点形式表示浮点数注意:flag可以是多个常量相“与”,例如setiosflags(iosshowpoint|iosfixed)。第34页/共113页【例2.2】使用setw设置输出宽度的例子。#include#includeusing namespace std;void main()int a=29,b=1001;coutasetw(6)bendl;coutabendl;程序的输出为
25、:29 1001 291001setw(6)使b按域宽为6 输出,即相当于在a 和b 之间加入了2个空格。setw(6)只对紧接着的那个元素有效。第35页/共113页【例2.3】在下面的程序中,当要求输入时,均输入100,给出程序的输出结果。#include#includeusing namespace std;const double PI=3.141592;void main()coutPIendl setprecision(0)PIendl setprecision(1)PIendl setprecision(2)PIendl setprecision(3)PIendl setpreci
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Windows 可视化 程序设计
限制150内