C语言概述设计ppt课件(完整版)_第1页
C语言概述设计ppt课件(完整版)_第2页
C语言概述设计ppt课件(完整版)_第3页
C语言概述设计ppt课件(完整版)_第4页
C语言概述设计ppt课件(完整版)_第5页
已阅读5页,还剩799页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C+语言程序设计第一章 C+语言概述主要内容C+ 的特点 C+ 程序开发过程 编写简单的C+程序 应用VC+ 编译、调试C+程序 1.1 C+ 的特点C+ 语言是目前应用广泛的一种计算机程序设计语言。C+ 是从C语言发展而来的,C+支持面向对象的程序设计方法,特别适合于中型和大型的软件开发项目,从开发时间、费用到软件的重用性、可扩充性、可维护性和可靠性等方面,C+ 均具有很大的优越性。同时,C+ 又是C语言的一个超集,在基本语法特点方面,C+ 语言保持与C语言兼并,二者没有本质上的差别,这就使得许多C程序不经修改就可被C+ 编译通过。C+ 语言与C语言的主要区别是编程思想上的更新,即由面向过程

2、转变为面向对象。在C+ 语言中引入了类与对象机制,从而引发出一系列包括类的定义、继承与派生、多态性等概念。 数据封装和隐藏是与类的定义紧密相关的现象,也是C+ 语言中的一大特点。数据的封装和隐藏使重要的内部数据得到保护。1.2 C+程序开发过程 Step1:在分析给定问题的基础上,确定所用的算法(即操作步骤)和数据结构(即数据的类型和组织形式),最后用高级语言加以实现。编制的程序必须送入计算机中,以文件的形式存放在磁盘上,这个过程称为编辑。在编辑方式下建立起来的程序文件称为源程序文件,简称源文件,相应的程序叫做源程序。Step2:源程序是用高级语言编写的,它不能直接在机器上运行。因为计算机不能

3、识别源程序, 它仅认识规定范围内的一系列二进制代码所组成的指令数据(即指令动作所涉及的对象), 并按预定的含义执行一系列动作。通常把这些计算机能识别的二进制代码称为目标代码。为了把源程序变成目标代码,就需要有个“翻译” 做这种转换工作。在计算机系统中实现这种转换功能的软件是编译程序 。Step3:如果在编译过程中发现源程序有语法错误,则系统就给出“错误信息”,提示用户在哪一行中可能有什么样的错误。用户见到这类提示信息后,要重新进入编辑方式,对代码行中的错误进行修改,然后对修改过的源程序重新进行编译。经编译之后生成的目标程序的文件叫做目标文件。 Step4:目标程序还不能马上在机器上运行。因为程

4、序中会用到库函数或者其他函数, 需要把它们连成一个统一的整体,这一步工作是连接。经过连接就把分离的目标程序连成完整的可执行程序,对应的文件是可执行文件。 程序设计算法及描述 程序设计用计算机语言编制解决问题的方法和步骤的过程。程序设计首先要解决的是算法设计。 程序设计算法就是用计算机解决问题的方法和步骤。 描述算法的方法 主要有:自然语言、流程图、盒图、伪代码、程序语言等。 流程图的基本符号 1.3 编写简单的C+程序 我们在C+ 语言的编辑器编辑上述源程序,将程序文件命名为hello.cpp保存。源程序经过编译、连接后,生成一个可执行的应用程序。运行该应用程序,其运行结果为: 你好,欢迎学习

5、C+! 通过上面的例子,我们看到,一个C+源程序包括编译预处理命令、注释和函数体三部分:程序解析编译预处理的作用是在对源程序编译之前,先对这些命令进行预处理,然后将预处理的结果和源程序一起进行正常的编译处理。C+语言中,编译预处理命令以打头,一行只能写一条编译预处理命令。程序编译预处理命令语句 #include 中是iostream.h头文件的文件名。头文件一般以.h或.hpp为扩展名,主要提供数据类型声明、类的定义、函数的说明等信息。一般来说,C+语言系统提供的头文件名用括起来,如,而用户自己定义的头文件,则用双引号“”把头文件括起来。在本程序中,iostream.h是系统提供的头文件,该头

6、文件声明了程序所需要的输入输出操作的有关信息。cin、cout、和等操作信息都在该文件中有声明。(1)编译预处理命令(2)注 释程序中标有“/”号的语句为注释语句。注释是程序中的说明性文字,是程序的非执行部分。它的作用是为程序添加说明,增加程序的可读性。C+语言使用两种方式对程序进行注释:“/”符号,它表示从“/”符号开始到此行的末尾位置都作为注释。“/* */ ” 符号,它表示从“/*”开始到“*/ ”结束的部分都作为注释部分,可以是多行注释。(3)函数C+语言的源程序是一系列函数的集合。函数是用特定格式描述、具有特定功能的程序模块。函数由函数声明和函数体两部分组成。每个程序有且只有一个主函

