class02变量、常量和数据类型.ppt

上传人:牧羊曲112 文档编号:6503117 上传时间:2023-11-07 格式:PPT 页数:52 大小:327.99KB
返回 下载 相关 举报
class02变量、常量和数据类型.ppt_第1页
第1页 / 共52页
class02变量、常量和数据类型.ppt_第2页
第2页 / 共52页
class02变量、常量和数据类型.ppt_第3页
第3页 / 共52页
class02变量、常量和数据类型.ppt_第4页
第4页 / 共52页
class02变量、常量和数据类型.ppt_第5页
第5页 / 共52页
点击查看更多>>
资源描述

《class02变量、常量和数据类型.ppt》由会员分享,可在线阅读,更多相关《class02变量、常量和数据类型.ppt(52页珍藏版)》请在三一办公上搜索。

1、,面向对象程序设计与实践,第2课变量、常量和数据类型,主讲人:杨峰,Page 1,本课主要内容,变量的概念变量类型变量的输入和输出变量的赋值与初始化常量和字面量,Page 2,1 变量的基本概念,1.1 什么是变量?(重要的基础(o)!),对象(Object)一个对象是内存中的一片区域,这个对象对应一个类型(type)类型不同,这片区域的大小就不同 一个有名字的对象就是变量(variable)存储在这个区域中的数就是变量的值(value)向程序中引入一个变量名称的语句称为变量的声明语句(declaration statement),double srcVoltage;,该语句声明了一个名称为s

2、rcVoltage的变量,该语句同时为变量srcVoltage分配了8个字节的内存空间,这种声明称为变量定义(definition),int ResistTotal=3;,变量定义时可以同时提供变量的初始值,该语句定义了一个名称为ResistTotal的整型变量,初始值为3。,Page 3,1.2 变量的3个特性,特性1:名字(Identifer,标识符)名字由字母,数字,下划线组成,只能由字母或下划线开头(不能用数字开头哦)C+的名字大小写敏感(Num和num是不同的两个名字),Page 4,1.2 变量的3个特性,名字建议的命名规范变量名要有描述性,能指明变量的作用变量的命名风格有2种全小

3、写,下划线分隔,如line_total大小写混排,小写开头,不用下划线,如srcVoltage,resistTotal。下划线开头的变量名一般用于库函数,应用编程中变量名不要用下划线开头。变量名中最好不要用数字,也不要用单个的l做变量名,因为多数屏幕字体很难区分l和1.变量定义的位置:与K&R C 不同,C+建议需要用时才定义变量,而不建议都在函数前部提前定义。相同类型的变量虽然可以放在一行,用逗号分隔,但是建议各占一行,如srcVoltage的定义。,Page 5,1.2 变量的3个特性,特性2:类型(type),Page 6,1 变量的基本概念,类型(type)整型是可以用二进制精确表示的

4、数据类型 char型占1个字节的内存空间 以二进制数表示字符的ASCII码值(什么意思嘛(_)?)unsigned char型 值范围0255(即28-1)char型-128127(最高位为符号位,该位为1表示负数),Page 7,1 变量的基本概念,类型(type)整型是可以用二进制精确表示的数据类型 int型short,int,long,long long shortintlong,32位系统中short 16位(2字节),int 32位(4字节),long 32位(4字节),long long 64位(8字节)unsigned int就表示0232-1,即4G,Page 8,1 变量的基

5、本概念,二进制进制换算110102进制-10进制 1*24+1*23+0*22+1*21+0*20=26 10进制-2进制 26-11010字节Byte:8个二进制位(bit)字word:2个字节称为一个word,一个word也就是两个字节,16个二进制位。八进制 01234567 11010-32oct16进制 0123456789ABCDEF 11010-1Ahex,Page 9,1 变量的基本概念,类型(type)整型是可以用二进制精确表示的数据类型 bool型C+增加的类型,特有。true/false 1个字节,Page 10,1 变量的基本概念,类型(type)整型是可以用二进制精确

