C++程序设计:第二章 C++基础知识_第1页
C++程序设计:第二章 C++基础知识_第2页
C++程序设计:第二章 C++基础知识_第3页
C++程序设计:第二章 C++基础知识_第4页
C++程序设计:第二章 C++基础知识_第5页
已阅读5页,还剩104页未读 继续免费阅读

下载本文档

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

文档简介

1、第一个C+源程序 #includevoid main() couthello,worldn;包含头文件包含头文件主函数的函数头主函数的函数头函数后跟的一函数后跟的一对对C+输出语句输出语句第二章第二章 C+基础知识基础知识2.1 C+的词法单位的词法单位2.4 运算符、表达式运算符、表达式2.3 常量和变量常量和变量2.2 C+ 中的数据类型中的数据类型2.6 简单输入、输出简单输入、输出2.5 语句语句2.1 C+的词法单位的词法单位211 C+的字符集的字符集 212 关键字关键字 213 标识符标识符(ID,identifier) 214 标点符号标点符号 26个个小写字母小写字母 ab

2、cdefghijklmnopqrstuvwxyz 26个个大写字母大写字母 ABCDEFGHIJKLMNOPQRSTUVWXYZ 10个个阿拉伯数字阿拉伯数字 0 1 2 3 4 5 6 7 8 9 其他符号其他符号 + - * / = , . _ : ; ? | ! # % & () 空格空格 C+语言中,构造基本词法单位的特定字符:语言中,构造基本词法单位的特定字符:关键字关键字标识符标识符常量常量运算符运算符标点符号标点符号2.1.1 C+的的字符集字符集2.1.1 C+的字符集的字符集#include int max(int i, int j)if (i=j)return i;

3、else return j;int main (void)coutij;cout“最大数是最大数是:”max(i, j)n;return 0;关键字关键字标识符标识符常量常量运算符运算符标点符号标点符号关键字(keyword)又称保留字。是由系统定义的具有特定含义的英文单词。标准C+(ISO14882)定义了74个关键字,具体的C+编译器还会做一些增删。2.1.2 C+的的关键字关键字关键字不能关键字不能另做他用!另做他用!表表2.1 C+的常用关键字及其分类的常用关键字及其分类 2.1.2 C+的关键字的关键字数据类型说明数据类型说明符与修饰符符与修饰符 bool char wchar_t

4、class const double enum float int long short signed struct union unsigned void volatile存储类型说明存储类型说明符符auto extern inline register static访问说明符访问说明符friend private protected public语句语句break case catch continue default do else for goto if return switch throw try while运算符及运算符及逻辑值逻辑值delete false new sizeof

5、 true其他说明符其他说明符asm explicit namespace opetator template this typedef typename using virtual关键字关键字全部小写!全部小写!标识符(Identifier,ID)是程序员定义的“单词”,用来给变量、常量、数据类型、函数等命名。2.1 C+的词法单位的词法单位2.1.3 C+的的标识符标识符合法标识符合法标识符由字母或下划线开始的由字母或下划线开始的由字母、数字、下划线组成的字符序列由字母、数字、下划线组成的字符序列Visual C+Visual C+中有效长度为中有效长度为1 1247247个字符个字符区分

6、大小写!区分大小写!不能和关键字重名!不能和关键字重名!(1)使用)使用英文单词或拼音序列英文单词或拼音序列作标识符,以作标识符,以提高可读性提高可读性;(2)可大、小写混用,以)可大、小写混用,以提高可读性提高可读性;(3)不要用下划线或双下划线打头,以免)不要用下划线或双下划线打头,以免与系统定义的关键字冲突。与系统定义的关键字冲突。2.1 C+的词法单位的词法单位建议:建议:2.1.3 C+的标识符的标识符例例: 判断下面哪些是合法的标识符:判断下面哪些是合法的标识符: MyFileSalary 94amountvoid94SalarySalary94$amountf3.5Num_of_

7、Student2.1 C+的词法单位的词法单位2.1.3 C+的标识符的标识符标点符号包括标点符号包括#、( )、 ,、 :、 ;、 、 等。等。 标点符号的作用标点符号的作用:有一定的语法意义。如字符和字符串有一定的语法意义。如字符和字符串常量分别用常量分别用 和和 “ ”引起来。引起来。对语法符号起分隔作用。如对语法符号起分隔作用。如 ;等等2.1.4 C+的的标点符号标点符号2.1 C+的词法单位的词法单位2.1.4 分隔符分隔符 编写编写C+C+程序时,每个词法单位必须使用程序时,每个词法单位必须使用分隔符分隔符将将它们分隔开。可用作它们分隔开。可用作C+C+分隔符的有:分隔符的有:运