7、数,其函数名为main,其结构如下:主函数main()可以位于程序中的任何位置,程序的执行总是从main()函数开始。(4)语句语句是组成程序的基本单元。函数是由若干条语句组成的。C+语言的语句以分号表示语句结束。一般程序都是由若干条语句组成的,每一条语句都以分号结束。C+语言对字母的大小写敏感,所以在书写程序语句时要注意字母的大小。1.4 应用VC+ 编译、调试C+程序1、启动Microsoft Visual C+ 2、建立当前工作区目录3、建立一个空项目4、在当前项目中建立程序文件编译编译、链接运行5、编译程序6、运行程序单击工具栏中的运行按钮 ,则可以看到程序运行结果 C+语言程序设计第

8、二章 C+语言基础本章内容提要输入输出语句数据类型表达式和运算符程序控制语句2.1 简单的输入输出语句1、输出语句cout通过输出操作符“”将表达式1、表达式2、表达式n依次显示到屏幕上。如果表达式是变量则将变量的值显示出来;如果表达式是计算式,则先计算,再将计算的结果显示出来;如果表达式是用双引号括起来的字符串,则将双引号括起来的内容“原样照印”的显示到屏幕上。cout 表达式1 表达式2 表达式n;例2-11 #include 2using namespace std; 3 void main() 4 5 cout 我对 C+ 很着迷!; 6 cout endl; 7 包含iostream

9、头文件,该文件定义了输出流对象cout 定义名字空间输出流对象cout将字符输出到屏幕上显示换行例2-2 在屏幕上输出显示一个用“*”号组成的三角形图形。 1 #include 2 using namespace std;3 void main() 4 5cout * endl; 6cout * * * endl;7cout * * * * * endl;8cout * * * * * * * endl;9 包含iostream头文件时,必须定义名字空间双引号中的任何符号在输出时都将被“原样照印”,第一行输出1个“*”号,第二行输出3个“*”号,第三行输出5个“*”号,第四行输出7个“*”号。

10、* * * * * * * * * * * * *输出结果:例 2-31 #include 2 using namespace std;3 void main() 4 5cout 3 + 5 = 3 + 5 ”,使用输入流对象cin读取由键盘输入的字符和数字,并把它赋值给指定的变量。从键盘上输入的数据通过cin接收,再由输入操作符 “”将数据赋值给指定的变量。输入操作符 “”也称为提取运算符。同样,输入操作符 “”也是在iostream.h中定义的,因此,必须在程序的开头用#include包含iostream.h。例2-4 从键盘上输入两个整数,再计算出两个数的和 1 #include 2 u

11、sing namespace std;3 void main()4 4 int a, b; 6 cout a ; 8 cout b ; 10 cout a “+” b “=” a + b endl;11 cout、cin需要头文件iostream使用名字空间int为定义整数类型变量,这里定义的变量a、b只能接受整数cin读取由键盘输入的数字,并通过输入操作符把它赋值给变量a按照“原样照印”模式输出 cin读取由键盘输入的数字,并把它赋值给变量b程序运行时,用cin接收用户输入的两个整数,然后计算并输出这两个数的和。比如用户通过键盘输入3后,按Enter键,然后输入5,再按Enter键,其运行结

12、果如下: 用户通过键盘给变量a、b赋值输入第一个整数,a = :3 输入第二个整数,b = :5 3 + 5 = 8说明:在上面运行结果中,下划线表示的3 和5由用户输入,“”为Enter键。2.2 数据类型C+ 语言的数据类型可以分为两大类:基本数据类型和构造数据类型。基本数据类型是由程序设计语言系统所定义、不可再划分的数据类型。基本数据类型在内存中存入的是数据值本身。构造数据类型在内存中存入的是指向存放该数据的地址,不是数据本身,它是在基本数据类型的基础上,由系统或用户自定义的。构造数据类型也被称为复合数据类型。数据类型的作用有二个:其一,为数据在内存中分配合适的存储区域,同时也确定了数据

13、范围;其二,规定数据所能进行的操作。 2.2.2 基本数据类型C+ 定义了多个基本数据类型:字节型,短整型,整型,长整型,无符号整型,字符型,浮点型,双精度型,布尔型,这些类型可分为4组: 整数型:该组包括字节型(byte),短整型(short),整型(int),长整型(long),它们都是有符号整数型,还有无符号整数型,即正整数型。 浮点数型:该组包括浮点型(float),双精度型(double),它们代表有小数精度要求的数字。 字符:这个组包括字符型(char),它代表字符集的符号,例如字母和数字。 布尔型:这个组包括布尔型(boolean),它是一种特殊的类型,表示真/假值。 类型数据类

