收藏 分享(赏)

2数据类型运算符表达式_jwx.ppt

上传人:11xg27ws 文档编号:4867921 上传时间:2019-01-18 格式:PPT 页数:56 大小:822.50KB
下载 相关 举报
2数据类型运算符表达式_jwx.ppt_第1页
第1页 / 共56页
2数据类型运算符表达式_jwx.ppt_第2页
第2页 / 共56页
2数据类型运算符表达式_jwx.ppt_第3页
第3页 / 共56页
2数据类型运算符表达式_jwx.ppt_第4页
第4页 / 共56页
2数据类型运算符表达式_jwx.ppt_第5页
第5页 / 共56页
点击查看更多>>
资源描述

1、1,任课老师:计算机学院 蒋文贤 电子邮件:,C 语言程序设计,2,数据类型 常量与变量 整型数据 字符类型 实型类型 运算符和表达式 不同类型数据间的转换,第 2 章 数据类型、运算符与表达式,3,程序设计语言的基本规则包括,常数变量运算符表达式函数,什么是语言规则? 为什么要有这些规则?,把自然语言描述问题的方式转换为C语言的形式表达给计算机,规则,常数,变量,函数,4,常数3/5和3.6的存放空间是否相同?变量a如何表示?如何存放?计算机如何知道3.6和a之间的关系?和sin x 如何输入?如何存放?计算机如何识别“=”?运算结果放在哪里?,计算机完成上述计算,首先要 解决数据的输入和存

2、放问题,问题,5,程序的任务是对数据进行处理,数据是程序处理的对象,而运算符是施加给这些数据的操作。数据和运算符是表达式的基本元素,数据的存储 数据的操作,程序,6,数据类型决定: 1. 数据占内存字节数 2. 数据可以执行的操作,2.1 C语言的数据类型,7,2.2常量与变量,标识符: 定义:用来标识变量、常量、函数等的字符序列 组成:只能由字母、数字、下划线组成,且第一个字母必须是字母或下划线大小写敏感不能使用关键字长度:最长31个字符 命名原则:见名知意不易混淆 如1、l与I, o与0,例:判断下列标识符号合法性 sum Sum M.D.John day Date 3days stude

3、nt_name #33 lotus_1_2_3 char ab _above $123,32个关键字:(由系统定义,不能重作其它定义) auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef unsigned union void volatile while,C语言使用常量和变量来表示程序中使用的数据,8,常 量,直接常量:整

4、型常量 实型常量 字符常量 字符串常量,如 #define PRICE 30,定义:程序运行时其值不能改变的量(即常数)分类: 符号常量:用标识符代表常量定义格式: #define 符号常量 常量一般用大写字母是宏定义预处理命令,不是C语句,例 符号常量举例#define PRICE 30 main() int num,total;num=10;total=num*PRICE;printf(“total=%d“,total); ,运行结果:total=300,9,变 量,概念:其值可以改变的量。数据及其存储空间的抽象。 变量名与变量值 变量定义的一般格式:数据类型 变量1,变量2,变量n;,变

5、量初始化:定义时赋初值,例:int a, b, c;float data;,决定分配字节数 和数的表示范围 以及可执行的操作,合法标识符,例:int a=2,b,c=4;float data=3.67;char ch=A;int x=1,y=1,z=1;int x=y=z=1;,例1 int student;stadent=19; /Undefined symbol statent in function main,变量定义位置:一般放在函数开头,变量的使用:先定义,后使用,Error:expression syntax in function main,10,变量的赋值,传送数据到变量所代表

6、的存储单元。 赋值操作用“=”表示,一般形式为:变量=表达式,如:a = 1.0; /* 把1.0传送给a*/a = a + 1; /*把a的值加上1后传给a*/ 用赋值号连接变量和表达式的式子称为赋值表达式。 赋值符号的运算方向为自右向左。 赋值表达式的值是被赋值后的变量的值。如:d=c=b=a=3+5,赋值表达式,11,整型常量(整常数) 三种形式:十进制整数:由数字09和正负号表示.如 123,-456,0八进制整数:由数字0开头,后跟数字07表示.如0123,011十六进制整数:由0x开头,后跟09,af,AF表示. 如0x123,0Xff,例 12 与 12L,例 30000 为in

