C++程序设计第二章谭浩强版_第1页
C++程序设计第二章谭浩强版_第2页
C++程序设计第二章谭浩强版_第3页
C++程序设计第二章谭浩强版_第4页
C++程序设计第二章谭浩强版_第5页
已阅读5页,还剩61页未读 继续免费阅读

下载本文档

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

文档简介

1第2章

数据类型、运算符与表达式22.1 C++的字符集和关键字

语文作文不能出现英语!32.1 C++的字符集和关键字

字符集由52个字母、10个数字、30个特殊字符组成所有C++程序(忽略换行符、制表符、注释和字符串常量中的内容)都由字符集中的字符按一定规则构成42.1 C++的字符集和关键字

C++标识符是满足如下条件的一串字符由一个字母(a~z,A~Z)或下划线(_)开头其它部分可以由字母、下划线或数字(0~9)组成;大小有别只有前32个字符有效C++的63个关键字也是标识符,称为保留字,不能作其它用。另外,C++还使用了一些标识符作预处理命令、库函数的名字,称为预定义标识符,可以被重定义,但不提倡。5标识符——课堂练习挑出一个不正确的标识符

ABCabca_bcab.c选择一个正确的标识符

%xa+ba123test!挑出错误的标识符room3-1

_SUM

student

num1

Mr.Zhu

_1_2_3

MyName

myname

my_name

2men6问题:以什么数据形式表示算法中涉及的数据(实体、对象)?学生人数商品个数商品价格学生姓名边长值角度值分数商品名称正弦值字符类型整型实型数值类型72.2 数据类型

82.2 基本数据类型

每个C++程序中的数据对象(如2、x1、x1+2)都有确定的唯一的数据类型C++的数据类型包括基本数据类型和复合数据类型基本数据类型有整型、浮点型、字符型、布尔型不同数据类型有自己的取值范围和所允许的操作(运算)C++没有统一规定各类型数据的数据范围、精度及在内存中所占字节数,由编译系统做出安排92.2 基本数据类型—整型

整型(可进行算术、关系、逻辑等运算)signedshortint(简写为short)signedint(简写为int)signedlongint(简写为long)unsignedshortint(简写为

unsignedshort)unsignedint(简写为unsigned)unsignedlongint(简写为

unsignedlong)注意:各类型所占字节数和具体计算机有关类型符号关键字数的表示范围所占字节数整型字符型实型有无[signed]int2-32768~32767[signed]short2-32768~32767[signed]long4-2147483648~21474836472unsigned[int]0~6553540~4294967295unsignedlongunsignedshort20~65535float43.4e-38~3.4e38有double81.7e-308~1.7e308有unsignedchar1-128~127无[signed]char10~255longdouble163.4e-4932~3.4e4932表以16位计算机为例112.2 基本数据类型—浮点型

浮点型(实型)float(浮点型)double(双精度型)longdouble(长双精度型)均有符号注意:各类型所占字节数和具体计算机有关类型符号关键字数的表示范围所占字节数整型字符型实型有无[signed]int2-32768~32767[signed]short2-32768~32767[signed]long4-2147483648~21474836472unsigned[int]0~6553540~4294967295unsignedlongunsignedshort20~65535float43.4e-38~3.4e38有double81.7e-308~1.7e308有unsignedchar1-128~127无[signed]char10~255longdouble163.4e-4932~3.4e4932表以16位计算机为例13实型数据的舍入误差由于实型数据表示的有效数字有限,将有效位以外的数字舍去造成误差举例floata=123456.789e5,b;b=a+20;/*b=12345678920?*/printf("a=%f\nb=%f\n",a,b);a=12345678848.000000b=12345678868.000000142.2 基本数据类型—字符型

字符型[signed]charunsignedchar实质是占一个字节的整型数ASCII表:为每个合法的字符定义一个整数允许的操作:和整型相同注意:各类型所占字节数和具体计算机有关类型符号关键字数的表示范围所占字节数整型字符型实型有无[signed]int2-32768~32767[signed]short2-32768~32767[signed]long4-2147483648~21474836472unsigned[int]0~6553540~4294967295unsignedlongunsignedshort20~65535float43.4e-38~3.4e38有double81.7e-308~1.7e308有unsignedchar1-128~127无[signed]char10~255longdouble163.4e-4932~3.4e4932表以16位计算机为例162.2 基本数据类型—布尔型