8、算符运算符、标标点符号点符号、空格符空格符、TabTab符符、回车符回车符。2.1 C+的词法单位的词法单位#include void main(void) float a ,b, c, max; cina, b, c; if(ab)max=a; else max=b; if(cmax)max=c; coutabc;从键盘上输入:2 3 8 计算机处理的对象是计算机处理的对象是数据数据,而,而数据数据是以某种是以某种特定特定的形式的形式转换成转换成二进制二进制码存放在内存中的。码存放在内存中的。 例如,整数在内存中采用例如,整数在内存中采用原码原码或或补码补码表示、实数表示、实数采用采用浮点数

9、浮点数表示方式。对于整数表示方式。对于整数1010和实数和实数10.010.0在在内存中的数据是不一样的。即使同样表示整数,内存中的数据是不一样的。即使同样表示整数,对于(对于(FFFFFFFFFFFFFFFF)1616若表示为有符号的整数则为若表示为有符号的整数则为- -1 1,若表示为无符号的整数则为,若表示为无符号的整数则为2 23232-1-1。2.2 C+的数据类型的数据类型2.2 C+的数据类型的数据类型图图1 C+的的数据类型数据类型单精度型单精度型 float双精度型双精度型 doubleC+的数的数据类型据类型基本基本数据类型数据类型非基本非基本数据类型数据类型数组数组 ty

10、pe 指针指针 type *引用引用 type&类类 class结构结构 struct联合联合 union枚举枚举 enum整整 型型 int字符型字符型 char布尔型布尔型 bool无值型无值型 void实实 型型字符型数据本质上也是整数,即字符型数据本质上也是整数,即ASCIIASCII码。记码。记住住AA、aa的的ASCIIASCII码分别为码分别为6565和和9797。整型数据的范围不是很大,要防止溢出!整型数据的范围不是很大,要防止溢出! (下一页下一页) )布尔型即逻辑型,布尔型即逻辑型,falsefalse对应于对应于0 0,truetrue对应于对应于1 1或非或非0

11、 0。函数无返回值时,要用无值型进行说明函数无返回值时,要用无值型进行说明 (下一页下一页) )若干注意点:若干注意点:2.2 C+的数据类型的数据类型类类 型型名名 称称占用字节数占用字节数取取 值值 范范 围围bool布尔型布尔型 1true, false(signed) char有符号字符型有符号字符型1-128 127unsiged char无符号字符型无符号字符型10 255(signed) short (int)有符号短整型有符号短整型2-32768 32767unsigned short (int)无符号短整型无符号短整型20 65535(signed) int (signed)

12、有符号整型有符号整型4-231 (231-1)unsigned (int)无符号整型无符号整型40 (232-1)(signed) long (int)有符号长整型有符号长整型4-231 (231-1)unsigned long (int)无符号长整型无符号长整型40 (232-1)float实型实型4-1038 1038double双精度型双精度型8-10308 10308long double长双精度型长双精度型8-10308 10308void无值型无值型0无值无值表2.2 Visual C+中所有基本数据类型所有基本数据类型2.3.1 变 量2.3.2 文字常量2.3.3 常 变 量在

13、程序中,常量和变量是用来表示数据的;在程序中,常量和变量是用来表示数据的;常量又分为常量又分为文字常量文字常量(literal constant)、 常变量常变量(signed constant);2.3 变量和常量变量和常量a=50b=2sum=72a=16b=23sum=592.3 变量和常量变量和常量2.3.1 变量sum=a+b+20a、b、sum都是变量都是变量(逻辑意义上)(逻辑意义上)物理意义上呢?物理意义上呢??2.3 变量和常量变量和常量2.3.1 变量变量?2.3 变量和常量变量和常量2.3.1 变量变量a ab bsumsum变量和内存单元地址之间存在一个映射关系!变量和

14、内存单元地址之间存在一个映射关系!?0000000000110010?0000000001001000?00000000000000102.3 变量和常量变量和常量2.3.1 变量变量a ab bsumsumsum=a+b+20a=50b=2sum=72?0000000000010000?0000000000111011?00000000000101112.3 变量和常量变量和常量2.3.1 变量变量a ab bsumsumsum=a+b+20a=16b=23sum=59?2.3 变量和常量变量和常量2.3.1 变量变量使用前分配?使用前分配?用到的时候分配?用到的时候分配? 何时分配?何时分

15、配?1 1 变量说明变量说明 在在C+C+中,变量说明的一般格式为:中,变量说明的一般格式为:存储类型存储类型数据类型数据类型 变量名变量名1 1, ,变量名变量名2,2, ,变量名变量名n n; int i, j, k; /说明三个整型变量说明三个整型变量i, j, kfloat x, y, z; /说明三个实型变量说明三个实型变量x, y, zchar c1, c2; /说明两个字符型变量说明两个字符型变量c1, c2double dx; /说明一个双精度型变量说明一个双精度型变量dx unsigned short a,b,sum; /说明三个无符号整型变量说明三个无符号整型变量a, b,

