Visual-C++-6.0-实用教程学习_第1页
Visual-C++-6.0-实用教程学习_第2页
Visual-C++-6.0-实用教程学习_第3页
Visual-C++-6.0-实用教程学习_第4页
Visual-C++-6.0-实用教程学习_第5页
已阅读5页,还剩407页未读 继续免费阅读

下载本文档

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

文档简介

1、1 第第1章章Visual C+ 6.0开发环境开发环境 1.1开发环境概述开发环境概述 1.2开发环境的菜单功能开发环境的菜单功能 1.3开发环境的工具栏开发环境的工具栏 1.4项目和项目工作区项目和项目工作区 1.5资源资源 1.6一个控制台应用程序一个控制台应用程序 1.7程序调试程序调试 上机训练上机训练 2 1.1开发环境概述开发环境概述 界面由标题栏、菜单栏、工具栏、项目工作区窗口、文档窗口、输出窗口以 及状态栏等组成,如图。 图图1.2 Visual C+ 6.0开发环境开发环境 工具栏菜单栏 项目工作区窗口 输出窗口 文档窗口 输出窗口标签 标题栏 状态栏 3 1.3开发环境的

2、工具栏开发环境的工具栏 1.3.1工具栏概述工具栏概述 标准工具栏标准工具栏 图图1.12 标准工具栏标准工具栏 New Text FileCut Paste Redo Output Find in Files Search Open Save All Copy Undo Workspace Window List Find 4 1.3开发环境的工具栏开发环境的工具栏 类向导工具栏类向导工具栏 小型编连工具栏小型编连工具栏 图图1.13 WizardBar ClassFilterMembersActions 图图1.14 Build MiniBar Compile Stop Build Go

3、BuildExecute Add/Remove breakpoints 5 1.4项目和项目工作区项目和项目工作区 还有相应的Debug或Release、Res等子文件夹。若创建的单文档应用程序 项目名是Ex_Sdi,则各文件的布局如图。 VC应用程序向导创建项目时,系统会自动为项目创建Win32 Debug的运行程 序,并使用相应的缺省配置。和Win32 Release版本的区别在于:Debug版本 的运行程序有相应的调试信息码,Release版本的运行程序没有,但Release 版本的运行程序经过代码的优化,其程序的运行速度被最大加速。 注意注意:在开发环境中,VC是通过左边的项目工作区窗

4、口来对项目进行各种管 理。项目工作区窗口包含三个页面,是ClassView页、ResourceView页和页。页。 图图1.18 项目文件的布局项目文件的布局 Ex_Sdi文件夹 Debug或Release 文件夹 Res文件夹 类文件.cpp,.h 资源文件Ex_Sdi.rc 项目及项目工作区文件 其他文件 编连过程产生的文件 运行文件Ex_Sdi.exe 图标文件Ex_Sdi.ico等 工具栏资源Toolbar.bmp 其他资源Ex_Sdi.rc2等 6 1.4项目和项目工作区项目和项目工作区 1.4.2 ClassView 用以显示项目中的所有的类信息。假设打开的项目名为Ex_Sdi,单

5、击项目区 窗口底部的ClassView,则显示出“Ex_Sdi classes”的树状结点,在它的前面 是一个图标和一个套在方框中的符号“+”,单击符号“+”或双击图标, Ex_Sdi中的所有类名将被显示,如CMainFrame、CEx_SdiApp、CEx_SdiDoc、 CEx_SdiView等(如图所示)。 图图1.19 ClassView 图图1.20 ResourceView图图1.21 7 1.4项目和项目工作区项目和项目工作区 1.4.3ResourceView 包含了项目中所有资源的层次列表。每一种资源都有自己使用的图标。 1.4.4 可将项目中的所有文件分类显示可将项目中的所

6、有文件分类显示,如图。如图。 每一类文件在页面中都有自己的目录项每一类文件在页面中都有自己的目录项(节点节点)。可以在目录项中移。可以在目录项中移 动文件动文件,还可以创建新的目录项以及将一些特殊类型的文件放在该目还可以创建新的目录项以及将一些特殊类型的文件放在该目 录项中。录项中。 创建一个新目录项,可在添加目录项的地方右击,选择创建一个新目录项,可在添加目录项的地方右击,选择“New Folder”,如图,输入目录项名称和相关的文件扩展名,单击,如图,输入目录项名称和相关的文件扩展名,单击OK。 图图1.22 “New Folder”对话框对话框 8 1.5资源资源 1.5.1资源与资源标

7、识资源与资源标识 资源的分类资源的分类 (1)(1)快捷键列表 (2)(2)工具栏按钮 (3)(3)鼠标指针 (4)(4)对话框 (5)(5)HTML (6)(6)图标 (7)(7)菜单 (8)(8)字符串列表 (9)(9)版本信息 标识符标识符 标识符的命名规则: (1) 在标识符名称中允许使用字母az、AZ、09以及下划线。 (2) 标识符名称不区分大小写字母。 (3) 不能以数字开头,如8BIT是不合法的标识符名。 (4) 字符个数不得超过247个。 9 1.5资源资源 1.5.2资源基本操作资源基本操作 创建资源创建资源 (1)从“Insert”菜单选取“Resource”;或用快捷键