7、t型65536 为long int 型,整型常量的类型根据其值所在范围确定其数据类型在整常量后加字母l或L,认为它是long int 型常量,问题: 0123 = ( )10 0x123 = ( )10 0Xff = ( )10,2.3 整型数据,12,整型变量 分类:有符号数和无符号数。用关键字signed, unsigned指定。基本型、长整型和短整型。用关键字int, long, short指定。字节数和表示范围 定义形式:数据类型 变量名例子: int x, y; /*定义x, y为整型数*/ unsigned short m, n; /*定义m, n为无符号短整型数*/ long a

8、; /*定义a为长整型数*/,13,整型数据的存储方式 short int long 最高位为符号位,0为正,1为负 以二进制补码的形式存放如:10的补码-10的补码,14,例 整型数据溢出 include void main() int a,b;a=32767;b=a+1;printf(“%d,%dn“,a,b); ,运行结果: 32767, -32768,说明计算机在运算时, 出现数据溢出情况, 达到最大值后,又从最小值算起。,整型数据的溢出,15,2.4 字符类型,在计算机中字符以ASCII存放以及运算。 其存储为1个字节如:a的ASCII码为97,它在内存中的形式:字符型变量定义方式:

9、char a;表示a为字符型,在内存中占用8位即1个字节,#include void main() int a = 97;printf(“%c = %dn”, a, a); ,输出:a = 97,16,字符常量 定义:用单引号括起来的单个普通字符或转义字符.,字符常量的值:该字符的ASCII码值,如 101 -A 012 -n376 - x61 -a60 -0 483 -(),例: A-101-x41-65,如 A65, a97,048 , n10,如 a A ? n 101,转义字符:反斜线后面跟一个字符或一个代码值表示,例 转义字符举例 main() printf(“101 x42 Cn“

10、);printf(“I say:“How are you?“n“);printf(“C Programn“);printf(“Turbo C“); ,运行结果:(屏幕显示) A B C I say:”How are you?” C Program Turbo C,例 main() printf(“Yb=n”);,运行结果: 屏幕显示:= 打印机输出:,17,字符常量与字符串常量不同,字符串常量 定义:用双引号(“”)括起来的字符序列 存储:每个字符串尾自动加一个 0 作为字符串结束标志,例: char ch;ch=“A”;,例 字符串“hello”在内存中,没有字符串变量,用字符数组存放,18

11、,例 /*字符可用于算术运算*/#define PRICE 10main() 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,19,例 /*转义字符的使用*/ #include void 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,20,例 /*转义字符的使用*/ #

12、include void main() printf(“ABbCDEFrGHn”);,在屏幕上显示结果为:?,GHDEF,21,3.5 实数类型,实数在C语言中又称为浮点数。浮点数有且只有两种表示形式:1、十进制形式。这种形式的数由整数部分、小数点和小数部分组成。如:1.24,0.345 ,.222 ,234.0 ,333. ,0.0等。2、指数形式。这种形式用来表示一些比较大的数值,它们是实数部分、字母E或e、整数部分。表示形式:e 要注意:1 字母E或e之前之后必须有数字 2 之后的数字必须为整数3 没有八进制或十六进制实数表示法 规范化浮点数:在字母e(E)之前的小数部分中,小数点左边应

13、有一位(且只能有一位)非零数字。,22,浮点数的分类,float型的数据在内存中占4个字节的空间,double型的数据在内存中占8个字节的空间。 float型的数据提供67位有效数字,double型的数据提供1516位的有效数字。 实型常量总是按double型处理。,浮点数的存储方式,23,实型常量(实数或浮点数)表示形式:十进制数形式:(必须有小数点) 如0.123, .123, 123.0, 0.0, 123.指数形式:(e或E之前必须有数字;指数必须为整数) 如12.3e3 ,123E2, 1.23e4 , e-5 , 1.2E-3.5,实型常量的类型默认double型在实型常量后加字母

