已阅读5页,还剩72页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第2章,基本数据类型、运算符与表达式,2,本章主要内容,(1)熟悉和掌握C+中数据类型的分类及使用,注意它与C数据类型间的区别。(2)熟练掌握C+中各种运算符的使用。(3)熟练掌握C+中表达式的描述和计算。(4)理解和掌握C+中数据的输入和输出。,3,2.1数据类型,C+提供了十分丰富的预定义数据类型,称为基本数据类型。除了基本数据类型外,C+还提供了构造数据类型,包括数组、结构体、共用体(联合体)、枚举和类等。C+可以使用的数据类型如图所示:,4,2.1.1基本数据类型,C+提供的5种基本数据类型各自所占的内存空间是不同的,因此所表示的数据的范围大小也不同。在5种基本数据类型中:字符型用于处理ASCII码字符整型用于处理整型数据浮点型用于处理带小数的实数布尔型用于表示的逻辑的true和false无值型主要用于处理函数和指针,5,2.1.2类型修饰符,C+的类型修饰符包括:signed有符号型unsigned无符号型short短型long长型,6,在基本数据类型(除void类型外)前加上类型修饰符后,C+的基本数据类型如表2.2所示:,7,说明:(1)表中带的部分表示是可以省略的,如shortint可以写为shortint或简写为short,二者的含义是相同的。(2)4种修饰符都可以用来修饰整型和字符型。用signed修饰的类型的值可以为正数或负数,用unsigned修饰的类型的值只能为正数。(3)用short修饰的类型的值一定不大于对应的整数,用long修饰的类型的值一定不小于对应的整数。,8,2.2常量和变量,数据可分为常量和变量两大类。常量(Constant):是指在程序的执行过程中其值不会发生改变的数据。变量(Variable):是指在程序执行过程中其值可以被改变的数据。,9,2.2.1常量,常量按照不同的数据类型可以分为:字符型常量、整型常量、浮点型常量以及字符串常量等。程序是根据程序中常量的书写格式来区分它是属于哪种类型的常量。,10,1整型常量由于整数类型可分为int,shortint等类别,因此整型常量也可分为以上类别。注意:在程序中书写整型常量时没有小数部分。在程序中,用户根据需要分别可以用十进制、八进制和十六进制的形式书写整型常量。,(1)十进制格式:由数字0至9和正、负号组成,书写时直接写出数字,如123,516等。若为longint型的常量,需在常量后加一个字母l或L,例如123L。,11,(2)八进制格式:以0开头的数字(0至7)序列,如011,010007,0177777等。如011表示八进制数11,即(11)8,它相当于十进制数9。,(3)十六进制格式:以0 x或0X开头的数字(数字0至9、字母a至f)序列,如0 x11,0 x78AC,0 xFFFF等。如0 x11表示十六进制数11,即(11)16,它相当于十进制数17。,12,2浮点型常量浮点型常量可以用十进制小数形式或指数形式表示。注意:在程序中无论采用十进制小数形式还是指数形式,在内存中都是以指数形式存储的。,13,(1)十进制小数形式:一般由整数部分和小数部分组成,也可省略其一,但不能二者皆省。例如:0.345也可表示为.345,45.0也可表示为45.;如果在实数的数字后面加上字母F或f,表示此数为单精度浮点数;如果加上字母L或l,表示此数为长双精度数。,14,(2)指数形式:也就是通常所讲的科学记数法的描述形式。数符数字部分指数部分,其中,数字分部分和指数部分缺一不可,指数部分以E或e开始,E或e表示后面的数是以10为底的幂.,如:10-4可表示为1e-4,但不能写成e-4,如:-0.00726可以表示为-0.726e-2,-7.26e-3,-72.6e-4等形式,它们所起的作用是相同的。,15,3字符型常量字符型常量分为普通的字符常量和转义字符常量。(1)普通的字符常量用一对单引号括起来的一个字符就是字符型常量,如s,Y都是合法的字符常量。,16,注意:,单引号只是字符与其他部分的分隔符,不是字符的一部分,并且不能用双引号代替单引号,如Y不代表字符常量。,字符常量只能包括一个字符,如ab是不合法的。,在单引号中的字符不能是单引号或反斜杠,和都是非法的字符常量,字符常量区分大小写,如Y和y表示两个不同的字符常量。,17,(2)转义字符常量在C+中,有一些字符用于控制输出或编译系统本身保留,无法作为字符常量来表示。C+规定,采用反斜杠后跟一个字母来代表一个控制字符,反斜杠后的字符不再作原有的字符使用,而具有新的含义。转义字符在屏幕上是不能显示的。C+中常用的转义字符如表2.3所示。,18,4字符串常量用一对双引号括起来的一个或多个字符的序列称为字符串常量或字符串。字符串以双引号为定界符,双引号不作为字符串的一部分,可以将转移字符加入字符串,转义字符占用一个字节。如:HelloAGoodMorning!Isayn都是合法的字符串常量。,19,字符串中的字符的个数称为该字符串的长度。字符串常量要用字符数组来存放。在存储时,系统自动在字符串的末尾加以字符串结束标志,即转义字符0。如Hello在内存中占用6个字节,Isayn占用7个字节。,20,字符串可以写在多行上,必须用续行符反斜线表示下一行字符是这一行字符的延续。例如:coutThisisabook.;该语句输出结果为:Thisisabook.,21,5符号常量常量也可用一个标识符来表示,称为符号常量。符号常量的一般定义格式如下:#define符号名常量值例如:#defineMAX30/不是语句,末尾不加分号main().此处,#define语句定义MAX为30,凡在程序中出现MAX的地方都代表30,它可与常量进行运算。,22,使用符号常量可以使得符号的含义更加清楚,在需要改变常量值时,只需改变第一行中的常量值即可,程序中所有的MAX的值都会相应地改变。注意:(1)它不同于变量,在其作用域内其值不能改变和赋值。上例中如再用MAX=40;这一语句进行赋值则是错误的。(2)符号常量名一般用大写,而变量名用小写,以示区别。,23,程序中常量的表示方法,在程序中的常量有以下3种表示方法。(1)在程序中直接写入常量例如:-200,3.4E-10,A,1,0 x120,045,5.35,1000linti;chars;floatf;i=20;s=a;f=2.0;,24,(2)利用#define定义宏常量#define宏名常数例如:#definePI3.14s=2*PI*r;,25,(3)利用const定义正规常数const数据类型标识符常数名=常量值;说明:const必须放在被修饰类型符和类型名的前面。数据类型是一个可选项,用来指定常数值的数据类型,如果省略了该数据类型,那么,C+编译程序认为它是int类型。,26,2.2.2变量,1变量的概念变量是用于保存程序运算过程中所需要的原始数据、中间运算结果和最终结果的其值可以改变的量。2定义变量每一变量都要先定义、后使用;定义变量3种格式:修饰符数据类型标识符变量名列表;修饰符数据类型标识符变量名=初始化值;修饰符数据类型标识符变量名1=初始值1,变量名2=初始值2,;,27,说明:(1)此处的类型标识符表示要定义的变量所属的数据类型,它可以是前面介绍的的数据类型标识符中的一种。例如int,double,bool等。(2)变量名是每个变量的名称,由用户自己命名,要遵循命名规则。(3)定义变量时,可以在类型前面加上一些修饰符来表示这些变量的使用方法。C+中常用的变量定义修饰符如表2.4所示。,28,如:chara,b;/定义字符型变量aexternintc;/c在其它函数中已经定义,这里只是用到该变量,对该变量进行声明staticinti=1000;/定义静态整型变量i,i的初始值为1000floata=2,b=3,c;/定义变量a,b,c,且a、b的初始值分别为2,3,29,3变量的初始化在定义变量的同时可以给变量赋一个初值,称为变量的初始化。方法是在定义变量时,在变量名的后面写上“=初值”。,30,例如:inta=3,b=3*(2+9);在对多个变量赋于同一初值时,必须分别指定。应当写成:inta=3,b=3,c=3;或者:inta,b,c=3;a=b=c;而不能写成:inta=b=c=3;,31,4定义变量的位置变量的定义一般可有以下3种位置。(1)在函数体内部在函数体内部定义的变量称为局部变量,这种局部变量只在进入定义它的函数体时起作用,离开该函数体后该变量就消失(被释放),即不再起作用。因此,不同函数体内部可以定义相同名称的变量,而互不干扰。,32,如:voidfunc1(void)inty;y=2;voidfunc2(void)inty;y=-100;本例中两个函数体内部都分别定义了变量y,但它们都只能在各自的函数体内起作用,互不干扰,都是局部变量。,33,(2)形式参数当定义一个有参函数时,函数名后面括号内的变量统称为形式参数。intis_in(char*a,charb)while(*a)if(*a=b)return1;elsea+;return0;本例中函数is_in()后面括号内的变量a和b是该函数的形式参数,它们都只能在该函数体内起作用,是该函数的局部变量。,34,(3)全局变量在所有函数体的外部定义的变量,其作用范围是整个程序,并在整个程序运行期间有效。【例2-1】全局变量的使用。,35,2.3运算符和表达式,2.3.1算术运算符和算术表达式算术运算符就是对数据进行算术运算的运算符。如:加、减、乘、除等,是在程序中使用最多的一种运算符,C+的算术运算符如表2.5所示。,36,1自增和自减运算符自增(+)和自减(-)的作用是使变量的值增1或减1。运算符(+)和(-)既可放在变量的前面,也可放在变量的后面,但作用的效果是不同的,如表2.6所示。,【例2-2】自增和自减运算符的使用。,37,2数据类型转换C+中类型转换有两种方式,即隐式类型转换和显式类型转换。(1)隐式类型转换在表达式中经常会有不同类型的数据进行运算,此时编译器会自动将它们转换为相同类型后再进行运算,赋值时将所赋值转换成被赋值变量类型,这种由编译器自动完成的类型转换称为隐式类型转换。隐式类型转换是按照从低到高的顺序进行的,如图2-2所示。,38,低,高,39,例如:e=5*b+3.14-3L/2.0的顺算顺序如下:进行5*b的运算,先将b转换成整数98,运算结果为490。进行490+3.14的运算,将490和3.14转换成double型,结果为493.14。计算3L/2.0,首先转换为double型,结果为1.5。进行493.14-1.5的运算,结果为double型的491.64。,40,(2)显式类型转换显式类型转换,也称为强制类型转换,指编程人员利用类型转换运算符显式地将某一数据从一种数据类型转换为另一种数据类型。类型名(表达式)或(类型名)表达式【例2-3】显式类型转换。,41,2.3.2赋值运算符和赋值表达式,赋值运算符的用法格式为:变量名赋值运算符常量、变量或表达式说明:被赋值的目标即赋值运算符左边的量必须是变量,而不能是常量或表达式。也就是说,常量或表达式是不能被赋值的。C+中的赋值运算符如表2.7所示。,42,(3)意区分赋值运算符“=”与数学上的“等号”intx,y;/定义变量x,y为int类型变量x=10;/将变量x赋值为10 x=x+20;/将30赋给变量xy=x+;/将x的值赋给y(值为30),变量x值变成31。y-=x+5;/等价于y=y-(x+5);表达式值为-6,y值为-6x%=y+10/等价于x=x%(y+10);表达式为3,y值为3,43,2.3.3sizeof运算符,sizeof运算符的功能是求某一数据类型或某一变量在内存中所占空间的字节数。sizeof(变量名或数据类型)或sizeof变量名或数据类型sizeof运算符的应用如【例2-4】所示。,44,2.3.4关系运算符和关系表达式,关系运算符就是对两个量之间进行比较,判断比较结果的运算符。C+的关系运算符如表2.8所示。,45,由关系运算符将两个表达式连接形成的运算式子称为关系表达式,一个关系表达式的值是一个逻辑值。表达式关系运算符表达式其中:表达式可以是算数表达式、关系表达式、逻辑表达式、赋值表达式或字符表达式。当关系表达式成立时,其值为真(1);当关系表达式不成立时,其值为假(0)。,46,假设a=1,b=20,c=3,则:ab?a:b的值为4。,51,2.3.7位运算符,1位运算符及其运算规则位是计算机表示信息的最小单位,一般用0和1表示。位运算符是指能进行二进制位运算的运算符。位运算符的运算对象必须为整数。C+提供的位运算符如表2.11所示。,52,位运算的运算规则为:(1)按位与说明:(1)cout是系统预定义的一个标准输出设备(一般代表显示器);“”是输出操作符,用于向cout输出流中插入数据(2)cout的作用是向标准输出设备上输出数据,被输出的数据可以是常量、已有值的变量或是一个表达式。【例2-5】cout语句的使用,60,(3)可以在cout输出流中插入C+中的转义字符。如:coutthevalueofa:n;couta;表示输出完字符串Inputthevalueofa:后,在下一行输出变量a的值。(4)可以将多个被输出的数据写在一个cout中,各输出项间用“”操作符隔开即可,但要注意cout首先按从右向左的顺序计算出各输出项的值,然后再输出各项的值。如:coutvalueofa:avalueofb:bTheresultis:sqrt(a*a+b*b);再如:设变量i的值为10,则couti,i+,i+;的输出结果为:12,11,10(5)一个cout语句也可拆成若干行书写,但注意语句结束符“;”只能写在最后一行上。如:对于上面的语句也可写成如下形式:,61,coutvalueofa:/注意行末无分号avalueofb:bTheresultis:sqrt(a*a+b*b);/在此处书写分号(6)在cout中,实现输出数据换行功能的方法:既可使用转义字符“n”,也可使用表示行结束的流操作子endl。如:coutThisisfirstLine.nThisissecondline.;上面语句可等价地写为:coutThisisfirstLine.endlThisissecondline.;,62,(7)在cout中还可以使用流控制符控制数据的输出格式,但使用这些流控制符时,要在程序的头上嵌入头文件#include。常用的流控制符及其功能如表2.14所示。表2.14I/O流的常用控制符,63,64,设置域宽:所谓域宽就是被输出数据所占的输出宽度(单位是字符数)。设置域宽可以使用流控制符setw(n)和cout的方法cout.width(n)其中n为正整数,表示域宽。但是,cout.width(n)和setw(n)二者都只对下一个被输出的数据有作用,若一个输出语句内有多个被输出的数据,而要保持一定格式域宽时,需要在每一输出数据前加上cout.width(n)或setw(n)。此外,当参数n的值比实际被输出数据的宽度大时,则在给定的域宽内,数据靠右输出,不足部分自动填充空格符;若被输出数据的实际宽度比n值大时,则数据所占的实际位数输出数据,设置域宽的参数n不再起作用。,65,【例2-6】cout流控制符setw的使用。#include#includevoidmain()inta=21,b=999;coutsetw(3)asetw(4)asetw(5)aendl;coutsetw(3)bsetw(4)bsetw(5)bendl;coutsetw(3)a+bsetw(4)a+bsetw(5)a+bendl;其输出结果是:212121/程序中第一个cout的输出结果999999999/程序中第二个cout的输出结果102010201020/程序中第三个cout的输出结果,66,设置域内填充字符:在默认情况下,当被输出的数据未占满域宽时,会自动在域内靠左边填充相应个数的空格符。但我们也可以设置在域内填充其他的字符,方法是利用cout的fill方法cout.fill(c)或setfill(c)。cout.fill(c)上和setfill(c)可以对所有被输出的数据起作用。【例2-7】在例2-6的基础上增加域内填充字符的功能。#include“iostream.h”#include“iomanip.h”voidmain()inta=21,b=999;cout.fill(#);/设置域内填充字符为#字符coutsetw(3)asetw(4)asetw(5)aendl;coutsetw(3)bsetw(4)bsetw(5)bendl;cout.fill(%);/将域内填充字符改为%字符coutsetw(3)a+bsetw(4)a+bsetw(5)a+bendl;,67,其输出结果是:#21#21#21/程序中第一个cout的输出结果,未占满域宽的部分填充#字符。999#999#999/程序中第二个cout的输出结果10201020%1020/程序中第三个cout的输出结果,未占满域宽的部分填充%字符。当采用流控制符设置填充字符时,上面程序代码也可等价地改为:#include#includevoidmain()inta=21,b=999;coutsetw(3)setfill(#)asetw(4)asetw(5)aendl;coutsetw(3)bsetw(4)bsetw(5)bendl;coutsetw(3)setfill(%)a+bsetw(4)a+bsetw(5)a+bendl;,68,设置输出数据的进位计数制:在默认情况下,被输出的数据按十进制格式输出。但可以使用流控制符hex和oct控制数据的输出格式为十六进制和八进制,一旦设置成某种进位计数制后,数据的输出就以该种数制为主,可利用流控制符dec将数制重新成十进制。【例2-8】在例2-7的基础上增加设置输出数据进位计数制的功能。#include#includevoidmain()inta=21,b=999;/设置以十六制格式输出数据coutsetw(3)setfill(#)hexasetw(4)asetw(5)aendl;coutsetw(3)bsetw(4)bsetw(5)bendl;coutsetw(3)setfill(%)a+bsetw(4)a+bsetw(5)a+bendl;/设置以八制格式输出数据coutsetw(3)setfill(#)octasetw(4)asetw(5)aendl;coutsetw(3)bsetw(4)bsetw(5)bendl;coutsetw(3)setfill(%)a+bsetw(4)a+bsetw(5)a+bendl;/设置以十制格式输出数据coutsetw(3)setfill(#)decasetw(4)asetw(5)aendl;coutsetw(3)bsetw(4)bsetw(5)bendl;coutsetw(3)setfill(%)a+bsetw(4)a+bsetw(5)a+bendl;,69,程序的输出结果为:#15#15#15/以十六进制格式输出数据3e7#3e7#3e73fc%3fc%3fc#25#25#25/以八进制格式输出数据17471747#174717741774%1774#21#21#21/以十进制格式输出数据999#999#99910201020%1020,70,设置浮点数的输出格式:对于浮点数,既可以用小数格式输出,也可以用指数格式输出。这可以分别通过setiosflags(ios:fixed)和setiosflags(ios:scientific)来控制。【例2-9】已知圆的半径r=6.779,计算并输出圆的周长和面积,要求分别用指数和小数两种格式输出。#include#includevoidmain()constdoublepi=3.14159;doubler=6.779,c,s;c=2.0*pi*r;/计算圆的周长s=pi*r*r;/计算圆的面积,71,/以指数格式输出圆的面积和周长cout圆的周长(指数)为:setiosflags(ios:scientific)cendl;cout圆的面积(指数)为:sendl;/以小数输出圆
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 标识制作合同协议书
- 成都市新都食品药品监督管理局招考28名食品药品安全协管员易考易错模拟试题(共500题)试卷后附参考答案
- 广西河池环江县2025事业单位招聘拟聘(第二批)易考易错模拟试题(共500题)试卷后附参考答案
- 广州番禺职业技术学院后勤处学生宿舍管理员招考易考易错模拟试题(共500题)试卷后附参考答案
- 广州市白云区2025年下半年招考社区居委会专职人员易考易错模拟试题(共500题)试卷后附参考答案
- 内外墙抹灰合同协议
- 广东珠海市斗门区水务局招聘普通雇员3人易考易错模拟试题(共500题)试卷后附参考答案
- 广东广州市黄埔区人民政府黄埔街道办事处政府聘员招聘5人易考易错模拟试题(共500题)试卷后附参考答案
- 广东云浮市机关事务管理局直属事业单位2025年下半年招考拟聘人员公易考易错模拟试题(共500题)试卷后附参考答案
- 崇左市公安消防支队招聘合同制文员易考易错模拟试题(共500题)试卷后附参考答案
- 2024年精神科风险评估量表
- 脂膜炎合并皮下结节护理查房
- 铁路防寒过冬知识培训
- 燃气施工材料管理办法
- 秋瑾课件教学课件
- 废弃晶体硅及钙钛矿光伏组件回收研究
- GB/T 5699-2025采光测量方法
- 2026届北京市育英学校高二化学第一学期期中统考试题含解析
- 《中国金融学》课件 第14章 金融发展与金融“五篇大文章”-课件
- 医院重点专科肾内科申报
- 赤眼蜂防治水稻二化螟技术
评论
0/150
提交评论