16、 sum 2.3 变量和常量变量和常量2.3.1 变量变量“”括起来的部分是可选的;括起来的部分是可选的;省略号省略号“”表示可以多次重复。表示可以多次重复。任何变量都必须先说明后使用,好处是:任何变量都必须先说明后使用,好处是:(1 1)便于编译程序为变量分配空间,)便于编译程序为变量分配空间,(2 2)便于编译时进行语法检查;)便于编译时进行语法检查;变量有类型之分,如整形变量、字符变量等;变量有类型之分,如整形变量、字符变量等;变量必须用标识符进行标识,称为变量名;变量必须用标识符进行标识,称为变量名;变量使用第一步变量使用第一步: :给变量赋初始值给变量赋初始值( (变量初始化变量初始

17、化) );若干注意点:若干注意点:建议:建议:2.3 变量和常量变量和常量2.3.1 变量变量1 1 变量说明变量说明2 2 变量初始化变量初始化变量说明时直接赋初值变量说明时直接赋初值int a=3, b=4, c=5;float x=3.0; 2.3 变量和常量变量和常量2.3.1 变量变量变量初始化可以避免引用到随机变量。变量初始化可以避免引用到随机变量。3 3 用赋值语句赋初值。用赋值语句赋初值。例如:例如:float x, e;x=3.5; e=2.71828; 引用是一种非常特殊的数据类型,它不是定义一个新的变引用是一种非常特殊的数据类型,它不是定义一个新的变量,而是量,而是给一个

18、已经定义的变量重新起一个别名给一个已经定义的变量重新起一个别名,也就是,也就是C+C+系统不为引用类型变量分配内存空间系统不为引用类型变量分配内存空间。引用定义的格式为引用定义的格式为:类型类型 & & 引用变量名引用变量名= =已定义过的变量名;已定义过的变量名;1 1、引用类型变量的、引用类型变量的说明说明及使用及使用2.3.2 变量与引用变量与引用2.3 变量和常量变量和常量例如:例如:double number ;double & newnum=number ;numbernumber称为引用称为引用newnumnewnum的的关关联变量联变量。如在程序中修改了

19、。如在程序中修改了newnumnewnum也就是修改了也就是修改了numbernumber,两位一体。两位一体。引用的说明引用的说明符。符。2.3.2 变量与引用变量与引用2.3 变量和常量变量和常量#include void main()int i=10;int &refi=i;refi=20;couti=i=1N=1 对于常量对于常量a a,是字符串常量还是字符型常量?,是字符串常量还是字符型常量?单引号作为字符串中一个字符时,可直接按书写形式写出,也可单引号作为字符串中一个字符时,可直接按书写形式写出,也可用转义序列表示;双引号作为字符串中一个字符时,只能用转义用转义序列表示;双

20、引号作为字符串中一个字符时,只能用转义序列表示。序列表示。 a0注意:注意: e和和 E是不同的字符常量,它们代表不同是不同的字符常量,它们代表不同的的ASCIIASCII码值。码值。 4和整型数和整型数4 4是不同的值,是不同的值, 4的的ASCIIASCII码值码值为为5252。 0和和 0是两个不同的字符。是两个不同的字符。0的的ASCIIASCII码值码值为为4848。而。而0的的ASCIIASCII码值为码值为0 0。2.3 变量和常量变量和常量2.3.3 常变量#include 2.3 变量和常量变量和常量2.3.3 常变量常变量用常量说明符用常量说明符constconst给文字常

21、量给文字常量起个名字(标识符),这个标起个名字(标识符),这个标识符就称为:识符就称为:标识符常量标识符常量 也称为:也称为:常变量常变量const float PI=3.1415926const float PI=3.1415926const float PI=3.1416const float PI=3.1416常变量必须先说明后使用;常变量必须先说明后使用;常变量初始化之后,不允许再被赋值;常变量初始化之后,不允许再被赋值;常变量必须也只能在说明时进行初始化;常变量必须也只能在说明时进行初始化;若干注意点:若干注意点:2.3 变量和常量变量和常量2.3.3 常变量常变量常变量存储在数据区

22、,并且可以按地址访问。常变量存储在数据区,并且可以按地址访问。编译时系统对常变量进行类型检查;编译时系统对常变量进行类型检查;2.4 运算符和表达式运算符和表达式本节主要内容:本节主要内容:2.4.1 运算符、优先级、结合性运算符、优先级、结合性2.4.3 语句语句2.4.2 基本运算符及其表达式基本运算符及其表达式2.4.4 算术类型转换和赋值类型转换算术类型转换和赋值类型转换在C+中对常量或变量进行运算或处理的符号称为运算符,参与运算的对象称为操作数。2.4 运算符和表达式运算符和表达式2.4.1 运算符、优先级、结合性输入:输入: 2+22+2* *3 3 与数学中的先乘除、后加减一样,

