为了正常的体验网站,请在浏览器设置里面开启Javascript功能!
首页 > VISUALC实用教程第4版郑阿奇电子教案

VISUALC实用教程第4版郑阿奇电子教案

2018-12-30 152页 ppt 1MB 15阅读

用户头像 个人认证

xiaowu0912

多年轨道交通运输经验

举报
VISUALC实用教程第4版郑阿奇电子教案第1章基本C++语言1.1C++程序结构1.2数据类型和基本输入/输出1.3运算符和表达式1.4基本语句1.5函数和预处理1.6数组1.7指针和引用1.8字符指针和字符串处理1.9结构、共用和自定义1.1C++程序结构 1.1.1C++概述C++(CPlusPlus)是在C语言基础上研制出来的一种通用的程序设计语言,它是在1980年由贝尔实验室的BjarneStroustrup创建的。研制C++的一个重要目标是完善C,另一个重要目标就是增加面向对象的程序设计。1.1.2C++程序创建由于计算机只能识别和执行由0和1组成的二进制...
VISUALC实用教程第4版郑阿奇电子教案
第1章基本C++语言1.1C++程序结构1.2数据类型和基本输入/输出1.3运算符和达式1.4基本语句1.5函数和预处理1.6数组1.7指针和引用1.8字符指针和字符串处理1.9结构、共用和自定义1.1C++程序结构 1.1.1C++概述C++(CPlusPlus)是在C语言基础上研制出来的一种通用的程序设计语言,它是在1980年由贝尔实验室的BjarneStroustrup创建的。研制C++的一个重要目标是完善C,另一个重要目标就是增加面向对象的程序设计。1.1.2C++程序创建由于计算机只能识别和执行由0和1组成的二进制指令,称为机器代码,因而C++源程序是不能被计算机直接执行的,必须转换成机器代码。这个转换过程就是编译系统对源代码进行编译和连接的过程,如图1.1所示。1.1.2C++程序创建VisualC++在项目文件管理、调试及操作的亲和力等方面上都略胜一筹,从而成为目前使用得极为广泛的基于Windows平台的可视化编程环境,如图1.2所示。1.1.2C++程序创建 1.创建工作文件夹在文件夹“D:\VisualC++程序”下再创建一个子文件夹“第1章”用于存放第1章中的C++程序;第2章程序就存放在子文件夹“第2章”中,以此类推。 2.启动VisualC++6.0选择“开始”→“程序”→“MicrosoftVisualStudio6.0”→“MicrosoftVisualC++6.0”命令,运行VisualC++6.0。第一次运行时,将显示如图1.3所示的“每日提示”对话框。1.1.2C++程序创建 3.添加C++程序(1)单击工具栏 上的“新建”按钮,打开一个新的文档窗口,在这个窗口中输入下列C++代码。【例Ex_Simple1】一个简单的C++程序 /*一个简单的C++程序*/ #include<iostream.h> intmain() { doubler,area; //定义变量r,area双精度整数类型 cout<<"输入圆的半径:"; //显示提示信息 cin>>r; //从键盘上输入的值存放到r中 area=3.14159*r*r; //计算圆面积,结果存放到area中 //思考:在输出“圆的面积为:”后输出area中的面积值,如何换行? cout<<"圆的面积为:"<<area<<"\n"; return0; //指定返回值 }1.1.2C++程序创建(2)选择“文件”→“保存”菜单或按快捷键【Ctrl+S】或单击标准工具栏中的按钮,弹出“保存为”文件对话框。将文件定位到“D:\VisualC++程序\第1章”文件夹中,文件名指定为“Ex_Simple1.cpp”。1.1.2C++程序创建 4.编译和运行(1)单击编译工具条上的“生成”按钮或直接按快捷键【F7】,系统弹出一个对话框,询问是否为该程序创建默认的活动工作区间文件夹,单击按钮,系统开始对Ex_Simple1进行编译、连接,同时在输出窗口中显示编连的有关信息,当出现“Ex_Simple1.exe-0error(s),0warning(s)”时表示Ex_Simple1.exe可执行文件已经正确无误地生成了。1.1.2C++程序创建(2)单击编译工具条上的“运行”按钮或直接按快捷键【Ctrl+F5】,就可以运行刚刚生成的Ex_Simple1.exe了,结果弹出下面的称为控制台的窗口(其属性已被修改过,具体修改方法见实验1):此时等待用户输入一个数。当输入10并按【Enter】键后,控制台窗口显示为:1.1.3C++代码结构 1.main函数主函数:一个C语言程序可以包含若干函数,其中main表示主函数,由于每一个程序执行时都必须从main开始,而不管该函数在整个程序中的具体位置,因此每一个C++程序必须包含一个且只有一个main函数。函数体:每一个函数都由函数头和函数体组成。在main函数中,“intmain()”称为main函数的函数头。函数值:函数返回的值就是函数值,函数头包括函数值类型和函数名。main函数名的前面有一个int,它表示main函数的类型是整型。函数值就是函数体中的return语句返回的值。1.1.3C++代码结构 2.预处理指令#includeiostream.h称为预处理指令。iostream.h是C++编译系统自带的文件,称为C++库文件,它定义了标准输入/输出流的相关数据及其操作。由于程序用到了输入/输出流对象cin和cout,因而需要用#include将其合并到程序中。 3.注释程序Ex_Simple中的“/*…*/”之间的内容(称为块注释)或“//”开始一直到行尾的内容(称为行注释)是用来注释的,是为了提高程序的可读性,对编译和运行并不起作用。 4.缩进缩进是指程序在书写时不要将程序的每一行都由第一列开始,而且在适当的地方加进一些空格,也是为了提高程序的可读性。1.2数据类型和基本输入/输出 1.2.1基本数据类型为了能精确表征数据在计算机内存中的存储(格式及大小)和操作,C++将数据类型分为基本数据类型、派生类型和复合类型三类,后两种类型又可统称为构造类型,如图1.4所示。1.2.1基本数据类型表1.1列出了C++各种基本数据的类型、字宽(以字节数为单位,本书余同)和范围,它们是根据ANSI标准而定的。 类型名 类型描述 字宽 范围 bool 布尔型 1 false(0)或true(1) char 单字符型 1 -128~127 unsignedchar 无符号字符型 1 0~255(0xff) signedchar 有符号字符型 1 -128~127 wchar_t 宽字符型 2 视系统而定 short[int] 短整型 2 -32768~32767 unsignedshort[int] 无符号短整型 2 0~65535(0xffff) signedshort[int] 有符号短整型(与shortint相同) 2 -32768~32767 int 整型 4 -2147483648~2147483647 unsigned[int] 无符号整型 4 0~4294967295(0xffffffff) signed[int] 有符号整型(与int相同) 4 -2147483648~2147483647 long[int] 长整型 4 -2147483648~2147483647 unsignedlong[int] 无符号长整型 4 0~4294967295(0xffffffff) signedlong[int] 有符号长整型(与longint相同) 4 -2147483648~2147483647 float 单精度实型 4 7位有效位 double 双精度实型 8 15位有效位 longdouble 长双精度实型 10 19位有效位,视系统而定1.2.2字面常量 1.整数常量C++中的整数可用十进制、八进制和十六进制来表示。其中,八进制整数是以数字0开头且由0~7的数字组成的数。例如045,即(45)8,表示八进制数45,等于十进制数37;-023表示八进制数-23,等于十进制数-19。而十六进制整数是以0x或0X开头且由0~9、A~F或a~f组成的数。 2.实数常量实数即浮点数,它有十进制数和指数两种表示形式。十进制数形式是由整数部分和小数部分组成的(注意必须有小数点)。例如0.12、.12、1.2、12.0、12.、0.0都是合法的十进制数形式实数。1.2.2字面常量 3.字符常量在C++中,用单引号将其括起来的字符称为字符常量,如‘B’、‘b’、‘%’、‘┗┛’等。但若只有一对单引号‘’则是不合法的,因为C++不支持空字符常量。注意‘B’和‘b’是两个不同的字符。表1.2列出了常用的转义序列符。 字符形式 含义 ASCII码值 \a 响铃(BEL) 07H \b 退格(相当于按【Backspace】键)(BS) 08H \f 进纸(仅对打印机有效)(FF) 0CH \n 换行(相当于按【Enter】键)(CR、LF) 0DH、0AH \r 回车(CR) 0DH \t 水平制表(相当于按【Tab】键)(HT) 09H \v 垂直制表(仅对打印机有效)(VT) 0BH \' 单引号 27H \" 双引号 22H \\ 反斜杠 5CH \? 问号 3FH \ooo 用1位、2位或3位八制数表示的字符 (ooo)8 \xhh 用1位或多位十六制数表示的字符 hhH1.2.2字面常量 4.字符串常量*C++语言除了允许使用字符常量外,还允许使用字符串常量。字符串常量是由一对双引号括起来的字符序列,简称为字符串。字符串常量中除一般字符外,还可以包含空格、转义序列符或其他字符(如汉字)等。例如:"Hello,World!\n""C++语言"由于双引号是字符串的分界符,因此如果需要在字符串中出现双引号则必须用“\"”表示。例如:"Pleasepress\"F1\"tohelp!"这个字符串被解释为:Pleasepress"F1"tohelp!字符串常量应尽量在同一行书写,若一行写不下,可用“\”来连接,例如:"ABCD\EFGHIGK…"*书中表示字符串的一对双引号“”是汉字字符,在程序代码中是没有的,它们均用"来表示;类似的,一对单引号‘’在程序代码中均用'表示。注意不要在程序代码中误用这些汉字字符。1.2.3变量及其命名规则 1.变量名命名(1)合法性。C++规定标识符由大小写字母、数字字符(0~9)和下划线组成,且第一个字符必须为字母或下划线。任何标识符中都不能有空格、标点符号及其他字符,例如下面的标识符是不合法的:93Salary,Peter.Ding,$178,#5f68,r<d而且,用户定义的标识符不能和系统的关键字同名。以下是48个C++的标准关键字:asm auto break case catch char class const continue default delete dodouble else enum extern float forfriend goto if inline int longnew operator private protected public registerreturn short signed sizeof static structswitch template this throw try typedefunion unsigned virtual void volatile while1.2.3变量及其命名规则(2)有效性。因为有的编译系统只能识别前32个字符。(3)易读性。在定义标识符时,若能做到“见名知意”就可以达到易读性的目的。1.2.3变量及其命名规则 2.变量定义C++中,定义变量的最简单方法是先写数据类型,然后写变量名。数据类型和变量名之间必须用1个或多个空格来分隔,最后以分号来结尾,即如下列的格式:<数据类型><变量名1>[,<变量名2>,…];数据类型是告诉编译系统要为由变量名指定的变量分配多少字节的内存空间,以及变量中要存取的是什么类型的数据。例如:double x; //双精度实型变量这样,x占用了8字节连续的内存空间,存取的数据类型是double型,称为双精度实型变量。再如:float y; //单精度实型变量1.2.3变量及其命名规则则y占用了4字节连续的内存空间,存取的数据类型是float型,称为单精度实型变量。此后,变量x、y就分别对应各自的内存空间,换句话说,开辟的那块8字节的内存空间就叫x,那块4字节的内存空间就叫y。又如:int nNum1; //整型变量int nNum2; //整型变量int nNum3; //整型变量则nNum1、nNum2、nNum3分别占用4字节的存储空间,其存取的数据类型是int型,称为整型变量。由于它们都是同一类型的变量,因此为使代码简洁,可将同类型的变量定义在一行语句中,不过同类型的变量名要用逗号(,)分隔(逗号前后可以有0个或多个空格)。例如这三个整型变量可这样定义(注意:只有最后一个变量nNum3的后面才有分号):intnNum1,nNum2,nNum3;1.2.3变量及其命名规则 3.变量赋值和初始化变量一旦定义后,就可以通过变量名引用变量来进行赋值等操作。所谓引用变量,就是使用变量名来引用变量的内存空间。也就是说,变量名是对内存空间的标识,对变量名的操作也是对其内存空间的操作。例如:intx,y;x=8; //给x赋值y=x; //将x的值赋给y1.2.3变量及其命名规则(1)在定义变量后,使用赋值语句来赋初值。如前面的“x=8;”和“y=x;”,使得x和y的初值都设为8。(2)在定义变量的同时赋给变量初值,这一过程称为变量初始化。例如:int nNum1=3; //指定nNum1为整型变量,初值为3double x=1.28; //指定x为双精度实变量,初值为1.28char c='G'; //指定c为字符变量,初值为'G'(3)也可以在多个变量的定义语句中单独对某个变量进行初始化,如:int nNum1,nNum2=3,nNum3;表示nNum1、nNum2、nNum3为整型变量,但只有nNum2的初值为3。(4)在C++中,变量的初始化还有另外一种形式,例如:int nX(1),nY(3),nZ;1.2.4标识符常量 1.const只读变量在变量定义时,可以使用关键字const来修饰,这样的变量是只读的,即在程序中对其只能读取,不能修改。由于不可修改,因而它是一个标识符常量,且在定义时必须初始化。例如:constfloatPI=3.14159265f; //指定f使其类型相同,否则会有警告错误因p字符不能作为C++的标识符,因此这里用PI来表示。PI被定义成一个float类型的只读变量,由于float变量只能存储7位有效位精度的实数,因此PI的实际值为3.141592。若将PI定义成double,则全部接受上述数字。事实上,const还可放在类型名之后,如下列语句:doubleconstPI=3.14159265;1.2.4标识符常量【例Ex_PI】用const定义标识符常量#include<iostream.h>constdoublePI=3.14159265; //PI是一个只读变量intmain(){ doubler=100.0,area; area=PI*r*r; //引用PI cout<<"圆的面积是:"<<area<<"\n"; return0; //指定返回值}程序运行结果如下:圆的面积是:31415.91.2.4标识符常量 2.#define标识符常量在C++中,允许程序用编译预处理指令#define来定义一个标识符常量。例如:#definePI3.141592651.2.5枚举常量定义时,先写关键字enum,然后是要定义的枚举类型名、一对花括号({}),最后以分号结尾。enum和类型名之间至少要有一个空格,花括号里面是指定的各个枚举常量名,各枚举常量名之间要用逗号分隔,即如下格式:enum<枚举类型名>{<枚举常量1,枚举常量2,…>};例如,有下列枚举常量定义:enumCOLORS{Black,Red,Green,Blue,White};其中COLORS是要定义的枚举类型名,通常将枚举类型名写成大写字母以与其他标识符相区别。它有5个枚举常量(又称枚举值、枚举元素)。1.2.6基本输入/输出 1.输入流(cin)cin可以获得多个键盘的输入值,它具有下列格式:cin>><对象1>[>><对象2>…];其中,提取运算符“>>”可以连续写多个,每个提取运算符后面跟一个获得输入值的变量或对象。例如:intnNum1,nNum2,nNum3;cin>>nNum1>>nNum2>>nNum3;要求用户从键盘上输入三个整数。输入时,必须在三个数值之间加上一些空格来分隔,空格的个数不限,最后用回车键结束输入;或者在每个数值之后按回车键。例如,上述输入语句执行时,用户可以输入:12┗┛9┗┛20或129201.2.6基本输入/输出 2.输出流(cout)与cin相对应,通过cout可以输出一个整数、实数、字符及字符串,如下列格式:cout<<<对象1>[<<<对象2>…];cout中的插入运算符“<<”可以连续写多个,每个后面可以跟一个要输出的常量、变量、转义序列符及表达式等。【例Ex_Cout】cout的输出及endl算子#include<iostream.h>intmain(){ cout<<"ABCD\t"<<1234<<"\t"<<endl; return0; //指定返回值}程序运行结果如下:ABCD12341.2.6基本输入/输出 3.使用格式算子oct、dec和hex格式算子oct、dec和hex能分别将输入或输出的整数转换成八进制、十进制及十六进制。【例Ex_ODH】格式算子的使用#include<iostream.h>intmain(){ int nNum; cout<<"PleaseinputaHexinteger:"; cin>>hex>>nNum; cout<<"Oct\t"<<oct<<nNum<<endl; cout<<"Dec\t"<<dec<<nNum<<endl; cout<<"Hex\t"<<hex<<nNum<<endl; return0; }1.2.6基本输入/输出程序运行结果如下:PleaseinputaHexinteger:7bOct 173Dec 123Hex 7b1.3运算符和表达式 1.3.1算术运算符由操作数和算术运算符构成的算术表达式常用于数值运算,与中的代数表达式相对应。C++算术运算符有双目的加减乘除四则运算符、求余运算符及单目的正负运算符,如下所示:+ 正号运算符,如+4,+1.22等- 负号运算符,如-4,-1.22等* 乘法运算符,如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.3.1算术运算符C++中算术运算符和数学运算的概念及运算方法是一致的,但要注意以下几点。(1)除法运算。(2)求余运算。(3)优先级和结合性。(4)书写格式。(5)溢出处理。1.3.1算术运算符【例Ex_OverFlow】一个整数溢出的例子#include<iostream.h>intmain(){ shortnTotal,nNum1,nNum2; nNum1=nNum2=1000; nTotal=nNum1*nNum2; cout<<nTotal<<"\n"; return0; }1.3.2赋值运算符 1.复合赋值在C++中,规定了下列10种复合赋值运算符:+= 加赋值 &= 位与赋值-= 减赋值 |= 位或赋值*= 乘赋值 ^= 位异或赋值/= 除赋值 <<= 左移位赋值%= 求余赋值 >>= 右移位赋值1.3.2赋值运算符它们都是在赋值符“=”之前加上其他运算符而构成的,其中的复合赋值运算符的含义如表1.3所示,其他复合赋值运算符的含义均与其相似。 运算符 含义 例子 等效表示 += 加赋值 a+=b a=a+b -= 减赋值 a-=b a=a-b *= 乘赋值 a*=b a=a*b /= 除赋值 a/=b a=a/b %= 求余赋值 nNum%=8 nNum=nNum%81.3.2赋值运算符(1)在复合赋值运算符之间不能有空格,例如+=不能写成+=,否则编译时将提示出错信息。(2)复合运算符的优先级和赋值符的优先级一样,在C++的所有运算符中只高于逗号运算符,而且复合赋值运算符的结合性也和赋值符一样,也是从右至左。因此,在组成复杂的表达式时要特别小心。例如:a*=b-4/c+d等效于a=a*(b-4/c+d)而不等效于a=a*b-4/c+d1.3.2赋值运算符 2.多重赋值所谓多重赋值是指在一个赋值表达式中出现两个或更多的赋值符“=”。例如:nNum1=nNum2=nNum3=100//若结尾有分号“;”,则表示是一条语句由于赋值是一个表达式,因而几乎可以出现在程序的任何地方,由于赋值运算符的等级比较低,因此这时的赋值表达式两边应加上圆括号。例如:a=7+(b=8) //赋值表达式值为15,a值为15,b值为8a=(c=7)+(b=8) //赋值表达式值为15,a值为15,c值为7,b值为8(a=6)=(c=7)+(b=8) //赋值表达式值为15,a值为15,c值为7,b值为81.3.3数据类型转换 1.自动转换自动转换是将数据类型按从低到高的顺序自动进行转换,如图1.6所示,箭头的方向表示转换的方向。例如,10+'a'+2*1.25-5.0/4L的运算次序如下:(1)进行2*1.25的运算,将2和1.25都转换成double型,结果为double型的2.5。(2)进行5.0/4L的运算,将长整型4L和5.0都转换成double型,结果值为1.25。(3)进行10+'a'的运算,先将'a'转换成int型整数97,运算结果为107。(4)整数107和2.5相加,先将整数107转换成double型,结果为double型,值为109.5。(5)进行109.5-1.25的运算,结果为double型的108.25。1.3.3数据类型转换 2.强制转换强制转换是在程序中通过指定数据类型来改变如图1.6所示的类型转换顺序,将一个变量从其定义的类型改变成为另一种不同的类型。由于这种转换可能会丢失有效的数据位,因而是不安全的。在强制转换操作时,C++有下列两种基本格式:(<类型名>)<表达式><类型名>(<表达式>)这里的类型名是任何合法的C++数据类型,如float、int等。通过类型的强制转换可以将表达式(含常量、变量等)转换成类型名指定的类型,例如:doublef=3.56; intnNum;nNum=(int)f; //强制double转换成int,小数部分被截去或者nNum=int(f); //或者nNum=(int)(f);1.3.4关系运算符C++提供了下列6种关系运算符:< 小于, 若表达式e1<e2成立,则结果为true,否则为false<= 小于等于, 若表达式e1<=e2成立,则结果为true,否则为false> 大于, 若表达式e1>e2成立,则结果为true,否则为false>= 大于等于, 若表达式e1>=e2成立,则结果为true,否则为false== 相等于, 若表达式e1==e2成立,则结果为true,否则为false!= 不等于, 若表达式e1!=e2成立,则结果为true,否则为false其中,前4种的优先级相同且高于后面的两种。例如,若有表达式:a==b>c则等效于a==(b>c)。若设整型变量a=3、b=4、c=5,则表达式中,先运算b>c,结果该条件不满足,值为false(以0表示),然后再运算a==0,显然也为false,故整个表达式的值是false。1.3.5逻辑运算符C++提供了下列3种逻辑运算符:! 逻辑非(单目)&& 逻辑与(双目)|| 逻辑或(双目)逻辑非“!”是指操作数为true结果为false,操作数为false结果为true。逻辑与“&&”是指当两个操作数都是true时,结果才为true,否则为false。逻辑或“||”是指当两个操作数中有一个是true时,结果就为true,而只有当它们都为false时,结果才为false。例如,若inta,b=3,c=0;则在下面的表达式中(a=0)&&(c=a+b); //注意这里的a=0是赋值表达式因(a=0)的表达式值为0(false),故(c=a+b)不会被执行。这样,a,b和c的值分别为0,3,0。若有:(a=2)||(c=a+b); //注意这里的a=2是赋值表达式1.3.6位运算符C++语言提供了6种位运算符:~ 按位求反(单目)& 按位与(双目)^ 按位异或(双目)| 按位或(双目)<< 左移(双目)>> 右移(双目)符1.3.7条件运算符条件运算符“?:”是C++中唯一的一个三目运算符,它具有下列格式:<e1>?<e2>:<e3>表达式e1、表达式e2和表达式e3是条件运算符“?:”的三个操作数。其中,表达式e1是C++中可以产生true和false结果的任何表达式。其功能是:如果表达式e1的结果为true,则执行表达式e2,否则执行表达式e3。例如:nNum=(a>b)?10:8;当(a>b)为true时,则表达式(a>b)?10:8的结果为10,从而nNum=10;否则(a>b)?10:8的结果为8,nNum=8。1.3.8sizeof运算符sizeof的目的是返回操作数所占的内存空间大小(字节数),它具有下列两种格式:sizeof(<表达式>)sizeof(<数据类型>)例如:sizeof("Hello") //计算"Hello"所占内存的字节大小,结果为6sizeof(int) //计算整型int所占内存的字节数1.3.9逗号运算符逗号运算符“,”是优先级最低的运算符,它用于把多个表达式连接起来,构成一个逗号表达式。逗号表达式的一般形式为:表达式1,表达式2,表达式3,…,表达式n在计算时,C++将从左至右逐个计算每个表达式,最终整个表达式的结果是最后计算的那个表达式的类型和值,即表达式n的类型和值。例如:a=1,b=a+2,c=b+3该表达式依次从左至右计算,最终的类型和值为最后一个表达式“c=b+3”的类型和值,结果为左值c(c值为6)。1.3.10自增和自减单目运算符自增(++)和自减(--)为变量加1或减1提供了一种非常有效的方法。++和--既可放在变量的左边也可以出现在变量的右边,分别称为前缀运算符和后缀运算符。例如:inti=5;i++; //合法:后缀自增,等效于i=i+1;或i+=1;++i; //合法:前缀自增,等效于i=i+1;或i+=1;i--; //合法:后缀自减,等效于i=i-1;或i-=1;--i; //合法:前缀自减,等效于i=i-1;或i-=1;(i+1)++;或++(i+1); //错误:表达式i+1结果不是一个变量floatf1,f2=3.0f;f1=f2++; //合法:f1的值为3.0f,f2的值为4.0f(f1=5.0f)++; //合法:f1=5.0f表达式的结果仍是f1,是一个变量1.3.10自增和自减若前缀运算符和后缀运算符仅用于某个变量的增1和减1,则这两者是等价的。例如,若a的初值为5,a++和++a都是使a变成6。但如果将这两个运算符和其他运算符组合在一起,在求值次序上就会产生根本的不同。如果用前缀运算符对一个变量增1(减1),则在将该变量增1(减1)后,用新的值在表达式中进行其他的运算。如果用后缀运算符对一个变量增1(减1),则用该变量的原值在表达式中进行其他的运算后,再将该变量增1(减1)。例如:a=5; b=++a; //A:相当于a=a+1;b=a;和a=5; b=a++; //B:相当于b=a;a=a+1;1.4基本语句 1.4.1顺序语句和块 1.说明语句在C++中,把完成对数据结构的定义和描述、对变量或标识符常量的属性说明(如初值、类型等)称为说明语句或声明语句。说明语句的目的是用来在程序中引入一个新的标识符(变量名、函数名、数组名、类名、对象名、引用名及类型名等),本身一般不执行操作。 2.表达式语句表达式语句是C++程序中最简单也是最常用的语句。任何一个表达式加上分号就是一个表达式语句,例如:x+y;nNum=5;1.4.1顺序语句和块 3.块语句块语句,简称为块(block),是由一对花括号“{}”括起来的语句,又称为复合语句。例如:{ //块开始 inti=2,j=3,k=4; cout<<i<<j<<k<<endl; //输出结果是2、3和4} //块结束1.4.2选择结构语句 1.条件语句条件语句if具有下列一般形式:if(<表达式e>)<语句s1>[else <语句s2>]这里的if和else是C++的关键字。注意,if后的一对圆括号不能省略。当表达式e为true或不为0时,将执行语句s1。当表达式e为false或0时,语句s2被执行。其中,else可以省略,即变成这样的简单的if语句:if(<表达式e>)<语句s>1.4.2选择结构语句【例Ex_Compare】输入两个整数,比较两者的大小#include<iostream.h>intmain(){ intnNum1,nNum2; cout<<"Pleaseinputtwointegernumbers:"; cin>>nNum1>>nNum2; if(nNum1!=nNum2) if(nNum1>nNum2) cout<<nNum1<<">"<<nNum2<<endl; else cout<<nNum1<<"<"<<nNum2<<endl; else cout<<nNum1<<"="<<nNum2<<endl; return0; }程序运行结果如下:Pleaseinputtwointegernumbers:1012310<1231.4.2选择结构语句 2.开关语句当程序有多个判断条件时,若使用if语句则可能使嵌套太多,降低程序的可读性。开关语句switch能很好地解决这种问,它具有下列形式:switch(<表达式e>){ case<常量表达式v1> :[语句s1] case<常量表达式v2> :[语句s2] ... case<常量表达式vn> :[语句sn] [default :语句sn+1]}1.4.2选择结构语句【例Ex_Switch】根据成绩的等级输出相应的分数段#include<iostream.h>intmain(){ charchGrade; cout<<"Pleaseinputachar(A~E):"; cin>>chGrade; switch(chGrade) { case'A': case'a': cout<<"90--100"<<endl; break; case'B': case'b': cout<<"80--89"<<endl; break; case'C': case'c': cout<<"70--79"<<endl; case'D': case'd': cout<<"60--69"<<endl; case'E': case'e': cout<<"<60"<<endl; default: cout<<"error!"<<endl; } return0; }1.4.2选择结构语句运行时,当用户输入A时,则运行结果如下:Pleaseinputachar(A~E):A90--100但当用户输入d时,则运行结果如下:Pleaseinputachar(A~E):d60--69<60error!1.4.3循环结构语句 1.while语句语句具有下列格式:while(<表达式e>) <语句s>【例Ex_SumWhile】求整数1~50的和#include<iostream.h>intmain(){ int nNum=1,nTotal=0; while(nNum<=50) { nTotal+=nNum; nNum++; } cout<<"Thesumfrom1to50is:"<<nTotal<<"\n"; return0; }程序运行结果如下:Thesumfrom1to50is:12751.4.3循环结构语句 2.do…while语句语句具有下列格式:do <语句s>while(<表达式e>);【例Ex_SumDoWhile】求整数1~50的和#include<iostream.h>intmain(){ int nNum=1,nTotal=0; do { nTotal+=nNum; nNum++; }while(nNum<=50); cout<<"Thesumfrom1to50is:"<<nTotal<<"\n"; return0; }程序运行结果如下:Thesumfrom1to50is:12751.4.3循环结构语句 3.for语句语句具有下列格式:for([表达式e1];[表达式e2];[表达式e3])<语句s>表达式e1用做循环变量的初始化,表达式e2用做循环体的循环条件,当其为true时,开始执行循环体语句s,然后计算表达式e3,再判断表达式e2的值是否为true,若是,再执行循环体s,再计算表达式e3,如此反复,直到表达式e2为false或0为止。如图1.7所示。1.4.3循环结构语句【例Ex_SumFor】求整数1~50的和#include<iostream.h>intmain(){ int nTotal=0; for(intnNum=1;nNum<=50;nNum++) nTotal+=nNum; cout<<"Thesumfrom1to50is:"<<nTotal<<"\n"; return0; }程序运行结果如下:Thesumfrom1to50is:12751.4.4break和continue语句在C++程序中,若需要跳出循环结构或提前结束本次循环,就需要使用break和continue语句,其格式如下:break;continue;【例Ex_Continue】将1~100之间不能被7整除的数输出#include<iostream.h>intmain(){ for(intnNum=1;nNum<=100;nNum++){ if(nNum%7==0)continue; cout<<nNum<<""; } cout<<"\n"; return0; }1.4.4break和continue语句程序运行结果如下:1234568910111213151617181920222324252627293031323334363738394041434445464748505152535455575859606162646566676869717273747576787980818283858687888990929394959697991001.5函数和预处理 1.5.1函数的定义和调用 1.函数的定义在C++程序中,定义一个函数的格式如下:<函数类型><函数名>(<形式参数表>){ <若干语句>}据上述定义,可以编写一个函数。例如,下列函数的作用是计算两个整数的绝对值之和:intsum(intx,inty){ if(x<0)x=-x; if(y<0)y=-y; intz=x+y; returnz;}1.5.1函数的定义和调用由于return的后面可以是常量、变量或任何合法的表达式,因此函数sum也可简化为:intsum(intx,inty){ if(x<0)x=-x; if(y<0)y=-y; return(x+y); //括号可以省略,即returnx+y;}若函数类型是void,函数体就不需要return语句或return的后面只有一个分号。需要注意的是,因为return是返回语句,它将退出函数体,所以一旦执行return语句,在函数体内return后面的语句便不再被执行。例如:voidf1(inta){ if(a>10) return; //…}1.5.1函数的定义和调用 2.函数的调用调用函数时,先写函数名,然后紧跟括号,括号里是实际调用该函数时所给定的参数,称为实际参数,简称实参,并与形参相对应。函数调用的一般形式为:<函数名>(<实际参数表>);【例Ex_Call】函数的调用#include<iostream.h>voidprintline(charch,intn){ for(inti=0;i<n;i++) cout<<ch; cout<<endl; }intmain(){ introw=5; for(inti=0;i<row;i++) printline('*',i+1); //A语句 return0; }1.5.1函数的定义和调用程序运行结果如下:***************1.5.1函数的定义和调用 3.函数的声明声明一个函数按下列格式进行:<函数类型><函数名>(<形式参数表>);可见,函数声明的格式是在函数头的后面加上分号“;”。但要注意,函数声明的内容应和函数的定义相同。例如,对于前面遇到的sum函数和printline函数可有如下声明:intsum(intx,inty);voidprintline(charch,intn);由于函数的声明仅是对函数的原型进行说明,即函数原型声明,其声明的形参变量名在声明语句中并没有任何语句操作它,因此这里的形参名和函数定义时的形参名可以不同,且函数声明时的形参名还可以省略,但函数名、函数类型、形参类型及个数应与定义时相同。例如,下面几种形式都是对sum函数原型的合法声明:intsum(inta,intb); //允许原型声明时的形参名与定义时不同intsum(int,int); //省略全部形参名intsum(inta,int); //省略部分形参名intsum(int,intb); //省略部分形参名1.5.2函数的参数传递C++中函数的参数传递有两种方式,一种是按值传递,另一种是地址传递或引用传递。这里先来说明按值传递的参数传递方法。【例Ex_SwapValue】交换函数两个参数的值#include<iostream.h>voidswap(floatx,floaty){ floattemp; temp=x;x=y;y=temp; cout<<"x="<<x<<",y="<<y<<"\n";}intmain(){ floata=20,b=40; cout<<"a="<<a<<",b="<<b<<"\n"; swap(a,b); cout<<"a="<<a<<",b="<<b<<"\n"; return0; }1.5.2函数的参数传递程序运行结果如下:a=20,b=40x=40,y=20a=20,b=401.5.3带默认形参值的函数在C++中,允许在函数的声明或定义时给一个或多个参数指定默认值。这样在调用时,可以不给出参数,而按指定的默认值进行工作。例如:voiddelay(intloops=1000); //函数声明//…voiddelay(intloops) //函数定义{ if(loops==0)return; for(inti=0;i<loops;i++); //空循环,起延时作用}这样,当调用delay(); //和delay(1000)等效时,程序都会自动将loops当成1000的值来进行处理。当然,也可重新指定相应参数值,例如:delay(2000);1.5.3带默认形参值的函数在设置函数的默认参数值时要注意:(1)当函数既有原型声明又有定义时,默认参数只能在原型声明中指定,而不能在函数定义中指定。例如:voiddelay(intloops); //函数原型声明//…voiddelay(intloops=1000) //错误:此时不能在函数定义中指定默认参数{ //… }(2)当一个函数中需要有多个默认参数时,则形参分布中,默认参数应严格从右到左逐次定义和指定,中间不能跳开。例如:voiddisplay(inta,intb,intc=3); //合法voiddisplay(inta,intb=2,intc=3); //合法voiddisplay(inta=1,intb=2,intc=3); //合法:可以对所有的参数设置默认值voiddisplay(inta,intb=2,intc); //错误:默认参数应从最右边开始voiddisplay(inta=1,intb,intc=3); //错误:多个默认参数中间不能有非默认参数1.5.3带默认形参值的函数(3)当带有默认参数的函数调用时,系统按从左到右的顺序将实参与形参结合,当实参的数目不足时,系统将按同样的顺序用声明或定义中的默认值来补齐所缺少的参数。【例Ex_Default】在函数定义中设置多个默认参数#include<iostream.h>voiddisplay(inta,intb=2,intc=3) //在函数定义中设置默认参数{ cout<<"a="<<a<<",b="<<b<<",c="<<c<<"\n";}intmain(){ display(1); display(1,5); display(1,7,9); return0; }1.5.3带默认形参值的函数程序运行结果如下:a=1,b=2,c=3a=1,b=5,c=3a=1,b=7,c=91.5.3带默认形参值的函数(4)由于对同一个函数的原型可作多次声明,因此在函数声明中指定多个默认参数时,可用多条函数原型声明语句来指定,但同一个参数的默认值只能指定一次。例如,例Ex_Default可改写为:#include<iostream>usingnamespacestd;//下面两条函数说明语句等效于voiddisplay(inta,intb=2,intc=3);voiddisplay(inta,intb,intc=3); //指定c为默认参数voiddisplay(inta,intb=2,intc); //指定b为默认参数//…1.5.4函数的递归调用例如,用递归函数编程求n的阶乘n!。(n!=n*(n-1)*(n-2)*…*2*1)。它也可用下式表示:1.5.4函数的递归调用由于n!和(n-1)!都是同一个问题的求解,因此可将n!用递归函数longfactor
/
本文档为【VISUALC实用教程第4版郑阿奇电子教案】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索