14、型关键字类型长度值域范围有符号短整数short, short int2-215215-1内的整数有符号整数int 4-231231-1内的整数有符号长整数long, long int, signed long int4-231231-1内的整数无符号短整数unsigned short int20216-1内的整数无符号整数unsigned int 40232-1内的整数无符号长整数unsigned long int 40232-1内的整数单精度浮点型 float 4-3.402823*10383.402823*1038内的数双精度浮点型double 8-1.7977*103081.7977*1

15、0308内的数长双精度浮点型long double8-1.7977*103081.7977*10308内的数有符号字符char1-128+127内的整数无符号字符unsigned char10255内的整数逻辑bool 10和1下面对表2-1作几点说明:1、 对于每一种整数类型和字符类型,又可分为有符号和无符号两种类型。通常使用较多的是有符号类型,所以时常也把有符号类型简称为所属类型。如把有符号整数类型简称为整型或int型,把有符号字符类型简称为字符型或char型。 2、 类型长度是指存储该类型值域范围内的任一个数据所占有的存储字节数,该字节数由系统规定,并且对任一数据都相同。如短整型长度为2

16、,即存储每个短整数占用2个字节,对应16个二进制位;整型长度为4,即存储每个整数占用4个字节,对应32个二进制位;字符型长度为1,即存储每个字符占用1个字节,对应8个二进制位。3、 类型的值域范围是指该类型所对应的固定大小的存储空间按照相应的存储格式所能表示的值的范围。如对于有符号短整型来说,它对应2个字节的存储空间,存储格式为二进制整数补码格式,只能够表示(即存储)-215215-1,即-32768+32767之间的所有整数。若一个整数小于-32768或大于32767,则它就不是该类型中的一个值,即它不是一个短整数。又如对于无符号字符类型来说,它对应1个字节的存储空间,存储格式为二进制整数无

17、符号(隐含为正)格式,只能够表示028-1,即0255之间的所有整数。若一个整数小于0或大于255,则它就不是该类型中的一个值,即它不是一个字符数据。4、 在32位的 C+ 版本中,整型(int)和长整型(long ing)具有完全相同的长度和存储格式,所以它们是等同的。但在早期的C+版本中,由于当时的机器字长为16位,所以整型和长整型的长度是不同的,前者为2个字节,后者为4个字节。无论如何,任一种C+ 语言都遵循short int型的长度小于等于int型长度,同时int型长度又小于等于long ing型长度的规定。与上述情况类似,在32位的C+ 版本中,双精度型(double)和长双精度型(

18、long double)也具有完全相同的长度和存储格式,它们是等同的。在其他C+ 语言中也可能不同,但无论如何,它们都遵循float型的长度小于等于double型长度,同时double型长度又小于等于long double型长度的规定。2.2.3 数据类型转换在C+ 中有两种数据类型转换:数据类型自动转换强制类型转换。1、数据类型自动转换在对数据进行运算时,一般要求两个运算操作数的类型一致,如果操作数的类型不一致,则系统编译器会自动将这两个运算操作数转换成相同类型之后再进行运算。自动类型转换是按从低到高的顺序原则进行的。各种数据类型按下列的高低顺序转换:例如:计算10 + 2.5,先将10转换

19、成双精度浮点型后再相加,结果为双精度浮点型的12.5。2、强制类型转换强制类型转换是在程序设计时显式指出的类型转换。强制类型转换的格式如下:int a;double b = 3.14;a = (int)b;结果 a = 3,b仍然是double类型,b的值仍然是3.14。从该示例可以看到,采用强制类型转换将高类型数据转换成低类型数据时,可能会降低数据精度。数据类型说明(表达式)或(数据类型说明)表达式2.2.4 变量在程序中,每一个数据都有一个名字,并且在内存中占据一定的存储单元。在程序运行过程中,数据值不能改变的量称为常量,其值可以改变的量称为变量。变量在程序运行过程中可以进行赋值,从而改变

20、了原来的值。在C+ 语言中,所有常量及变量在使用前必须先声明其值的类型,也就是“先声明,后使用”。每一个变量都属于一种数据类型,用来表示(即存储)该类型中的一个值。在程序中只有存在了一种数据类型后,才能够利用它定义出该类型的变量。根据这一原则,我们可以随时利用C+ 语言系统提供的基本类型或用户自定义的类型定义需要使用的变量。一个变量只有被定义后才能被使用,即定义后的变量才能进行存储和读取其值的操作。1、变量的定义变量定义是通过变量定义语句实现的,该语句的一般格式为:为已存在的一种数据类型,如short, int, long, char, bool, float, double等都是类型关键字,

21、是用户定义的一个标识符,用来表示一个变量,该变量可以通过后面由方括号表示的可选项赋予一个值,称为给变量赋初值,是一个数值或表达式,它的值就是赋予变量的初值。数据类型关键字 变量名=;2、变量定义语句示例 第一条语句定义了两个整型变量a和b;第二条语句定义了两个字符变量ch1和ch2,并被分别赋初值为字符a和A,一个字符变量只能存放一个字符,不能存放字符串;第三条语句定义了一个整型变量x,并赋予表达式a + 2 * b的值作为初值;第四条语句定义了三个双精度变量,分别为d1, d2和d3,其中d2被赋予初值0.0,d3被赋予初值3.14159。3、变量定义语句执行过程当程序执行到一条变量定义语句

