c++运算符与表达式_第1页
c++运算符与表达式_第2页
c++运算符与表达式_第3页
c++运算符与表达式_第4页
c++运算符与表达式_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

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

文档简介

1、Chapter 2 数据运算与表达式了解C、C+是如何处理数和进行计算的2 本章主要内容 2.1 数据类型 2.2 C+中的基本数据类型 2.3 变量 2.4 常量 2.5 数组 2.6 运算和表达式面向对象的程序设计2.1 数据类型4 一、数据类型一类数据的统一规范称作数据类型l同样的存储方式l同样的取值范围l同样的表达能力l同样的操作规范面向对象的程序设计5 一、数据类型C+中的数据类型可以分为l基本(预定义)数据类型:语言已经定义好的,如整型、浮点l复合数据类型:由多个相同的基本数据类型组合成的新数据类型,如数组l自定义:程序员自定义的,由预定义数据类型所组成的数据类型,如结构体、类面向

2、对象的程序设计2.2 C+中的基本数据类型7 一、基本数据类型只要二种基本数据类型:整型、浮点型根据数值的范围不同,每类再细化为几类:l整数:char,short,long,intl浮点:float,double按照是否区分数的正负分为:lsigned, unsigned无论变量、常数,都有数据类型,按照各自的类型所规定的格式存放在内存里面向对象的程序设计8 二、整型用补码来存储数据表示整数l正数的补码:原码l负数的补码:取反加一输出时,可以按照10进制、16进制、8进制、字符(ASCII)进行输出按照存储的数据长度分:l8位整数:char,-128127,l16位整数:short,-3276

3、832767l32位整数:long,-6553665536lunsigned char: 0 255,unsigned short:065536,unsigned long: 0 2(32)-1运算的溢出:自动截断,不认为是错误关于int:以编译器的版本决定数据长度不同进制:分别以0 x,0,1.9开头的数字面向对象的程序设计9 三、字符型l表示范围: 有符号:-128127 无符号:0255l常用来存储字符,以ASCII表示特定的字符l输出 面向对象的程序设计C+: int a = 65; char b = 65; couta“n”; coutbshort-long-double-float

4、l赋值,被赋值变量的类型,结果:不准确人工强制转换int a;(float) a;float(a);面向对象的程序设计2.3 变量(Variable)14 变量变量:指在程序的运行过程中,其值随时可以发生变化的量。定义变量的要素l数据类型:决定用来存放什么样的数据(可省略)l存储类型:决定变量存放在什么地方、使用范围l变量的名称:代号l变量的值:内容一个具有唯一名称的容器面向对象的程序设计15 如何从无到有声明(declaration):告诉编译器“我需要一个变量”定义(definition):告诉编译器“生成一个变量”l以上两步大部分场合是同时执行的,如果不加特别说明,将以上两步统称为定义初

5、始化(initialization):在定义变量的同时让它有一个初值赋值(assignment):给变量一个新值使用面向对象的程序设计16 变量的定义定义(创建)一个变量,并在内存中为其分配存储空间,以存放其值l存储类型 数据类型 变量名;lC语言必须在外部或者块语句开始的位置/C+可以在任何位置l声明的方式决定了,其寿命周期和可见性(作用域)面向对象的程序设计17 变量的初始化在定义时赋予初值如果不赋初值,编译器会自动给一个l不同类型的变量,初始化的方式和次数不同l外部、内部static,仅进行一次初始化,不显式初始化时,初值为0l内部,多次初始化,不显式初始化时,初值为不定值面向对象的程序

6、设计18 变量的使用面向对象的程序设计19 变量的寿命周期Everything has a beginning has a endl全局寿命:始终存在l局部寿命:在语句块结束时消失l动态寿命:想让它消失就消失面向对象的程序设计20 变量的寿命周期int a;Main()这里的a是一个全局变量,只有当整个程序结束时它才会消失面向对象的程序设计21 变量的寿命周期Main()fun();void fun()int a;这里的a是一个局部变量,只有当fun函数被调用时生成,调用结束时消失面向对象的程序设计22 变量的可见性作用域:在程序中可以见到并使用变量的范围l全局可见l局部可见变量重名l在不同作