8、Ctrl+R打开对话框,如 图。New用来创建一个由Resource Type列表中指定类型的新资 源,Custom按钮用来创建Resource Type列表中没有的新类型的资源, Import按钮用于将外部已有的位图、图标、光标或其他定制的资源添加到 当前应用程序中。 (2) 从Resource Type列表中选择一种资源类型,而后按New按钮。 (3) 在项目工作区窗口的ResourceView页面中,看到了刚才选中的资源的 缺省标识符,而且相应的资源编辑器自动打开。 图图1.23 “Insert Resource”对话框对话框 10 1.5资源资源 打开资源打开资源 如果需要对已有资源进

9、行查看或修改,可以首先切换到项目工作区窗口的 ResourceView标签页,然后选中要打开的资源,双击鼠标左键或者按Enter键, 这时相应的资源编辑器也会相应自动打开。 删除、复制资源删除、复制资源 如果删除一个已有的资源,可以首先切换到项目工作区窗口的ResourceView 标签页,然后选中要打开的资源,按Del键或者利用Edit菜单下的Delete菜 单项可实现删除。复制资源的过程与删除类似,选中要打开的资源,按住 Ctrl键不放,并拖动鼠标左键或利用Edit菜单中的Copy和Paste菜单命令进 行操作,它同其他软件的复制过程相同。 保存资源保存资源 当设计或修改好一个资源后,用F

10、ile菜单的Save菜单命令或利用快捷键 Ctrl+S将其保存在当前资源文件中。 11 1.5资源资源 1.5.3资源文件的管理资源文件的管理 资源文件一经创建,其中所包含的资源也就随之而定,与资源相对应的标识符 也被保存在Resource.h头文件中。 一般,在一个资源文件.RC中所保存的所有资源已经满足的需要了,尽管如 此,VC仍然允许用多个文件来存放资源。用View菜单中的Resource Includes菜单命令打开“Resource Includes”对话框(如图1.24所示)时,可 以看到Compile-time directives编辑框中已经含有#include resEx_S

11、di.rc2。 1.5.4资源编辑器资源编辑器 所有Windows资源都可以用VC提供的资源编辑器来编辑。 图图1.24 “Resource Includes”对话框对话框 12 1.6一个控制台应用程序一个控制台应用程序 1.6.1用用AppWizard创建创建 用AppWizard创建一个控制台应用程序可按下列步骤进行: (1) 选择“File”“New”菜单命令,显示出“New”对话框。 (2) 选择Projects标签,选中Win32 Console Application项。 (3) 在Project Name框中键入控制台应用程序项目名称。第一次使用时最好确 定该项目所在的文件夹以

12、便于源文件的管理,既可在Location下的编辑框中 直接键入文件夹名称,也可单击Browse按钮择一个已有的文件夹,如图。 图图1.25 在在“New”对话框中建立对话框中建立Ex_Hello控制台应用程序控制台应用程序 13 1.6一个控制台应用程序一个控制台应用程序 (4) 单击OK。如图。选中A simple application项。 (5) (5) 单击Finish,如图,单击OK按钮系统将自动创建此应用程序。 图图1.26 选择控制台应用程序类型选择控制台应用程序类型 图图1.27 Ex_Hello信息对话框信息对话框 14 1.6一个控制台应用程序一个控制台应用程序 1.6.2

13、理解程序框架理解程序框架 在项目工作区窗口中只能看到ClassView和标签标签,如图。切换到页面如图。切换到页面,可以看可以看 到到AppWizard为生成了为生成了Ex_Hello.cpp、Stdafx.cpp、Stdafx.h以以 及及ReadMe.txt四个文件。四个文件。 Stdafx.cpp是一个只有一条语句的空文件,是一个只有一条语句的空文件,Stdafx.h是是VC为每个为每个 项目配置的用来预编译的文件项目配置的用来预编译的文件;ReadMe.txt是是VC为每个项目配置的为每个项目配置的 说明文件,包括对说明文件,包括对AppWizard产生文件类型的说明以及操作的一些产生

14、文件类型的说明以及操作的一些 技巧;技巧;Ex_Hello.cpp是是AppWizard产生的产生的“真正真正”具有实际意义具有实际意义 的程序源代码文件,几乎所有的代码都是添加在这个文件中的。的程序源代码文件,几乎所有的代码都是添加在这个文件中的。 图图1.28 Ex_Hello项目工作区内容项目工作区内容 15 1.6一个控制台应用程序一个控制台应用程序 1.6.3添加程序代码添加程序代码 (1) 单击项目工作区窗口的ClassView标签项,将显示Ex_Hello类信息。 (2) 单击各目录项前面的“+”号,将所有目录项展开。 (3) 双击main函数名,在文档窗口中显示出main函数体

15、所在的源文件 Ex_Hello.cpp,且文本光标已移至此函数名的前面。 (4) 键入下列代码: . #include / 输入输出操作的头文件 int main(int argc, char* argv) coutHello world!n; return 0; (5) 用Save All命令项或标准工具栏的Save All按钮将所有文件保存。 16 1.6一个控制台应用程序一个控制台应用程序 1.6.4编译运行编译运行 打开Build菜单,选用Build Ex_Hello.exe菜单项或按快捷键F7,系统对Ex_Hello 进行编译、连接,同时在输出窗口中在线地显示出编译的内容,当出现 E