23、众多的C+运算符也存在优先级问题。当表达式中需要有多种运算符时,必须清楚谁先谁后的运算次序。1、优先级2.4 运算符和表达式运算符和表达式2.4.1 运算符、优先级、结合性运算符、优先级、结合性表表2.3 C+的运算符及其优先级和结合性的运算符及其优先级和结合性左右,6右左16左右*,/5结合性用法功能运算符优先级谁谁更更优优先先?什么含义?什么含义? 2. 左、右结合问题 计算机在执行诸如5+65+6这样的操作运算时,它必须包括这样的过程:(1)先取一个数,(2)再取另一个数,(3)然后将两数相加。 现在的问题是,它先取哪个数呢?这就是结合性问题。 在C+中,执行诸如5+65+6这样的操作,

24、是按从左到右右的顺序取数,即先取5 5,再取6 6,然后相加。从左到右右的顺序在本书中称为右右结合 那么,计算机怎么知道这个顺序呢?这就是加号+ +运算符这个指令在起作用,它指示计算机按照它规定的顺序操作。 所谓结合性,实际上就是运算符的结合性。显然+ +属于右右结合运算符。 有没有从右到左左的运算符呢?最常见的就是赋值运算符= =。例如中的= =,它指令操作系统,将它右边运算所得结果送入(或称复制等)左边的变量a a的存储单元。由于这个顺序是从右到左左,因此本书中称为左左结合。a=5+6 又因为要把右边的结果送到左边,这就要求,在送到左边之前右边的最终结果必须是一个值。因此,= =等号的优先

25、级必然低于加号+ +。 当表达式中存在两个或两个以上优先级相同的运算符时,谁先谁后呢?对于右结合,其顺序是从左到右。例如 3/6 6结果是0 0。为什么?首先,C+规定,同类型的数据运算,所得结果的类型不变。所以,两个整数运算的结果仍为整数。2.4 运算符和表达式运算符和表达式2.4.1 运算符、优先级、结合性运算符、优先级、结合性运算符运算符单目单目( (一元一元) )运算符运算符双目双目( (二元二元) )运算符运算符三目三目( (三元三元) )运算符运算符-ab!ab-ab*ab?c:ab/c+3. 运算符问题2.4 运算符和表达式运算符和表达式2.4.2 基本运算符及其表达式算术运算符

26、算术运算符赋值运算符赋值运算符自增自增( (减减) )运算符运算符逻辑运算符逻辑运算符位运算符位运算符逗号运算符逗号运算符基本运算符sizeof()()运算符运算符 +(加)、-(减)、*(乘)、/(除)、%(求余) 求余运算的两求余运算的两个操作数必须都个操作数必须都是整数!是整数! 程序员需自己检程序员需自己检查算术运算数据溢出查算术运算数据溢出问题问题2.4 运算符和表达式运算符和表达式算术运算符算术运算符赋值运算符赋值运算符基本运算符 =左值左值右值右值可以访问可以访问可以修改可以修改一般为变量名一般为变量名可以为常量可以为常量可以为变量可以为变量可以为表达式可以为表达式定能取确定值定

27、能取确定值2.4.2 基本运算符及其表达式基本运算符及其表达式3.1415926=pi3.1415926=pix+y=zx+y=zconst int N=30; N=40;const int N=30; N=40;判判断断不是等号,具有方向性不是等号,具有方向性! !例例a=a+1a=a+12.4 运算符和表达式运算符和表达式算术运算符算术运算符赋值运算符赋值运算符基本运算符 =左值左值右值右值2.4.2 基本运算符及其表达式基本运算符及其表达式赋值表达式本身也有值赋值表达式本身也有值a=1a=1c=(a=1)+(b=2)c=(a=1)+(b=2)例例b=2b=2c= #+#c= #+#复合赋

28、值运算符复合赋值运算符例例a+=3a+=3a a* *=b-c=b-ca-=(b+6)a-=(b+6)a=a+3a=a+3a=aa=a* *(b-c)(b-c)a=a-(b+6)a=a-(b+6)2.4 运算符和表达式运算符和表达式算术运算符算术运算符赋值运算符赋值运算符自增自增( (减减) )运算符运算符基本运算符 自增自增 自减自减 前增前增后增后增前减前减后减后减例例a=a+1a=a+1a+a+a+a? 2.4.2 基本运算符及其表达式基本运算符及其表达式 +作为C+的一个自增型单目运算符。所谓自增,是指每执行一次运算时,+运算符都使它惟一的运算对象自动增加1 1。相应地,- - -则是