22、时,首先为所定义的每个变量在内存中分配与类型长度相同的存储单元,如对每个整型变量分配4个字节的存储单元,对每个双精度变量分配8个字节的存储单元。定义变量时,若变量名后带有赋值表达式,则计算出初值表达式的值,并把它保存到变量所对应的存储单元中,表示给变量赋初值,若变量名后不带赋值表达式,将自动给变量赋予初值0,否则不赋予任何值,此时的变量值是不确定的,实际上是存储单元中的原有值。在习惯上,常量名用大写字母表示,变量用小写字母表示,以示区别。例2-5 定义三个变量,求和值并输出结果。 1 #include 2 using namespace std;3 void main( ) 4 5 int x

23、; 6 float y, z, sum; 7 x = 2; 8 y = 5.5; 9 z = 10.0; 10 sum = x + y + z; 11 cout sum = sum endl;12 例2-6 实型数据的舍入误差 1 #include 2 using namespace std;3 void main( ) 4 5 float a,b; 6 a = 1234567890; 7 b = a + 20; 8 cout a = (int)a endl;9 cout b = (int)b endl; 10 a与b的输出结果相同,较小的整数部分被“丢失”。a = 1234567936b =

24、 1234567936说明: (1)实型变量是用有限的存储单元存储的,因此提供的有效数字是有限的,在有效位以外的数字将被舍去,由此可能会产生一些误差。(2)由于实数存在舍入误差,使用时要注意:不要试图用一个实数精确表示一个大整数,因为浮点数是不精确的;实数一般不判断“相等”,而是判断接近或近似;避免直接将一个很大的实数与一个很小的实数相加、相减,否则会“丢失”小的数;根据实际问题的要求选择单精度或双精度类型。 #includeusing namespace std;void main( ) double a,b; /将a, b定义为双精度实数类型 a = 1234567890; b = a +

25、 20; cout a = (int)a endl; cout b = (int)b endl; 运算精度得到保证a = 1234567890b = 12345679102.2.5 常量常量有两种形式:一种是直接常量,以字面值直接出现的数据量,如12、3.14、a等;另一种是符号常量。符号常量是一个标识符,对应着一个存储空间,该空间中保存的数据就是该符号常量的值,这个数据是在定义符号常量时赋予的,是以后不能改变的。(1)用const定义符号常量例如:const double PI = 3.14159; const 数据类型符号常量名称初始值;(2)用#define命令定义符号常量注意,由于#d

26、efine是预处理命令,语句不能以分号结束,且定义符号常量不能带数据类型,不能用赋值号赋值。例如:#definePI3.14159#define 符号常量名初始值例2-7 已知圆的半径r,计算圆的面积s和周长c。 1 #include 2 #define r 5.03 const double PI = 3.14159 ;4 void main()5 6 double s, c;7 s = PI * r *r;8 c = 2 * PI * r;9 cout 圆的面积:s = s endl;10 cout 圆的周长:c = c endl;11 用#define定义符号常量r,没有带数据类型,没有

27、用分号结尾用const定义符号常量PI符号常量参加运算, PI的值为3.14159,r的值为5.02、字符常量C+ 中有两种字符常量:即一般字符常量转义字符常量(1)一般字符常量一般字符常量简称为字符,它以单引号作为起止标记,中间为一个或若干个字符。如a,%,n,012,125,x4F等都是合乎规定的字符常量。每个字符常量只表示一个字符,当字符常量的一对单引号内多于一个字符时,则将按规定解释为一个字符。如a表示字符a,125解释为字符U(ASCII码值八进制的对应字符,详见转义符)。 因为字符型的长度为1,值域范围是 -128127 或 0255,而在计算机领域使用的ASCII字符,其ASCI

28、I码值为 0127,正好在C+ 字符型值域内。所以,每个 ASCII 字符均是一个字符型数据,即字符型中的一个值。将一个字符常量放到一个字符变量中,实际上并不是把该字符本身放到内存单元中,而是将该字符相应的 ASCII 码放到内存单元中。 对于一个字符,当用于输出显示时,将显示出字符本身或体现出相应的控制功能,当出现在计算表达式中时,将使用它的 ASCII 码。 (1) char ch = E;(2) int x = ch + 2;(3) cout “ x = ” x C) cout ch C endl;(5)cout 125 C比较,实际上是取出各自的值(即对应的ASCII码)比较,因条件成

