《第 数据类型运算符与表达式.pptx》由会员分享,可在线阅读,更多相关《第 数据类型运算符与表达式.pptx(49页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、3.2 常量与变量常量的分类 1)整型常量(如12、0、-3为整型常量)2)实型常量(4.6、-1.23为实型常量)3)字符常量(a、d字符常量)4)符号常量(具有含义清楚、见名知意、修改方便、一 改全改的优点)。常量 程序运行过程中不能被改变的量。第1页/共49页在程序运行过程中,其值可以被改变的量称为变量。变量代表内存中具有特定属性的一个存储单元,它用来存放数据,这就是变量的值,在程序运行期间,这些值是可以改变的。变量名实际上是一个以一个名字对应代表一个地址,在对程序编译连接时由编译系统给每一个变量名分配对应的内存地址。从变量中取值,实际上是通过变量名找到相应的内存地址,从该存储单元中读取
2、数据。第2页/共49页每个变量都必须有一个名字每个变量都必须有一个名字变量名,变量名,变量命名遵循变量命名遵循标识符命名规则。标识符命名规则。变量命名的规定:语言规定标识符只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线。例:sum,_total,month,Student_name,lotus_1_2_,BASIC,li_ling M.D.John,¥123,3D64,ab 第3页/共49页注意:注意:编译系统将大写字母和小写字母认为是两个不同的字符。建议变量名的长度最好不要超过8个字符。在选择变量名和其它标识符时,应注意做到“见名知意”,即选有含意的英文单词 (或其缩写
3、)作标识符。要求对所有用到的变量作强制定义,也就是“先定义,后使用”。第4页/共49页整形数据1 1整型常量整型常量整型常量即整常数。整常数有三种表示形式:1)十进制;2)八进制;以0头的数是八进制数。3)十六进制 以0 x开头的数是16进制数。2.整形变量整型数据在内存中的存放形式(二进制)根据占用内存字节数的不同,整型变量又分为类:1)基本整型(类型关键字为int)。2)短整型(类型关键字为short int)。3)长整型(类型关键字为long int)。4)无符号整型。第5页/共49页整型变量的分类整型变量的分类 注意:注意:括号表示其中的内容是可选的。共六种共六种有符号基本整型有符号短
4、整型有符号长整型无符号基本整型无符号短整型无符号长整型(signed)int(signed)short(int)(signed)long(int)unsigned intunsigned short(int)unsigned long(int)第6页/共49页 3.3 整型数据整数类型的有关数据:类型 类型说明符 长度 数的范围 基本型 int 2字节 -3276832767 短整型 short 2字节 -215215-1 长整型 long 4字节 -231231-1 无符号整型 unsigned 2字节 065535 无符号短整型 unsigned short 2字节 065535 无符号长
5、整型 unsigned long 4字节 0(232-1)第7页/共49页整型变量的定义变量说明的一般形式为:类型说明符 变量名标识符,变量名标识符,.;int a,b,c;(a,b,c为整型变量)long x,y;(x,y为长整型变量)unsigned int p,q;(p,q为无符号整型变量)第8页/共49页例3.2 整型变量的定义与使用#include#include void main()int a,b,c,d;/*指定、为整型变量*unsigned;*指定为无符号整型变量*12;-24;10;printf(,);运行结果:运行结果:,第9页/共49页例3.3 整型数据的溢出#incl
6、ude#include void main()void main()int a,b;int a,b;a=32767;a=32767;b=a+1;b=a+1;printf(“%d,%dn”,a,b);printf(“%d,%dn”,a,b);说明:说明:数值是以补码表示的。一个整型变量只能容纳-3276832767范围内的数,无法表示大于32767或小于-32768的数。遇此情况就发生“溢出”。运行结果:运行结果:32767,-3276832767,-32768第10页/共49页 3.4 浮点型数据3.4.13.4.1浮点型常量的表示方法两种表两种表示形式示形式小数小数指数指数0.1230.12
7、33 3e-3e-3注意注意:字母e(或E)之前必须有数字,且e后面的指数必须为整数:1e31e3、1.8e-31.8e-3、-123e-6-123e-6、-.1e-3-.1e-3e3e3、2.1e3.52.1e3.5、.e3.e3、e e 第11页/共49页 3.4 浮点型数据规范化的指数形式:规范化的指数形式:在字母e(或E)之前的小数部分中,小数点左边应有一位(且只能有一位)非零的数字。例如例如:123.456可以表示为:123.456e0,12.3456e1,1.23456e2,0.123456e3,0.0123456e4,0.00123456e 其中的1.23456e31.23456
8、e3称为“规范化的指数形式”。第12页/共49页 3.4 浮点型数据3.4.2 浮点型变量(1)(1)浮点型数据在内存中的存放形式浮点型数据在内存中的存放形式 一个浮点型数据一般在内存中占4个字节(32位)。与整型数据的存储方式不同,浮点型数据是按照指数形式存储的。系统把一个浮点型数据分成小数部分和指数部分,分别存放。指数部分采用规范化的指数形式。第13页/共49页类型 位数 数的范围 有效数字float 32 10-37 1038 67 位double型 64 10-30710308 1516位long double 128 10-4931104932 1819位 3.4 浮点型数据(2)(
9、2)浮点型变量的分类浮点型变量的分类 浮点型变量分为单精度(float型)、双精度(double型)和长双精度型(long double)三类形式。第14页/共49页例3.4 浮点型数据的舍入误差#include#include void main()void main()float a,b;float a,b;a=123456.789e5;a=123456.789e5;b=a+20;b=a+20;printf(“%fn”,b);printf(“%fn”,b);说明:说明:一个浮点型变量只能保证的有效数字是7位有效数字,后面的数字是无意义的,并不准确地表示该数。应当避免将一个很大的数和一个很小
10、的数直接相加或相减,否则就会“丢失”小的数运行结果:运行结果:123456.789e5123456.789e5第15页/共49页 3.4 浮点型数据3.4.3 浮点型常量的类型 C编译系统将浮点型常量作为双精度来处理。例如例如:f=2.45678*4523.65 系统先把2.45678和4523.65作为双精度数,然后进行相乘的运算,得到的乘也是一个双精度数。最后取其前7位赋给浮点型变量f。如是在数的后面加字母f或F(如1.65f,654.87F),这样编译系统就会把它们按单精度(32位)处理。第16页/共49页 3.5 字符型数据 3.5.1 字符常量(1)用单引号包含的一个字符是字符型常量
11、(2)只能包含一个字符a a,A A,1 1abcabc、“a a”第17页/共49页字符型数据用一对单引号括起来的单个字符,称为字符常量字符可以是字符集中任意字符。但数字作为字符型参与数值运算时数字的值就不是它的ASCII值。语言还允许使用一种特殊形式的字符常量,就是以反斜杠“”开头的转义字符。字符变量的类型关键字为char,一般占用1字节内存单元。字符变量用来存储字符常量。将一个字符常量存储到一个字符变量中,实际上是将该字符的ASCII码值(无符号整数)存储到内存单元中。可作为整数和字符两种形式输出,可对字符进行整数运算(ASCII码值)。第18页/共49页其它如下表:字符形式ntvbrf
12、 dddxxh功能换行横向跳格(即跳到下一个输出区)竖向跳格退格回车走纸换页反斜杠字符“”单引号(撇号)字符1到3位8进制数所代表的字符1到2位16进制数所代表的字符第19页/共49页例3.6 向字符变量赋以整数。#include#include void main()void main()char c1,c2;char c1,c2;c1=97;c1=97;c2=98;c2=98;printf(“%c%cn”,c1,c2);printf(“%c%cn”,c1,c2);printf(“%d%dn”,c1,c2);printf(“%d%dn”,c1,c2);说明:说明:说明:说明:在第和第4行中,
13、将整数和分别赋给c1和c2,它的作用相当于以下两个赋值语句:c1;c2;因为a和b的ASCII码为和运行结果:运行结果:97 9897 98第20页/共49页例3.7 大小写字母的转换#include#include void main()void main()char c1,c2 char c1,c2;c1=a;c1=a;c2=b;c2=b;c1=c1-32;c1=c1-32;c2=c2-32;c2=c2-32;printf(“printf(“c c cc,c1,c2c1,c2);说明:说明:说明:说明:程序的作用是将两个小写字母a和b转换成大写字母A和B。从代码表中可以看到每一个小写字母比
14、它相应的大写字母的码大。语言允许字符数据与整数直接进行算术运算。运行结果:运行结果:第21页/共49页 3.5 字符型数据说明:说明:说明:说明:有些系统(如Turbo C)将字符变量定义为signed char型。其存储单元中的最高位作为符号位,它的取值范围是-128127。如果在字符变量中存放一个ASCII码为0127间的字符,由于字节中最高位为0,因此用%d输出字符变量时,输出的是一个正整数。如果在字符变量中存放一个ASCII码为128255间的字符,由于在字节中最高位为1,用%d格式符输出时,就会得到一个负整数。第22页/共49页字符串常量字符串常量是用一对双引号括起来的若干字符序列。
15、C语言规定:在存储字符串常量时,由系统在字符串的末尾自动加一个0作为字符串的结束标志。a是字符常量,而“a”是字符串常量。不能将一个字符串赋给一个字符变量。C中没有字符串变量,需要用字符数组存放字符串。C规定,可以在定义变量的同时给变量赋初值。第23页/共49页 3.6 变量赋初值(1)语言允许在定义变量的同时使变量初始化。如如:int a=3;/指定为整型变量,初值为 float f=3.56;/指定为浮点型变量,初值为.56 char c=a;/指定为字符变量,初值为a 第24页/共49页 3.6 变量赋初值(2)可以使被定义的变量的一部分赋初值。如如:int a,b,c=5;表示指定、为
16、整型变量,但只对初始化,c的初值为(3)如果对几个变量赋以同一个初值,应写成:int a=3,b=3,c=3;表示、的初值都是。不能写成 int a=b=c3;注意:注意:初始化不是在编译阶段完成的而是在程序运行时执行本函数时赋初值的,相当于有一个赋值语句。第25页/共49页各类数值型数据间的混合运算整型、单精度型、双精度型数据可以混合运算。不同类型的数据要先转换成同一类型,然后进行运算。转换规则如图:箭头只表示转换方向,并不是依次转换。转换过程是自动完成的。第26页/共49页3.8 C运算符简介运算符:狭义的运算符是表示各种运算的符号。C语言运算符丰富,范围很宽,把除了控制语句和输入/输出以
17、外的几乎所有的基本操作都作为运算符处理,所以C语言运算符可以看作是操作符。C语言丰富的运算符构成C语言丰富的表达式(是运算符就可以构成表达式)。运算符丰富、表达式丰富、灵活。在C语言中除了提供一般高级语言的算术、关系、逻辑运算符外,还提供赋值运算符,位操作运算符、自增自减运算符等等。甚至数组下标,函数调用都作为运算符。第27页/共49页运算符类别第28页/共49页C中各类运算符的优先级中各类运算符的优先级:初等运算符初等运算符()、单目运算符单目运算符!、!、+、+、(类型类型)算术运算符算术运算符、/、%,+、关系运算符关系运算符、=,=、!=逻辑运算符逻辑运算符&、条件运算符条件运算符?:
18、赋值运算符赋值运算符=、+=、=、=、/=、%=逗号运算符逗号运算符,第29页/共49页 3.8 算术运算符和算术表达式3.8.2 算术运算符和算术表达式(1)(1)基本的算术运算符基本的算术运算符:(加法运算符,或正值运算符,如:、)(减法运算符,或负值运算符,如:、)*(乘法运算符,如:*)(除法运算符,如:)(模运算符,或称求余运算符,两侧均应为整型数据,如:的值为)。第30页/共49页 3.8 算术运算符和算术表达式(2)(2)算术表达式和运算符的优先级与结合性基本的算算术表达式和运算符的优先级与结合性基本的算术运算符术运算符:用算术运算符和括号将运算对象(也称操作数)连接起来的、符合
19、语法规则的式子,称为算术表达式。运算对象包括常量、变量、函数等。例如例如:*.5a 是一个合法的表达式。第31页/共49页语言规定了运算符的优先级和结合性。在表达式求值时,先按运算符的优先级别高低次序执行,例如先乘除后加减。规定了各种运算符的结合方向(结合性)算术运算符的结合方向为“自左至右”,即先左后右。3.8 算术运算符和算术表达式第32页/共49页强制转换强制转换是通过类型转换运算符来实现。一般形式:(类型说明符)表达式功能:把表达式的结果强制转换为类型说明符所表示的类型。(int)a 将a的结果强制转换为整型量。(int)(x+y)将x+y的结果强制转换为整型量。(float)a+b
20、将a的内容强制转换为浮点数,再与b相加无论隐式转换,强制转换都是临时转换,不改变数据本身的类型和值。第33页/共49页 3.8 算术运算符和算术表达式(4)(4)自增、自减运算符自增、自减运算符 作用是使变量的值增或减如如:,(在使用之前,先使的值加 (减),(在使用之后,使的值加(减)第34页/共49页 3.8 算术运算符和算术表达式i+i+与+i+i的区别:是先执行后,再使用的值;是先使用的值后,再执行。例如:;i的值先变成4,再赋给,j的值均为 ;先将 i的值3赋给,的值为,然后变为第35页/共49页 3.8 算术运算符和算术表达式注意:(1)自增运算符(),自减运算符(),只能用于变量
21、,而不能用于常量或表达式,(2)和的结合方向是“自右至左”。自增(减)运算符常用于循环语句中使循环变量自动加。也用于指针变量,使指针指向下一个地址 第36页/共49页 3.8 算术运算符和算术表达式(5)(5)有关表达式使用中的问题说明有关表达式使用中的问题说明 ANSI C并没有具体规定表达式中的子表达式的求值顺序,允许各编译系统自己安排。例如:对表达式 a=f1()+f2()并不是所有的编译系统都先调用f1(),然后调用f2()。在有的情况下结果可能不同。有时会出现一些令人容易搞混的问题,因此务必要小心谨慎。第37页/共49页 3.8 算术运算符和算术表达式语言中有的运算符为一个字符,有的
22、运算符由两个字符组成,为避免误解,最好采取大家都能理解的写法。例如:不要写成i+j的形式,而应写成 (i+)+j的形式 第38页/共49页 3.8 算术运算符和算术表达式在调用函数时,实参数的求值顺序,标准并无统一规定。例如:的初值为,如果有下面的函数调用:printf(,i+)在有的系统中,从左至右求值,输出“,”。在多数系统中对函数参数的求值顺序是自右而左,函数输出的是“,”。以上这种写法不宜提倡,最好改写成 j=i+;j=i+;printf(%d printf(%d,%d%d,j j,i)i)不要写出别人看不懂的也不知道系统会怎样执行程序第39页/共49页3.9 赋值运算符和 赋值表达式
23、符号=为赋值运算符。2.整型数据赋给实型变量,数值不变,但按实数形式存放.1.将实型数据(无论单,双精度)赋给整型变量时,舍弃小数.赋值时,两边类型若不一致,则按以下规则转换:第40页/共49页4.将intlong int,进行符号扩展。即:符号扩展,低16位long 的低16位。5.long int int 则高16位截断。3.字符型数据赋给整型变量时:(2)字符带符号整型变量,则字符高位扩展。(1)字符无符号整型变量,则存入低8位,高8位补零。第41页/共49页6.将unsigned int 型long int高位补0。原值传送,但数据大小不能超值。如:unsigned int a=655
24、35;int b;b=a;则越界。而位数相同部分赋值 unsigned int int unsigned long long unsigned short short第42页/共49页7.非unsigned 型长度相同的unsigned型数据,原样传送(包括符号位)一、复合赋值运算符:在 号之前加一个其它运算符。C语言规定:凡是二目运算符均可构成复合运算符。例:a+=3;相当于 a=a+3 x=y+8;相当于 x=x(y+8)x%=3;相当于x=x%3 第43页/共49页一般形式:二、赋值表达式例:x=10 为一赋值表达式 其中又可以是一个赋值表达式。例:x=(y=10)相当于 y=10;x=
25、y 由于赋值号为右结合性,于是()可省略,即为:x=y=10;第44页/共49页例:a+=a =aa (设a12)又:a=5+(c=6)c=6,a=11 a=(b=4)+(c=6)b=4,c=6,a=10 a=(b=10)/(c=2)b=10,c=2,a=5进一步,还可用复合赋值运算符作下列运算:步骤:aa144.a =a a a=a a a=12 144=132 a+=132 a=a+(132)=264第45页/共49页3.10 逗号运算符和逗号表达式 一般形式:表达式1,表达式2,表达式3,表达式n其计算规则:先计算表达式1,再计算表达式2,.最后值为表达式n的值。例:a=35,a 4 则:先计算3 5,a15,a 4=60,结果为60。第46页/共49页又如:(a=35,a 4),a+5 扩展形式:表达式1,表达2,表达式n,结果为20(作为逗号表达式的值)a+5a 即 20a.3 5=15a a 4=60 (此时a值仍未变)结果为表达式n的值 第47页/共49页注意:x=(a=3,63)赋值表达式,x18;x=a=3,6 a 逗号表达式,x3.逗号表达式主要用于某些语句中需一次计算多个表达式值的情况。如在循环语句中。函数调用中的实参之间虽然用的是逗号间隔,但不是逗号表达式。如:printf(%d,%d,%d,a,b,c);第48页/共49页感谢您的观看!第49页/共49页
限制150内