29、每次运算都自动减少1 1的自减运算符。两者都是从右到左左的左左结合单目运算符。例如,执行自增、自减运算符 由此可知:(一)、+运算符的运算对象必须是变量,不能是常数。例如,以下运算是错误的。 +x;时,可把运算过程分成三个步骤:1.+运算符先访问它右边右边变量x x中,并取x x的值,2.按+运算规律,将变量x x中的值加1 1,即 x x+1 13.再将x x+1 1的结果赋给变量x x,即 x=xx=x+1 1 使变量x x的值被刷新。 +5;因为按第三步骤,要将运算结果再存入运算对象,而5 5是个确定的常数,当然不具有能存放数据的功能, (二)、在执行这个表达式时,变量x x中应有初始值

30、。+运算符是先将这个初始值与1 1相加,再将结果存入运算对象。 (三)、+运算符也允许运算对象出现在它的左边,例如 int s=3,k=4; +s; k+;结果是s s的值为4 4,k k的值为5 5。 int s=3,k; k=s+;(四)例如 : int s=3,k; k=+s; 那么k=sk=s+如何执行?由于+的运算顺序是从右到左左,但它的右边没有变量可以访问,违反了它的结合性,故无法运算。两个表达式中s s和k k的值各是多少呢? 此时,表达式就执行下一级运算,即,= =运算。由于= =也是左左结合,因此,运算时先访问s s,并取其s s的值复制到k k。因为s s的值未变,所以k

31、k的值为3 3。 最后当要结束该表达式时,+运算符则按右右结合结合规则:1、访问变量s s,2、将s s的值加1 1,3、再将结果赋给s s,使s s变为4 4。? 类似地,-运算符具有同样的性质。 由此可知,当运算对象出现在+的右边时,它是按左结合规则运算,并且其优先级符合表中的次序,比较高;当运算对象出现在+的左边时,它却按右结合规则运算,优先级则比= =还低。应用时请务必注意这种特点。2.4 运算符和表达式运算符和表达式算术运算符算术运算符赋值运算符赋值运算符自增自增( (减减) )运算符运算符逻辑运算符逻辑运算符基本运算符 关系运算符关系运算符逻辑运算符逻辑运算符2.4.2 基本运算符

32、及其表达式基本运算符及其表达式 = = = = !=!=!( (非非) )|&( (与与) )( (或或) )表达式的计算结果为真或假2.4 运算符和表达式运算符和表达式算术运算符算术运算符赋值运算符赋值运算符自增自增( (减减) )运算符运算符逻辑运算符逻辑运算符基本运算符 2.4.2 基本运算符及其表达式基本运算符及其表达式整数也可参与逻辑整数也可参与逻辑运算。运算。逻辑运算的结逻辑运算的结果可以作为一果可以作为一个整数参与其个整数参与其他运算。他运算。 逻辑型整型整型真假真假非00102.4 运算符和表达式运算符和表达式算术运算符算术运算符赋值运算符赋值运算符自增自增( (减减)

33、 )运算符运算符逻辑运算符逻辑运算符基本运算符 2.4.2 基本运算符及其表达式基本运算符及其表达式优先级:优先级:、 =、!=a=b=cbd;按按优先级优先级与与结合性结合性,其,其求值顺序求值顺序等于:等于:a=(b=(cb)d);右结合 abc abc表示什么?表示什么??2.4 运算符和表达式运算符和表达式算术运算符算术运算符赋值运算符赋值运算符自增自增( (减减) )运算符运算符逻辑运算符逻辑运算符基本运算符 2.4.2 基本运算符及其表达式基本运算符及其表达式!算术运算&、|21&021&0/逻辑与逻辑与, 21, 21与与0, 0, 结果为假结果为假: 0

34、: 021|021|0/逻辑或逻辑或, 21, 21或或0, 0, 结果为真结果为真: 1: 1!21!21/逻辑非逻辑非, 21, 21的非的非, , 结果为假结果为假: 0: 0result=(21|0 )+(21&0 )+(!21)result=21|0+21&0+!21关系运算result=21|(0+21)&(0+(!21)2.4 运算符和表达式运算符和表达式算术运算符算术运算符赋值运算符赋值运算符自增自增( (减减) )运算符运算符逻辑运算符逻辑运算符位运算符位运算符基本运算符 2.4.2 基本运算符及其表达式基本运算符及其表达式(1)按位取反运算符)按位取

35、反运算符“” (2)左移运算符)左移运算符“” (4)按位与运算符)按位与运算符“&” (5)按位或运算符)按位或运算符“|” (6)按位异或运算符)按位异或运算符“” c+c+语言提供字位运算,它对操语言提供字位运算,它对操作数的各个位进行操作。作数的各个位进行操作。(1 1)按位取反运算符)按位取反运算符“ ”例如,整数例如,整数a a的值为的值为1001101110011011, 则则 的值为的值为0110010001100100。(2 2)左移运算符)左移运算符“”运算一般运算一般格式为:格式为:anan2.4 运算符和表达式运算符和表达式2.4.2 基本运算符及其表达式基本运