29、立,所以执行其后的输出语句,将向屏幕输出E C。第五条语句输出大写字母U,因为由“”后面跟3个数字(即“ddd”)组成的符号表示八进制数所代表的字符,八进制的125为十进制的85,其对应的ASCII码值为大写字母U。 (2)转义符在C+中提供了一些特殊的字符常量,这些特殊字符又称为转义符。通过转义符可以在字符串中插入一些无法直接键入的字符,如换行符、引号等。每个转义符都以反斜杠()为标志。例如,n代表一个换行符,这里的n不再代表字母n而作为换行符号,其 ASCII 码为10。另外,也可以在反斜杠后面用八进制数或十六进制数表示一个字符,该值为所表示字符的ASCII码值。例如,3表示Ctrl +

30、C,x0A表示回车换行。转义符ASCII码值对应功能a0 x07响铃b0 x08退格f0 x0c走纸换页n0 x0a换行r0 x0d回车(不换行)t0 x09水平制表v0 x0b垂直制表0 x5c反斜杠0 x27单引号”0 x22双引号?0 x3f问号ddd0ddd八进制数所代表的字符xhh0 xhh十六进制数所代表的字符例2-8 转义字符的使用1 #include 2 using namespace std;3 void main()4 5 cout 学号 t 姓名 t 成绩 n ;6 cout 1001 t 张大山 t 95 n ;7 cout 1002 t 李海涛 t 91 n ;8 c

31、out 1003 t 周丽君 t 82 n ;9 用于显示表格排列,t控制宽度,n换行 程序运行结果如下:学号 姓名 成绩1001 张大山 951002 李海涛 911003 周丽君 823、字符串用双引号括起来的字符常量称为字符串。 字符串常量实际上是一个字符数组,组成数组的字符除显式给出的外,还包括隐含在字符结尾处标识字符串结束的符号0。所以字符串“book”实际上包含了5个字符:b、o、o、k及0。 字符串与字符比较有如下区别:(1)字符是由单引号括起来的单个字符。而字符串是由双引号括起来的,且可以是零个或多个字符。例如:abc是不合法的。“”是合法的,表示空字符串。(2)字符在内存中占

32、一个字节的空间位置,字符串在内存中的字节数等于字符串的字符个数加1。C+ 系统会自动在字符串结尾处添加0作为结束标记。例如: a在内存中占一个字节的空间,而“a”在内存中占二个字节的空间,分别存放a和0。2.3 表达式与运算符表达式是由运算符、操作数和方法调用按照语言的语法构造而成的符号序列。表达式可用于计算一个公式,为变量赋值以及帮助控制程序执行流程。C+ 提供了丰富的运算符,一个运算符可以利用运算对象来完成一次运算。只有一个运算对象的运算符称为一元运算符。例如 +a 是一个一元运算符,它是对运算对象a自增加1。 需要两个运算对象的运算符号称为二元运算符。比如赋值号( = )就是一个二元运算

33、符,它将右边的运算对象赋给左边的运算对象。 可以将运算符分成以下几类:算术运算符;关系和条件运算符;移位和逻辑运算符;赋值运算符;其他的运算符。2.3.2 算术运算符C+ 语言支持所有的浮点型和整型数进行各种算术运算。这些运算符为+(加)、-(减)、*(乘)、/(除)以及%(取模)。例2-9 运算符示例 1 #include 2 using namespace std;3 void main()4 6 int a = 41; /定义几个变量并赋值 7 int b = 21;8 double x = 6.4;9 double y = 3.22;10 cout 变量数值: endl;11 cout

34、a= a t b= b t x= x t y= y endl;13 cout 加: endl;14 cout a + b = a + b t x + y = x + y endl;16 cout 减: endl;17 cout a b = a - b t x y = x - y endl;19 cout 乘: endl;20 cout a * b = a * b t x * y = x * y endl;22 cout 除: endl;23 cout a / b = a / b t x / y = x / y endl;25 cout 计算余数: endl;26 cout a % b = a

35、% b endl;28 cout 混合类型: endl;29 cout b + y = b + y t a * x = a * x 大于x1 x2x1大于x2=不小于x1 = x2x1 大于或等于x2小于x1 x2x1小于 x2=不大于x1 右移x n将x各位右移n位,左边按符号补0或补111110101左移x 逻辑右移x n将x右移n位(无符号的) ,左边补000110101&与x & y将x,y按位与操作01010000|或x | y将x,y按位或操作11011111异或x y将x,y按位异或操作10001111位反 x将x各比特位按位取反001010012.3.5 常用的标准函数在C+语

36、言中,有二种函数:一种是由C+ 系统提供的函数,另一种是自定义函数。自定义函数在后面第3章详细介绍。这里简单介绍由C+ 系统提供的函数的用法。由C+ 系统提供的函数称为标准函数(又称为库函数)。C+ 语言提供了丰富的标准函数,设计程序时可以直接调用它们。下面介绍几个常用的标准函数,见表2-7。函数原型功能头文件int abs(int x)求整数的绝对值函数cstdlibdouble sqrt(double x)求x的平方根函数cmathdouble log(double x)求x的自然对数函数lnxcmathdouble exp(double x)求欧拉常数e的x次方函数excmathdoub