布尔型bool值为true和false可以当作整数用(true一般为1,false为0)把其它类型的值转换为布尔值时,非零值转换为true,零值转换为false注意:各类型所占字节数和具体计算机有关类型符号关键字数的表示范围所占字节数整型字符型实型有无[signed]int2-32768~32767[signed]short2-32768~32767[signed]long4-2147483648~21474836472unsigned[int]0~6553540~4294967295unsignedlongunsignedshort20~65535float43.4e-38~3.4e38有double81.7e-308~1.7e308有unsignedchar1-128~127无[signed]char10~255longdouble163.4e-4932~3.4e4932表以16位计算机为例但总是

long型≥int型≥short型≥char型longdouble型≥double型≥float型182.3 变量与常量

程序运行过程中,其值是否能被改变?变量是常量不是19定义程序运行过程中,其值不能被改变的量分类整型常量实型常量字符型常量布尔型常量(false,true)符号常量:用一个标识符代表的常量常量字面常量:从字面形式即可判断常量示例#definePRICE2.8main(){intnum; floattotal=0;num=10;total=num*PRICE;printf("total=%f",total);}符号常量total=num*2.8;字面常量符号常量的定义格式#define符号常量常量变量21整型常量表示形式十进制整数:由数字0~9组成,除0外不能以0开始八进制整数:以数字0为前缀,由数字0~7组成十六进制整数:以0X或0x为前缀,由数字0~9、A~F(或a~f)组成可以加整型后缀,无后缀时作为int类型数据12,30√0450123,040√0390x12A,0X96

√123L,421L,0L22指数形式:由整数(或小数)、e(或E)、可选的正负号、整数顺序组成表示形式十进制小数:由0~9和小数点(必须)组成,整数和小数部分都可省略,但不能同时省略举例:123.4e-5表示123.4×10-5错例:,e1、12e、1.2e3.4、.e5、e实型常量(浮点常量)0.123,.123123.345e213.2E+2.5e-2注意:e或E前面必须有数字,后面必须是整数(可以带+、-)一个实数可以有多种指数表示形式举例:1234.可表示成:1234e0

123.4E1

12.34

e2.1234E41.234E3可以加浮点后缀,无后缀时作为double类型数据23用一对单引号括起来的一个普通字符(不包括‘和\)或转义字符(也称转义序列)字符型常量'a','?','3','#'√'abc','','\','啊'转义字符是用一个转义标识\(反斜线)开头的字符序列。如:\n,\xab转义字符主要表示难以用一般字符表示的单个字节24转义字符注意:1)转义字符常量只代表一个字符(占一个字节)。2)反斜杠后的八进制数可以不用0开头3)反斜杠后的十六进制数只能以小写字母x开头,不允许用大写字母X或0x开头\n-换行符例:\101-'A'

\134-'\'

25转义字符的使用示例#include<stdio.h>#include<iostream.h>intmain(){ cout<<'\''<<'\n'; cout<<'\"'<<'\n'; cout<<'\\'<<'\n'; cout<<"\x4f\x4b\041\n"; return0;}一个字符常量占一个字节的空间字符常量以其ASCII码形式存放01100001'a'(ASCII=97)00110010'2'(ASCII=50)字符常量在内存中的存放形式作为char类型数据,实质上是一个字节长度的整型数据,数值是其ASCII码27长度为0的字符串(即一个字符都没有的字符串)称为空串,表示为""(一对紧连的双引号)。字符串常量用一对双引号括起来的字符序列。字符串中字符的个数称为字符串长度。"a","3.14",""

"Howareyou\n"例如,"Howdoyoudo!"、"Goodmorning!",都是字符串常量,其长度分别为14和13(空格也是一个字符)。28在内存中字符串中的每个字符以其ASCII值的二进制形式按顺序存放。系统自动在字符串的末尾加一个空字符‘\0’

(值为0,即符号常量NULL)作为字符串的结束标志。'\0'不可显示,也不引起任何控制动作。例如字符串"china"在内存中的实际存储如下:字符串常量的存储形式注意:

在书写字符串常量时,不必加结束字符'\0',否则画蛇添足。输出字符串时'\0'不输出'c''h''i''n''a''\0'010000110100100001001001010011100100001000000000实际占用6字节而非5字节内存空间。29课堂练习-字符串存放'\0''a''\0'0970"""a"'a'97'a'

"a"与'a'是不同的30字符常量与字符串常量的区别定界符不同:字符常量使用单引号,而字符串常量使用双引号;长度不同:字符常量的长度固定为1,而字符串常量的长度,可以是0,也可以是某个整数;存储要求不同:字符常量存储的是字符的ASCII码值,而字符串常量,除了要存储串中字符的ASCII码值外,还要存储一个结束标志'\0'。31符号常量习惯上用大写字母表示符号常量#definePI3.14注意:在一个程序中不能对同一个符号常量定义多次如:#definePI3.14#definePI3.141596使用之前必须预先定义。32例1计算圆的周长和面积#include<iostream.h>intmain(){intr=4;floats,l;l=2*3.14*r;s=3.14*r*r;cout<<"l="<<l<<endl<<"s="<<s<<endl;return0;}符号常量的优点示例#definePI3.14PIPI3.14159√含义清晰√一改全改33变量变量的含义

3a变量名变量值存储单元一个变量有一个名字在内存中占据一定的存储单元该存储单元中存放该变量的值34变量变量的定义定义形式:变量类型变量名列表原则:先定义,后使用inta,b,c;a=2;b=3;c=a+b;inta=2,b=3,c;c=a+b;35注意C++中没有字符串变量不能把一个字符串赋值给一个字符型变量charname;name="Mary";()362.4 类型转换

提升规则

如果将数值转换成较高的类型则可以通过隐式的类型转换,如3.14+2如果要将数值转换成较低的类型,必须显式地使用强制类型转换,如(int)3.14;数据类型的表示范围和精度:P26—表2-6372.4 类型转换

隐式类型转换当表达式中运算符所操作的数据的类型与实际要求不符时,要进行隐式类型转换,使表达式中各数据的类型符合要求算术表达式中隐式类型转换规则是:把表达式中不同类型的数据转换成精度最高、占用内存最多的那个数据的类型。在类型不冲突的赋值表达式中,自动将赋值运算符右边表达式的值的类型转换成左边变量的类型。382.4 类型转换

强制类型转换(又称显式类型转换)形式为:(类型)表达式

类型(表达式)例如:(double)3/2或

double(3)/2(double)(3/2)或

double(3/2)39类型转换示例(1)将实型数据(包括单精度、双精度)赋给整型变量时,舍弃实数的小数部分。inti;i=3.56;/*i的值为3*/将整型数据赋给实型变量时,数值不变,但以浮点数形式存储到变量中。floatf;doubled;f=23;/*f的值为23.00000*/d=23;/*d的值为23.00000000000*/将double型数据赋给float型变量时,截取前面7位有效数字,存储到变量中。40类型转换示例(2)将字符型数据赋给整型变量时,保持原值不变将int、short、long型数据赋给字符型变量时,将其低8位原封不动地送到字符型变量。001000010010000100000001inti=289;charc;c=i;ci412.5 运算符和表达式

主要分为:算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符等

根据组成表达式的运算符的不同,表达式可以分为算术表达式、关系表达式、逻辑表达式、位运算表达式、逗号表达式和赋值表达式等。

42运算符的优先级结合性运算符的优先级和结合性a+b*c–d/e乘除比加减优先级高(a+b)*(c-d)/e用圆括号()改变运算符的执行次序同一个表达式中不同运算符进行运算的先后次序表达式中运算符优先级相同时的运算顺序通常单目、三目和双目中的赋值运算符是右结合性,其余为左结合性通常单目运算符的优先级高于双目和三目运算符a+b-c+和-的结合方向都是从左向右,称为左结合性

a=b=1=的结合方向是从右向左,称为右结合性43优先级与结合性总结不同优先级的运算符,运算顺序按优先级由高到低执行同一优先级的运算符,运算顺序按结合性的规定执行可以使用圆括号()明确运算次序,圆括号()具有最高的优先级44顺口溜醋坛酸味灌味落跳福豆醋-初等:()[]->

.

坛-单目:++--!~-负号(类型)*指针&取地址sizeof长度酸-算术:*/%+-减味-位移:<<>>灌-关系:<<=>>===等于!=不等于味-位逻:&按位与^按位异或|按位或落-逻辑:&&逻辑与||逻辑或跳-条件:三目:?:福-赋值:=+=-=*=/=%=>>=<<=&=^=|=豆-逗号:,45表达式用运算符将操作数连接起来所构成的式子。2.5*b-6/c+'z'-max(x,y)常量变量有返回值的函数调用i=(b<a*c)表达式单个的操作数也是表达式注意:各运算符所能连接的操作数的个数、位置及类型都有各自的规定。表达式都有值。462.5 运算符和表达式

一元算术运算+

正,运算结果同操作数;-负,运算结果为操作数的负数;

++自增运算符;

--自减运算符;47自增、自减运算符示例++i,--i前缀形式:运算符在变量前面,表示对变量先自增或自减,然后再参与其它运算,运算结果具有左值性质。先加(减)后用。i++,i--后缀形式:运算符在变量后面,表示变量先参与其它运算,再自增或自减。先用后加(减)。48课堂练习—++、--运算符a=1;b=a++;a=1;b=++a;a=1;b=a--;a=1;b=--a;a为2;b为1;a为2;b为2;a为0;b为1;a为0;b为=0;49++、--运算符举例#include<stdio.h>voidmain(){inti=3,j=10,m,n,p,q;m=++i; n=i++;p=--j; q=j--;printf(”i=%d,m=%d,n=%d\n”,i,m,n);printf(”j=%d,p=%d,q=%d\n”,j,p,q);}i=5,m=4,n=4j=8,p=9,q=950++、--运算符使用注意具有右结合性在有++和--的表达式中,尽量不要使用难于理解或容易出错的表达式。不能用于常量和一般表达式inta,b,c;a=(b+c)++; /*非法!!!*/a=34++; /*非法!!!*/512.5 运算符和表达式

二元算术运算+

加法,运算结果为两个操作数的和;-减法,运算结果为左操作数减去右操作数的差;

*乘法,运算结果为两个操作数的乘积;

/除法,运算结果为左操作数除以右操作数的商;

求余,运算结果为左操作数除以右操作数的余数,只用于整型数据,其结果也是整型;522.5 运算符和表达式

二元算术运算+-*/,运算的两个数中有一个为float型数据,则运算的结果为double型。因为在做运算时,所有的float数据都做double型数据处理。两个整数作/运算时,其结果为整数。但如果除数或被除数中有一个为负值时,具体结果取决于C++在具体机器上的实现。一般来说,大多数实现都采取“向零取整”,即直接截去商的小数部分532.5 运算符和表达式

二元算术运算%只能用于整型数据,其运算结果也是整形数据。C++规定,如果两个操作数都是正的,那么结果一定是正的;否则,要看C++的具体实现,C++标准对这种情况未作明确规定,如在MicrosoftC++实现中,求余运算%的结果总是与左操作数的符号一致。

注:不同类型的数据进行运算,要先转换成同一类型。54算术运算示例注意:两个整数作/运算,其结果为商的整数部分,商的小数部分直接截去;参与%运算的操作数必须是整数,否则出错;其结果也是整数。7/5

结果为17%5

结果为2%运算结果的符号同左操作数。20%6结果为220%-6结果为2-20%6结果为-2-20%-6结果为-2552.5 运算符和表达式

关系运算(比较运算)

<:小于<=:小于或等于>:大于>=:大于或等于==:等于!=:不等于关系表达式:表达式关系运算符表达式表达式结果为布尔类型:false(假)和true(真)

562.5 运算符和表达式

逻辑运算!:逻辑非&&:逻辑与||:逻辑或逻辑表达式:表达式逻辑运算符表达式

注:表达式可以使任何类型的,因为表达式都有值。0:“假”;非0:“真”。表达式结果为布尔类型:false(假)和true(真)

2.5 运算符和表达式

逻辑运算—真值表ab!a!ba&&ba||b非0非000非00000011011110001100注:短路原则582.5 运算符和表达式

位运算~:按位取反

<<:向左移位>>:向右移位&:按位与|:按位或^:按位异或操作数只能是整型或字符型数据,不能浮点型数据3&14结果为000000103|14结果为000011113^14结果为0000110114结果为111100013<<5结果为01100000-7>>5课本P33注:右端对齐,非负补0,零补1;无符号则补0.~592.5 运算符和表达式

逗号运算(顺序求值运算)

先左后右计算表达式的值,取表达式n的值为整个运算式的结果逗号运算符的优先级最低注意:并不是任何地方出现的逗号,都是逗号运算符。很多情况下,逗号仅用作分隔符。如:printf("%d%d",a,b);表达式1,表达式2,表达式3,…,表达式na=3*5,a*4结果为60(a=3*5,a*4

温馨提示

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

评论

0/150

提交评论