36、算符及其表达式16216” 一般格式:一般格式:anan以上三种运算不影响数据本身的值,而是只产以上三种运算不影响数据本身的值,而是只产生一个生一个中间量中间量,这个中间量被引用后即不再存,这个中间量被引用后即不再存在。在。 -322-3221 1 1 0 0 0 0 01 1 1 0 0 0 0 011a 01001101b 00001111 &00001101|0100111101000010该运算符可用来将整数的某些位置该运算符可用来将整数的某些位置1。上。上例高四位不变,低四位全例高四位不变,低四位全1。该运算符可用来将整数的某些位清该运算符可用来将整数的某些位清0。上。上例低

37、四位不变,高四位全例低四位不变,高四位全0。该运算符可用来将整数的某些位取反,该运算符可用来将整数的某些位取反,或将整型变量的值置或将整型变量的值置0(将整型变量与自(将整型变量与自身按位异或)。上例低四位取反,高四身按位异或)。上例低四位取反,高四位不变。位不变。(4)按位与)按位与 “&”、按位或、按位或 “|”、按位异或、按位异或 “”、2.4 运算符和表达式运算符和表达式算术运算符算术运算符赋值运算符赋值运算符自增自增( (减减) )运算符运算符逻辑运算符逻辑运算符位运算符位运算符逗号运算符逗号运算符基本运算符 2.4.2 基本运算符及其表达式基本运算符及其表达式 逗号有些情况

38、下作为分隔符,逗号有些情况下作为分隔符,但是也是一个运算符!但是也是一个运算符!一般格式为:一般格式为:表达式表达式1,表达式,表达式2,表达式,表达式nint a=1,b=2,c=3;int a=1,b=2,c=3;从左到右依次求出;从左到右依次求出;result=(a=a+1,b=bresult=(a=a+1,b=b* *c, c=a+b+c);c, c=a+b+c);最后一个表达式的值作为整个最后一个表达式的值作为整个表达式的值;表达式的值;2.4 运算符和表达式运算符和表达式算术运算符算术运算符赋值运算符赋值运算符自增自增( (减减) )运算符运算符逻辑运算符逻辑运算符位运算符位运算符

39、逗号运算符逗号运算符基本运算符sizeof()()运算符运算符 2.4.2 基本运算符及其表达式基本运算符及其表达式sizeof(数据类型数据类型)sizeof(变量名变量名)同一数据类型在不同计算同一数据类型在不同计算机上可能占用不同的字节机上可能占用不同的字节数;数;用用sizeof( )sizeof( )可以得知实际占可以得知实际占用的字节数;用的字节数;为了实现程序的可移植性为了实现程序的可移植性和通用性。和通用性。用于计算字节数用于计算字节数2.4 运算符和表达式运算符和表达式2.4.4 算术类型转换和赋值类型转换5/4 5/4 /结果为结果为1 1,整数,整数5/4.0 5/4.0

40、 /结果为结果为1.251.25,实数,实数解释:解释:对于运算符对于运算符“/”/”,当两,当两个操作数均为整数时,个操作数均为整数时,所执行的运算为整除,所执行的运算为整除,结果为整数。整除运算结果为整数。整除运算结果结果舍去小数舍去小数取整。取整。解释:解释:只要有一个操作数是只要有一个操作数是实数,则两个操作数实数,则两个操作数均转换为均转换为doubledouble型,型,“/”/”成为普通的除,成为普通的除,结果是实数。结果是实数。2.4 运算符和表达式运算符和表达式2.4.4 算术类型转换和赋值类型转换算术类型转换和赋值类型转换charshortintlongunsigned c

41、harunsigned shortunsigned intunsigned longfloatdoublelong double1 混合运算的类型转换规则:混合运算的类型转换规则: 占有内存空间小的数据同占用内存空间大的数据进行运算时,将占用内存小的数据转换为占用内存空间大的数据类型。a+1;2.4 运算符和表达式运算符和表达式2.4.4 算术类型转换和赋值类型转换算术类型转换和赋值类型转换2 赋值的类型转换规则:赋值的类型转换规则:整数赋给实型变量时整数赋给实型变量时, ,将整数转换成实数再将整数转换成实数再赋值。赋值。实型数赋给整型变量时实型数赋给整型变量时, ,仅取整数部分赋值。仅取整数