7、用域内变量允许重名l内部范围对其外部范围内定义的变量,具有覆盖性一个问题:可见性和寿命是一致的吗?面向对象的程序设计23 变量的数据类型变量是实体,是存在于内存之中的;数据类型只是一种规范,是与编译器的约定。用数据类型来定义一个变量,就是指这个变量需要符合该数据类型所约定的规范面向对象的程序设计24 变量的名称给变量起名字l变量的类型、数据类型、意义l匈牙利命名法:变量名属性类型对象描述 l不能作为变量首字母的字符l不要太简单,如a,b, 也不要使用大小写会数据进行区分,a1, b1, A1,B1面向对象的程序设计25 变量的存储类型与变量的声明位置一起,共同决定了变量在内存中的存放位置,及变

8、量的寿命周期和可见性变量的几个存放位置l数据段(全局)、堆栈段stack(临时、局部)、堆heap(动态)、寄存器(register)声明位置:内部变量、外部变量四种存储类型lauto(默认)lstaticlregister(少用)lextern(多文件程序常用,以后讲)面向对象的程序设计26 “Static”存储类型Static有两种不同的含义l如果用来修饰全局变量,表示该变量只在本文件内可见(后面章节讲)l如果用来修饰局部变量,则该变量在定义一次之后将永久存在,不随着语句块的结束而消失用static修饰的变量,可见性和寿命不一致面向对象的程序设计27 再回到变量的初始化如果不赋初值,编译器

9、会自动给一个l不同类型的变量,初始化的方式和次数不同l外部、内部static,仅进行一次初始化,不显式初始化时,初值为0l内部,多次初始化,不显式初始化时,初值为不定值面向对象的程序设计28 #includeint i=1;main() static int a; int b=-10; int c=0; printf(- main -n); printf(i=%d, a=%d ,b=%d, c=%dn“, i,a,b,c); c = c + 8; other(); printf(- main -n); printf(“i=%d, a=%d ,b=%d, c=%dn”, i,a,b,c); i

10、= i+10; other(); getch();面向对象的程序设计other() static int a=2; static int b; int c =10; a= a+2; i = i+32; c = c+5; printf(- other -n); printf(i=%d, a=%d ,b=%d, c=%dn, i, a, b, c); b=a;2.4 常量30 一旦定义值就不能改变的量l在数据类型前加 const在C语言里没有,C语言的常量一般用宏来实现l#define A 100(注意这后面没有分号)面向对象的程序设计31 各种显式的数或字符也是一种常量l立即数:进制,类型l字符

11、常量:单引号:Al字符串常量:双引号 “ABC”l换码序列(转义序列)l反斜杠 + 一个字母|三位八进制数|x二位十六进制数l用途:l字符l控制字符:回车、换行、tabl不方便表示的字符,如 ”、 等面向对象的程序设计2.5 数组(了解)33 一、什么是数组把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。 C中属于构造(复合)数据类型面向对象的程序设计34 二、数组的声明声明格式:l类型说明符 数组名 常量表达式,; l类型是数组元素的类型l表达式是常量表达式,不能含变量l表达式的值是数组元素的最大个数,l元素从0开始,a0命名遵守标识符的命名规则,不允

12、许与其他标识符重名数据类型、存储类型及其它特性与变量相同面向对象的程序设计35 三、数组的使用、赋值和初始化使用:不能整体使用,使用数组元素赋值:按元素赋值,不能整体赋值初始化:l外部数组、内部static可以初始化(原来),现在一般允许l使用初始化列表,一次初始化lint a5=100,120,140,160,200;lint b=1,3,6,8;注意下标溢出的问题面向对象的程序设计36 #define MAXA 10void main() int i, max, aMAXA;printf(input 10 numbers:n);for(i=0;iMAXA;i+)scanf(%d, &

13、;ai);max=a0;for(i=1;imax) max=ai;printf(maxmum=%dn, max);面向对象的程序设计2.6 运算和表达式38 一、基本概念运算:对数据(对象)进行的处理操作符(运算符,operator):描述不同运算的符号,同一个运算符对不同类型的数据,运算的逻辑意义一样,处理的过程是不同的。l一元(单目)、二元(双目)、三元运算符面向对象的程序设计39 表达式:有操作符、操作数组成的式子,用来描述一个计算过程,涉及类型转换、优先级、结合规则、求值顺序等l优先级:表达式中多个操作符的执行顺序的规定性,如: *x+; / 先做x+结合性:同级操作符的执行顺序的规定