16、x_Hello.exe - 0 error(s), 0 warning(s)字样时,表示Ex_Hello.exe可执行文 件已经正确无误地生成了。 在Build菜单中选取Execute Ex_Hello.exe命令或按快捷键Ctrl+F5,就可以 运行刚刚生成的Ex_Hello.exe,如图。 在Ex_Hello窗口中,“Press any key to continue”是系统自动加上去的 。 图图1.29 Ex_Hello运行结果运行结果 17 1.7程序调试程序调试 1.7.1修正语法错误修正语法错误 调试最初的任务主要是修正一些语法错误,这些错误包括: (1) 未定义或不合法的标识符,

17、如函数名、变量名和类名等。 (2) 数据类型或参数类型及个数不匹配。 上述错误在编译后,会在Output窗口中列出所有错误项。若将光标移到 Output窗口中的错误编号上,按F1键可启动MSDN并显示出错误的内容,从 而帮助用户理解错误产生的原因。 为了能使快速定位到错误产生的源代码位置,提供下列一些方法: (1) 在Output窗口中双击某个错误,或将光标移到该错误处按Enter键,则该 错误被亮显,状态栏上显示出错误内容,并定位到相应的代码行中,且该代 码行最前面有个蓝色箭头标志。 (2) 按F4键可显示下一错误,并定位到相应的源代码行。 (3) 在Output窗口中的某个错误项上,右击鼠

18、标,在弹出的快捷菜单中选择 “Go To Error/Tag”命令。 语法错误被修正后,编译时会出现类似“Ex_Hello.exe - 0 error(s), 0 warning(s)”的字样。并不是说,此项目完全没有错误,可能还有“异常”、 “断言”等其他错误,而这些错误在编译时是不会显示出来的,只有当程序 运行后才会出现。 18 1.7程序调试程序调试 1.7.2设置断点设置断点 调试的断点可以有下列类型:(1) 位置断点 、(2) 数据断点、(3)条件断点。 快捷方式快捷方式 三种快捷方式可以设置位置断点: (1) 按快捷键F9。 (2) 在Build工具栏上单击 按钮。 (3) 在需要

19、设置断点的位置右击,选择“Insert/Remove Breakpoint”命令。 图图1.30 设置的断点设置的断点 断点标志 断点标志 程序中断的位置 19 1.7程序调试程序调试 使用使用Breakpoints对话框对话框 (1) 凡是可以使用的断点前均有选中标记()。若单击前面的复选框,则该断点被 禁止。按钮Remove和Remove All清除当前选中的断点或全部断点。 (2) 在Location页面中,“Break At”文本框中可以输入断点的名称。单击Edit Code可以查看断点位置处的源代码或目标代码。单击Condition ,可以输 入程序运行中断所需要的表达式条件,从而设

20、置一个条件断点。 (3) 在Data页面中,提供了一种设置数据断点的方法,如图。在Data页面的最 上面编译框中,可以键入任何有效的C/C+表达式,它可以是赋值语句, 可以是条件语句,可以是单独的一个变量名。在程序运行过程中,若变量的 值有所改变,或者条件表达式变成真时,则程序在该断点处中断。 图图1.31 “Breakpoints”对话框对话框 图图1.32 Data页面页面 20 1.7程序调试程序调试 1.7.3启用调试器启用调试器 选择“Project”菜单“Settings”命令,如图。在调试程序时必须使用 Debug版本。通过选择“Debug info”组合框来设置调试选项。含义如

21、表。 还可以在“Project Settings”对话框中的“Link”页面中,选中“Generate mapfile”项,使其在编连时产生相应的映射文件。 选择“Build”菜单“Start Debug”子菜单的“Go”、“Step Into”或 “Run To Cursor”命令,就可以启动调试器了。 图图1.33 “Project Settings”对话框对话框 21 1.7程序调试程序调试 1.7.4控制程序运行控制程序运行 当程序开始运行在Debug状态下时,程序会由于断点而停顿下来。这时可以 看到有一个小箭头,它指向即将执行的代码。而且,原来的“Build”菜单就 会变成“Debu

22、g”菜单,如图1.34所示。其中有四条命令Step Into、Step Over、Step Out和Run to Cursor是用来控制程序运行的,其含义是: n Step Over的功能是运行当前箭头指向的代码(只运行一条代码)。 n Step Into的功能是如果当前箭头所指的代码是一个函数的调用,则用Step Into 进入该函数进行单步执行。 n Step Out的功能是如果当前箭头所指向的代码是在某一函数内,用它使程序 运行至函数返回处。 n Run to Cursor的功能是使程序运行至光标所指的代码处。 22 1.7程序调试程序调试 1.7.5查看和修改变量的值查看和修改变量的值