37、le pow(double x, double y)求x的y次方函数xy,x、y为整数或实数cmathdouble sin(double x)正弦函数cmathdouble cos(double x)余弦函数cmathdouble tan(double x)正切函数cmathsizeof(x)求数据类型或表达式x所占用内存的字节数iostream2.4 程序控制语句语句组成了一个执行程序的基本单元,它类似于自然语言的句子。一条语句由一个分号结束。C+语句可以分为以下3类:表达式语句复合语句控制语句(1)表达式语句例如: x = 3; y = 5; sum = x + y;一个表达式的最后加上一

38、个分号就构成了一个语句,分号是语句不可缺少的部分。(2)复合语句用把一些语句括起来构成复合语句。有时也把复合语句称为语句块。例如: x = 25 + i; cout “x = ” x endl; (3)控制语句控制语句用于控制程序流程及执行的先后顺序。C+语言的控制语句可分为三类:顺序控制语句、选择控制语句循环控制语句2.4.2 顺序控制语句 顺序控制是指计算机在执行这种结构的程序时,按从上到下的顺序依次执行程序中的每一条语句。顺序控制是程序的最基本结构,包含有选择控制语句和循环控制语句的程序,在总体执行上也是按顺序结构执行的。下面介绍一些经常使用的顺序控制语句 :文件包含命令赋值语句控制输出

39、格式的输出语句1、文件包含命令C+ 语言提供了数百个库函数供人们调用,以方便程序设计。这些库函数均保存在include目录下扩展名为 .h 的头文件中。用户在程序中要调用头文件中的库函数,必须使用#include命令。#include 命令称为文件包含命令,又称为文件预处理语句。如果使用的是系统提供的调用标准库函数,就用尖括号把头文件括起来,如前面我们使用过的: #include 如果使用的头文件是用户自己编写的,则可以将头文件与源程序保存在同一目录下,在文件包含命令中,用双引号“ ”把头文件括起来。如当前目录下有用户自己编写的头文件 mysum.h,则文件包含命令可写为: #include

40、“mysum.h”2、赋值语句赋值语句是给变量提供数据的最简单形式,它是程序中使用最多的语句之一,几乎所有的程序都要用到它。其一般格式为:赋值语句的功能是把赋值号“=”右边表达式的值赋给左边的变量,它的意义与等号不同。变量 = 表达式;例2-14 求一元二次方程 2x2 + 8x + 6的根 根据求根公式x1,2 = , 先对常量a、b、c赋值,然后再计算x1和x2,1 #include 2 #include 3 using namespace std;4 void main()5 6 int a = 2, b = 8, c = 6;7 double x1, x2; 8 x1 = ( -b +