42、部分赋值。字符数据赋给整型变字符数据赋给整型变量时量时, , 将字符转换为整将字符转换为整型型. .当赋值运算符两侧的类型不一致,但都是数值型或字符型时,在赋值时系统将自动进行类型转换,原则是将赋值运算符右边的数据类型转换成左边的类型。int a=3.1;float b=3;char c=a;int s1=c;2.4 运算符和表达式运算符和表达式2.4.4 算术类型转换和赋值类型转换算术类型转换和赋值类型转换3 强制类型转换强制类型转换类型类型转换转换自动自动强制强制一般格式为:一般格式为:(type) 表达式表达式float x;float x;x=7.0/5;x=7.0/5;x=7/5.0

43、;x=7/5.0;x=7.0/5.0 x=7.0/5.0int a=7, b=5; int a=7, b=5; float x;float x;int a=7, b=5;int a=7, b=5;float x;float x;x=(float)a/b;x=(float)a/b;x=a/(float)b;x=a/(float)b;x=(float)a/(float)b;x=(float)a/(float)b;2.4 运算符和表达式运算符和表达式2.4.4 算术类型转换和赋值类型转换算术类型转换和赋值类型转换强制类型转换不改变表达式本身的值的类型;强制类型转换不改变表达式本身的值的类型;强制类型