23、 调试器还提供一系列的窗口,用来显示各种不同的调试信息。可借助“View” 菜单下的“Debug Windows”子菜单可以访问它们。当启动调试器后,VC的 开发环境会自动显示出Watch和Variables两个调试窗口,且Output窗口自动 切换到Debug页面,如图。 图图1.34 Debug菜单菜单 Watch窗口 Output窗口 Variables窗口 23 1.7程序调试程序调试 QuickWatch窗口的使用窗口的使用 用来帮助用户快速查看或修改某个变量或表达式的值。若仅需要快速查看 变量或表达式的值,则只需要将鼠标指针直接放在该变量或表达式上,片刻后, 系统会自动弹出一个小窗

24、口显示出该变量或表达式的值。 启动调试器后,选择“Debug”“QuickWatch”或按快捷键Shift+F9, 如图。 Expression框可以让用户键入变量名或表达式,而后按Enter键或单击 Recalculate,就可以在Current value列表中显示出相应的值。若想要修改 其值的大小,则可按Tab键或在列表项的“Value”域中双击该值,再输入 新值按Enter键就可以了。 单击Add Watch按钮可将刚才输入的变量名或表达式及其值显示在 “Watch”窗口中。 图图1.36 “QuickWatch”窗口窗口 24 1.7程序调试程序调试 Watch窗口的使用窗口的使用

25、选择“View”“Debug Windows”“Watch”,四个页面:Watch1、 Watch2、Watch3和Watch4 ,在每一个页面中有要查看的变量或表达式,可 以将一组变量或表达式的值显示在同一个页面中。使用Watch窗口进行操作 时,要注意到下面一些技巧: (1) 添加新的变量或表达式 选定窗口中某个页面,在末尾的空框处,单击左边的“Name”域,输入变 量或表达式,按Enter键。同时,又在末尾处出现新的空框,如图。 在变量或表达式中右击,选择“Properties”查看其类型。 (2)(2) 修改变量或表达式的值 选中相应的变量或表达式,按Tab键或在列表项的“Value”

26、域中双击该值, 再输入新值按Enter键就可以了。 (3)(3) 删除变量或表达式 单击Del键可将当前选定的变量或表达式删除。 图图1.37 添加新的变量或表达式添加新的变量或表达式 空框 25 1.7程序调试程序调试 Variables窗口的使用窗口的使用 Variables窗口能快速访问程序当前的环境中所使用的重要变量。选择 “View”“Debug Windows”“Variables”,其中有三个页面: Auto页面 显示出当前语句和上一条语句使用的变量,还显示使用Step Over或Step Out 命令后函数的返回值。 Locals页面 显示出当前函数使用的局部变量。 This页

27、面 显示出由This所指向的对象。 Variables窗口还有一个“Context”框,从下拉列表中可以选定当前Call Stack的指令,以确定在页面中显示变量的范围,如图。 图图1.38 “Context”框框 26 第第2章章基本基本C+语言语言 2.1 C+程序结构程序结构 2.2 数据类型和基本输入输出数据类型和基本输入输出 2.3 运算符和表达式运算符和表达式 2.4 基本语句基本语句 2.5 函数和预处理函数和预处理 2.6 构造类型构造类型 2.7 指针和引用指针和引用 上机训练上机训练 27 2.1C+程序结构程序结构 2.1.1几个几个C+程序程序 例例11 在屏幕上输出一

28、个由星号形成的三角形。 / 输出星号的三角形阵列 #include void DoDraw(int num); / 声明一个全局函数 void main() int num=5; / 定义并初始化变量 DoDraw(num);/ 函数的调用 void DoDraw(int num)/ 函数的定义 for (int i=0; inum; i+)/ 循环语句 for (int j=0; j=i; j+) cout*; coutn; 28 2.1C+程序结构程序结构 例例Ex_Simple2Ex_Simple2 用类的概念重写例Ex_Draw。 / 输出星号的三角形阵列 #include class

29、 CDrawArray/ 定义一个类 public: void DoDraw(int num);/ 声明类的公有成员函数 ; void CDrawArray:DoDraw(int num)/ 成员函数的实现 for (int i=0;inum;i+) for (int j=0;j=i;j+) cout*; coutn; void main() int num=5; CDrawArray myDraw;/ 定义类的一个对象 myDraw.DoDraw(num);/ 调用此对象的成员函数 29 2.1C+程序结构程序结构 2.1.2C+程序的基本组成程序的基本组成 C+程序往往由预处理命令、语句、

30、函数、变量和对象、输入与输出以及注 释等几个基本部分组成的。 (1)(1) 预处理命令 在程序的一开始出现含有以“#”开头的命令,它们是预处理命令。三类预处 理命令:宏定义命令、文件包含命令和条件编译命令。 (2)(2) 语句 可以是用来判断的条件语句,可以是用来反复运行的循环语句等。 (3)(3) 函数 一个程序由若干个函数组成。有的是系统中所提供的库函数,有的是根据自 己需要自己编制设计的函数。程序中必须有一个且只能有一个主函数main。 (4)(4) 变量和对象 变量的类型有整型(int)、字符型(char)以及浮点型(float)等。对象通常是 指“类”的实例(具有该“类”类型的变量)