41、 sqrt( b * b 4 * a * c ) / ( 2 * a );9 x2 = ( -b - sqrt( b * b 4 * a * c ) / ( 2 * a );10 cout x1 = x1 t x2 = x2 endl;11 例2-15 交换两个变量的值 在编写程序时,有时需要把两个变量的值互换,交换值的运算需要用到一个中间变量 1 #include 2 using namespace std;3 main()4 5 int a = 3, b = 5, temp;6 temp = a; 7 a = b;8 b = temp;9 cout a = a t b = b endl;1

42、0 第一步:把a的值放到中间变量temp中第二步:把b的值放到变量a中,这时变量a中存放的是b的值第三步:把temp中原a的值放到变量b中,这时变量b中得到的是原a的值设temp为中间变量3、控制输出格式的输出语句C+还提供了一些控制输出格式的操纵符,它们可以直接嵌入到输入/输出语句中来实现格式控制。常用的I/O流类库的操纵符如下:dec /输出十进制数hex /输出十六进制数otc /输出八进制数endl /插入换行符ends /插入空字符setw(int n) /设置输出域宽度为指定值nsetprecision(int n) /设置浮点数的小数位数为指定值n (包括小数点)在使用setw(

43、int)和setprecision(int)操纵符时,要在程序的开头包含iomanip。例2-16 应用控制输出宽度的setw操纵符,编写一个用“ * ”组成倒置的三角形程序。 1 #include2 #include3using namespace std;4 void main()5 6 cout setw(7) * endl;7 cout setw(6) * endl;8 cout setw(5) * endl;9 cout setw(4) * endl;10 第一行setw(7) 指定输出宽度为7,有7个*号。第二行setw(6) 指定输出宽度为6,只有5个*号,因此在*号前面留有1个

44、空格。第三行setw(5) 指定输出宽度为5,只有3个*号,因此在*号前面留有2个空格。第四行setw(4) 指定输出宽度为4,只有1个*号,因此在*号前面留有3个空格。* * * *2.4.3 选择控制语句单分支选择结构双分支选择结构多分支的if-else-if结构switch语句1、单分支选择结构if(条件表达式) 若干语句;对于单分支选择的if条件语句,其的语法格式为: 其流程图为:例2-17从键盘任意输入两个整数,按从小到大的顺序依次输出这两个数 。1 #include 2 using namespace std;3 void main()45int a, b, temp;6cout

45、a ;8cout b ;10if(a b)11 12 temp = a;13 a = b;14 b = temp;15 16cout a = a t b = b b时,执行语句块;当ab时,跳过该语句块交换a、b两变量值的语句块程序运行结果如下:任意输入二个整数:a = 8b = 5a = 5 b = 8例2-18 对给定的三个数,求最大数的平方 。1#include2using namespace std;3 void main()4 5int a = 5, b = 9, c = 7, max;6 max = a;7if (bmax) max = b; 8if (cmax) max = c;

46、 9cout 最大数的平方为: max * max endl;10程序运行结果如下:最大数的平方为:812、双分支选择结构if(表达式)语句块1;else语句块2;对于双分支选择的if条件语句,其的语法格式为: 其流程图为:例2-19计算: y = 1#include 2#include 3 using namespace std;4void main()56 double x, y;7 cin x;8 if( x -5 )9 y = sqrt( 25 - x * x );10 else11 y = sqrt( x * x - 25 );12 cout y = y endl;13if-else

47、结构,只能执行其中一个语句块& 为逻辑与运算符,表示x-5条件同时成立3、多分支的if-else-if结构if(条件表达式1)程序段1;else if(条件表达式2)程序段2; else if(条件表达式n)程序段n;else程序段n+1;对于多分支选择的if条件语句其的语法格式为: 其流程图为: 例2-20 编写一程序,根据月份判断季节。1 /* if-else-if 结构. */2#include3void main()4 5 int month = 4; / 4月份 6 if(month = 12 | month = 1 | month = 2) 7 cout 4月是 冬天 endl;8

48、 else if(month = 3 | month = 4 | month = 5) 9 cout 4月是 春天 endl; 10 else if(month = 6 | month = 7 | month = 8) 11 cout 4月是 夏天 endl; 12 else if(month = 9 | month = 10 | month = 11) 13 cout 4月是 秋天 endl; 14 else 15 cout 不合法的月份; 16 | 为逻辑或运算符,表示只需满足其中一个条件if-else-i结构,只能执行其中一个语句块4、switch语句switch 的语法结构形式 :流程

49、图例2-21把学生考试成绩分成A、B、C、D、E四等个级,大于90分为A等,8090分为B等,7080分为C等,6070分为D等,60分以下为E等。现某同学成绩为82分,试确定其成绩等级。1 #include2 using namespace std;3void main()4 5 int score=82;6 char grade;7 switch(score/10)8 9 case 10 :10 case 9:11 grade=A;12 break; 13 case 8:14 grade=B;15 break; 16 case 7: 17 grade=C;18 break; 19 case

50、 6:20 grade=D;21 break;22 default: 23 grade=E;24 25 cout 成绩等级: grade endl;26 switch结构,case后面的常量必须是整型数值2.4.5 循环语句for循环语句while循环语句循环嵌套1、for循环语句for(循环变量赋初值;循环条件;增量表达式) 循环体语句块;循环体在for语句中,其语法成分是:(1)循环变量赋初值是初始循环的表达式,它在循环开始的时候就被执行一次。(2)循环条件决定什么时候终止循环,这个表达式在每次循环的过程被计算一次。当表达式计算结果为false的时候,这个循环结束。(3)增量表达式是每循环

51、一次循环变量增加多少(即步长)的表达式。(4)循环体是被重复执行的程序段。for语句的执行过程是这样的: 首先执行初始条件表达式,完成必要的初始化工作;再判断终止条件,若为true,则执行循环体;执行循环体之后,紧接着执行增量表达式,以便改变循环条件,这一轮循环就结束了。第二轮循环从判断终止条件开始,若为ture,则继续循环,否则跳出整个for语句,执行后续语句 例2-22 设计一个累加器,计算从1加到100的和 1 #include2 using namespace std;3void main() 4 5 int sum=0; 6 for(int i = 1; i = 100; i+)7

52、8 sum = sum + i;9 10 cout 1 + 2 + 3 + . + 100 = sum endl;11 变量sum存放累加值,初始值为0i为循环变量,每循环一次,i自加1(步长为i+),循环终止条件为i100循环体内,每循环一次,累加一次循环变量的值例2-23 求 10 ! n! = n * (n 1) * (n 2 ) * * 2 * 1 = n * (n - 1)! 递推公式:pn = n * pn-1 ,pn-1 = ( n 1 ) * pn-2 p1 = 11 #include 2 using namespace std;3 void main()4 5 int i;6

53、 long p = 1;7 for (i=1; i=10; i+)8p = p * i;9 cout 10! = p endl;10 例2-24 从键盘上输入10个整数,边输入边统计偶数的个数 1 #include 2 using namespace std;3 void main()4 5 int i, x, s = 0;6 for ( i=1; i x;9if ( x % 2 = 0 )1011cout x 是偶数 endl;12s+;1314 15 cout 共有 s 个偶数 endl;16 循环体内嵌套条件语句用条件语句判断偶数满足条件为偶数变量s存放偶数个数 for( ; ; ) /

54、无限循环 一般,为避免无限循环,上述语句的循环体中应包含能够退出的语句。可以使用break语句强行退出循环,忽略循环体中的任何其他语句和循环的条件测试。在循环中遇到break语句时,循环被终止,程序跳到循环后面的语句继续运行。 循环条件等均省略,则为无限循环例2-25 /* 应用break语句,中断无限循环嵌套 */ 2 #include3using namespace std;4 void main()5 6 int i = 1;7 for( ; ;)8 9 cout i 5 ) break; 12 13 无限循环if语句设置跳出循环条件,应用break中断循环2、while循环语句C+语言

55、提供了两种while循环语句:即while语句和do-while语句 1)while语句while语句的基本语法结构为 :while(循环条件表达式) 循环体;例2-26 老汉卖西瓜,第一天卖西瓜总数的一半多一个,第二天卖剩下的一半多一个,以后每天都是卖前一天剩下的一半多一个,到第10天只剩下一个。求西瓜总数是多少? 算法分析:设共有x个西瓜,卖一半多一个后,还剩下x/2 - 1个,所以,每天的西瓜数可以用迭代表示: xn = (xn+1 + 1) * 2。且在卖了9天之后(第10天),x = 1。这是可以用循环来处理的迭代问题。 1 #include 2 using namespace st

