《C课件2数据类型与表达式.ppt》由会员分享,可在线阅读,更多相关《C课件2数据类型与表达式.ppt(63页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第二章 数据类型与表达式qC+的数据类型q常量q变量qC+的运算符q算术运算符与算术表达式q赋值运算符与赋值表达式q逗号运算符与逗号表达式2.1 C+的数据类型#includeusing namespace std;int main()/求园的周长和面积 double r,girth,area;const double pi=3.1415;cout r;girth=2*pi*r;area=pi*r*r;cout radius=r endl;cout girth=girth endl;cout area=area r;girth=2*pi*r;area=pi*r*r;cout radius=r
2、endl;cout girth=girth endl;cout area=area endl;return 0;类型类型说明说明字节字节数值范围数值范围short int短整型短整型2-215-215-1unsigned short int无符号短整型无符号短整型20 216-1 signed int整型整型4(-231 231-1)long int长整型长整型unsigned int无符号整型无符号整型4(0 232-1)unsigned long int无符号长整型无符号长整型常量中没有常量中没有unsigned型,但一个非负的整型常量可以赋给型,但一个非负的整型常量可以赋给unsigne
3、d型的变量。型的变量。整型常量整型常量亦有长短之分,若一个常量定义为长整型数,则在其后亦有长短之分,若一个常量定义为长整型数,则在其后加加l或或L进行区分。进行区分。如:如:32l32L564L等,内存为其分配等,内存为其分配4个字节存储。个字节存储。整型常量整型常量n整型常量即是没有小数点的整数整型常量即是没有小数点的整数n范围:范围:-231(231-1)n有三种形式有三种形式十进制(默认方式)十进制(默认方式)43134587654八进制八进制以以0开头开头043056011十六进制十六进制以以0 x开头开头0 x120 xa30 xdf#includevoidmain(void)int
4、int10,int8,int16;/定义定义3个整型变量个整型变量int10=10;/默认为十进制默认为十进制int8=010;/八进制八进制int16=0 x10;/十六进制十六进制coutint10=int10endl;coutint8=int8endl;coutint16=int16endl;输出输出int10=10int8=8int16=16#includevoidmain()unsignedshorta;shortintb=-1;a=b;couta=aendl;结果显示:结果显示:a=65535不同类型的整型数据间不同类型的整型数据间的赋值归根到底就是一的赋值归根到底就是一条:条:按
5、存储单元中的存按存储单元中的存储形式直接传送储形式直接传送。a1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1b1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1unsignedshorta;注意注意n单精度单精度 float 提供提供78位有效数字位有效数字n双精度双精度 double 提供提供1516位有效数字。位有效数字。nC+中实型数据只有十进制形式中实型数据只有十进制形式n小数形式和指数形式小数形式和指数形式 1.3.3 1.3.3 基本类型基本类型 实型数据 类型类型说明说明字节字节数值范围数值范围float单精度型单精度型4 3.410-38 3.410
6、38 double双精度型双精度型81.710-308 1.710308long double长双精度型长双精度型+|-Digits.Digits F|f|L|l 只允许省略只允许省略其中一个数字串其中一个数字串1.3.3 1.3.3 基本类型基本类型 十进制小数形式十进制小数形式实型常量F/f-float型型L/l-double型型例如:例如:-2.34 3.1416 29.00 .23 78.0.23-2.34f 3.1416L 29.00 .23f 78.L 0.23+|-Digits.Digits Exponent F|f|L|l 指数部分的表示形式指数部分的表示形式(e|E)+|-D
7、igits1.3.3 1.3.3 基本类型基本类型 1.3 C+的基本数据类型与存储形式指数形式指数形式实型常量 尾数,数字串尾数,数字串例如:例如:1.23E10 0.23E-4 45.e+23 -23.68E121.23E10F 0.23E-4f 45.e+23L -23.68E12LF/f-float型型L/l-double型型实型常量n实型常量在内存均以指数形式存放 N=SRJS 尾数(小数)尾数(小数),它决定有效数字它决定有效数字(即精度即精度)J 指数(整数)指数(整数),它决定数的范围它决定数的范围R 基数,可取基数,可取2,4,8,16等等n当计算机中出现小于机器所能表示的最
8、小数当计算机中出现小于机器所能表示的最小数时,机器只能当时,机器只能当零零来处理来处理.n当出现超过机器所能表示的最大数时,就会当出现超过机器所能表示的最大数时,就会出现出现溢出现象溢出现象,此时机器就会停止运算,此时机器就会停止运算 字符常量1.普通的字符常量用单引号单引号括起来的单个字符。a,#,%,D注意n只包括一个字符只包括一个字符,如 AB 是不合法的。n区分大小写字母区分大小写字母,如 A 和 a 是两个不同的字符常量。n cout a;输出一个字母 a ,而不是3个字符 a 字符常量2.转义字符常量n有些有些ASCII的字符代表某些操作,不能打印的字符代表某些操作,不能打印出来,
9、如回车、退格等,可用出来,如回车、退格等,可用转义字符转义字符表表示这些字符示这些字符n转义字符转义字符 字符序列字符序列以“”为前缀,表示改变后面字符序列使其成为控制符或字符值。转义字符转义字符含含义义ASCII代码代码a响铃响铃7换行,将当前位置移到下一行开头换行,将当前位置移到下一行开头10水平制表(跳到下一个水平制表(跳到下一个tab位置)位置)9退格,将当前位置移到前一列退格,将当前位置移到前一列8回车,将当前位置移到本行开头回车,将当前位置移到本行开头13换页,将当前位置移到下页开头换页,将当前位置移到下页开头12v竖向跳格竖向跳格8反斜杠字符反斜杠字符“”92单引号(撇号)字符单
10、引号(撇号)字符39双引号字符双引号字符340空字符空字符0ddd1到到3位位8进制数所代表的字符进制数所代表的字符xhh1到到2位位16进制数所代表的字符进制数所代表的字符 字符常量3.字符数据在内存中的存储形式n如:字符常量a和 bn内存存放的是a的ASCII码97(61H)b 的ASCII码98(62H)1000011001000110ab可见,字符数据的存储形式与整数的存储形式类似可见,字符数据的存储形式与整数的存储形式类似例2.1 将字符赋给整型变量。#include using namespace std;int main()int i,j;/i和j是整型变量i=A;/将一个字符常
11、量赋给整型变量ij=B;/将一个字符常量赋给整型变量jcouti j n;/输出变量i和j的值,n 是换行符return 0;执行时输出 65 662.2.3 字符常量可见:可见:在一定条件下,字符型数据和整型数据是在一定条件下,字符型数据和整型数据是可以通用的。可以通用的。但应注意字符数据只占一个字节,它只能但应注意字符数据只占一个字节,它只能存放存放0255范围内的整数范围内的整数。例2.1 将字符赋给整型变量。#include using namespace std;int main()char c1,c2;/c1和c2是字符型变量 c1=65;/将一个数值常量赋给字符型变量c1 c2=
12、B;/将一个字符常量赋给字符变量c2coutc1 c2 n;/输出c1和c2的值return 0;执行时输出 A B2.2.3 字符常量改程序改程序 字符常量4.字符串常量n用双引号双引号括起来的若干个字符,如:nHello!,a+b,Lipingn字符串常量在内存中的存储形式abc在内存中占4个字节;n编译系统会在每个字符串之后自动加一个 0作为字符串结束标志作为字符串结束标志。n0的ASCII码值为001100001011000100110001100000000字符串常量举例n以下字符串常量在内存中各占多少字节?hello 101abncdn区分字符常量与字符串常量 一个字符:一个字符:
13、a ”一个字符串一个字符串:“a”“path:”d:mathex1.c”-6个字节,最后1个是0-8个字节,最后1个是0#include using namespace std;int main()cout x07operationt systemn;cout 101 t A 012 ;return 0;横向跳一制表符横向跳一制表符1.3.3 1.3.3 基本类型基本类型 转义字符举例换行符换行符:ASCII:ASCII:012012ASCII码码-x07,是响铃是响铃,可写成可写成a字符字符A的的ASCII码,与码,与A等价等价operation systemA A执行结果n用一个符号名代替
14、一个常量,称为符号常量用一个符号名代替一个常量,称为符号常量#define pi 3.14159 /没有分号 int main()float r,girth,area;cout r;girth=2*pi*r;area=pi*r*r;cout radius=r endl;cout girth=girth endl;cout area=area r;girth=2*pi*r;area=pi*r*r;cout radius=r endl;cout girth=girth endl;cout area=area =!=逻辑运算符!&|位运算符|&赋值运算符=及扩展的复合运算符及扩展的复合运算符条件运算
15、符?:逗号运算符,指针运算符*引用运算符和地指算符&求字节运算符sizeof强制类型转换符(类型类型)类型(类型()成员运算符.-下标运算符 其他():new delete2.4 C+的运算符o运算规则运算规则o优先级优先级o结合性结合性+加法,或单目求正加法,或单目求正-减法,或单目求负减法,或单目求负*乘法乘法/除法除法%求模求模(求余求余)基本算术运算符有:2.5 算术运算符与算术表达式n两个整数相除结果为整数两个整数相除结果为整数 1/2=0 5/2=2n整数求余的余数符号与左边数的符号相同。整数求余的余数符号与左边数的符号相同。3%2=1 -3%2=-1 3%-2=1 -3%-2=-
16、1 8%4=0操作数可以是整型数、操作数可以是整型数、实型数或字符型数实型数或字符型数操作数只能是整型数操作数只能是整型数或字符型数或字符型数注意n算术表达式n用算术运算符连接起来的式子n运算对象包括常量、变量、函数等。a*b/c-1.5+abs(-1)+an算术运算符的优先级n先乘除(*,/)后加减(+,-)n算术运算符的结合性n同级同级自左至右自左至右2.5.2 算术表达式和运算符的优先级与结合性例:例:定义以下不同类型的变量定义以下不同类型的变量 char c=a;int i=3;folat f=3.5,g=-1.2;double d=5.6;10+3*b/2 c+1 a+b c+i*f
17、 f+c*d-b*3.14C+中以下式子均合法:中以下式子均合法:表达式中各类数值型数据间的混合运算不同类型数据混合运算,不同类型数据混合运算,系统自动系统自动将不同类型转将不同类型转换成同一类型换成同一类型例:例:定义以下不同类型的变量定义以下不同类型的变量 char c=a;int i=3;folat f=3.5,g=-1.2;double d=5.6;10+3*b/2 c+1 a+b c+i*f f+c*d-b*3.14C+中以下式子均合法:中以下式子均合法:表达式中各类数值型数据间的混合运算转换规则转换规则向高看齐向高看齐intintintdoubledoublei0+11.6.1 算
18、术表达式算术表达式 自增和自减运算符程序设计中,常对变量进行如下操作:程序设计中,常对变量进行如下操作:i=i+1 i=i-1此时,变量此时,变量 i 称为称为计数器计数器定义:定义:int i=0;1 1i=i+1C+提供的自增和自减算符提供的自增和自减算符2.5.4 自增和自减运算符算符算符前缀式前缀式后缀式后缀式自增自增+i+i含义含义先引用,先引用,后自增后自增1(i=i+1)先自增先自增1(i=i+1)后引用后引用自减自减-i-i含义含义先引用,先引用,后自减后自减1(i=i-1)先自减先自减1(i=i-1)后引用后引用 1.6.1 算术表达式算术表达式 自增和自减运算符i3inti
19、,j;i=3;j=+i;i=4 j=4 +在前在前,先运算先运算,后赋值后赋值inti,j;i=3;j=i+;i=4 j=3+在后在后,先赋值先赋值,后运算后运算j44i3j341.6.1 算术表达式算术表达式注意:n自增、自减运算符只能用于整型变量整型变量,不能为常量或表达式;例:5+,+(a+),(x+y)-,(-i)+均为错误 自增和自减运算符运算符的结合方式n前置时:自右至左前置时:自右至左n例,已知:例,已知:int a=0,b=0,c;n c=a+n等价于等价于 c=a;a=a+1;n c=a+b n等价于等价于 c=(a+)+bn等价于等价于 c=a+b;a=a+1;n后置时:自
20、左至右后置时:自左至右nC=+an等价于等价于 a=a+1;c=a1.6.1 算术表达式算术表达式 自增和自减运算符注意:注意:编译扫描器编译扫描器优先向左识别优先向左识别算符算符2.5.4 自增和自减运算符注意滥用自增、自减运算符的副作用n如已知:int a=3,b,c;couta+”a+;n结果:4 3(前置+,系统从右到左从右到左扫描,最后a=5)b=(a+)+(a+)nb=6(前置+,系统以3作为(a+)的值,得b,最后a=5)c=(+a)+(+a)nc=10n后置+,系统自左至右自左至右扫描后,得a=5,并将它作为式中(+a)的值,两个(+a)相加得10总之,不要写出别人看不懂,自己
21、也总之,不要写出别人看不懂,自己也不知道系统会怎样执行的程序不知道系统会怎样执行的程序n程序编制者利用强制类型转换运算符将一个表达式转换成所需类型。例如:(double)(将a的值转换成double类型)(float)(5%3)(将5%3的值转换成float型)(int)5.5%2(int)(x+y)=int(x+y)(将x+y的值转换成整型)(int)x+y (只将的值转换成整型,然后与相加,x的类型不变)n强制类型转换适用于自动类型转换不能实现而又必须类型转换的场合,如“%”的运算对象 强制类型转换运算符变量变量 =表达式表达式2.6 赋值运算符与赋值表达式 n赋值运算符赋值运算符 =;功
22、能功能:将运算表达式的值赋给将运算表达式的值赋给左边左边的变量的变量n“=”左边左边必须是变量名。必须是变量名。n若若“=”两边变量类型不同两边变量类型不同或同类型不同长或同类型不同长度时度时,系统自动进行转换系统自动进行转换(隐式转换隐式转换);n转换原则:根据转换原则:根据左边左边变量的类型转换。变量的类型转换。目标变量类型目标变量类型 表达式类型表达式类型赋值过程中的隐式类型转换:例2.5 将有符号数据传送给无符号变量。#include using namespace std;int main()unsigned short a;short int b=-1;a=b;couta=aend
23、l;return 0;运算结果:a=65535a 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1b 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1赋值过程中的自动类型转换:n整型整型=实型实型 :取整取整 int a;long b;float x=2.3;double y=3.5;n 实型实型=a=2a=x;=a=2 b=y;b=y;=b=3=b=3 a=y;=a=3 a=y;=a=3a)a)赋值运算符两边不同类型赋值运算符两边不同类型b)b)赋值运算符两边同类型赋值运算符两边同类型,不同长度不同长度n float=double float=double:在取值
24、范围内截取相应的有效位数在取值范围内截取相应的有效位数 float x;float x;double y;double y;y=1.23456789e12y=1.23456789e12x=y;x=y;y=1.23456789e56y=1.23456789e56x=y;/*x=y;/*数据溢出数据溢出*/n 实型实型(长长)=)=实型实型(短短):以长实型表示并存储:以长实型表示并存储 实型:实型:赋值过程中的自动类型转换:少字节少字节多字节多字节1)若多字节变量为)若多字节变量为unsigned,则转换后多余字节补零。则转换后多余字节补零。0 0 0 0 0 0 0 0 1 1 1 1 1 1
25、 1 11 1 1 1 1 1 1 1unsignedshortinta=-1;unsignedlongb;b=a;a ab b整型数赋值过程的自动类型转换1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1有符号型,符号扩展有符号型,符号扩展shortinta=-1;longb;b=a;少字节少字节多字节多字节2)若多字节变量为)若多字节变量为有符号型有符号型,则转换后扩展少字节的,则转换后扩展少字节的最高位。最高位。转换后,数据的符号不变。转换后,数据的符号不变。a ab b整型数赋值过程的自动类型转换多字节多字节少字节:少字节:低位照搬,高位低位照
26、搬,高位截断截断1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1inta=-1;shortintb;b=a;b=-1inta=65535;shortintb;b=a;b=-1b ba a1 1 1 1 1 1 1 1整型数赋值过程的自动类型转换复合赋值运算双目算符双目算符op的表达式:的表达式:A=AopB可以缩写成:可以缩写成:Aop=Bc=c-kc-=kx=x*(y+8)x*=y+8x=x+3x+=3x=x%3x%=3例:例:复合的赋值运算符 赋值运算符赋值运算符 的结合性为的结合性为自右至左自右至左2.6.4 赋值表达式na=b=c=5等价于:a=5,b=5,c=5na=(
27、b=4)+(c=6)等价于:b=4,c=6,a=4+6=10na+=b-等价于:a=a+(b-)等价于:a=a+b,b=b-1a=12;a+=a-=a*a;12aa=a-(a*a)=12-(12*12)=-132a=a+(-132)=-132-132=-264-132-2642.6.4 赋值表达式赋值运算符赋值运算符 的结合性为的结合性为自右至左自右至左1、inti=0,j=0;2、inti=0,j=1;i=3,(j+)+i;i+=j*=3;3、inti=1,j=0;4、inti=1,j=1;j=i=(i=3)*2);i+=j+=2;i=3,j=1i=3,j=3i=6,j=6i=4,j=3下列
28、语句中表达式中i,j的值各为多少2.7 逗号运算符和逗号表达式 逗号表达式格式:表达式表达式1,表达式表达式2,表达式表达式3 ,表达式表达式n其中其中,称为逗号运算符,称为逗号运算符,运算级别最低运算级别最低;功能功能 顺序执行顺序执行 表达式表达式1、表达式、表达式2、表达式、表达式3 表达式表达式n,最后获得逗号表达式的值。,最后获得逗号表达式的值。逗号表达式示例:逗号表达式示例:(1)(1)a=3*5,a*4 a=3*5,a*4(2)(2)(a=3*5,a*4),a+5(a=3*5,a*4),a+5(3)(3)b=(a=3,6*3)b=(a=3,6*3)(4)(4)b=a=3,6*ab=a=3,6*a15,a=1515,a=156060606015,a=1515,a=1560606060202020203,a=33,a=318181818b=18b=183,a=3,b=33,a=3,b=3181818182.7 逗号运算符和逗号表达式