《class02变量、常量和数据类型.ppt》由会员分享,可在线阅读,更多相关《class02变量、常量和数据类型.ppt(52页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、面向对象程序设计与实践第第2课课变量、常量和数据类型变量、常量和数据类型主讲人:杨峰主讲人:杨峰Page 1本课主要内容本课主要内容n变量的概念变量的概念n变量类型变量类型n变量的输入和输出变量的输入和输出n变量的赋值与初始化变量的赋值与初始化n常量和字面量常量和字面量Page 21 变量的基本概念变量的基本概念1.1 什么是变量?(重要的基础什么是变量?(重要的基础(o )!)!)n对象对象(Object)l一个对象是内存中的一片区域,这个对象对应一个类型一个对象是内存中的一片区域,这个对象对应一个类型(type)l类型不同,这片区域的大小就不同类型不同,这片区域的大小就不同 n一个一个有名
2、字的对象有名字的对象就是变量就是变量(variable)n存储在这个区域中的数就是存储在这个区域中的数就是变量的值变量的值(value)n向程序中引入一个变量名称的语句称为变量的声明语句向程序中引入一个变量名称的语句称为变量的声明语句(declaration statement)double srcVoltage;该语句声明了一个名称为该语句声明了一个名称为srcVoltage的变量的变量 该语句同时为变量该语句同时为变量srcVoltage分配了分配了8个字节个字节的内存空间,这种声明称为变量定的内存空间,这种声明称为变量定义义(definition)int ResistTotal=3;变量
3、定义时可以同时提供变量的初始值变量定义时可以同时提供变量的初始值 该语句定义了一个名称为该语句定义了一个名称为ResistTotal的的整型整型变量,初始值为变量,初始值为3。Page 31.2 变量的变量的3个特性个特性n特性特性1:名字:名字(Identifer,标识符标识符)l名字由字母,数字,下划线组成,只能由字名字由字母,数字,下划线组成,只能由字母或下划线开头母或下划线开头(不能用数字开头哦不能用数字开头哦)lC+的名字大小写敏感的名字大小写敏感(Num和和num是不同是不同的两个名字的两个名字)Page 41.2 变量的变量的3个特性个特性n名字名字l建议的命名规范建议的命名规范
4、变量名要有描述性,能指明变量的作用变量名要有描述性,能指明变量的作用变量的命名风格有变量的命名风格有2种种全小写,下划线分隔,如全小写,下划线分隔,如line_total大小写混排大小写混排,小写开头,不用下划线,如小写开头,不用下划线,如srcVoltage,resistTotal。下划线开头的变量名一般用于库函数,应用编下划线开头的变量名一般用于库函数,应用编程中变量名不要用下划线开头。程中变量名不要用下划线开头。变量名中最好不要用数字,也不要用单个的变量名中最好不要用数字,也不要用单个的l l做变量名,因为多数屏幕字体很难区分做变量名,因为多数屏幕字体很难区分l l和和1 1.变量定义的
5、位置:与变量定义的位置:与K&R C 不同,不同,C+建议建议需要用时才定义变量,而不建议都在函数前部需要用时才定义变量,而不建议都在函数前部提前定义。提前定义。相同类型的变量虽然可以放在一行,用逗号分相同类型的变量虽然可以放在一行,用逗号分隔,但是建议各占一行,如隔,但是建议各占一行,如srcVoltage的定的定义。义。Page 51.2 变量的变量的3个特性个特性n特性特性2:类型:类型(type)Page 61 变量的基本概念变量的基本概念n类型类型(type)l整型是可以用二进制精确表示的数据类型整型是可以用二进制精确表示的数据类型 char型型占占1个字节的内存空间个字节的内存空间
6、 以二进制数表示字符的以二进制数表示字符的ASCII码值码值(什么意思嘛(什么意思嘛(_)?)?)unsigned char型型 值范围值范围02550255(即即2 28 8-1-1)char型型-128127-128127(最高位为符号位,该位为最高位为符号位,该位为1表示负数表示负数)Page 71 变量的基本概念变量的基本概念n类型类型(type)l整型是可以用二进制精确表示的数据类型整型是可以用二进制精确表示的数据类型 int型型short,int,long,long long shortintlong,32位系统中位系统中short 16位位(2字节字节),int 32位位(4字节
7、字节),long 32位位(4字节字节),long long 64位位(8字节字节)unsigned int就表示就表示02023232-1-1,即,即4GPage 81 变量的基本概念变量的基本概念n二进制二进制l进制换算进制换算110102进制进制-10进制进制 1*24+1*23+0*22+1*21+0*20=26 10进制进制-2进制进制 26-11010l字节字节Byte:8个二进制位个二进制位(bit)l字字word:2个字节称为一个个字节称为一个word,一个,一个word也就是两个字节,也就是两个字节,16个二进制位。个二进制位。n八进制八进制 01234567 11010-3
8、2octn16进制进制 0123456789ABCDEF 11010-1AhexPage 91 变量的基本概念变量的基本概念n类型类型(type)l整型是可以用二进制精确表示的数据类型整型是可以用二进制精确表示的数据类型 bool型型C+增加的类型,特有。增加的类型,特有。true/false 1个字节个字节Page 101 变量的基本概念变量的基本概念n类型类型(type)l整型是可以用二进制精确表示的数据类型整型是可以用二进制精确表示的数据类型 枚举型枚举型是整型常量的一个列表是整型常量的一个列表enum Color RED,BLUE,GREEN,YELLOW,WHITE,BLACK,MA
9、GENTA,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 111 变量的基本概念变量的基本概念n类型类型(
10、type)l浮点型是二进制不能精确表示的数据类型浮点型是二进制不能精确表示的数据类型 浮点型分浮点型分float,double,long double在内存中按在内存中按 IEEE 754标准规定的二进制格式存标准规定的二进制格式存放浮点数。放浮点数。float占占4个字节,个字节,double 8个字节,个字节,long double没有规定,只要大于等于没有规定,只要大于等于double即即可,可,VC中是中是12个字节个字节 float能表示的最小实数约能表示的最小实数约10-7,double能表示能表示的最小实数约的最小实数约10-15 对于除对于除0,或,或0/0,结果是,结果是Na
11、N(Not a Number)1 变量的基本概念变量的基本概念n类型类型(type)lstring类型类型 为了方便操作字符串,为了方便操作字符串,C+在标准库中提供了一在标准库中提供了一个个字符串数据类型字符串数据类型string(嘛(嘛(v)?)?)Page 12string prompt=请输入电压值:请输入电压值:;cout prompt;Page 131 变量的基本概念变量的基本概念n类型类型(type)ltypedef语句语句 typedef语句声明一个新的类型名字语句声明一个新的类型名字 typedef的作用是的作用是给一个已有的数据类型一给一个已有的数据类型一个别名,通常是为了
12、更简明和清晰个别名,通常是为了更简明和清晰 typedef unsigned char BYTE;typedef unsigned short WORD;typedef long long INT64;Page 141.2 变量的变量的3个特性个特性n特性特性3:值:值(value)l用赋值运算符用赋值运算符=为变量赋值为变量赋值(assign value)l赋值就是将值赋值就是将值value保存到该变量对应的内保存到该变量对应的内存区域存区域 srcVoltage=3.0;将数值将数值3.0存放到存放到srcVoltage所占用的所占用的8个字节的内存中。个字节的内存中。变量在赋值或初始化以
13、前,存放在对应内存中的值是一个垃圾值。变量在赋值或初始化以前,存放在对应内存中的值是一个垃圾值。赋值时要防止超范围的回绕。赋值时要防止超范围的回绕。比如一个比如一个unsigned short变量,可以表示变量,可以表示065535的整数,如果给它的整数,如果给它赋值赋值65537,超出范围就会回绕到,超出范围就会回绕到1。Page 151.3 变量的输入和输出变量的输入和输出n数值变量的输入输出数值变量的输入输出 lC+的变量输出的变量输出 将变量的值输出到屏幕通过标准输出流将变量的值输出到屏幕通过标准输出流cout实实现现 cout srcVoltage;将变量将变量srcVoltage的
14、值输出到屏幕上。的值输出到屏幕上。为了更清楚的表示输出的含义,为了更清楚的表示输出的含义,增加一些描述的字符串增加一些描述的字符串:cout 电压源电压电压源电压=srcVoltage r1;从键盘读入变量从键盘读入变量r1的值。要求用户输入之前,应该给出提示:的值。要求用户输入之前,应该给出提示:cout r1 r2 r3;从键盘读入从键盘读入3个数,第一个数赋给个数,第一个数赋给r1,第二个数赋给,第二个数赋给r2,第,第3个数赋给个数赋给r3注意输入的注意输入的3个数之间需要用空格分隔个数之间需要用空格分隔,不能用,不能用,分隔分隔还要注意输入的数值与变量类型要匹配还要注意输入的数值与变
15、量类型要匹配。如本例中。如本例中3个变量都是浮点数,个变量都是浮点数,所以应输入所以应输入 1.02.03.0这样的序列。这样的序列。如果如果3个变量都是整型,就应输入个变量都是整型,就应输入123这样的序列。如果不匹配,读入这样的序列。如果不匹配,读入到变量的值就不正确。到变量的值就不正确。Page 171.3 变量的输入和输出变量的输入和输出n数值变量的输入输出数值变量的输入输出 lC+的变量输入的变量输入/显示用户输入的数据显示用户输入的数据cout 计算输入条件:计算输入条件:endl;cout 电压源电压电压源电压=srcVoltage endl;cout 电阻值电阻值r1=r1 r
16、2=r2 r3=r3 endl;接收数据以后,一般都需要把得到的变量值显示出来,以确保变量得到的接收数据以后,一般都需要把得到的变量值显示出来,以确保变量得到的正确的值:正确的值:Page 181.3 变量的输入和输出变量的输入和输出n数值变量的输入输出数值变量的输入输出 lC的变量输出的变量输出 C语言的输出通过语言的输出通过printf函数实现函数实现 printf(电压源电压电压源电压=%fn,srcVoltage);输出浮点型变量代码如下:输出浮点型变量代码如下:第一个字符串称为格式串,控制输出显示的格式。第一个字符串称为格式串,控制输出显示的格式。格式串包括格式串包括2部分内容,普通
17、字符和转换说明符。部分内容,普通字符和转换说明符。l 普通字符在输出时原封不动的输出到屏幕上普通字符在输出时原封不动的输出到屏幕上;l 转换说明符转换说明符(conversion specifications)以以%开头,说明从第开头,说明从第2个参数及以个参数及以后的参数如何输出到屏幕上。后的参数如何输出到屏幕上。这里的这里的%f表示把第表示把第2个参数个参数srcVoltage以浮点数的形式输出。该代码输出的效以浮点数的形式输出。该代码输出的效果与前面果与前面C+的输出代码效果相同。的输出代码效果相同。Page 191.3 变量的输入和输出变量的输入和输出n数值变量的输入输出数值变量的输入
18、输出 lC的变量输出的变量输出 C语言(不是语言(不是C+()/啦啦啦)啦啦啦)的输的输出通过出通过printf函数实现函数实现 printf(r1=%f r2=%f r3=%fn,r1,r2,r3);printf是个很特别的函数,它可以是个很特别的函数,它可以带可变数目的参数带可变数目的参数。如果要同时输出。如果要同时输出多个变量值,可以带更多的参数,比如输出多个变量值,可以带更多的参数,比如输出3个电阻值,代码如下:个电阻值,代码如下:如果要输出整型变量,转换说明符为如果要输出整型变量,转换说明符为%dprintf(resistTotal=%dn,resistTotal);Page 201
19、.3 变量的输入和输出变量的输入和输出n数值变量的输入输出数值变量的输入输出 lC的变量输出的变量输出 与与C+的标准输出流相比的标准输出流相比,printf既有优点也有缺点。既有优点也有缺点。缺点缺点:l printf无法检查数据类型无法检查数据类型,如果一个浮点型变量却对应了一个如果一个浮点型变量却对应了一个%d(整型)(整型)的说明符,输出就会出现错误,的说明符,输出就会出现错误,l 由于是可变参数,由于是可变参数,printf也无法检查参数个数是否正确也无法检查参数个数是否正确,如果,如果只有只有3个待显示的参数,却写了个待显示的参数,却写了4个转换说明符,程序几乎立刻就个转换说明符,
20、程序几乎立刻就会宕掉。会宕掉。优点优点:l 控制输出格式比控制输出格式比cout要方便。要方便。结论结论:cout能提供更好的类型检查,建议使用能提供更好的类型检查,建议使用cout。Page 211.3 变量的输入和输出变量的输入和输出n数值变量的输入输出数值变量的输入输出 lC的变量输入的变量输入 C语言的语言的输入输入通过通过scanf函数实现函数实现 scanf(%lf%lf%lf,&r1,&r2,&r3);scanf函数的使用方法与函数的使用方法与printf类似,也是可变参数的函数,第一个参数为格式类似,也是可变参数的函数,第一个参数为格式串,后面的参数为待取值的变量,比如要获取串
21、,后面的参数为待取值的变量,比如要获取3个电阻值,代码如下:个电阻值,代码如下:注意:注意:l 对对double型变量,型变量,printf使用使用%f,而,而scanf必须使用必须使用%lf,%f只能用于只能用于float型变量,如果用于型变量,如果用于double型变量,会得到错误的输入结果。型变量,会得到错误的输入结果。l 所有待输入的参数前面必须加所有待输入的参数前面必须加&号号Page 221.3 变量的输入和输出变量的输入和输出n数值变量的输入输出数值变量的输入输出 lC的变量输入的变量输入 scanf(r1=%lf r2=%lf,r3=%lf,&r1,&r2,&r3);格式串中的
22、普通文本没有什么用,比如格式串中的普通文本没有什么用,比如如果在键盘输入如果在键盘输入 12 13 14只会得到错误的结果。要得到正确的结果,必须键入只会得到错误的结果。要得到正确的结果,必须键入 r1=12 r2=13,r3=14(手工键入所有这些字符,简直是自找麻烦手工键入所有这些字符,简直是自找麻烦)scanf(%lf,%lf,%lf,&r1,&r2,&r3);表示以,作为分隔符,应输入表示以,作为分隔符,应输入12,13,14。相比之下,。相比之下,cin只能以空格作为分隔只能以空格作为分隔符符结论:结论:scanf是很脆弱的函数,很容易出错,更不能进行类型与参数个数检查,所是很脆弱的
23、函数,很容易出错,更不能进行类型与参数个数检查,所以建议不要使用,以建议不要使用,C+程序应使用标准输入流程序应使用标准输入流cinPage 231.3 变量的输入和输出变量的输入和输出n字符变量的输入输出字符变量的输入输出 lC+的字符输出的字符输出 与数值变量相同,用标准输出流的流插入运算与数值变量相同,用标准输出流的流插入运算符输出。符输出。Page 241.3 变量的输入和输出变量的输入和输出n字符变量的输入输出字符变量的输入输出 lC+的字符输入的字符输入 方法一:用标准输入流的流提取运算符方法一:用标准输入流的流提取运算符 char hundred,ten,unit;cout hu
24、ndred;cin ten;cin unit;cout 百百位位数数是是 hundred 十十位位数数是是 ten 个位数是个位数是 unit endl;实现逐位读入实现逐位读入3位数的每一位字符并显示位数的每一位字符并显示Page 251.3 变量的输入和输出变量的输入和输出n字符变量的输入输出字符变量的输入输出 lC+的字符输入的字符输入 方法二:用标准输入流的方法二:用标准输入流的get()方法方法 cout 请输入一个请输入一个100999间的整数间的整数;cin.get(hundred);cin.get(ten);cin.get(unit);cout 百百位位数数是是 hundred
25、 十十位位数数是是 ten 个位数是个位数是 unit endl;Page 261.3 变量的输入和输出变量的输入和输出n字符变量的输入输出字符变量的输入输出 lC的字符输出的字符输出 方法一:用方法一:用printf()函数,转换说明符用函数,转换说明符用%c 方法二:用方法二:用putchar()或或_putch()函数,如函数,如putchar(hundred);或或 _putch(hundred);Page 271.3 变量的输入和输出变量的输入和输出n字符变量的输入输出字符变量的输入输出 lC的字符输入的字符输入 用用getchar()函数函数 cout 请输入一个请输入一个1009
26、99间的整数间的整数n;hundred=getchar();/C风格的字符输入风格的字符输入ten=getchar();unit=getchar();printf(百百位位数数是是%c 十十位位数数是是%c 个个位位数数是是%cn,hundred,ten,unit);实现逐位读入实现逐位读入3位数的每一位字符并显示位数的每一位字符并显示Page 281.3 变量的输入和输出变量的输入和输出n字符串变量的输入输出字符串变量的输入输出 lC+的字符串输出的字符串输出 字符串的输出与其它类型变量相同,通过标准字符串的输出与其它类型变量相同,通过标准输出流的流插入运算符实现输出流的流插入运算符实现 P
27、age 291.3 变量的输入和输出变量的输入和输出n字符串变量的输入输出字符串变量的输入输出 lC+的字符串输入的字符串输入 方法一:用标准输入流的流提取运算符实现方法一:用标准输入流的流提取运算符实现 string name;/C+的字符串的字符串cout name;/标准输入流的流提取运算符以空格符为分隔,只能得标准输入流的流提取运算符以空格符为分隔,只能得到空格符前的字符串到空格符前的字符串cout 得到的得到的name是是 name endl;由于由于cin以空格作为分隔符,所以当输入以空格作为分隔符,所以当输入yang feng时,只能读出时,只能读出yang到到name中中Pag
28、e 301.3 变量的输入和输出变量的输入和输出n字符串变量的输入输出字符串变量的输入输出 lC+的字符串输入的字符串输入 方法二:用全局函数方法二:用全局函数getline()读入一行内容读入一行内容 string name;/C+的字符串的字符串cout 请再次用拼音输入姓名请再次用拼音输入姓名(空格分隔空格分隔);getline(cin,name);/用全局函数用全局函数getline()获取字符串获取字符串,可可以输入一行内的所有内容,并可以使用以输入一行内的所有内容,并可以使用C+的字符串的字符串cout 得到的得到的name是是 name endl;name中输入的就是完整的中输入
29、的就是完整的“yang feng”Page 311.3 变量的输入和输出变量的输入和输出n字符串变量的输入输出字符串变量的输入输出 lC+的字符串输入的字符串输入 方法三:用标准输入流的方法三:用标准输入流的getline()方法方法 char name50;/C风格的字符串风格的字符串cout 请用拼音输入姓名请用拼音输入姓名(空格分隔空格分隔);cin.getline(name,50);/用标准输入流的成员函数用标准输入流的成员函数getline()获取字符串获取字符串,可以输入一行内的所有内容,但只能使用可以输入一行内的所有内容,但只能使用C风格的字符串风格的字符串cout 得到的得到的
30、name是是 name endl;效果同上。但是这个方法只能使用效果同上。但是这个方法只能使用C风格的字符串,不能使用风格的字符串,不能使用string类型。类型。这个函数有这个函数有2个参数,第一个参数是待输入的字符串,第二个参数是这个字符串的个参数,第一个参数是待输入的字符串,第二个参数是这个字符串的最大长度。最大长度。Page 321.3 变量的输入和输出变量的输入和输出n字符串变量的输入输出字符串变量的输入输出lC的字符串输的字符串输出出 方法一:用方法一:用printf()函数,转换说明符用函数,转换说明符用%s 方法二:通过方法二:通过puts()函数输出字符串,如函数输出字符串,
31、如puts(name);该函数会在行尾自动增加一个回车换行符该函数会在行尾自动增加一个回车换行符 Page 331.3 变量的输入和输出变量的输入和输出n字符串变量的输入输出字符串变量的输入输出 lC的字符串输的字符串输入入 方法一:通过方法一:通过scanf()函数函数输入输入 char name50;/C风格的字符串风格的字符串printf(请用拼音输入姓名请用拼音输入姓名(空格分隔空格分隔);scanf(%s,name);puts(name);与与cin的问题相同,的问题相同,scanf()也是以空格作为分隔符,也只能读入空格前的内容。也是以空格作为分隔符,也只能读入空格前的内容。这里的
32、第二个参数不能加这里的第二个参数不能加&号,号,Page 341.3 变量的输入和输出变量的输入和输出n字符串变量的输入输出字符串变量的输入输出 lC的字符串输入的字符串输入 方法二,用方法二,用gets()函数函数输入输入 char name50;/C风格的字符串风格的字符串printf(请用拼音输入姓名请用拼音输入姓名(空格分隔空格分隔);gets(name);printf(读入的读入的name是是%sn,name);gets()函数也是读入完整的一行内容函数也是读入完整的一行内容。但注意它只有一个参数,就是待输入的字符串变量名,该函数没有检查字符串的最但注意它只有一个参数,就是待输入的字
33、符串变量名,该函数没有检查字符串的最大长度,如果键入的字符串超过大长度,如果键入的字符串超过name的长度,程序马上会崩溃。的长度,程序马上会崩溃。Page 351.3 变量的输入和输出变量的输入和输出n总结总结l变量的输入始终是一个很薄弱的环节,无论变量的输入始终是一个很薄弱的环节,无论是是scanf(),gets()还是还是cin,都很容易出错。,都很容易出错。所以从键盘输入时,一定要注意键入的数据所以从键盘输入时,一定要注意键入的数据格式、数量、长度要与程序中的变量对应。格式、数量、长度要与程序中的变量对应。lprintf使用很方便,是使用很方便,是C语言中最常用的输语言中最常用的输出手
34、段该函数执行时间比较长,单个的字符出手段该函数执行时间比较长,单个的字符和字符串可以用和字符串可以用putchar()和和puts()替代。替代。lC+程序中尽量使用程序中尽量使用cin和和cout实现输入输实现输入输出,可以进行数据类型检查,数据个数也不出,可以进行数据类型检查,数据个数也不会错误会错误Page 361.4 变量的运算变量的运算l变量之间可以通过各种已定义的运算符变量之间可以通过各种已定义的运算符(operator)进行运算进行运算(operation)l变量之间的算术运算包括变量之间的算术运算包括+-*/与数学中与数学中的运算规则完全相同。的运算规则完全相同。l整数还有求余
35、运算整数还有求余运算%以除法为例,如以除法为例,如 1.0/r1 就是求就是求r1的倒数的倒数 注意:注意:整数的除法只保留整数部分,比如整数的除法只保留整数部分,比如2/5,得到的结果会是,得到的结果会是0,而,而5/2则得到则得到2。因为整数没有小数位,所以结果是直接取整。因为整数没有小数位,所以结果是直接取整(不是四舍五不是四舍五入入)Page 371.5 变量的赋值与初始化变量的赋值与初始化int resistTotal=3;在定义变量的同时赋值,这个过程称为变量初始化在定义变量的同时赋值,这个过程称为变量初始化Initialization(giving a variable its
36、initial value)resistTotal=3;称为赋值称为赋值assignment(giving a variable a new value)二者的区别在于:二者的区别在于:l 初始化时变量里是空的,没有有效内容;初始化时变量里是空的,没有有效内容;l 赋值则是先清除变量中原有的内容,再赋予新的值。赋值则是先清除变量中原有的内容,再赋予新的值。Page 382 常量常量n常量常量constant是值初始化以后就不能是值初始化以后就不能改变的变量改变的变量 l常量也是对象,有名字,类型和值,在内常量也是对象,有名字,类型和值,在内存中占用一定的区域存中占用一定的区域 l只能初始化,不
37、能赋值只能初始化,不能赋值 39例:假设给定半径,要求圆的面积和周长例:假设给定半径,要求圆的面积和周长int main()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,译为魔数,译为魔数
38、或幻数,是一种不好的编程习惯。首先,写起来很麻烦;其次,如果想提高计算精或幻数,是一种不好的编程习惯。首先,写起来很麻烦;其次,如果想提高计算精度,用更多小数位的度,用更多小数位的值,那么就要把程序中所有的全部替换一遍,这有可能产生值,那么就要把程序中所有的全部替换一遍,这有可能产生遗漏。因此更好的方法是把定义为一个常量:遗漏。因此更好的方法是把定义为一个常量:const double PI=3.1415926;int main()double radius;cout radius;double perimeter=2*PI*radius;double area=PI*radius*radiu
39、s;cout 圆的半径为圆的半径为 radius endl;cout 圆的周长为圆的周长为 perimeter t圆的面积为圆的面积为 area endl;Page 402 常量常量n常量的定义与变量相同,前面加常量的定义与变量相同,前面加const并并通过定义式初始化常量的值通过定义式初始化常量的值 n如果需要修改这个值,只需要在程序首部如果需要修改这个值,只需要在程序首部改动这个值,重新编译即可改动这个值,重新编译即可 n常量的命名习惯采用全大写常量的命名习惯采用全大写 n所有在程序中会出现的数值型的字面值都所有在程序中会出现的数值型的字面值都应该定义为常量应该定义为常量(除了除了0和和1
40、)注意概念:教材节中把这种量称为常变量注意概念:教材节中把这种量称为常变量Page 413 字面量字面量n在代码中在代码中出现的固定值就称为字面量或字出现的固定值就称为字面量或字面值面值(literal)n字面量不是对象字面量不是对象,不不在内存中在内存中占据占据一个一个存存储区域储区域,而,而只是只是程序代码中的程序代码中的一串字符一串字符而而已。已。常量常量constant是值初始化以后就不能是值初始化以后就不能改变的改变的变量变量。常量。常量是对象是对象,有名字,类型,有名字,类型和值,和值,在内存中占用一定的区域在内存中占用一定的区域(注意区(注意区别别(o )!)!)注意概念:字面量
41、就是教材中注意概念:字面量就是教材中2.2节节讲的常量讲的常量Page 423 字面量字面量n因为因为C中没有中没有const关键字,所以在关键字,所以在C中中constant(常量常量)就对应就对应C+中的中的literal(字面量字面量)n搞什么呀这搞什么呀这混乱混乱INGPage 433.1 字符字面量字符字面量l字符字面量是以单引号字符字面量是以单引号 包围包围的一个字的一个字符符 可打印字符,如可打印字符,如aa,AA,#,%不可打印的字符不可打印的字符 加一个转义符加一个转义符(escape),如如rr 回车回车,nn 换行换行,tt 跳格跳格,反斜杠反斜杠,“双引号,双引号,00
42、 ASCII码码0 0空字空字符符 加转义符也可以表示所有的字符,格式为加转义符也可以表示所有的字符,格式为dddddd xhhxhh 3位八进制位八进制 或或 2位位16进制。进制。如如007007表示响铃一声,也可写成表示响铃一声,也可写成x0707 Page 443.1 字符字面量字符字面量l显示字符对应的显示字符对应的ASCII码码 charchar ca ca=aa;/换换成成任任一一一一个个字字符符 如如 ,A,A,r,n,t,007r,n,t,007intint na na=ca ca;coutcout ca ca tt na na tt oct oct showbase sho
43、wbase na na tt hex hex na na endl endl;标标准准流流输输出出操操作作符符输输出出字字符符型型会会以以字字符符的的形形式输出。式输出。由由于于字字符符型型里里保保存存的的是是字字符符对对应应的的ASCII码码,实实际际上上就就是是一一个个字字节节的的整整型型,为为了了显显示示对对应应的的ASCII,把把ca赋赋值值给给一一个个整整型型,就就可可以以输输出出ca对应对应ASCII的数值了的数值了Page 453.2 字符串字面量字符串字面量l字符串变量是以双引号字符串变量是以双引号“”包围包围的一串字的一串字符符l串中每一个字符的取值按照上面字符字面串中每一个
44、字符的取值按照上面字符字面量的格式量的格式 cout cout Aacd007t101rAacd007t101r;SleepSleep(10001000););/include/include cout cout BbCDnBbCDn;看看什么效果。看看什么效果。Page 463.3 符号常量符号常量symbol constantlC语言中没有语言中没有const常量,要定义常量,要定义的值需的值需要用符号常量。符号常量通过预编译指令要用符号常量。符号常量通过预编译指令define实现实现#define PI 3.1415926 虽然虽然看起来效果相同,但是注意二者有根本的区别:看起来效果相同
45、,但是注意二者有根本的区别:符号常量在程序中出现的时候是一个字面量。符号常量在预编译时就用符号常量在程序中出现的时候是一个字面量。符号常量在预编译时就用3.1415926替换了程序中所有的替换了程序中所有的PI,所以编译器根本就看不到,所以编译器根本就看不到PI这个名称。这个名称。const double PI=3.1415926;这个这个PI是是double型,在内存中对应型,在内存中对应8个字节的空间,编译器可以看到这个名称,个字节的空间,编译器可以看到这个名称,也可以根据它的类型也可以根据它的类型进行数据类型检查进行数据类型检查。因此,因此,在在C+程序中尽量程序中尽量不不使用符号常量使
46、用符号常量。Page 473.4 整型字面量整型字面量l整型字面量缺省对应整型字面量缺省对应int型型l以以0开头表示开头表示8进制,以进制,以0 x开头表示开头表示16进进制否则就是制否则就是10进制进制 l以以U或或u结尾表示无符号的整数,对应结尾表示无符号的整数,对应unsigned int型型l以以L结尾表示长整型结尾表示长整型,超过,超过正负正负20亿的亿的L就是就是long long型,型,UL对应对应unsigned long型型 (不要使用小写的不要使用小写的l结尾结尾)Page 483.5 浮点型字面量浮点型字面量l浮点型字面量有浮点型字面量有2种常见形式,第一种有种常见形式
47、,第一种有小数点,第二种指数形式小数点,第二种指数形式l可用可用 符号符号 数字部分数字部分 指数部分指数部分 的形式表述的形式表述 符号表示正负符号表示正负;数字部分数字部分:如果后面没有指数部分,数字部分如果后面没有指数部分,数字部分必须有小数点;如果后面有指数部分,可以没必须有小数点;如果后面有指数部分,可以没有小数点有小数点;小数点后有数字,小数点前只有一个小数点后有数字,小数点前只有一个0 0,这个,这个0 0可以省略可以省略;指数部分:指数部分:e开头,开头,e后面只能是整数,可正后面只能是整数,可正可负。可负。l以以f结尾表示结尾表示float型。型。l以以L结尾表示结尾表示lo
48、ng double型。型。l啥也没有啥也没有double型。型。Page 493 字面量字面量n总结总结l字面量不是对象,没有名字,没有对应内字面量不是对象,没有名字,没有对应内存空间,也没有类型,只是代码中的一串存空间,也没有类型,只是代码中的一串字符而已字符而已 l编译器根据字面量提供的信息构造一个临编译器根据字面量提供的信息构造一个临时变量,这个临时变量的类型如何确定完时变量,这个临时变量的类型如何确定完全根据这串字符提供的信息确定全根据这串字符提供的信息确定 单引号包围就是字符型单引号包围就是字符型 Page 503 字面量字面量双引号包围就是字符串型双引号包围就是字符串型 没有小数点也没有没有小数点也没有e就是整型就是整型 整型后面带个整型后面带个U就是无符号整型,带个就是无符号整型,带个L就是就是长整型长整型 有小数点或有小数点或e就是浮点型就是浮点型 浮点型后面带个浮点型后面带个f就是就是float,带个,带个L就是就是long double,啥也不带就是,啥也不带就是double Page 51The End