6、表示的数据类型 枚举型是整型常量的一个列表,enum Color RED,BLUE,GREEN,YELLOW,WHITE,BLACK,MAGENTA,CYAN;,则RED对应0,BLUE对应1,依此类推。也可以同时指定每个常量的值:(自动的咯(v)嗯?),enum escapes BELL=a,BACKSPACE=b,TAB=t,NEWLINE=n,VTAB=v,RETURN=r;(这种写的方式(o)!),也可以只给定第一个值:,enum months JAN=1,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC;(然后咧?),Page 11,1 变量的基

7、本概念,类型(type)浮点型是二进制不能精确表示的数据类型 浮点型分float,double,long double在内存中按 IEEE 754标准规定的二进制格式存放浮点数。float占4个字节,double 8个字节,long double没有规定,只要大于等于double即可,VC中是12个字节 float能表示的最小实数约10-7,double能表示的最小实数约10-15 对于除0,或0/0,结果是NaN(Not a Number),1 变量的基本概念,类型(type)string类型 为了方便操作字符串,C+在标准库中提供了一个字符串数据类型string(嘛(v)?),Page 1

8、2,string prompt=请输入电压值:;cout prompt;,Page 13,1 变量的基本概念,类型(type)typedef语句 typedef语句声明一个新的类型名字 typedef的作用是给一个已有的数据类型一个别名,通常是为了更简明和清晰,typedef unsigned char BYTE;typedef unsigned short WORD;typedef long long INT64;,Page 14,1.2 变量的3个特性,特性3:值(value)用赋值运算符=为变量赋值(assign value)赋值就是将值value保存到该变量对应的内存区域 srcVol

9、tage=3.0;,将数值3.0存放到srcVoltage所占用的8个字节的内存中。变量在赋值或初始化以前,存放在对应内存中的值是一个垃圾值。,赋值时要防止超范围的回绕。比如一个unsigned short变量,可以表示065535的整数,如果给它赋值65537,超出范围就会回绕到1。,Page 15,1.3 变量的输入和输出,数值变量的输入输出 C+的变量输出 将变量的值输出到屏幕通过标准输出流cout实现,cout srcVoltage;,将变量srcVoltage的值输出到屏幕上。为了更清楚的表示输出的含义,增加一些描述的字符串:,cout 电压源电压=srcVoltage endl;,

10、这里用双引号包围的字符串称为字符串字面量。endl表示输出一个回车换行符。,Page 16,1.3 变量的输入和输出,数值变量的输入输出 C+的变量输入 变量的输入通过cin标准输入流实现,cin r1;,从键盘读入变量r1的值。要求用户输入之前,应该给出提示:,cout 请输入3个电阻值;,变量也可以连续输入:,cin r1 r2 r3;,从键盘读入3个数,第一个数赋给r1,第二个数赋给r2,第3个数赋给r3注意输入的3个数之间需要用空格分隔,不能用,分隔,还要注意输入的数值与变量类型要匹配。如本例中3个变量都是浮点数,所以应输入 1.02.03.0这样的序列。如果3个变量都是整型,就应输入

11、123这样的序列。如果不匹配,读入到变量的值就不正确。,Page 17,1.3 变量的输入和输出,数值变量的输入输出 C+的变量输入,/显示用户输入的数据cout 计算输入条件:endl;cout 电压源电压=srcVoltage endl;cout 电阻值r1=r1 r2=r2 r3=r3 endl;,接收数据以后,一般都需要把得到的变量值显示出来,以确保变量得到的正确的值:,Page 18,1.3 变量的输入和输出,数值变量的输入输出 C的变量输出 C语言的输出通过printf函数实现,printf(电压源电压=%fn,srcVoltage);,输出浮点型变量代码如下:,第一个字符串称为格

12、式串,控制输出显示的格式。格式串包括2部分内容,普通字符和转换说明符。普通字符在输出时原封不动的输出到屏幕上;转换说明符(conversion specifications)以%开头,说明从第2个参数及以后的参数如何输出到屏幕上。这里的%f表示把第2个参数srcVoltage以浮点数的形式输出。该代码输出的效果与前面C+的输出代码效果相同。,Page 19,1.3 变量的输入和输出,数值变量的输入输出 C的变量输出 C语言(不是C+()/啦啦啦)的输出通过printf函数实现,printf(r1=%f r2=%f r3=%fn,r1,r2,r3);,printf是个很特别的函数,它可以带可变数

