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

上传人:xin****828 文档编号:15898319 上传时间:2020-09-13 格式:PPT 页数:56 大小:822.55KB
返回 下载 相关 举报
数据类型运算符表达式j.ppt_第1页
第1页 / 共56页
数据类型运算符表达式j.ppt_第2页
第2页 / 共56页
数据类型运算符表达式j.ppt_第3页
第3页 / 共56页
点击查看更多>>
资源描述
1,任课老师:计算机学院 蒋文贤 电子邮件:,C 语言程序设计,2,数据类型 常量与变量 整型数据 字符类型 实型类型 运算符和表达式 不同类型数据间的转换,第 2 章 数据类型、运算符与表达式,3,程序设计语言的基本规则包括,常数 变量 运算符 表达式 函数,什么是语言规则? 为什么要有这些规则?,把自然语言描述问题的方式转换为C语言的形式表达给计算机,规则,常数,变量,函数,4,常数3/5和3.6的存放空间是否相同? 变量a如何表示?如何存放? 计算机如何知道3.6和a之间的关系? 和sin x 如何输入?如何存放? 计算机如何识别“=”?运算结果放在哪里?,计算机完成上述计算,首先要 解决数据的输入和存放问题,问题,5,程序的任务是对数据进行处理,数据是程序处理的对象,而运算符是施加给这些数据的操作。 数据和运算符是表达式的基本元素,数据的存储 数据的操作,程序,6,数据类型决定: 1. 数据占内存字节数 2. 数据可以执行的操作,2.1 C语言的数据类型,7,2.2常量与变量,标识符: 定义:用来标识变量、常量、函数等的字符序列 组成: 只能由字母、数字、下划线组成,且第一个字母必须是字母或下划线 大小写敏感 不能使用关键字 长度:最长31个字符 命名原则: 见名知意 不易混淆 如1、l与I, o与0,例:判断下列标识符号合法性 sum Sum M.D.John day Date 3days student_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,常 量,直接常量: 整型常量 实型常量 字符常量 字符串常量,如 #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;,变量初始化:定义时赋初值,例: 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,变量的赋值,传送数据到变量所代表的存储单元。 赋值操作用“=”表示,一般形式为:变量=表达式,如: 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 十六进制整数:由0 x开头,后跟09,af,AF表示. 如0 x123,0Xff,例 12 与 12L,例 30000 为int型 65536 为long int 型,整型常量的类型 根据其值所在范围确定其数据类型 在整常量后加字母l或L,认为它是long int 型常量,问题: 0123 = ( )10 0 x123 = ( )10 0Xff = ( )10,2.3 整型数据,12,整型变量 分类: 有符号数和无符号数。 用关键字signed, unsigned指定。 基本型、长整型和短整型。 用关键字int, long, short指定。 字节数和表示范围 定义 形式:数据类型 变量名 例子: int x, y; /*定义x, y为整型数*/ unsigned short m, n; /*定义m, n为无符号短整型数*/ long a; /*定义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,它在内存中的形式: 字符型变量定义方式:char a; 表示a为字符型,在内存中占用8位即1个字节,#include void main() int a = 97; printf(“%c = %dn”, a, a); ,输出:a = 97,16,字符常量 定义:用单引号括起来的单个普通字符或转义字符.,字符常量的值:该字符的ASCII码值,如 101 -A 012 -n 376 - x61 -a 60 -0 483 -(),例: A-101-x41-65,如 A65, a97, 048 , 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 C I say:”How are you?” C Program Turbo C,例 main() printf(“Yb=n”); ,运行结果: 屏幕显示:= 打印机输出:,17,字符常量与字符串常量不同,字符串常量 定义:用双引号(“”)括起来的字符序列 存储:每个字符串尾自动加一个 0 作为字符串结束标志,例: char ch; ch=“A”;,例 字符串“hello”在内存中,没有字符串变量,用字符数组存放,18,例 /*字符可用于算术运算*/ #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,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,例 /*转义字符的使用*/ #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)之前的小数部分中,小数点左边应有一位(且只能有一位)非零数字。,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型 在实型常量后加字母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(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*/ ,26,基本数据类型小结,整型,字符型,实型,有,无,说明:数据类型所占字节数编译系统不同而不同:,27,3.6 运算符和表达式,运算符(操作符)是表述最基本的运算形式的符号。 表达式由运算符(操作符)和运算量(操作数)组成,用以描述对什么数据以什么顺序进行什么操作。 任何有值的东西都可以称为表达式。,28,C语言中的运算符(13类),算术运算符:+ - * / % + - 关系运算符: = != 逻辑运算符:! float d; a*b/c-1.5 (a*b)/c*1.5,31,自增、自减运算符 + -,作用:使变量值加1或减1 优先级与相同,右结合 种类: 前置 +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) (4),例 -i+ i=3; printf(“%d”,-i+);,例 -i+ -(i+) i=3; printf(“%d”,-i+); /-3,32,2赋值运算符和表达式,简单赋值运算符 符号: = 格式: 变量标识符 = 表达式 作用:将一个数据(常量或表达式)赋给一个变量,例 a=3; d=func(); c=d+2;,复合赋值运算符 种类:+= -= *= /= %= = = 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,赋值转换规则:使赋值号右边表达式值自动转换成其左边变量的类型 赋值表达式的值与变量值相等,且可嵌套,例: a=12; a+=a-=a*a,/a=-264 等价于a=a+(a=a-(a*a),34,3逗号运算符和表达式,形式:表达式1,表达式2,表达式n 结合性:从左向右 优先级: 15 逗号表达式的值:等于表达式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,/逗号表达式,表达式值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关系运算符和表达式,关系运算符 种类:= != 结合方向:自左向右 优先级别: 6-7 运算结果为: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,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 to b”); else printf(“a not equal to b”);,a equal to b,(a= =b),a not equal to b,37,5逻辑运算符和表达式,逻辑运算符 种类: ! b=5; !a a,例 (a=b)?Y:N (x%2=1)?1:0 (x=0)?x:-x (c=a x0,表达式值为a xy?1:1.5 /xy ,值为1.0; xy ,值为1.5,41,良好的源程序书写习惯: 表达式中,在双目运算符的左右两侧各加一个空格,可增强程序的可读性。 比较:“(x + y) / 2 1” 与 “(x+y)/21” 尽量把复杂的表达式分成多个表达式来写。 尽量使用圆括号显式指明哪部分先运算,而不是依赖运算符的优先级。,#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 定点方式与浮点方式间的转换 如: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型转实型时可能发生。 数据转换结果具有不确定性。将较长整数转为较短整数时,只低字节有效。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, s); ,输出 80000 = 14464 /* 80000 = 0 x1 3880, 0 x3880 = 14464 */ 3200 = 3200 123456.789098765 = 123456.789062500 = -7616,44,隐式转换 什么情况下发生 运算转换-不同类型数据混合运算时 赋值转换-把一个值赋给与其类型不同的变量时 输出转换-输出时转换成指定的输出格式 函数调用转换-实参与形参类型不一致时转换 运算转换规则 不同类型数据运算时先自动转换成同一类型,转换结果使表达式中只有5种类型,即: int, unsigned int, long, unsigned long, double “向高看齐”原则。,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,-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 +);,扫描方向,假设: 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”等价的表达式是() A. !(a=b 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 !,
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!