31、,如myDraw是类CDrawArray的对 象。 (5)(5) 输入与输出 使用输入与输出可以要求键入一些数值或把计算的结果显示在屏幕上。 (6)(6) 注释 程序的目的不仅在于实现某种功能、解决某个问题,而且还在于数据结构和 算法的交流。注释能提高程序的可读性,帮助用户对程序的理解。 30 2.1C+程序结构程序结构 2.1.3C+程序的书写风格程序的书写风格 标识符命名标识符命名 用来标识变量名、函数名、数组名、类名、对象名、类型名、文件名等的有 效字符序列。标识符命名的好坏也会影响程序的可读性,命名时注意: (1)(1) 合法性 标识符由大小写字母、数字字符(09)和下划线组成,第一个

32、字符必须为字母 或下划线。任何标识符中都不能有空格、标点符号及其他字符。注意注意,标识 符的大小写是有区别的。用户定义的标识符不能和系统的关键字同名。 (2)(2) 有效性 标识符的长度(组成标识符的字符个数)是任意的,最好不超过32个,因为有 的编译系统只能识别前32个字符,也就是说前32个字符相同的两个不同标识 符被有的系统认为是同一个标识符。 (3)(3) 易读性 在定义标识符时,若能做到“见名知意”就可以达到易读性的目的。 31 2.1C+程序结构程序结构 缩进和注释缩进和注释 缩进是指程序在书写时不要将程序的每一行都由第一列开始,在适当的地方 加进一些空行或空格。它同注释一样,也是为

33、了提高程序的可读性。 注释要注意的是: (1)(1) 注释应在编程的过程中同时进行,不要指望程序开发完成后再补写注释。 那样只会多花好几倍的时间,更为严重的是,时间长了以后甚至会读不懂自 己写的程序。 (2)(2)必要的注释内容应包含:源程序的总体注释(文件名、作用、创建时间、版本、 作者及引用的手册、运行环境等)、函数注释(目的、算法、使用的参数和返 回值的含义、对环境的一些假设等)及其他的少量注释。千万不要陈述那些 一目了然的内容,否则会使注释的效果适得其反。 32 2.2数据类型和基本输入输出数据类型和基本输入输出 2.2.1基本数据类型基本数据类型 使用基本数据类型时需要注意: (1)

34、(1)无符号和有符号的区别在于数值最高位的含义。对signed类型,最高位是符 号位,其余各位表示数值大小;unsigned类型的各个位都用来表示数值大小; 相同基本数据类型的signed和unsigned的数值范围是不同。 (2) (2) char、short、int和long可统称为整型。缺省时,char、short、int和 long本身是有符号(signed)的。 33 2.2数据类型和基本输入输出数据类型和基本输入输出 2.2.2常量常量 整型常量整型常量 (1)(1) 十进制整型常量:即十进制整数,如34、128等。 (2)(2) 八进制整型常量:以0开头的数,由0至7的数字组成。

35、 (3)(3) 十六进制整型常量:以0 x或0X开头的数,由0至9、A至F或a至f组成。 需要注意的是: 整型常量中的长整型(long)要以L或小写字母l作为结尾。 整型常量中的无符号型(unsigned)要以U或u作为结尾。 浮点型常量浮点型常量 (1)(1) 十进制数形式:由整数部分和小数部分组成。 (2)(2) 指数形式:采用科学表示法,能表示出很大或很小的浮点数。 若浮点型常量是以F(或f)结尾的,则表示单精度类型(float),以L(或小写字 母l)结尾的,表示长双精度类型(long double)。若一个浮点型常量没有任何 说明,表示双精度类型(double)。 34 2.2数据类

36、型和基本输入输出数据类型和基本输入输出 字符常量字符常量 字符常量是用单引号括起来的一个字符。 35 2.2数据类型和基本输入输出数据类型和基本输入输出 字符串常量字符串常量 字符串常量是一对双引号括起来的字符序列。可以包含空格、转义序列符或 其他字符。由于双引号是字符串的分界符,因此如果需要在字符串中出现双 引号则必须用“”表示。例如: “Please press ”F1” to help!” 这个字符串被解释为: Please press “F1” to help! 字符串常量必须在同一行书写,若一行写不下,则需要用来连接,不要 将字符常量和字符串常量混淆不清,它们主要的区别如下: (1)

37、(1) 字符常量用单引号括起来,占一个字节;字符串常量是用双引号括起来,至 少占用两个字节。例如a是字符常量,占有的一个字节用来存放字符a的 ASCII码值,而“a”是字符串常量,它的长度不是1而是2,除了字符a之外, 它的末尾还有个0字符。每个字符串的末尾都有一个这样的字符。 (2)(2) 字符常量实际上是整型常量的特殊形式,它可以参与常用的算术运算;而 字符串常量则不能。例如: int b= a+3;/ 结果b为100,这是因为将a的ASCII码值97参与运 算 36 2.2数据类型和基本输入输出数据类型和基本输入输出 符号常量符号常量 例例Ex_PI1Ex_PI1 用#define定义符

38、号常量。 #include #define PI 3.14159 void main() double r = 100.0, area; area = PI * r * r; cout圆的面积是:area n; 37 2.2数据类型和基本输入输出数据类型和基本输入输出 2.2.3变量变量 变量的定义变量的定义 定义变量是用下面的格式语句进行定义的: ; 需要说明的是: (1)(1) 在同一个程序块中,不能有两个相同的变量名。 (2)(2) 没有字符串变量类型,字符串是用字符类型的数组或指针来定义的。 (3)(3)与其他语言相比,C+变量的定义比较自由。 变量的初始化变量的初始化 程序中常需要对