44、的优先级较高,为第强制类型的优先级较高,为第3 3级,因而运算级,因而运算中通常只对紧随其后的表达式起作用。中通常只对紧随其后的表达式起作用。强制类型转换产生一个临时变量,用于暂存转强制类型转换产生一个临时变量,用于暂存转换后的值,引用后立即自动释放;换后的值,引用后立即自动释放;若干注意点:若干注意点:2.4 运算符和表达式运算符和表达式2.4.4 求值次序与副作用(及求值优化)已知已知: int a=10, b=20, c=30;double x=1.8, y=2.4; ay|ab-!c按按优先级优先级与与结合性结合性,其,其求值顺序求值顺序等同于:等同于:(ay)|(a(b-(!c)t1

45、=1 t2=0 -&t3=0t5=bt6=1| 得整个表达式的值为:得整个表达式的值为:t4=01 1在求逻辑表达式值的过程中,一旦表达式在求逻辑表达式值的过程中,一旦表达式的值能够确定,就不再逐步进行下面的运的值能够确定,就不再逐步进行下面的运算。称为算。称为“求值优化求值优化”。为防止这种情况,应尽可能避免在逻辑表达式中出现为防止这种情况,应尽可能避免在逻辑表达式中出现赋值或自增、自减等运算。赋值或自增、自减等运算。逻辑运算的优化虽然节省了运行时间,但逻辑运算的优化虽然节省了运行时间,但有时也会造成意想不到的问题。有时也会造成意想不到的问题。2.4 运算符和表达式运算符和表达式2.

46、4.4 求值次序与副作用及求值优化求值次序与副作用及求值优化int a=1, b=1, cint a=1, b=1, c1; 1; d=-a &+b| c+;d=-a &+b| c+;求:求:a, b, c, da, b, c, d的值的值例例如何解决?如何解决?若干概念:若干概念:2.4 运算符和表达式运算符和表达式2.4.4 求值次序与副作用及求值优化求值次序与副作用及求值优化2.5 语句表达式语句表达式语句空语句空语句复合语句复合语句流程控制语句流程控制语句a=1,b=2,c=3a=1,b=2,c=3a=a+1a=a+1;a=1,b=2,c=3a=1,b=2,c=3;a=

47、a+1a=a+1;a=1,b=2,c=3a=1,b=2,c=3;a=a+1a=a+1; a=1,b=2,c=3 a=1,b=2,c=3; ; a=a+1 a=a+1; 详见下章详见下章声明语句声明语句int a,b,c;int a,b,c;float m;float m;2.9 简单的输入简单的输入/输出输出本节主要内容:本节主要内容:2.9.1 C+输入输入/输出简介输出简介2.9.2 数据的输入数据的输入/输出输出2.9.3 输入输入/输出控制输出控制 程序在执行期间,接受外部信息的操作称为程序的输入,向外部发送信息的操作则称为程序的输出。与其它高级语言不同,C+没有专门的输入/输出语句,

48、而是通过输入/输出流来实现。 其中#include#include是包含文件的标志,而iostream.hiostream.h表示被包含的文件。而.h.h表示文件属性为头文件 headhead。使用输入/输出流时,必须在程序的开头增加一行 #include#include 1、 输入流 cincin 用于接受外部信息,其一般格式为 cincin变量名1 1变量名2 2.变量名n n; 其中是提取运算符,程序执行到输入指令时将暂停,等待你从键盘上键入相应的数据。然后由将它提取到变量单元。一个后面只能跟一个变量,但可重复使用。例如,设有以下语句2.9.1C+输入输入/输出简介输出简介#includ

49、eusing namespace std; 程序处于暂停状态,等待你从键盘上输入相应的数据。假设敲入如下数据后,再敲一个回车键 35 7735 77 那么,两个数据就被依次提取到对应的单元,即 . int i,j; float x,y; cinij; cinxy; . 此时遇到提取符, 执行前,系统首先进行编译,并分配4个单元,即ijxy 编译通过后,即可执行,首先执行3577 再执行下一个语句, 又处于暂停状态。假设敲入如下数据后,再敲一个回车键 3.14 0.23.14 0.2 则: . int i,j; float x,y; cinij; cinxy; .ijxy3577 再执行下一个语

50、句,3.140.2 虽然输入流比较复杂,但只要清楚上述操作过程,其它问题即可迎刃而解2、输出流 coutcout 输出流的作用是将程序中的信息向外部发送。外部的内容很广泛,象多媒体等就是内容非常丰富的外部。在此,我们先从基础开始,将外部看作是显示器。其一般格式为 coutcout表达式1 1表达式2 2.表达式n n;其中ij; cinxy; cout“输出变量的值输出变量的值”n; cout“i=”i“j=”jn; cout“x=”x“y=”yij; cinxy; cout“输出变量的值输出变量的值”n; cout“i=”i“j=”jn; cout“x=”x“y=”yij; cinxy; c

51、out“输出变量的值输出变量的值”n; cout“i=”i“j=”jn; cout“x=”x“y=”yc1; /Acinc2c3;1、字符的输入、字符的输入程序执行到程序执行到A A行行时,等待用户时,等待用户输入数据。输入数据。cin自动跳过输入的空白字符自动跳过输入的空白字符(空格空格/制表制表/回车回车/等等)A b c Abc Abc Ab c c1=Ac2=bc3=c怎么才能输怎么才能输入空格?入空格?(2)cin.get() char c1, c2, c3;cin.get (c1); /Bcin.get (c2);cin.get (c3);A b c Abc Abc Ab c c1

52、=A c2= c3=bc1=A c2=b c3=cc1=A c2=b c3= c1=A c2=b c3=回车键回车键cin.get()把从键盘把从键盘上输入的所有字符,上输入的所有字符,包括空格和回车,包括空格和回车,都作为输入字符赋都作为输入字符赋给字符变量给字符变量 2.9.2 数据的输入数据的输入/输出输出c1=A; c2=b; c3=c;/输出时字符之间是无间隔的,如果想让字符间输出时字符之间是无间隔的,如果想让字符间有间隔,必须输出间隔符有间隔,必须输出间隔符 要求屏幕上输出:要求屏幕上输出:A Ab bc cOkOkcoutc1 t c2n ;coutc3endl ;coutOke

53、ndl ;怎么才能输怎么才能输出空格?出空格?2.9.2 数据的输入数据的输入/输出输出2、字符的输出、字符的输出字符串输入:用函数字符串输入:用函数 getline() getline() 以用户按下回车键作为结束,在此之以用户按下回车键作为结束,在此之前的所有输入都放入字符数组中:前的所有输入都放入字符数组中:2.9.2 数据的输入数据的输入/输出输出3、字符串的输入、字符串的输入char city11; /定义数组定义数组, 该数组的元素个数为该数组的元素个数为11cin.getline(city, 10); 已经定义的字已经定义的字符数组名符数组名参数参数n, 实际读入实际读入n-1字

54、符字符Nanjing Southeast Southeast University 2.9.2 数据的输入数据的输入/输出输出4.字符串的输出字符串的输出字符串输出:字符串输出:cout char c1, c2, c3;cout”Input c1, c2, c3:”c1c2c3;cout”c1 is ” c1t”c2 is ” c2t ”c3 is ” c3endl; 输出结果为:输出结果为:Input c1, c2, c3:a b c c1 is a c2 is b c3 is c双引号中的的字符串双引号中的的字符串常量照原样输出常量照原样输出int i, j; float x, y;cou

55、t“Input i, j, x, y:”ij;cinxy;cout“i=”i “j=”jendl;cout“x+y=”x+yendl; 5. 十进制数据的输入、输出十进制数据的输入、输出2.9.2 数据的输入数据的输入/输出输出输入:输入:10 20 4.5 8.6 输出时各数据间是无间隔的。输出时各数据间是无间隔的。则程序输出:则程序输出:i=10j=20 x+y=13.1因此应当有意输出一因此应当有意输出一些间隔符。些间隔符。t如果要求按八进制或十六进制输入输出,在如果要求按八进制或十六进制输入输出,在cincin或或coutcout中中必须指明相应的数据形式,必须指明相应的数据形式,octoct为八进制,为八进制,hexhex为十六进为十六进制,制,decdec为十进制。为十进制。例如:例如:includevoid main( )

温馨提示

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

评论

0/150

提交评论