14、性,如: a=b=6; / 先做b=6表达式是C/C+的语句面向对象的程序设计40 二、算术操作符赋值运算la=3, b=c; d=r=f;算术运算l+ - * / %l操作数的类型,混合运算,类型转换l表达式的类型算术赋值运算l+= -= *= /= %=面向对象的程序设计41 赋值运算式作为一个整体的值赋值运算式作为一个整体的值赋值运算表达式整个表达式的值是最右侧操作数的值面向对象的程序设计42 算术运算问题算术运算问题( Arithmetic Problems )( Arithmetic Problems )超出范围,溢出整型数表示范围有限,如: 不能用整型变量累计的一般循环方法来解:

15、int sum = 0; for(int i=1; i=10000; +i) sum += i; coutsum“n”;面向对象的程序设计43 浮点数的精度和有效位 影响比较的正确性,如: float f1 = 7.123456789;float f1 = 7.123456789; float f2 = 7.123456785; float f2 = 7.123456785; if ( f1=f2 ) cout if ( f1=f2 ) cout“f1 equal to f2nf1 equal to f2n”; ; float f = 1.0/3.0; float f = 1.0/3.0; d

16、ouble d = 1.0/3.0; double d = 1.0/3.0; if ( g=d ) cout if ( g=d ) cout“g not equal to dng not equal to dn”; ;结果为:结果为: f1 equals to f2f1 equals to f2 g not equals to d g not equals to d面向对象的程序设计44 浮点数计算的近似性 使精确性比较失败,如: double d1 = 123456789.9double d1 = 123456789.9* *9;9; double d2 = 1111111109.1; do

17、uble d2 = 1111111109.1;if ( d1!=d2 ) cout if ( d1!=d2 ) cout “Not samenNot samen” ; ;else cout else cout “SamenSamen” ; ;if ( abs ( d1-d2 ) 0.00001f) cout if ( abs ( d1-d2 ) 0.00001f) cout “SamenSamen” ; ;else cout else cout , =,=,!=l关系运算的结果:成立:1,不成立:0逻辑运算l&,|,!l运算的结果:成立:1,不成立:0面向对象的程序设计48 =与=的区

18、别intint x = 9;if if ( x = 0 ) cout “test 1 okn” ;if if ( x = 5 ) cout “test 2 okn” ;if if ( x = 0 ) cout “test 3 okn” ;结果为:test 2 ok面向对象的程序设计49 !=!=是操作符,是操作符,=!=!不是操作符不是操作符 int int x = 3; if if ( x!=9 ) cout “not 9n” ; if if ( x=!9 ) cout “impossiblen” ;条件表达式(x!=0)与(x)等同 int int x = 3; if if ( x !=

19、0 ) cout x ; if if ( x ) cout x ;面向对象的程序设计50 不等式连写的错误: int int a = -1, b = 0, c = 1; if if ( abc ) cout “ok1n” ; if if ( ab & bc ) cout 2 ) if ( b & a / b2 ) cout cout “oknokn” ; ; 避免不必要的求值 if ( a=0 | b=func() ) if ( a=0 | b=func() ) coutcout”uselessnuselessn”; ; 面向对象的程序设计52 五、位操作( Bit Opera

20、tions ) 左移操作 将整数最高位挤掉,在右端补0。如: intint a = 12; / a为:00000000000000000000000000001100 a = a在整数的高位挤一个在整数的高位挤一个0 0或或1 1进去(有符号数挤符号位,无符进去(有符号数挤符号位,无符号数挤号数挤 ),而整数最低位被挤掉。如:),而整数最低位被挤掉。如: short intshort int a = -2; / 1111111111111110 a = a1; a=-1 即1111111111111111 unsigned short int unsigned short int b = 65535; / 1111111111111111 b = b1;

温馨提示

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

评论

0/150

提交评论