14、f或F,认为它是float 型,实型变量单精度(4字节,67位有效数字):float a; 双精度(8字节,1516位有效数字):double a;,24,x被赋值了一个有效位数为11位的数字。在printf语句中使用%20.18f 指示printf语句在输出x时总长度应为20位,小数点位数占18位。 输出的结果表明float型的数据只接收7位有效数字。,25,sizeof运算符,用途:测定某一数据类型所占存储空间的长度。 格式:sizeof(类型标识符) 例子:,#include void main() short s; long l; float f; char c;printf(“sho

15、rt 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*/ ,26,基本数据类型小结,整型,字符型,实型,有,无,说明:数据类型所占字节数编译系统不同而不同:,27,3.6 运算符和表达式,运算符(操作符)是表述最基本的运算形式的符号。 表达式由运

16、算符(操作符)和运算量(操作数)组成,用以描述对什么数据以什么顺序进行什么操作。 任何有值的东西都可以称为表达式。,28,C语言中的运算符(13类),算术运算符:+ - * / % + - 关系运算符: = != 逻辑运算符:! & | 位运算符 : | & 赋值运算符:= 及其扩展 条件运算符:?: 逗号运算符:, 指针运算符:* & 求字节数 :sizeof 强制类型转换:(类型) 分量运算符:. - 下标运算符: 其它 :( ),29,学习运算符应注意:,与运算量关系要求运算量个数要求运算量类型运算符优先级别结合方向结果的类型,30,1 算术运算符和表达式,基本算术运算符: + - *

17、/ % 结合方向:从左向右 优先级: - -* / % - + -(2) (3) (4) 说明: “-”作为单目运算符时,右结合性 两整数相除,结果为整数 %要求两侧均为整型数据 + - * /中任意数类型为实型,结果均为实型,例 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 = -11%10 = 15%1 = 05.5%2 (),int a, b, c; float d; a*b/c-1.5 (a*b)/c*1.5,31,自增、自减运算符 + -,作用:使变量值加1或减1

18、优先级与相同,右结合 种类: 前置 +i, -i (先执行i+1或i-1,再使用i值相当于i=i+1) 后置 i+,i- (先使用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)

19、 (4),例 -i+i=3; printf(“%d”,-i+);,例 -i+ -(i+)i=3; printf(“%d”,-i+); /-3,32,2赋值运算符和表达式,简单赋值运算符符号: =格式: 变量标识符 = 表达式作用:将一个数据(常量或表达式)赋给一个变量,例 a=3;d=func();c=d+2;,复合赋值运算符种类:+= -= *= /= %= = = &= = |=含义: var1 op= exp2 var1 = exp1 op exp2,33,说明:结合方向:自右向左优先级: 14左侧必须是变量,不能是常量或表达式,例 3=x-2*y;a+b=3;,例 int i; i=2

