第二章 C++简单程序设计.ppt
第二章 C+简单程序设计C+语言程序设计本章主要内容vC+语言概述v基本数据类型和表达式v数据的输入与输出v算法的基本控制结构v自定义数据类型语言简洁灵活。运算符和数据结构丰富,具有结构化控制语句,程序执行效率高。与高级语言相比,具有可以直接访问物理地址,能进行位运算的优点。与汇编语言相比,又具有良好的可读性和可移植性。C语言的特点C+语言概述C+语言的产生vC+是从C语言发展演变而来的,首先是一个更好的Cv引入了类的机制,最初的C+被称为“带类的C”v1983年正式取名为C+v从1989年开始C+语言的标准化工作v于1994年制定了ANSIC+标准草案v于1998年11月被国际标准化组织(ISO)批准为国际标准,成为目前的C+C+语言概述C+的特点全面兼容C它保持了C的简洁、高效和接近汇编语言等特点对C的类型系统进行了改革和扩充C+也支持面向过程的程序设计,不是一个纯正的面向对象的语言支持面向对象的方法C+语言概述C+首先保持了语言的简洁、高效和接近汇编语言等优点,同时又给语言的不足和问题作了很多改进。下面列出一些重要改进之处。v增加了一些在新的运算符,使得C+应用起来更加方便。例如::,new,delete,-.等。v改进了类型系统,增加了安全性,C语言种类型转换很不严格。C+规定类型转换多采用强制转换。又规定函数的说明必须用原型。对缺省类型作了些限制。v增加了引用概念,使得引用函数参数带来了很大方便。v允许函数重载,允许设置缺省参数,这些措施提高了编程的灵活性,减少了冗余性。又引进了内联函数的概念,提高了程序的效率。v对变量说明更加灵活了。C语言只允许在函数体或分程序内,显示对变量的说明语句,再是执行语句,两者不可交叉使用。C+打破了这一限制,可以对变量随时进行说明。C与C+的区别图典型的命令行程序的构成C+程序实例例2-1/2_1_1.cpp#includeusingnamespacestd;intmain()coutHello!n;coutWelcometoc+!n;return0;运行结果:Hello!Welcometoc+!C+语言概述/2_1_2.cpp#includeusingstd:cout;usingstd:endl;intmain()intapples,oranges;/Declaretwointegervariablesintfruit;/thenanotheroneapples=5;oranges=6;/setinitialvaluesfruit=apples+oranges;/getthetotalfruitcoutendl;/startoutputonanewlinecout“orangesarenottheonlyfruit;endl“-andwehave”fruit;cout“fruitsinall”;coutendl;return0;/exittheprogramv这里main是主函数名,函数体用一对大括号括住。函数主体的意思。C+程序由函数构成。在C+程序中,必须有且只能有一个名为main()的函数,因为程序总是从main()开始执行的。main()函数之前的void表示main()函数没有返回值。v程序由语句组成,每条语句由分号“;”作为结束符。C+语言概述vcout是一个输出流对象,它是C+系统预定义的对象,其中包含了许多有用的输出功能。输出操作由操作符“”来表达,其功能是将紧随其后的双引号中的字符串输出到标准输出设备(显示器)上。C+语言概述v程序中的includeiostream的作用是在编译之前,将文件iostream中的代码嵌入到程序中该指令所在的地方。作为程序的一部分,iostream文件中声明了程序所需要的输入和输出操作的有关信息。cout和“”操作的有关信息就是在该文件中声明的。由于这类文件常被嵌入在程序的开始处,所以称之为头文件。在C+程序中如果使用了系统中提供的一些功能,就必须嵌入相关的头文件。C+语言概述v当我们编写完程序文本后,要将它存储为后缀为.cpp的文件,此文件称为C+源文件,再经过编译系统的编译、连接后,最后产生出后缀为.exe的可执行文件。通过以上程序可以看出,C+的程序结构由编译预处理、程序主体和注释组成,其特点如下:v每个以符号“”开头的行,称为编译预处理语句。C+语言概述v一个C+程序可以由一个或多个函数组成。任何一个完整的C+程序,都必须包含一个且只能包含一个名为main()的函数,程序总是从main()函数开始执行,而不管main()函数处于程序的什么位置。v函数体应由“”括起来。函数体一般包括变量的定义部分和执行部分。所有的变量要先定义后使用。C+语言概述v注释是程序员为读者写的说明,是提高程序可读性的一种手段。一般可将注释分为两种:序言注释和注解注释。前者用于程序开头,说明程序或文件的名称、用途、编写时间、编写人以及输入、输出等,后者用于程序难懂的地方。vC+的注释为“/”之后的内容,直到换行。注释仅供阅读程序使用,是程序的可选部分。在生成可执行程序之前,C+忽略注释,并把每个注释都视为一个空格。另外,C+还兼容了C语言的注释。C+语言概述v每个语句和数据定义的后面都要有一个分号。这一点初学者尤其要注意。vmain函数名和关键字(如void、int、float等)都是小写字母构成。C+程序中的标识符是大小写“敏感”的,所以,在书写标识符的时候要注意其大小写。C+语言概述C+字符集构成C+语言的基本元素大小写的英文字母:AZ,az数字字符:09特殊字符:空格空格!#%&*_ _(下划线下划线)+=-/;.,()()C+语言概述词法记号关键字关键字C+预先声明的单词预先声明的单词标识符标识符程序员声明的单词,它命名程序正文中的一些实程序员声明的单词,它命名程序正文中的一些实 体函数名、变量名、类名、对象名等体函数名、变量名、类名、对象名等文字文字在程序中直接使用符号表示的数据在程序中直接使用符号表示的数据操作符操作符用于实现各种运算的符号用于实现各种运算的符号+-*/分隔符分隔符 (),:;用于分隔各个词法记号或程序正文用于分隔各个词法记号或程序正文空白符空白符空格、制表符(空格、制表符(TAB键产生的字符)、换行符键产生的字符)、换行符(Enter键所产生的字符)和注释的总称键所产生的字符)和注释的总称C+语言概述标识符的构成规则即命名规则以大写字母、小写字母或下划线(_)开始。可以由以大写字母、小写字母、下划线(_)或数字09组成。大写字母和小写字母代表不同的标识符。不能是C+关键字。标识符的有效长度为1247个字符。超过限度的字符无效。标识符的命名方法:匈牙利命名法;采用表示标识符含义的英文单词或汉语拼音。C+语言概述v例如,Richad、red_line、_Nol都是合法的标识符,而No.1、1st则是不合法的标识符。v在标识符的命名中要特别注意:C+是大小写敏感的,即大写和小写字母被认为是不同的 字 母。例 如,标 识 符 something、Something、SOMETHING、SomeThing都被视为不同的名字。C+语言概述标识符v关键字v也称为保留字。关键字是C+预定义好的标识符,这些标识符对C+编译系统有着特殊的含义。如例1-1中的void,后面将逐步介绍到的数据定义语句int、float、long及double等等,它们都是C+的关键字。vC+中的所有关键字如下表所示。共有48个,其中有5个不适用于VC+(下表中带星号的关键字)。另一方面,在VC+中有19个专用关键字不适用于C+(以双下划线开头)。关键字C+语言概述关键字asm*autobreakcasecatch*charclass*constcontinuedefaultdelete*dodoubleelseenumexternfloatforfriend*gotoifinline*intlongnewoperator private*protected*public*registerreturn shortsignedsizeofstaticstructswitchtemplate*this*throw*trytypedefunionunsigned vitural*voidvolatilewhileC+语言概述文字是在程序中直接使用符号表示的数据,包括数字、字符、字符串和布尔文字。C+语言概述文字操作符是用于实现各种运算的符号,例如、*、等。C+语言概述操作符(运算符)v分隔符用于分隔各个词法记号或程序正文。C+的分隔符如下:(),:;v这些分隔符不表示任何实际的操作,仅用于构造程序。例如“”用于分隔函数体,“;”作为语句的分隔符。vC+中的标点符号共有9个:v#(),:;v在程序中,每个标点符号各有其不同的作用。v分隔符的作用是将程序中的词法符号分隔开来。C+中的分隔符有:运算符、空格、标点符号、回车键和Tab键等。C+语言概述分隔符v在程序编译时的词法分析阶段将程序正文分解为词法记号和空白。空白是空格、制表符(TAB键产生的字符)、换行符(Enter键所产生的字符)和注释的总称。v空白符用于指示词法记号的开始和结束位置,但除了这一功能之外,其余的空白将被忽略。因此,C+程序可以不必严格地按行书写,凡是可以出现空格的地方,都可以出现换行C+语言概述空白符v例如:intj;v与vintj;v或与vintvjv;v是等价的。但是尽管如此,我们在书写程序时,仍要力求清晰、易读。因为一个程序不仅要让机器执行,还要让人阅读的同时便于修改、维护。C+语言概述空白符数据类型数据是程序处理的对象,有很多种。C+中的数据类型分为基本类型和非基本类型。基本类型是C+编译系统内置的,非基本类型也称为用户定义数据类型或结构类型。基本数据类型和表达式图1-1C+的数据类型数据类型基本数据类型和表达式表1-1常用基本数据类型描述类型说明长度表示范围备注bool逻辑型1false,truechar字符型1-128127-27(27-1)unsignedchar无符号字符型102550(28-1)short(signedshort)短整型2-3276832767-215(215-1)unsignedshort无符号短整型20655350(216-1)int整型4-21474836482147483647-231(231-1)unsignedint无符号整型4042949672950(232-1)long长整型4-21474836482147483647-231(231-1)unsignedlong无符号长整型4042949672950(232-1)float浮点型4-3.410383.410387位有效位double双精度8-1.6103081.61030815位有效位longdouble长双精度8-1.6103081.61030815位有效位#includeusingnamespacestd;intmain(void)constintPRICE=30;intnum,total;floatv,r,h;num=10;total=num*PRICE;couttotalendl;r=2.5;h=3.2;v=3.14159*r*r*h;coutvendl;整型常量shortunsignedshort2字节int、unsignedint4字节longunsignedlong4字节整型变量整型变量声明基本数据类型和表达式整型变量整型变量shortunsignedshort2字节int、unsignedint4字节longunsignedlong4字节整型变量v整型常量即以数码形式出现的整数,包括正整数、负整数和零。整型常量的表示形式有十进制、八进制和十六进制。十进制整型常量的一般形式与数学中我们所熟悉的表示形式是一样的:若干个09的数字即符号加若干个09的数字,但数字部分不能以0开头,正数前边的正号可以省略。整型常量基本数据类型和表达式v八进制整型常量的数字部分要以数字0开头,一般形式为:0若干个07的数字v十六进制整型常量的数字部分要以0 x开头,一般形式为:0 x若干个09的数字及AF的字母(大小写均可)v整型常量可以用后缀字母L(或l)表示长整型,用后缀字母U(或u)表示无符号型,也可同时使用后缀L和U(大小写无关)。例如,123、0123、-0 x5af都是合法的常量形式整型常量基本数据类型和表达式类型说明符 位数数值范围短整短整shortshort1616-32768-327683276732767基本基本 intint32 32 -2-23131(2(23131-1)-1)长整长整longlong3232-2-23131(2(23131-1)-1)无符号无符号unsigned shortunsigned short16160 065535 65535 unsigned unsigned intint 32320 0(2(23232-1)-1)unsigned longunsigned long32320 0(2(23232-1)-1)基本数据类型和表达式#includeusingnamespacestd;intmain(void)constintPRICE=30;intnum,total;floatv,r,h;num=10;total=num*PRICE;couttotalendl;r=2.5;h=3.2;v=3.14159*r*r*h;coutvendl;实型常量float 4float 4字节字节 3.41038 7位有效数字double 8double 8字节字节 1.710308 15位有效数字long double 8 8字节字节1.710308 15位有效数字实型变量缺省为double型后缀 F(或 f)为 float型后缀 L(或 l)为 long double型基本数据类型和表达式v实型常量又称浮点小数。在C+语言中,实型常量只使用十进制表示,有两种表示形式:一般形式和指数形式。一般形式:例如,16.5、-13.5等。v指 数 形 式:例 如,0.565E 2表 示 0.565102,-34.4E-3表示-34.410-3,其中,字母E可以大写或小写。当以指数形式表示一个实数时,整数部分和小数部分可以省略其一,但不能都省略。例如,.234E-1和12.E2都是正确的,但不能写成E-3这种形式。v实型常量默认为double型,如果后缀为F(或f)则为float型。基本数据类型和表达式实型常量v字符常量单引号括起来的一个字符,如:a,D,?,$v字符变量用来存放字符常量例:charc1,c2;c1=a;c2=A;v字符数据在内存中的存储形式以ASCII码存储,占1字节,用7个二进制位Page36基本数据类型和表达式字符形式ASCII码(十六进制)功能n0A换行t09横向跳格(即跳到下一个输出区)v0B竖向跳格b08退格r0D回车a07响铃5C反斜杠字符“”27单引号22双引号dddddd(八进制)1到3位八进制数所代表的字符xhhHh1到2位十六进制数所代表的字符基本数据类型和表达式C+预定义的转义序列v反斜杠+字母:表示控制字符,比如a表示响铃,n表示回车符。v 反斜杠+特殊字符(,“,),表示该字符。比如,表示反斜杠“”,表示单引号“”。v反斜杠+整型常量:此时整型常量必须是一个八进制或十六进制数(以X或x开头),其取值通常在0255之间,此时,如果在整数之前没有0,表示八进制。比如:141、X61都与a等价。基本数据类型和表达式C+预定义的转义序列v字符数据的使用方法字符数据和整型数据之间可以运算。字符数据与整型数据可以互相赋值。v字符串常量例:CHINAaa所以:charc;c=a;CHINA0a 0aPage39基本数据类型和表达式v字符当双引号(“)或反斜杠()作为字符串中的一个字符时,必须采用转义序列法;而单引号()出现在字符串中时,可采用或不采用转义序列法。v字符串常量和字符常量的区别:v(1)在每一个字符串常量的末尾,存储时都要存放一个“0”,表示字符串的结束符。v(2)字符串常量不能直接运用一些运算,比如算术运算、比较运算等,而字符常量可以。Page40基本数据类型和表达式字符串常量数据类型 布尔型数据v布尔型变量的说明:例:boolflag;v布尔型数据的取值:只有false和true两个值基本数据类型和表达式#includeusingnamespacestd;intmain(void)constintPRICE=30;intnum,total;floatv,r,h;num=10;total=num*PRICE;couttotalendl;r=2.5;h=3.2;v=3.14159*r*r*h;coutvendl;常量变量变量先声明后使用符号常量Page42基本数据类型和表达式用标识符表示的常量。可用两种方法定义标识符常量:(1)利用编译预处理指令。利用关键字 define,以如下形式定义常量:#definePI=3.14159(2)利用常量说明符const。比如:constI=2;注意注意,标识符常量(符号常量)一经定义,在其后继的程序中就不能改变其值。基本数据类型和表达式标识符常量例:inta=3;doublef=3.56;charc=a;intc(5);Page44基本数据类型和表达式变量的存储类型vauto属于一时性存储,其存储空间可以被若干变量多次覆盖使用。vregister存放在通用寄存器中。vextern在所有函数和程序段中都可引用。vstatic在内存中是以固定地址存放的,在整个程序运行期间都有效。基本数据类型和表达式运算符具有优先级与结合性。优先级决定运算的优先顺序优先级高的运算符先运算,优先级低的运算符后运算。其意义和作用与数学中的优先级类似。如果表达式中出现了多个相同优先级的运算,运算顺序就要看运算符的结合性了。所谓结合性,是指当一个操作数左右两边的运算符优先级相同时,按什么样的顺序进行运算,是自左向右,还是自右向左。有两种结合性:v右结合:操作数按从左到右的顺序进行运算,绝大多数运算符都是右结合的。v左结合:操作数按从右到左的顺序进行运算运算符的优先级结合性p33基本数据类型和表达式计算之运算符例如,我们熟悉的算术表达式6+5-2中,“+”、“-”是同级运算符,那么是先算5-2,还是先算6+5?这就取决于算术运算符的结合性。由于算术运算符的结合性为自左向右,所以应先算6+5,然后再算11-2。运算符基本数据类型和表达式要正确掌握运算符,必须要注意以下几点:1.每个运算符的功能和作用每一个运算符都有特定的含义,但也要注意有的运算符相同,却具有不同的含义2.运算符与操作数的关系操作数1运算符操作数2(1)运算符的操作数的个数只有一个操作数的运算符,称为单目(一元)运算符;具有两个操作数的运算符称为双目(二元)运算符;只有一个三目运算符:?:(2)操作数的类型运算符基本数据类型和表达式v表达式在使用时要注意以下几点:v一个常量或标识对象的标识符是一个最简单的表达式,其值是常量或对象的值。v一个表达式的值可以用来参与其它操作,即用作其它运算符的操作数,这就形成了更复杂的表达式。v包含在括号中的表达式仍是一个表达式,其类型和值与未加括号时的表达式相同。基本数据类型和表达式表达式计算之表达式v表达式中的操作数则可以为常量、变量、函数调用或其它表达式等等。v最简单的表达式是常量和变量。根据运算符的类型的不同,我们可将表达式分为五类:v算术表达式、逻辑表达式、关系表达式、赋值表达式和逗号表达式。基本数据类型和表达式表达式基本算术运算符+-*/(若整数相除,结果取整)%(取余,操作数为整数)优先级与结合性先乘除,后加减,同级自左至右+,-(自增、自减)例:i+;-j;Page51基本数据类型和表达式v“%”是取余运算,只能用于整型操作数。表达式a%b的结果为a/b的余数。“%”的优先级与“/”相同。v当“/”用于两整型操作数相除时,其结果取商的整数部分,小数部分被自动舍弃。因此,表达式1/2的结果为0,这一点需要特别注意。vC+中的“+”(自增)、“-”(自减)运算符是使用方便且效率很高的两个运算符,它们都是一元运算符。这两个运算符都有前置和后置两种使用形式(例如+i与i-)。基本数据类型和表达式v在C+中,自增自减运算符有如下四种格式:v+i(前置自增:先将i的值加1,再将变化后的i值参与运算)vi+(后置自增:先将i参与运算,再将i的值加1)v-i(前置自减:先将i的值减1,再将变化后的i值参与运算)vi-(后置自减:先将i参与运算,再将i的值减1)v它们都是单目运算符,操作数必须为变量,一般是整型变量,但也可以是实型或字符型变量。基本数据类型和表达式v无论写成前置或后置的形式,它们的作用都是将操作数的值增1(减1)后,重新写回该操作数在内存中的原有位置。所以,如果变量i原来的值是1,计算表达式i+后,表达式的结果为2,并且i的值也被改变为2。但是,当自增、自减运算的结果要被用于继续参与其它操作时,前置与后置时的情况就完全不同了。例如,如果i的值为1,则下列两条语句的执行结果是不一样的:vcouti+;vcout+i;基本数据类型和表达式count=5;total=+count+6;/输出total为?count=5;total=count+6;/输出total为?count+=1;total=count+6;total=count+6;count+=1;基本数据类型和表达式v算术运算符都是右结合的,它们之间的优先级与数学中一致。可用括号()来改变运算符的优先顺序,先计算括号内的值,在计算括号外的值。v对于双目运算符来说,两个整数的运算结果还是整数;但当其中有一个操作数为实型或double型时,则运算结果为实型或double型。基本数据类型和表达式v举例n=n+5v表达式的类型等号左边对象的类型v表达式的值等号左边对象被赋值后的值Page57基本数据类型和表达式v有10种复合运算符:+=,-=,*=,/=,%=,=,&=,=,|=(与位运算符复合而成)v例a+=3等价于a=a+3x*=y+8等价于x=x*(y+8)基本数据类型和表达式a=5表达式值为5a=b=c=5表达式值为5,a,b,c均为5a=5+(c=6)表达式值为11,a为11,c为6a=(b=4)+(c=6)表达式值为10,a为10,b为4,c为6a=(b=10)/(c=2)表达式值为5,a为5,b为10,c为2a+=a-=a*a相当于a=a+(a=a-a*a)Page59基本数据类型和表达式v格式表达式1,表达式2v求解顺序及结果先求解1,再求解2,最终结果为表达式2的值v例a=15;a=3*5,a*4;最终结果为60Page60基本数据类型和表达式v逗号运算符的优先级为所有运算符中最低的。逗号运算符的结合性为右结合,整个逗号表达式的值和类型与最右的表达式的值和类型一致。Page61基本数据类型和表达式关系运算是比较简单的一种逻辑运算,优先次序为:=!=优先级相同(高)优先级相同(低)关系表达式是一种最简单的逻辑表达式其结果类型为bool,值只能为true或false。关系运算符的两个操作数可以是任意基本类型的数据。在应用关系运算符时,要注意计算机存储和运算的精度误差。例如:ab,cb)&(xy)其结果类型为bool,值只能为true或false基本数据类型和表达式v“!”是一元运算符,使用形式是:!操作数。非运算的作用是对操作数取反。如果操作数a的值为true,则表达式!a的值为false;如果操作数a的值为false,则表达式!a的值为true。v“&”是二元运算符。“&”运算的作用是求两个操作数的逻辑与。只有当两个操作数的值都为true时,与运算的结果才为true,其它情况下与运算的结果均为false。逻辑运算与逻辑表达式基本数据类型和表达式v“|”也是二元运算符。“|”运算的作用是求两个操作数的逻辑或。只有当两个操作数的值都为false时,或运算的结果才为false,其它情况下或运算的结果均为true。逻辑运算符的运算规则可以用真值表来说明。表1-3给出了操作数a和b值的各种组合以及逻辑运算的结果。逻辑运算与逻辑表达式基本数据类型和表达式v例如,假设a=7,b=5,x=20,y=30,则逻辑表达式(ab)&(xy)的值为false。表1-3逻辑运算符的真值表ab!aa&ba|btruetruefalsetruetruetruefalsefalsefalsetruefalsetruetruefalsetruefalsefalsetruefalsefalse逻辑运算与逻辑表达式基本数据类型和表达式v逻辑运算运算结果为0或1,即当逻辑关系成立时,运算结果为1,否则,为0。v逻辑运算符的操作数可为任意一种基本数据类型的变量和常量,在运算过程中,将非0数转化为1参与运算。逻辑运算与逻辑表达式基本数据类型和表达式vC+规定:在计算逻辑表达式的过程中,一旦可以确定整个表达式的值,就不再继续计算该表达式的剩余部分。这就是所谓的逻辑表表达达式式的的副作用:副作用:v对于a&b&c,只有a为非0时,才需要计算b的值,因为当a为0时,不管后面的项如何,都能得到该表达式的值就为0。同样只有在a和b都为非0的情况下才需要计算c的值。v对于a|b|c,只要a为非0,就不需要判断b和c的值,而只有当a、b都为0时才需要计算c项。v其它情况可以类推。逻辑运算与逻辑表达式基本数据类型和表达式v一般形式表达式1?表达式2:表达式3表达式1 必须是 bool 类型v执行顺序先求解表达式1,若表达式1的值为true,则求解表达式2,表达式2的值为最终结果若表达式1的值为false,则求解表达式3,表达式3的值为最终结果v例:x=ab?a:b;求出a,b中较小值基本数据类型和表达式条件运算符与条件表达式 注意:条件运算符优级高于赋值运算符,低于逻辑运算符表达式2、3的类型可以不同,条件表达式的最终类型为 2 和 3 中较高的类型。基本数据类型和表达式sizeof运算符sizeof(表达式)仅仅计算“表达式”的结果类型所占的字节数语法形式sizeof(类型名)或sizeof(表达式)结果值:“类型名”所指定的类型或“表达式”的结果类型所占的字节数。例:sizeof(char)sizeof(x)注意:sizeof(表达式)仅仅计算“表达式”的结果类型所占的字节数,并不对括号中的表达式本身求值。可为常数。基本数据类型和表达式运算规则将两个运算量的每一个位进行逻辑与操作举例:计算 3&5 3:0 0 0 0 0 0 1 1 5:(&)0 0 0 0 0 1 0 13&5:0 0 0 0 0 0 0 1用途:将某一位置0,其它位不变。例如:将将 char 型变量(型变量(8bit)a 的最低位置的最低位置 0:a=a&0376 (11 111 110);取指定位。例如:有例如:有 char c;int a;取出取出 a 的低字节,置于的低字节,置于 c 中:中:c=a&0377(11 111 111);基本数据类型和表达式在编程硬件设备中非常有用运算规则将两个运算量的每一个位进行逻辑或操作举例:计算 3|5 3:0 0 0 0 0 0 1 1 5:(|)0 0 0 0 0 1 0 13|5:0 0 0 0 0 1 1 1用途:将某些位置1,其它位不变。例如:将int型变量a的低字节置1:a=a|0 xff(00000000 00000000 00000000 11111111);基本数据类型和表达式运算规则两个操作数进行异或:若对应位相同,则结果该位为 0,若对应位不同,则结果该位为 1,举例:计算 071052 071:0 0 1 1 1 0 0 1 052:()0 0 1 0 1 0 1 0 071052:0 0 0 1 0 0 1 1基本数据类型和表达式位运算按位异或()用途:使特定位翻转(与0异或保持原值,与1异或取反)例如:要使 01111010 低四位翻转:0 1 1 1 1 0 1 0 ()0 0 0 0 1 1 1 10 1 1 1 0 1 0 1基本数据类型和表达式单目运算符,对一个二进制数按位取反。例:025:0000000000010101 025:1111111111101010基本数据类型和表达式左移运算()右移后,低位:舍弃高位:无符号数:补0有符号数:补“符号位实质:an,得到a/2n基本数据类型和表达式如果有char型变量a的值为-8,则a在内存中的二进制补码值为11111000,于是表达式a2的值为-2。图1-4a2的移位操作过程111110001111100011111110基本数据类型和表达式图1-521的移位操作过程0000001000000010000000100表达式22和21)的值,移位运算符左边表达式的变量值本身并不会被改变。如果是a(=,&=,=,|=(与位运算符复合而成)那么a的值变化了.基本数据类型和表达式优先级运算符结合性1().-后置+后置-左右2前置+前置-sizeof*+(正号)-(负号)!右左3(强制转换类型)右左4*-*左右5*/%左右6+-左右7左右8=左右9=!=左右10&左右11左右12|左右13&左右14|左右运算符优先级与结合型基本数据类型和表达式15?:右左16=*=/=%=+=-=&=|=右左17,左右基本数据类型和表达式当表达式中出现了多种类型数据的混合运算时,首先需要进行类型转换,其次再计算表达式的值。表达式中的类型转换分为两种:隐含转换和强制转换。表达式中的类型转换基本数据类型和表达式算术运算和关系运算转换的基本原则是将低类型数据转换为高类型数据。类型越高数据的表示范围越大,精度也越高,所以这种转换是安全的。各种类型的高低顺序如下:charshortintunsignedlongunsigned-longfloatdouble低高隐含转换规则基本数据类型和表达式逻辑运算符要求参与运算的操作数必须是bool型,如果操作数是其它类型,则系统自动将其转换为bool型。转换方法是:非0数据转换为true,0转换为false。位运算的操作数必须是整数。当二元位运算的操作数是不同类型的整数时,编译系统会自动进行类型转换。隐含转换规则基本数据类型和表达式赋值运算要求左值(赋值运算符左边的值)与右值(赋值运算符右边的值)的类型相同。若类型不同,系统会自动进行类型转换。但这时的转换不适用上述的转换规则,而是一律将右值类型转换为左值类型。隐含转换规则基本数据类型和表达式下面的程序段说明了类型转换的规则:floatfVal;doubledVal;intiVa1;unsignedlongulVal;dVal=iVal*ulVal;/iVal被转换为unsignedlong/乘法运算的结果被转换为doubledVal=ulValfVal;/ulVal被转换为float/加法运算的结果被转换为double表达式中的类型转换基本数据类型和表达式强制类型转换又称为显式转换,是通过类型标识符和括号来实现的.1.用括号语法形式有两种:(表达式)或(类型标识符)强制类型转换的作用是将表达式的结果类型转换为类型标识符所指定的类型。强制类型转换基本数据类型和表达式例如:floatz9.74,fraction_part;intwhole_part;whole_part=int(z);/将float型转换为int型时,取整数部分,舍弃小数部分fraction_part=z-int(z)/用z减去其整数部分,得到小数部分使用强制类型转换时,应该注意:强制类型转换基本数据类型和表达式从上面的例子中可以看到,将高类型数据转换为低类型数据时,数据精度会受到损失。这种转换是暂时的、一次性的。例如,int(z)只是将float型变量z的值取出来,临时转换为int型,然后赋给whole_part。而变量z仍是原来的浮点类型值。注意:对一个变量无论进行强制转换还是自动转换,只是以该变量的转换类型参与运算,变量本身的类型和值都没有改变。强制类型转换基本数据类型和表达式2.强制类型转换操作符Static_cast()dynamic_cast()const_cast()和reinterpret_cast()例:doublea;intb;static_cast(a);数据的输入与输出程序执行期间,接受外部信息的操作称为程程序的输入序的输入,而把程序向外部发送信息的操作称为程序的输出程序的输出。下面简要介绍输入流cin和输出流cout。在使用C+中提供的输入/输出流时,必须在程序的开头增加一行:#include 数据的输入与输出 输出流输出流coutcoutcout用来处理标准输出,即将数据输出到显示器。格式如下:cout其中”称为插入运算符插入运算符,它的作用是将其后面的表达式的值输出到显示屏上当前光标所在的位置。插入运算符后可以为任意的有确定值的表达式。在cout后可以有若干个“”。数据的输入与输出 例如,语句coutThis is a sample.,hesaid.n;的输出结果为Thisisasample.,hesaid.v输出流输出流cout数据的输入与输出 对于整数,可以以八进制或十六进制形式输出,这时只要在插入运算符的后面设置特定的流格式控制函数(详细请参阅第十六章):dec(十进制)、hex(十六进制)、oct(八进制)。对于实数,可以用科学表示法输出,并可以为其设置精度。还可通过流格式控制函数setw(int)来设置输出数据之间的宽度,上述两类格式输出的函数都包含在iomanip中。例如:inta=16;couthexaenl;/输出16进制coutset2(5);其中运算符”称为提取运算符提取运算符,其作用是暂停程序的执行,等待用户从键盘输入数据。用户输入的数据赋给相应的变量。在提取运算符之后必须有一个变量,而且只能有一个变量,变量的类型可以是基本数据类型、导出数据类型和指针类型等。在cin后的“”可重复多次。输入流输入流数据的输入与输出 cin是预定义的流类对象,“”是预定义的提取符。例如:inta;charc;cinac;要求从键盘上输入两个变量的值,两数之间以空格分隔。若输入48这时,变量a获取值为4,变量b获取值为8的ASCII值38(十六进制)。因为变量c的数据类型为char,cin能够知道输入的变量类型。输入流输入流数据的输入与输出【例1-3】I/O格式控制例题。按十六进制、八进制和十进制的格式输出数据例题。这三个控制符都是在iostream定义的,所以无需加入头文件iomanip。#includevoidmain()intnumber=1001;常用的常用的I/O流控制符流控制符数据的输入与输出 couttDecimal:decnumberendltHexadecimal:hexnumberendltOctal:octnumberendl;程序运行结果为Decimal:1001Hexadecimal:3e9Octal:1751常用的常用的I/O流控制符流控制符数据的输入与输出 C+的基本语句C+程序由数据描述和数据处理两部分构成。数据描述主要定义具有特定内涵的数据结构。数据处理的任务是对所提供的数据进行加工处理,它是通过具有各种不同功能的语句来实现的。C+中的语句可归纳为六类。C+的基本语句表达式语句表达式语句在表达式的后面加上一个分号,就构成表表达式语句达式语句,它是程序中最常见的一种语句形式。其格式为:;C+的基本语句函数调用语句函数调用语句在函数调用之后加一个分号“;”就构成函数调用语句。比如:sin(2.3);其实“函数调用语句”也属于表达式语句,因为函数调用也是属于表达式的一种,只是为了便于理解和使用,我们把“函数调用语句”和“表达式语句”分开来说明。C+的基本语句空语句空语句只由一个分号构成的语句。比如:a+2;C+的基本语句复合语句复合语句把一个语句序列用括起来,就构成了复合语句,又称为块语句或语句块。复合语句在语法上相当一个语句,因此它可以出现在允许语句