56、d;3void main()4 5 int i=1, x=1;6 while(i=9)7 8 x=(x+1)*2;9 i+;10 11 cout “ x = “ x endl;12 while循环体while循环必须要有循环变量自增的语句循环条件程序运行结果为:x=15342)do-while语句do-while语句的语法结构为: do 循环体;(循环条件表达式);do-while语句与while语句的区别在于:语句先执行循环中的语句再计算条件表达式,所以do-while语句的循环体至少被执行一次。例2-27 计算 1! + 2! + 3! + + 10! 1 #include2 using

57、namespace std;3 void main() 4 5 long sum = 0, i = 1, p = 1; 6 do7 8 p = p * i; 9 sum = sum + p;10 i+;11 while(i = 10) ;12 cout 1! + 2! + 3! + + 10! = sum endl;13 do-while结构的循环体循环变量自增循环条件计算阶乘累加1! + 2! + 3! + + 10! = 40379133、循环嵌套循环可以嵌套,在一个循环体内包含另一个完整的循环,叫做循环嵌套。循环嵌套运行时,外循环每执行一次,内层循环要执行一个周期。例2-28 应用循环嵌

58、套,编写一个按9行9列排列输出的乘法九九表程序 算法分析:用双重循环控制乘法九九表按9行9列排列输出,用外循环变量i控制行数,i从1到9取值。内循环变量j控制列数,由于i * j = j * i,故内循环变量j没有必要从1到9取值,只需从1到i取值就够了。外循环变量i每执行一次,内循环变量j执行i 次。 1 /* 循环嵌套应用 */ 2 #include3 using namespace std;4 void main()5 6 int i,j;7 for( i = 1;i = 9;i+) 8 9 for(j = 1;j = i;j+) 10 11 cout i x j = i*j t;12

59、13 cout endl; 14 15 外循环控制行数内循环控制列数换行,外循环控制行数循环可以嵌套,可以是 但不能交叉,即 是不允许的 例2-29 应用循环嵌套,编写求出100以内所有素数的程序。 算法分析:所谓素数是指只能被1和自身整除的自然数。根据素数定义,素数n不能是2的倍数,不能是3的倍数,不能是4的倍数,不能是n-1的倍数。因此,判断n是否为素数,可以用2,3,4,n-1作除数依次与n相除,如果都不能整除,则n是一个素数。这种算法当n足够大时,除法次数太多,效率很低。可以证明,不需要一直相除到n-1,只需相除到n的平方根就够了,这样就大大减少了除法次数。对于本题,可以通过循环,把1

60、00以内2、3、4、n的平方根的倍数的数筛去。即把符合下列条件的自然数n筛除:n % k = 0(k = 2,3,4,sqrt(n));因此需要应用双重循环,外循环依次提供一个100以内的数,由内循环通过作多次筛法运算,判断其是否为素数。例2-30 编程,绘制指数函数y=ex 的图像。 1 #include2 #include3 using namespace std;4 void main()5 6 double t;7 float r;8 int i, R;9 for( t = 0; t = 3000; t + = 150 )10 11 r = (float)exp( -0.001 * t

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论