20、.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,赋值转换规则:使赋值号右边表达式值自动转换成其左边变量的类型赋值表达式的值与变量值相等,且可嵌套,例: a=12; a+=a-=a*a,/a=-264 等价于a=a+(a=a-(a*a),34,3逗号运算符和表达式,形式:表达式1,表达式2,表达式n 结合性:从左向右 优先级: 15 逗号表达式的值:等于表达式n的值 用途:求多个表达式的连续计算,常用于循环for语句中,例

21、a=3*5,a*4a=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,/逗号表达式,表达式值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,35,4关系运算符和表达式,关系运算符种类:= !

22、=结合方向:自左向右优先级别: 6-7运算结果为:1 或 0,例 int a=3,b=2,c=1,d,f;ab c= abb+cbf=abc,/表达式值1,/表达式值1,/表达式值0,/d=1,/f=0,36,关系运算注意事项:,例 若a=0; b=0.5; x=0.3;则 a=x=b的值为,0,例 int i=1, j=7,a; a=i+(j%4!=0); 则a=,2,例 a0 结果为A100 结果为,1,0,应避免对实数作相等或不等的判断 如 1.0/3.0*3.0=1.0 结果为,0,例 注意区分“=”与“=” int a=0,b=1; if (a=b) printf(“a equal

23、to b”); elseprintf(“a not equal to b”);,a equal to b,(a= =b),a not equal to b,37,5逻辑运算符和表达式,逻辑运算符 种类: ! & | 逻辑运算真值表,C语言中,运算量: 0表示“假”,非0表示“真”,运算结果: 0表示“假”,1表示“真”,38,例 ab&xya=b|x=y!a|ab,优先级: 21112,结合方向:,/* (a=x) & (x=b)*/,/*(ab)&(xy)*/,/*(a=b)|(x=y)*/,/*(!a)|(ab)*/,例 a=4;b=5;!aa&ba|b!a|b4&0|253&2|84-!

24、0c&d,值为1,值为0,值为1,值为1,值为1,值为1,(53)&2|(8(4-(!0) 值为1,39,逻辑运算的短路特性:,逻辑表达式求解时,并非所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符,例 a(m=ab)&(n=cd),/*结果m=0,n=1*/,40,6条件运算符与表达式,一般形式: expr1 ? expr2 : expr3 执行过程 功能:相当于条件语句,但不能取代一般if语句,例 求 a+|b|printf(“a+|b|=%dn”,b0?a+b:a-b);,例 (a=b)?Y:N(x%2=1)?1:0(x=0)?x:-x(c=a

25、 & c=z)?c-a+A:c,条件运算符可嵌套如 x0?1:(x0?-1:0) 优先级: 13,结合方向:自右向左如 ab?a:cd?c:d ab?a:(cd?c:d) expr1、expr2、expr3类型可不同,表达式值取较高的类型,例 x?a:b /x=0,表达式值为b; x0,表达式值为axy?1:1.5 /xy ,值为1.0; xy ,值为1.5,41,良好的源程序书写习惯:表达式中,在双目运算符的左右两侧各加一个空格,可增强程序的可读性。 比较:“(x + y) / 2 1” 与 “(x+y)/21”尽量把复杂的表达式分成多个表达式来写。尽量使用圆括号显式指明哪部分先运算,而不是

26、依赖运算符的优先级。,#include main() int x,y=7;int z=4;x=(y=y+6,y/z);printf(“x=%dn“,x); ,#include main() int x;int y = 7;int z = 4;y += 6;x = y / z;printf(“x=%dn“, x); ,知识提示 : 结合性是语言的独有概念。除单目运算符、赋值运算符和条件运算符是右结合性外,其它运算符都是左结合性。,42,不同类型数据间的转换,三种形式同一类型但长度不同的数据间的转换如:int x = 1; long y = 50000; x + y = 50001定点方式与浮点方

27、式间的转换如:int x = 1, float y = 1.0; x + y = 2.0整型数中有符号数和无符号数间的转换如:unsigned int x = 1, int y = -2;x + y = ?,65535,43,注意 有符号与无符号之转换 由有符号负数转为同长度的无符号数时,最高位不再被当作符号位,结果相当于216或232加上该负值 由无符号数(超出表示范围)转为同长度的无符号数时,最高位被当作符号位,结果相当于该数减去216或232。 实数转整数,小数被截取。double转float,超出有效数字范围的四舍五入。 数据转换可能丢失精度。在截取与四舍五入及long型转实型时可能发

28、生。 数据转换结果具有不确定性。将较长整数转为较短整数时,只低字节有效。double转float, 实数转整数时,如值超过目标类型的取值范围,则结果是不确定的。,#include void main() long a = 80000, b = 3200L;short i, j;double d = 123456.789098765;float f;short s;i = a;j = b;f = d;s = d;printf(“%ld = %hdn“, a, i);printf(“%ld = %hdn“, b, j);printf(“%16.9lf = %f = %16.9hdn“, d, f,

29、 s); ,输出 80000 = 14464 /* 80000 = 0x1 3880, 0x3880 = 14464 */ 3200 = 3200 123456.789098765 = 123456.789062500 = -7616,44,隐式转换什么情况下发生 运算转换-不同类型数据混合运算时 赋值转换-把一个值赋给与其类型不同的变量时 输出转换-输出时转换成指定的输出格式 函数调用转换-实参与形参类型不一致时转换运算转换规则 不同类型数据运算时先自动转换成同一类型,转换结果使表达式中只有5种类型,即:int, unsigned int, long, unsigned long, doub

30、le “向高看齐”原则。,45,46,显式转换(强制转换)一般形式:(类型名)(表达式) 例 (int)(x+y)(int)x+y(double)(3/2)(double)3/2(int)3.6 说明:强制转换得到所需类型的中间变量,原变量类型不变 优先级为(2),右结合,例 main() float x;int i;x=3.6;i=(int)x;printf(“x=%f,i=%d”,x,i); 结果:x=3.600000,i=3,精度损失问题,47,1 * -2 + 3 / 4,Back,48,(int) x + y,(int) x + y,扫描方向,假设: x = -2.6 y = 3,-

31、2,TC 规则:向零取整,1,Back,49,-i +,-i +,扫描方向,假设: i = 1,1,-1,(1) 表达式的值:-1 (2) i 的值:2,Back,50,i + j,i + j,扫描方向,假设: i = 1 j = 2,1,3,(1) 表达式的值:3 (2) i 的值:2,Back,51,a += a -= a * a,a += a -= a * a,扫描方向,4,-2,(1) 表达式的值:-4 (2) a 的值:-4,-4,假设: a = 2,注:a = -2,Back,52,printf(“%d, %d”, i, i +);,printf(“%d, %d”, i, i +)

32、;,扫描方向,假设: i = 3,3,注:i = 4,4,注:C 函数参数的传递方向 自右向左,printf(“%d, %d”, i, i = 30);,Back,53,习题,1、有两个整型变量a和b,下面a除以b的余数的表达式是() A. a/b B. a%b C. b%a D. a%=b 2、若原a的值为3,b的值为2,则执行a+=b+后,a与b的值为() A. a的值为3,b的值为2 B. a的值为5,b的值为3 C. a的值为5,b的值为2 D. a的值为3,b的值为3 3、数学上的“ab ? b: a C. c=ab ? a :b D. 以上都不对 5、与表达式“a!=b|bc”等价

33、的表达式是() A. !(a=b & b=c) D. 以上都不对,!(a=b & b=c),54,6、设有说明:char w; int x; float y; double z;则表达式w*x+z-y值的数据类型为() A. float B. char C. int D. Double 7、设x和y都是int类型,且x=100, y=200, 则printf(“%d”, (x,y);的输出结果是() A. 200 B. 100 C. 100 200 D. 输出格式符不够,输出值不确定 8、设有以下变量均为int类型,则值不等于7的表达式() A. (x=y=6, x+y, x+1) B. (x=y=6, x+y, y+1) C. (x=6, x+1, y=6, x+y) D. (x=6, y+1, x=y, x+1) 9、在C语言中,要求运算符必须是整型的运算符是() A. / B. + C. != 200 D. % 10、下列运算符中优先级最低的是(),优先级最高的是() A. ? : B. & C. + D. ! = 11、以下关于运算符优先顺序的描述中正确的是() A. 关系算术赋值逻辑 B.逻辑关系算术赋值 C. 赋值逻辑关系算术 D.算术关系赋值逻辑,55,作业,P35 7, 15,56,End Of The Chapter 2 !,

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

当前位置:首页 > 实用文档 > 统计图表

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报