C语言2数据类型运算符表达式课件.ppt
《C语言2数据类型运算符表达式课件.ppt》由会员分享,可在线阅读,更多相关《C语言2数据类型运算符表达式课件.ppt(81页珍藏版)》请在三一办公上搜索。
1、第 2 章 数据类型、运算符与表达式,1整型数的二进制表示整型数分为有符号的和无符号的两种;有符号的整型数的正负号由字节的最高位来表示:0表示正数,1表示负数。整型数占用的字节数可为8位、16位或者32位。整型数的取值范围:,2.1 用二进制表示的数,2浮点数的二进制表示浮点数分成单精度浮点数和双精度浮点数;单精度浮点数占32位(4个字节),双精度浮点数占64位(8个字节)。浮点型数据的一般表达式:(1)S2em e是实际的阶码值,代表浮点数的取值范围;m是尾数,代表浮点数的精度。,2.1 用二进制表示的数,(1)单精度浮点型数据的字节分配空间:,2.1 用二进制表示的数,S代表符号位,占1位
2、。E称为“移码”,占8位。E的取值范围为0255,E=127+e 因此,e的取值范围为127+128);M代表有效位数或称为“小数”,m2=(1.M)2,(2)双精度浮点型数据的字节分配空间:,2.1 用二进制表示的数,S代表符号位,占1位。E称为“移码”,占11位。E的取值范围为02047,E=1023+e 因此,e的取值范围为1023+1024);M代表有效位数或称为“小数”,m2=(1.M)2,浮点型数据的取值范围:,2.1 用二进制表示的数,1.C语言提供5种基本数据类型。(1)字符型:用char表示。(2)整数型:用int表示。(3)单精度实数型:用float表示。(4)双精度实数型
3、:用double表示。(5)空类型:用void表示。对整数型,有四种修饰:signed(有符号)unsigned(无符号)long(长型)short(短型)数据类型决定了数据的大小、数据可执行的操作以及数据的取值范围。,2.2 基本数据类型及取值范围,数据类型的长度和取值范围会随着机器的CPU类型和编译器的不同而不同。,2.2 基本数据类型及取值范围,例1:验证数据类型的字节长度。见【例2-1】所示的程序:example2_1.c不同字节长度的数据类型和取值范围:见表2-5和表2-6,2.2 基本数据类型及取值范围,2.3常量与变量,标识符:定义:用来标识变量、常量、函数等的字符序列组成:只能
4、由字母、数字、下划线组成,且第一个字母必须是字母或下划线 大小写敏感 不能使用关键字 长度:最长32个字符命名原则:见名知意 不易混淆 如1、l与I,o与0,例:判断下列标识符号合法性sum Sum M.D.John day Date 3days student_name#33 lotus_1_2_3 char ab _above$123,C语言使用常量和变量来表示程序中使用的数据,常 量,一般用大写字母 是宏定义预处理命令,不是C语句 直接常量:整型常量 实型常量 字符常量 字符串常量,如#define PRICE 30,定义:程序运行时其值不能改变的量(即常数)分类:符号常量:用标识符代表
5、常量 定义格式:#define 符号常量 常量,例 符号常量举例#define PRICE 30main()int num,total;num=10;total=num*PRICE;printf(total=%d,total);,运行结果:total=300,变 量,概念:其值可以改变的量。数据及其存储空间的抽象。变量名与变量值 变量定义的一般格式:数据类型 变量1,变量2,变量n;,变量初始化:定义时赋初值,例:int a,b,c;float data;,决定分配字节数和数的表示范围,合法标识符,例:int a=2,b,c=4;float data=3.67;char ch=A;int x=
6、1,y=1,z=1;int x=y=z=1;,例1 int student;stadent=19;/Undefined symbol stadent in function main,变量定义位置:一般放在函数开头,变量的使用:先定义,后使用,Error:expression syntax in function main,变量的赋值,传送数据到变量所代表的存储单元。赋值操作用“=”表示,一般形式为:变量=表达式,如:a=1.0;/*把1.0传送给a*/a=a+1;/*把a的值加上1后传给a*/用赋值号连接变量和表达式的式子称为赋值表达式。赋值符号的运算方向为自右向左。赋值表达式的值是被赋值后
7、的变量的值。如:d=c=b=a=3+5,赋值表达式,整型常量(整常数)三种形式:十进制整数:由数字09和正负号表示.如 123,-456,0 八进制整数:由数字0开头,后跟数字07表示.如0123,011 十六进制整数:由0 x开头,后跟09,af,AF表示.如0 x123,0Xff,例 12 与 12L,例 30000 为int型 65536 为long int 型,整型常量的类型 根据其值所在范围确定其数据类型 在整常量后加字母l或L,认为它是long int 型常量,问题:0123=()100 x123=()100Xff=()10,整型变量分类:有符号数和无符号数。用关键字signed,
8、unsigned指定。基本型、长整型和短整型。用关键字int,long,short指定。字节数和表示范围定义 形式:数据类型 变量名 例子:int x,y;/*定义x,y为整型数*/unsigned short m,n;/*定义m,n为无符号短整型数*/long a;/*定义a为长整型数*/,整型数据的存储方式short int long最高位为符号位,0为正,1为负以二进制补码的形式存放 如:10 的补码-10的补码,例 整型数据溢出include main()int a,b;a=32767;b=a+1;printf(“%d,%dn,a,b);,运行结果:32767,-32768,说明计算机
9、在运算时,出现数据溢出情况,达到最大值后,又从最小值算起。,整型数据的溢出,字符类型,在计算机中字符以ASCII存放以及运算。其存储为1个字节 如:a的ASCII码为97,它在内存中的形式:字符型变量定义方式:char a;表示a为字符型,在内存中占用8位即1个字节,#include main()int a=97;printf(“%c=%dn”,a,a);,输出:a=97,字符常量定义:用单引号括起来的单个普通字符或转义字符.,字符常量的值:该字符的ASCII码值,如 101-A 012-n 376-x61-a 60-0 483-(),例:A-101-x41-65,如 A65,a97,048,
10、n10,如 a A?n 101,转义字符:反斜线后面跟一个字符或一个代码值表示,例 转义字符举例main()printf(101 x42 Cn);printf(I say:How are you?n);printf(C Programn);printf(Turbo C);,运行结果:(屏幕显示)A B CIsay:”How are you?”C ProgramTurbo C,例 main()printf(“Yb=n”);,运行结果:屏幕显示:=,字符常量与字符串常量不同,字符串常量定义:用双引号(“”)括起来的字符序列存储:每个字符串尾自动加一个 0 作为字符串结束标志,例:char ch;c
11、h=“A”;,没有字符串变量,用字符数组存放,例/*字符可用于算术运算*/#define PRICE 10 main()int num=3;int total;char ch1,ch2=D;total=num*PRICE;ch1=ch2-A+a;printf(“total=%d,ch1=%cn”,total,ch1);,运行结果:total=30,ch1=d,例/*转义字符的使用*/#include main()printf(“ab ct derftgn”);printf(“htibbj kn”);,f g d e,h j k,a,b,c,d,e,f,g,h,i,j,k,例/*转义字符的使用*
12、/#include main()printf(“ABbCDEFrGHn”);,在屏幕上显示结果为:?,GHDEF,实数类型,实数在C语言中又称为浮点数。浮点数有且只有两种表示形式:1、十进制形式。这种形式的数由整数部分、小数点和小数部分组成。如:1.24,0.345,.222,234.0,333.,0.0等。2、指数形式。这种形式用来表示一些比较大的数值,它们是实数部分、字母E或e、整数部分。表示形式:e要注意:1 字母E或e之前之后必须有数字 2 之后的数字必须为整数 3 没有八进制或十六进制实数表示法规范化浮点数:在字母e(E)之前的小数部分中,小数点左边应有一位(且只能有一位)非零数字。
13、,实型常量(实数或浮点数)表示形式:十进制数形式:(必须有小数点)如0.123,.123,123.0,0.0,123.指数形式:(e或E之前必须有数字;指数必须为整数)如12.3e3,123E2,1.23e4,e-5,实型常量的类型 默认double型 在实型常量后加字母f或F,认为它是float 型,实型变量 单精度(4字节,67位有效数字):float a;双精度(8字节,1516位有效数字):double a;,x被赋值了一个有效位数为11位的数字。在printf语句中使用%20.18f指示printf语句在输出x时总长度应为20位,小数点位数占18位。输出的结果表明float型的数据只
14、接收7位有效数字。,sizeof运算符,用途:测定某一数据类型所占存储空间的长度。格式:sizeof(类型标识符)例子:,#include main()short s;long l;float f;char c;printf(short is%d bytesn,sizeof(s);/*short is 2*/printf(long is%d bytesn,sizeof(l);/*long is 4*/printf(float is%d bytesn,sizeof(f);/*float is 4*/printf(“char is%d bytesn,sizeof(c);/*char is 1*/,
15、2.4 运算符和表达式,运算符(操作符)是表述最基本的运算形式的符号。表达式由运算符(操作符)和运算量(操作数)组成,用以描述对什么数据以什么顺序进行什么操作。任何有值的东西都可以称为表达式。,C语言中的运算符(13类),算术运算符:+-*/%+-关系运算符:=!=逻辑运算符:!&|位运算符:|&赋值运算符:=及其扩展条件运算符:?:逗号运算符:,指针运算符:*&求字节数:sizeof强制类型转换:(类型)分量运算符:.-下标运算符:其它:(),学习运算符应注意:,与运算量关系 要求运算量个数 要求运算量类型 运算符优先级别 结合方向 结果的类型,1 算术运算符和表达式,基本算术运算符:+-*
16、/%结合方向:从左向右优先级:-高于*/%高于+-说明:“-”可为单目运算符时,右结合性两整数相除,结果为整数%要求两侧均为整型数据+-*/中任意数类型为实型,结果均为实型,例 5/2=-5/2.0=,例 5%2=-5%2=1%10=5%1=5.5%2,例 5/2=2-5/2.0=-2.5,例 5%2=1-5%2=-1 1%10=1 5%1=0 5.5%2(),int a,b,c;float d;a*b/c-1.5(a*b)/c*1.5,自增、自减运算符+-,作用:使变量值加1或减1 优先级与相同,右结合种类:前置+i,-i(先执行i+1或i-1,再使用i值相当于i=i+1)后置 i+,i-(
17、先使用i值,再执行i+1或i-1),例 j=3;k=+j;j=3;k=j+;j=3;printf(“%d”,+j);j=3;printf(“%d”,j+);a=3;b=5;c=(+a)*b;a=3;b=5;c=(a+)*b;,/k=4,j=4,/k=3,j=4,/4,/3,/c=20,a=4,/c=15,a=4,说明:+-不能用于常量和表达式,如5+,(a+b)+-结合方向:自右向左优先级:-+-*/%-+-(2)(3)(4),例-i+i=3;printf(“%d”,-i+);,例-i+-(i+)i=3;printf(“%d”,-i+);/-3,2赋值运算符和表达式,简单赋值运算符 符号:=格
18、式:变量标识符=表达式 作用:将一个数据(常量或表达式)赋给一个变量,例 a=3;d=func();c=d+2;,复合赋值运算符 种类:+=-=*=/=%=&=|=,说明:结合方向:自右向左 优先级:2 左侧必须是变量,不能是常量或表达式,例 3=x-2*y;a+b=3;,例 int i;i=2.56;/结果i=2;,例:a=5+(c=6)a=(b=4)+(c=6)a=(b=10)/(c=2),/表达式值11,c=6,a=11,/表达式值10,a=10,b=4,c=6,/表达式值5,a=5,b=10,c=2,赋值转换规则:使赋值号右边表达式值自动转换成其左边变量的类型 赋值表达式的值与变量值相
19、等,且可嵌套,例:a=12;a+=a-=a*a,/a=-264 等价于a=a+(a=a-(a*a),3逗号运算符和表达式,形式:表达式1,表达式2,表达式n结合性:从左向右 优先级:1逗号表达式的值:等于表达式n的值用途:求多个表达式的连续计算,常用于循环for语句中,例 a=3*5,a*4 a=3*5,a*4,a+5例 x=(a=3,6*3)x=a=3,6*a例 a=1;b=2;c=3;printf(“%d,%d,%d”,a,b,c);printf(“%d,%d,%d”,(a,b,c),b,c);,/a=15,表达式值60,/a=15,表达式值20,/赋值表达式,表达式值18,x=18,/逗
20、号表达式,表达式值18,x=3,/1,2,3,/3,2,3,例:#include main()int x,y=7;int z=4;x=(y=y+6,y/z);printf(x=%dn,x);,运行结果:x=3,4关系运算符和表达式,关系运算符 种类:=!=结合方向:自左向右 优先级别:9-10 运算结果为:1 或 0,例 int a=3,b=2,c=1,d,f;ab;c=ab;b+cb;f=abc;,/表达式值1,/表达式值1,/表达式值0,/d=1,/f=0,关系运算注意事项:,例 若a=0;b=0.5;x=0.3;则 a=x=b的值为,0,例 int i=1,j=7,a;a=i+(j%4!
21、=0);则a=,2,例 a0 结果为 A100 结果为,1,0,例 注意区分“=”与“=”int a=0,b=1;if(a=b)printf(“a equal to b”);else printf(“a not equal to b”);,a equal to b,(a=b),a not equal to b,5逻辑运算符和表达式,逻辑运算符种类:!&|逻辑运算真值表,C语言中,运算量:0表示“假”,非0表示“真”,运算结果:0表示“假”,1表示“真”,例 ab&xy a=b|x=y!a|ab,优先级:14 5 4,结合方向:,/*(a=x)&(x=b)*/,/*(ab)&(xy)*/,/*(
22、a=b)|(x=y)*/,/*(!a)|(ab)*/,例 a=4;b=5;!a a&b a|b!a|b 4&0|2 53&2|84-!0 c&d,值为1,值为0,值为1,值为1,值为1,值为1,(53)&2|(8(4-(!0)值为1,逻辑运算的短路特性:,逻辑表达式求解时,并非所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符,例 a(m=ab)&(n=cd),/*结果m=0,n=1*/,6条件运算符与表达式,一般形式:expr1?expr2:expr3执行过程功能:相当于条件语句,但不能取代一般if语句,条件运算符可嵌套 如 x0?1:(x0?-1:
23、0)优先级:3,结合方向:自右向左 如 ab?a:cd?c:d ab?a:(cd?c:d)expr1、expr2、expr3类型可不同,例 x?a:b/x=0,表达式值为b;x0,表达式值为a xy?1:1.5/xy,值为1.0;xy,值为1.5,良好的源程序书写习惯:表达式中,在双目运算符的左右两侧各加一个空格,可增强程序的可读性。比较:“(x+y)/2 1”与“(x+y)/21”尽量把复杂的表达式分成多个表达式来写。尽量使用圆括号显式指明哪部分先运算,而不是依赖运算符的优先级。,#include main()int x,y=7;int z=4;x=(y=y+6,y/z);printf(x=
24、%dn,x);,#include main()int x;int y=7;int z=4;y+=6;x=y/z;printf(x=%dn,x);,知识提示:结合性是语言的独有概念。除单目运算符、赋值运算符和条件运算符是右结合性外,其它运算符都是左结合性。,不同类型数据间的转换,三种形式 同一类型但长度不同的数据间的转换 如:int x=1;long y=50000;x+y=50001 定点方式与浮点方式间的转换 如:int x=1,float y=1.0;x+y=2.0 整型数中有符号数和无符号数间的转换 如:unsigned int x=1;int y=-2;x+y=?,65535,注意有符
25、号与无符号之转换由有符号负数转为同长度的无符号数时,最高位不再被当作符号位,结果相当于216或232加上该负值由无符号数(超出表示范围)转为同长度的无符号数时,最高位被当作符号位,结果相当于该数减去216或232。实数转整数,小数被截取。double转float,超出有效数字范围的四舍五入。数据转换可能丢失精度。在截取与四舍五入及long型转实型时可能发生。数据转换结果具有不确定性。将较长整数转为较短整数时,只低字节有效。double转float,实数转整数时,如值超过目标类型的取值范围,则结果是不确定的。,#include main()long a=80000,b=3200L;short i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 数据类型 运算 表达式 课件
链接地址:https://www.31ppt.com/p-6503726.html