39、一些变量预先设置初值,这一过程称为初始化。可以在定义 变量时同时使变量初始化,也可以在多个变量的定义语句中单独对某个变量 初始化。 需要注意的是,一个未初始化的变量不是没有数值,而是取决于变量在系统 中的存储形式,它可能是系统的缺省值或无效值。 38 2.2数据类型和基本输入输出数据类型和基本输入输出 2.2.4基本输入输出基本输入输出 输出流输出流(cout) 通过cout可以输出一个整数、实数、字符及字符串,cout中的插入符“ . 其中,提取符“”可以连续写多个,每个后面跟一个表达式,该表达式 通常是获得输入值的变量或对象。 39 2.3运算符和表达式运算符和表达式 2.3.1算术运算符

40、算术运算符 算术运算符如下所示: +(正号运算符,如+4,+1.23等) -(负号运算符,如-4,-1.23等) *(乘法运算符,如6*8,1.4*3.56等) /(除法运算符,如6/8,1.4/3.56等) %(模运算符或求余运算符,如40%11等) +(加法运算符,如6+8,1.4+3.56等) -(减法运算符,如6-8,1.4-3.56等) 注意注意: : (1) 除法运算 两个整数相除,结果为整数,如7/5的结果为1,它是将小数部分去掉,而不 是四舍五入;若除数和被除数中有一个是浮点数,则进行浮点数除法,结果 是浮点型。如7/5.0、7.0/5、7.0/5.0的结果都是1.4。 (2)

41、 求余运算 求余运算要求参与运算的两个操作数都是整型,结果是两个数相除的余数。 例如40%5的结果是0,40%11的结果是7。要理解负值的求余运算,例如 40%-11结果是7,-40%11结果是-7,-40%-11结果也是-7。 40 2.3运算符和表达式运算符和表达式 (3)(3) 优先级和结合性 将表达式的求值中多种运算之间的先后关系(即运算符之间的优先关系)用 运算符的优先级表示,优先级的数值越小优先级越高。在算术运算符中,单目 运算符的优先级最高,其次是乘、除和求余,最后是加减。 优先级相同的运算符,则按它们的结合性进行处理。运算符的结合性是指 运算符和操作数的结合方式,有“从左至右”

42、和“从右至左”。“从左至右 的结合”指运算符左边的操作数先与运算符相结合,再与运算符右边的操作 数进行运算;自右至左的结合次序是将运算符右边的操作数先与运算符相结 合。 在算术运算符中,除单目运算符外,其余运算符的结合性都是从左至右的。 (4)(4) 关于书写格式 在使用运算符进行数值运算时,若书写时没有在双目运算符两边加上空格, 则有时编译系统会做出与自己想象中不同的理解。 书写时,有时有意识地加上一些括号。这样不仅增强程序的可读性,而且, 尤其当对优先关系犹豫时,加上括号是保证正确结果的最好方法。 (5)(5) 溢出处理 某数除以0或当其它浮点溢出时,编译系统将报告错误并终止程序运行。但

43、对整数溢出,系统却不认为是一个错误。 41 2.3运算符和表达式运算符和表达式 2.3.2赋值运算符赋值运算符 复合赋值复合赋值 10种复合赋值运算符:+=,-=,*=,/=,%=,=,|=,=,= 注意注意: : (1)(1) 在复合赋值运算符之间不能有空格,例如 += 不能写成 + = 。 (2) (2) 所有运算符高于逗号运算符,复合赋值运算符的结合性是从右至左的。 多重赋值多重赋值 指在一个赋值表达式中出现两个或更多的赋值符(“=”),例如: nNum1 = nNum2 = nNum3 = 100; 赋值符的结合性是从右至左,上述赋值的过程:首先对nNum3 = 100求值, 将100

44、赋值给nNum3,同时该赋值表达式取得值100;然后将该值赋给 nNum2,该赋值表达式也取得值100;最后将100赋给nNum1。 42 2.3运算符和表达式运算符和表达式 2.3.3数据类型转换数据类型转换 自动转换自动转换 将数据类型从低到高进行转换,例如:10 + a + 2*1.25 - 5.0/4L运算: (1)(1) 2*1.25的运算,将2和1.25都转换成double型,结果为double型的2.5。 (2) (2) 长整型4L和5.0转换成double型,5.0/4L结果为double型,值为1.25。 (3)(3) 进行10 + a 的运算,先将a转换成整数97,运算结果

45、为107。 (4)(4) 整数107和2.5相加,先将整数107转换成double型,值为109.5。 (5)(5)进行109.5 - 1.25的运算,结果为double型的108.25。 强制转换强制转换 强制类型有下列两种格式:()、() 。 整型 (int) 无符号整型 (unsigned) 长整型 (long) 无符号长整型 (unsigned long) 双精度浮点型 (double) 短整型,字符型 (short, char) 单精度浮点型 (float) 图2.1 类型转换的顺序 43 2.3运算符和表达式运算符和表达式 2.3.4关系运算符关系运算符 是比较两个操作数是否符合给