13、目的参数。如果要同时输出多个变量值,可以带更多的参数,比如输出3个电阻值,代码如下:,如果要输出整型变量,转换说明符为%d,printf(resistTotal=%dn,resistTotal);,Page 20,1.3 变量的输入和输出,数值变量的输入输出 C的变量输出,与C+的标准输出流相比,printf既有优点也有缺点。缺点:printf无法检查数据类型,如果一个浮点型变量却对应了一个%d(整型)的说明符,输出就会出现错误,由于是可变参数,printf也无法检查参数个数是否正确,如果只有3个待显示的参数,却写了4个转换说明符,程序几乎立刻就会宕掉。优点:控制输出格式比cout要方便。结论

14、:cout能提供更好的类型检查,建议使用cout。,Page 21,1.3 变量的输入和输出,数值变量的输入输出 C的变量输入 C语言的输入通过scanf函数实现,scanf(%lf%lf%lf,scanf函数的使用方法与printf类似,也是可变参数的函数,第一个参数为格式串,后面的参数为待取值的变量,比如要获取3个电阻值,代码如下:,注意:对double型变量,printf使用%f,而scanf必须使用%lf,%f只能用于float型变量,如果用于double型变量,会得到错误的输入结果。所有待输入的参数前面必须加&号,Page 22,1.3 变量的输入和输出,数值变量的输入输出 C的变量

15、输入,scanf(r1=%lf r2=%lf,r3=%lf,格式串中的普通文本没有什么用,比如,如果在键盘输入 12 13 14只会得到错误的结果。要得到正确的结果,必须键入 r1=12 r2=13,r3=14(手工键入所有这些字符,简直是自找麻烦),scanf(%lf,%lf,%lf,表示以,作为分隔符,应输入12,13,14。相比之下,cin只能以空格作为分隔符,结论:scanf是很脆弱的函数,很容易出错,更不能进行类型与参数个数检查,所以建议不要使用,C+程序应使用标准输入流cin,Page 23,1.3 变量的输入和输出,字符变量的输入输出 C+的字符输出 与数值变量相同,用标准输出流

16、的流插入运算符输出。,Page 24,1.3 变量的输入和输出,字符变量的输入输出 C+的字符输入 方法一:用标准输入流的流提取运算符,char hundred,ten,unit;cout hundred;cin ten;cin unit;cout 百位数是 hundred 十位数是 ten 个位数是 unit endl;,实现逐位读入3位数的每一位字符并显示,Page 25,1.3 变量的输入和输出,字符变量的输入输出 C+的字符输入 方法二:用标准输入流的get()方法,cout 请输入一个100999间的整数;cin.get(hundred);cin.get(ten);cin.get(u

17、nit);cout 百位数是 hundred 十位数是 ten 个位数是 unit endl;,Page 26,1.3 变量的输入和输出,字符变量的输入输出 C的字符输出 方法一:用printf()函数,转换说明符用%c 方法二:用putchar()或_putch()函数,如putchar(hundred);或 _putch(hundred);,Page 27,1.3 变量的输入和输出,字符变量的输入输出 C的字符输入 用getchar()函数,cout 请输入一个100999间的整数n;hundred=getchar();/C风格的字符输入ten=getchar();unit=getchar

18、();printf(百位数是%c 十位数是%c 个位数是%cn,hundred,ten,unit);,实现逐位读入3位数的每一位字符并显示,Page 28,1.3 变量的输入和输出,字符串变量的输入输出 C+的字符串输出 字符串的输出与其它类型变量相同,通过标准输出流的流插入运算符实现,Page 29,1.3 变量的输入和输出,字符串变量的输入输出 C+的字符串输入 方法一:用标准输入流的流提取运算符实现,string name;/C+的字符串cout name;/标准输入流的流提取运算符以空格符为分隔,只能得到空格符前的字符串cout 得到的name是 name endl;,由于cin以空格

19、作为分隔符,所以当输入yang feng时,只能读出yang到name中,Page 30,1.3 变量的输入和输出,字符串变量的输入输出 C+的字符串输入 方法二:用全局函数getline()读入一行内容,string name;/C+的字符串cout 请再次用拼音输入姓名(空格分隔);getline(cin,name);/用全局函数getline()获取字符串,可以输入一行内的所有内容,并可以使用C+的字符串cout 得到的name是 name endl;,name中输入的就是完整的“yang feng”,Page 31,1.3 变量的输入和输出,字符串变量的输入输出 C+的字符串输入 方法

20、三:用标准输入流的getline()方法,char name50;/C风格的字符串cout 请用拼音输入姓名(空格分隔);cin.getline(name,50);/用标准输入流的成员函数getline()获取字符串,可以输入一行内的所有内容,但只能使用C风格的字符串cout 得到的name是 name endl;,效果同上。但是这个方法只能使用C风格的字符串,不能使用string类型。这个函数有2个参数,第一个参数是待输入的字符串,第二个参数是这个字符串的最大长度。,Page 32,1.3 变量的输入和输出,字符串变量的输入输出C的字符串输出 方法一:用printf()函数,转换说明符用%s

21、 方法二:通过puts()函数输出字符串,如puts(name);该函数会在行尾自动增加一个回车换行符,Page 33,1.3 变量的输入和输出,字符串变量的输入输出 C的字符串输入 方法一:通过scanf()函数输入,char name50;/C风格的字符串printf(请用拼音输入姓名(空格分隔);scanf(%s,name);puts(name);,与cin的问题相同,scanf()也是以空格作为分隔符,也只能读入空格前的内容。这里的第二个参数不能加&号,,Page 34,1.3 变量的输入和输出,字符串变量的输入输出 C的字符串输入 方法二,用gets()函数输入,char name5

22、0;/C风格的字符串printf(请用拼音输入姓名(空格分隔);gets(name);printf(读入的name是%sn,name);,gets()函数也是读入完整的一行内容。但注意它只有一个参数,就是待输入的字符串变量名,该函数没有检查字符串的最大长度,如果键入的字符串超过name的长度,程序马上会崩溃。,Page 35,1.3 变量的输入和输出,总结变量的输入始终是一个很薄弱的环节,无论是scanf(),gets()还是cin,都很容易出错。所以从键盘输入时,一定要注意键入的数据格式、数量、长度要与程序中的变量对应。printf使用很方便,是C语言中最常用的输出手段该函数执行时间比较长,

23、单个的字符和字符串可以用putchar()和puts()替代。C+程序中尽量使用cin和cout实现输入输出,可以进行数据类型检查,数据个数也不会错误,Page 36,1.4 变量的运算,变量之间可以通过各种已定义的运算符(operator)进行运算(operation)变量之间的算术运算包括+-*/与数学中的运算规则完全相同。整数还有求余运算%,以除法为例,如 1.0/r1 就是求r1的倒数,注意:整数的除法只保留整数部分,比如2/5,得到的结果会是0,而5/2则得到2。因为整数没有小数位,所以结果是直接取整(不是四舍五入),Page 37,1.5 变量的赋值与初始化,int resistT

24、otal=3;,在定义变量的同时赋值,这个过程称为变量初始化Initialization(giving a variable its initial value),resistTotal=3;,称为赋值assignment(giving a variable a new value),二者的区别在于:初始化时变量里是空的,没有有效内容;赋值则是先清除变量中原有的内容,再赋予新的值。,Page 38,2 常量,常量constant是值初始化以后就不能改变的变量 常量也是对象,有名字,类型和值,在内存中占用一定的区域 只能初始化,不能赋值,39,例:假设给定半径,要求圆的面积和周长,int mai

25、n()double radius;cout radius;double perimeter=2*3.1415926*radius;double area=3.1415926*radius*radius;cout 圆的半径为 radius endl;cout 圆的周长为 perimeter t圆的面积为 area endl;,的值这里直接写了3.1415926,这种字面值被称为magic number,译为魔数或幻数,是一种不好的编程习惯。首先,写起来很麻烦;其次,如果想提高计算精度,用更多小数位的值,那么就要把程序中所有的全部替换一遍,这有可能产生遗漏。因此更好的方法是把定义为一个常量:,co

26、nst double PI=3.1415926;int main()double radius;cout radius;double perimeter=2*PI*radius;double area=PI*radius*radius;cout 圆的半径为 radius endl;cout 圆的周长为 perimeter t圆的面积为 area endl;,Page 40,2 常量,常量的定义与变量相同,前面加const并通过定义式初始化常量的值 如果需要修改这个值,只需要在程序首部改动这个值,重新编译即可 常量的命名习惯采用全大写 所有在程序中会出现的数值型的字面值都应该定义为常量(除了0和

27、1),注意概念:教材节中把这种量称为常变量,Page 41,3 字面量,在代码中出现的固定值就称为字面量或字面值(literal)字面量不是对象,不在内存中占据一个存储区域,而只是程序代码中的一串字符而已。常量constant是值初始化以后就不能改变的变量。常量是对象,有名字,类型和值,在内存中占用一定的区域(注意区别(o)!),注意概念:字面量就是教材中2.2节讲的常量,Page 42,3 字面量,因为C中没有const关键字,所以在C中constant(常量)就对应C+中的literal(字面量)搞什么呀这混乱ING,Page 43,3.1 字符字面量,字符字面量是以单引号 包围的一个字符

28、 可打印字符,如a,A,#,%不可打印的字符 加一个转义符(escape),如r 回车,n 换行,t 跳格,反斜杠,“双引号,0 ASCII码0空字符 加转义符也可以表示所有的字符,格式为ddd xhh 3位八进制 或 2位16进制。如007表示响铃一声,也可写成x07,Page 44,3.1 字符字面量,显示字符对应的ASCII码 char ca=a;/换成任一一个字符 如,A,r,n,t,007int na=ca;cout ca t na t oct showbase na t hex na endl;标准流输出操作符输出字符型会以字符的形式输出。由于字符型里保存的是字符对应的ASCII码

29、,实际上就是一个字节的整型,为了显示对应的ASCII,把ca赋值给一个整型,就可以输出ca对应ASCII的数值了,Page 45,3.2 字符串字面量,字符串变量是以双引号“”包围的一串字符串中每一个字符的取值按照上面字符字面量的格式 cout cout BbCDn;看看什么效果。,Page 46,3.3 符号常量symbol constant,C语言中没有const常量,要定义的值需要用符号常量。符号常量通过预编译指令define实现,#define PI 3.1415926,虽然看起来效果相同,但是注意二者有根本的区别:符号常量在程序中出现的时候是一个字面量。符号常量在预编译时就用3.14

30、15926替换了程序中所有的PI,所以编译器根本就看不到PI这个名称。,const double PI=3.1415926;,这个PI是double型,在内存中对应8个字节的空间,编译器可以看到这个名称,也可以根据它的类型进行数据类型检查。因此,在C+程序中尽量不使用符号常量。,Page 47,3.4 整型字面量,整型字面量缺省对应int型以0开头表示8进制,以0 x开头表示16进制否则就是10进制 以U或u结尾表示无符号的整数,对应unsigned int型以L结尾表示长整型,超过正负20亿的L就是long long型,UL对应unsigned long型(不要使用小写的l结尾),Page

31、48,3.5 浮点型字面量,浮点型字面量有2种常见形式,第一种有小数点,第二种指数形式可用 符号 数字部分 指数部分 的形式表述 符号表示正负;数字部分:如果后面没有指数部分,数字部分必须有小数点;如果后面有指数部分,可以没有小数点;小数点后有数字,小数点前只有一个0,这个0可以省略;指数部分:e开头,e后面只能是整数,可正可负。以f结尾表示float型。以L结尾表示long double型。啥也没有double型。,Page 49,3 字面量,总结字面量不是对象,没有名字,没有对应内存空间,也没有类型,只是代码中的一串字符而已 编译器根据字面量提供的信息构造一个临时变量,这个临时变量的类型如何确定完全根据这串字符提供的信息确定 单引号包围就是字符型,Page 50,3 字面量,双引号包围就是字符串型 没有小数点也没有e就是整型 整型后面带个U就是无符号整型,带个L就是长整型 有小数点或e就是浮点型 浮点型后面带个f就是float,带个L就是long double,啥也不带就是double,Page 51,The End,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号