46、定的条件。若符合条件,则关系表达式的值为 “真”,否则为“假”。在编译系统中,往往将“真”表示为“true”或1, 将“假”表示为“false”或0。而任何不为0的数被认为是“真”,0被认为 是“假”。 由于关系运算需要两个操作数,所以关系运算符都是双目运算符。 提供了6种关系运算符: (小于),(大于),=(大于等于),= =(相等于), ! =(不 等于) 其中,前4种的优先级相同且高于后面的两种。例如: a = b c等效于a = ( b c ) 但关系运算符的优先级低于算术运算符(其他可参见表2.6)。例如: a = b c等效于a = ( b c ) 44 2.3运算符和表达式运算符

47、和表达式 2.3.5逻辑运算符逻辑运算符 将多个关系表达式或逻辑量组成一个逻辑表达式。提供了3种逻辑运算符: !逻辑非(单目):指将“真”变“假”,“假”变“真”。 有符号数高位补符号位。 注意,注意,只有在表达式2后面才能出现分号结束符,“表达式1”和“表达式2” 中都不能有分号。 47 2.3运算符和表达式运算符和表达式 2.3.8增增1和减和减1运算符运算符 +和-既可放在变量的左边也可以出现在变量的右边,称为前缀运算符和后 缀运算符。例如: i+; 或 +i;(等效于i = i + 1; 或i += 1;) i-; 或 -i;(等效于i = i - 1; 或i -= 1;) 若前缀运算

48、符和后缀运算符仅用于某个变量的增1和减1,这两都是等价的, 如果将这两个运算符和其他的运算符组合在一起,在求值次序上就会产生根 本的不同: 如果用前缀运算符对一个变量增1(减1),在将该变量增1(减1)后,用新的值 在表达式中进行其他的运算。 如果用后缀运算符对一个变量增1(减1),用该变量的原值在表达式进行其他 的运算后,再将该变量增1(减1)。 例如: a = 5; b = +a - 1; / 相当于 a = a + 1; b = a 1; 和 a = 5; b = a+ -1; / 相当于 b = a 1; a = a + 1; 虽然它们中的a值的结果都是6,但b的结果却不一样,前者为5

49、,后者为4。 48 2.4基本语句基本语句 2.4.2选择语句选择语句 条件语句条件语句 条件语句if具有下列形式: if () else (1)(1)条件语句中的表达式一般为逻辑表达式或关系表达式。表达式的类型也可以 是任意的数值类型(包括整型、浮点型、字符型等)。 (2)(2)适当添加花括号(“ ”)来增加程序的可读性。 (3)(3)条件语句中的语句1和语句2也可是if条件语句,这就形成了if语句的嵌套。 (4)(4)else总是和其前面最近的if配套的。 49 2.4基本语句基本语句 开关语句开关语句 具有下列形式: switch ( ) case :语句1 case :语句2 . ca

50、se :语句n default :语句n+1 注意:注意: (1)(1) switch后面的表达式可以是整型、字符型或枚举型的表达式,而case后面的 常量表达式的类型必须与其匹配。 (2)(2) 多个case可以共有一组执行语句。 (3)(3) 若同一个case后面的语句是复合语句,即有两条或两条以上的语句,则这些 语句可以不用花括号(“”)括起来。 (4) (4) 由于case语句起标号作用,因此每一个case常量表达式的值必须互不相同, 否则会出现编译错误。 50 2.4基本语句基本语句 2.4.3循环语句循环语句 while循环语句循环语句 while循环语句具有下列形式: while

51、 () do.while循环语句循环语句 do.while循环语句具有下列形式: do while () for循环语句循环语句 for循环语句具有下列形式: for (表达式1;表达式2;表达式3) (1) 表达式1、表达式2、表达式3都可以省略,但分号“;”不能省略。 (2) 表达式1和表达3可以是一个简单的表达式,也可以是逗号表达式,即包 含两个或两个以上的简单表达式,中间用逗号分隔。 (3) 由于循环体是由任何类型的语句组成的,因此在循环体内还可以包含前 面的几种循环语句,这样就形成了循环的嵌套。 51 2.4基本语句基本语句 2.4.4break和和continue语句语句 若需跳出

52、循环结构或重新开始循环,就得使用break和continue语句,格式: break;从一个循环体跳出,即提前终止循环,也可以跳出switch结构。 continue;用于那些依靠条件判断而进行循环的循环语句。对于for语句来说, 目的是将流程转到for语句的表达2和表达式3。例如: 例例Ex_Continue Ex_Continue 把1100之间的不能被7整除的数输出。 #include void main() for (int nNum=1; nNum=100; nNum+) if (nNum%7 = 0) continue; coutnNum ; coutn; 当nNum能被7整除时,

53、执行continue语句,流程转到for 语句中的 nNum=100; nNum+,并根据表达式nNum=100的值来决定是否再做 循环。而当nNum不能被7整除时,才执行coutnNum” ”语句。 52 2.5函数和预处理函数和预处理 2.5.1函数的定义和调用函数的定义和调用 函数的定义函数的定义 定义一个函数的格式如下: ( ) 函数体 函数类型决定了函数所需要的返回值类型。函数名后面必须跟一对圆括号 “( )”,以区别于变量名及其他用户定义的标识名。函数的形式参数写在括 号内,参数表中参数个数可以是0,一个或多个参数,圆括号不能省略。函数 体由在一对花括号中的若干条语句组成,用于实现

54、这个函数执行的动作。 函数的声明函数的声明 声明一个函数可按下列格式进行: ( ); int sum(int x, int y);和 int sum(int , int);是等价的。 53 2.5函数和预处理函数和预处理 函数的调用函数的调用 函数调用的一般形式为: ( ); 所谓“实际参数”(简称“实参”),它与“形参”相对应,是实际调用函数时 所给定的常量、变量或表达式,且必须有确定的值。例如: int a5 = 7, 9, 6, 3, 4; sum(a0, 6); 或 sum(a0*a1, a2+a3); 等都是合法的调用。需要注意的是:实参与形参的个数应相等,类型应一致, 且按顺序对应

55、,一一传递数据。 C+中,调用一个函数的方式可以有很多,例如: sum(3, 4);/ A int c = 2 * sum(4,5);/ B c = sum(c, sum(c,4);/ C 其中,A是将函数作为一个语句,不使用返回值,只要求函数完成一定的操 作;B把函数作为表达式的一部分,将返回值参与运算,结果c = 18;C是将 函数作为函数的实参,等价于“c = sum(18, sum(18,4);”,执行 sum(18,4)后,等价于“c = sum(18,22) ;”,最后结果为c = 40。 54 2.5函数和预处理函数和预处理 2.5.2函数的参数传递函数的参数传递 函数的参数传递

56、有两种方式,一种是按值传递,另一种是地址传递或引用传递。 例例Ex_S Ex_S 交换函数两个参数的值。 #include void s x, float y) float temp; temp = x; x = y; y = temp; coutx = x, y = yn; void main() float a = 20, b = 40; couta = a, b = bn; swap(a, b); couta = a, b = bn; 运行结果为: a = 20, b = 40 x = 40, y = 20 a = 20, b = 40 值传递的最大好处是保持函数的独立性。在值传递的情况

57、下,函数只有通过return来 返回某个类型的值。 55 2.5函数和预处理函数和预处理 2.5.3作用域和存储类型作用域和存储类型 作用域作用域 (1)(1) 块作用域 在块中声明的标识符,作用域从声明处开始,一直到结束块的花括号为止。具 有块作用域的标识符称作局部标识符,块作用域也称作局部作用域 标识符的作用域完全相同时,不允许出现相同的标识符名。标识符具有不同 的作用域时,允许标识符同名。 在for语句中声明的标识符,其作用域是包含for语句的那个内层块,而不是 仅仅作用于for语句。 (2)(2) 函数原型作用域 在声明函数原型所指定的参数标识符的作用范围。这个作用范围是在函数原 型声

58、明中的左、右括号之间。在函数原型中声明的标识符可以与函数定义中 说明的标识符名称不同。由于所声明的标识符与该函数的定义及调用无关, 所以可以在函数原型声明中只作参数的类型声明,而省略参数名。 (3)(3) 函数作用域 C+语言中,只有goto语句中的标号标识符具有函数作用域。具有函数作用 域的标识符在声明它的函数内随处可见,但在此函数之外不可见。goto语句 的滥用导致程序流程无规则、可读性差。 56 2.5函数和预处理函数和预处理 变量的存储类型变量的存储类型 存储类型的声明格式: ; (1)(1) 自动类型(auto) 一般说,自动存储类型声明的变量都是限制在某个程序范围内使用的。从系 统

59、角度来说,自动存储类型变量是采用堆栈方式分配内存空间。程序执行到 超出该变量的作用域时,就释放它所占用的内存空间,其值也随之消失了。 声明一个自动存储类型的变量是在变量类型前面加上关键字auto 若自动存储类型的变量是在函数内或语句块中声明,可省略auto, (2)(2) 静态类型(static) 它和自动存储类型的变量的最大不同之处在于:静态类型变量在内存中是以 固定地址存放的,而不是以堆栈方式存放的。只要程序还在继续执行,静态 类型变量的值就一直有效,不会随它所在的函数或语句块的结束而消失。 静态类型的变量均有确定的初值,当声明变量时没有指定其初值,则编译器 将其初值置为0。 在程序中声明

60、的全局变量总是静态存储类型,若在全局变量前加一个static ,使该变量只在这个源程序文件内使用,称之为全局静态变量或静态全局变 量。 静态函数也是在某个函数声明前加上static,它的目的也是使该函数只在声 明的源文件中使用,对于其他源文件则无效。 57 2.5函数和预处理函数和预处理 (3)(3) 寄存器类型(register) 使用关键字register声明寄存器类型的变量的目的是将所声明的变量放入寄 存器内,从而加快程序的运行速度。但有时,在使用这种声明时,若系统寄存 器已经被其他数据占据时,寄存器类型的变量就会自动当作auto变量。 (4)(4) 外部类型(extern) 用关键字e

温馨提示

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

评论

0/150

提交评论