数据类型运算符与表达式ppt课件.ppt

上传人:sccc 文档编号:5353580 上传时间:2023-06-28 格式:PPT 页数:48 大小:977.01KB
返回 下载 相关 举报
数据类型运算符与表达式ppt课件.ppt_第1页
第1页 / 共48页
数据类型运算符与表达式ppt课件.ppt_第2页
第2页 / 共48页
数据类型运算符与表达式ppt课件.ppt_第3页
第3页 / 共48页
数据类型运算符与表达式ppt课件.ppt_第4页
第4页 / 共48页
数据类型运算符与表达式ppt课件.ppt_第5页
第5页 / 共48页
点击查看更多>>
资源描述

《数据类型运算符与表达式ppt课件.ppt》由会员分享,可在线阅读,更多相关《数据类型运算符与表达式ppt课件.ppt(48页珍藏版)》请在三一办公上搜索。

1、数据类型、运算符与表达式,西南财经大学经济信息工程学院刘家芬,C语言大学实用教程,例2.1 第一个C程序,#include void main()printf(“This is a program.n”);,编译预处理命令导入stdio.h:标准输入输出头文件,C程序的主函数,每个C程序有且仅有一个主函数,void表示主函数不返回任何值。,是stdio.h中定义的标准输出函数,用于在屏幕上显示。,()中就是需要输出的内容,将用“”引起来的字符串原样显示在屏幕上即可,n是一个特殊的字符,称为转义字符。用于控制光标移动到下一行,例2.2 第二个C程序,#include void main()int

2、 a,b,sum;a=123;b=456;sum=a+b;printf(sum is%dn,sum);,编译预处理命令导入stdio.h:标准输入输出头文件,C程序的主函数,每个C程序有且仅有一个主函数,void表示主函数不返回任何值。,定义了三个变量,名字分别是a,b,sum.这三个变量都是int型。,给变量a赋值123,实际上就是向该内存单元放入值123;给变量b赋值456.,变量sum的值是变量a的值加上变量b的值;,调用stdio.h中的printf函数,在屏幕上显示计算结果。首先原样输出sum is,后面的%d是格式控制符,表示“以十进制整数形式输出”变量sum的值,例2.3 第三个

3、C程序,#include void main()int max(int x,int y);int a,b,c;scanf(%d,%d,声明后面的语句中将使用一个用户自定义的函数max,该函数使用两个整型参数,并且返回一个整型值,使用stdio.h中定义的标准库函数scanf,从键盘读取两个十进制整数,分别赋值给a和b,以a和b作为参数调用用户自定义函数max,并且将该函数的返回值赋给变量c,使用stdio.h中定义的标准输出库函数pintf,这里是函数max的定义部分,该函数使用两个整型参数x和y,作用是找出x和y中较大的值并返回给主程序,C程序的特点,函数是程序的基本单位主函数用户自定义函数

4、系统提供的库函数函数由函数头和函数体组成函数头包括返回值类型、函数名、形式参数列表函数体 由语句;组成,常量(Constant),程序运行过程中保持固定值的数据,根据类型分为:整型常量如5,程序2中的123,456实型常量如4.6,-1.23,1e-4字符常量如5,c,/n字符串常量如“5”和程序1中的“This is a program.”符号常量(宏常量)#define PI=3.1415926 枚举常量 enum enum responseyes,no;enum response answer;answer=yes;,变量(Variable),在程序执行过程中值会发生改变的量变量名代表着

5、内存中的一个存储单元,里面存放的就是变量的值。怎么给变量起名字呢?标识符的命名规则由英文字母、数字和下划线组成,只能以字母和下划线开头。不允许使用关键字作为标识符的名字。区分大小写 除了变量名外,符号常量、自定义函数、数组等的名字也都是标识符,简单地说,标识符就是用户在程序中起的一个名字。,123,456,我的名字叫a,我的名字叫b,变量使用的原则,使用变量的基本原则先定义,后使用编译时确定该变量所占用的内存单元的大小编译时进行合法性检查例如%求余运算要求两个操作数均为int型。一条定义语句可定义若干个同类型的变量,以逗号分隔定义后没有赋初值的变量,其值为随机数例2中先定义,然后再赋初值 in

6、t a,b,sum;a=123;b=456;也可以在定义的同时初始化char esc=a;int i=1;,数据的类型,数据为什么要区分类型?不同类型的数据代表不同的数据表示形式合法的取值范围占用内存空间大小可参与的运算种类 常用数据类型有整型、浮点型、字符型等,整型数据之整型常量,十进制整数18、-31八进制整数以0开头,数取0-7如022,-037,注意区分022和22的值十六进制整数以0 x开头,数取0-F或者0-f0 x12,-0 x1f整型常量的后缀无后缀为基本整型L或者l,表示long长型,占用比基本整型更长的存储单元,如 123占用两个字节,123l、123L占用4个字节,但数值

7、一样。U或者u,表示unsigned无符号,只能表示正数,涉及最高位的意义。,0XA5Lu,整型数据之整型变量,数据在内存中以二进制的补码形式存放。正数的补码和原码相同。负数的补码:将该数绝对值的二进制形式,按位取反再加1。例:求-10的补码 10的原码取反再加1就得到了-10的补码,-10,整型变量的分类,根据所占内存大小基本型:类型说明符为int,占2个字节。短整型:类型说明符为short int或short。完全等同于基本型。长整型:类型说明符为long int或long,在内存中占4个字节。根据是否有正负符号有符号,修饰符signed。默认为signed,可省略不写无符号,修饰符uns

8、igned两种分类方法交叉组合成六种整型变量,signed VS unsigned,signed与unsigned型的区别:signed的最高位代表符号,0为正,1为负unsigned的最高位也代表数值以基本整型int为例,signed int和unsigned int都是占用两个字节,但表示范围不同。有符号整型量signed int,最大表示=32767无符号整型量unsigned int=65535,整型变量的取值范围,如果超出了该变量的取值范围,会出现什么情况呢?,溢出!,例2.4 溢出举例,#include void main()int i,j,m,n;i=32767;j=i+1;m=

9、-32768;n=m-1;printf(i=%d,j=%dn,i,j);printf(m=%d,n=%dn,m,n);,溢出(Overflow),C语言直接提供的任何类型都有取值范围。当向其赋超过此范围的数值,就会产生数值溢出,得到一个不正确的结果。int 型数32767在内存中的表示方法:加1补码解释为-32768如何避免类似的错误?,typeoverflow.c,浮点型数据之浮点型常量,浮点数就是实数,有两种表示形式十进制小数形式0.0、25.0、5.789、0.13、5.0、300.、-267.8230必须有小数点指数形式如2.1e5、-2.8E-2等。E之前必须有数字,并且指数部分为整

10、数。例:123.456可以表示为:123.456e0,12.3456e1,1.23456e2,0.123456e3,0.0123456e4后缀为“f”或“F”表示该数为单精度浮点数365是浮点数吗?365.是浮点数吗?365.00是浮点数吗?365f是浮点数吗?,浮点型数据的存放,浮点型数据在内存中以指数形式存放N=S2j,所占位数决定实数的取值范围,所占位数决定实数的精度,例2.5关于实数的输出,#include main()float f=123.456;printf(f in decimal:%fn,f);printf(f in exponent:%en,f);,浮点型变量的分类,单精度

11、(float型)占用4个字节,有效数字7位双精度(double型)占用8个字节,有效数字16位长双精度(long double型)占用16个字节,较少使用什么是有效数字?回顾例2.5的执行结果注意:浮点型常量都作为双精度来处理,例 2.6 float型的有效位数,#include stdio.hmain()float a;double b;a=123456.789e4;b=123456.789e4;printf(%fn%fn,a,b);,float型中通常用位来存放以二进制表示的尾数部分。将一个较大的十进制小数转化成二进制,通常都会超出位的长度,所以在内存中存放时会舍去后面的小数。之后读取时,

12、按照二进制到十进制的转换规则,输出的就不再是之前赋予的值了。,字符型数据之字符常量,字符常量是用单引号括起来的一个字符。如a,A,5,%,$等转义字符是一种特殊的字符常量。转义字符以反斜线开头,后跟一个或几个字符。转义字符具有特定的含义,不同于字符原有的意义,故称“转义”字符。,常见转义字符,101表示?,字符型数据之字符变量,字符变量代表内存中的一个存储单元,长度为一个字节,用来存放一个字符 char c1,c2;c1=A;c2=a;,字符型数据在内存中的形式,字符型数据是以其ASCII码值的形式存放在内存单元之中的。char c1,c2;c1=A;c2=a;字符型数据可以作为取值范围0-2

13、55间的整型数据处理。,0100 0001,C1,0110 0001,C2,%c,%d,A,65,%c,%d,a,97,例2.7 字符型数据的处理,#include void main()char c1,c2;c1=97;c2=98;printf(%c,%cn,c1,c2);printf(%d,%dn,c1,c2);字符型数据可以以其ASCII码值参与算术运算;字符型数据可以与整型数据互相赋值;例如int i=a;char c=97;,字符串(String)常量,字符串常量是由一对双引号括起的字符序列。例如:CHINA,C program,$12.5 等都是合法的字符串常量。字符常量和字符串常

14、量的区别:字符常量由单引号括起来,字符串常量由双引号括起来。字符常量只能是单个字符,字符串常量则可以包含一个或多个字符。字符常量只占一个字节的内存空间。字符串常量占的内存字节数等于字符串中字符数加1,增加的一个字节用于存放字符“0”(ASCII码为0),也就是字符串结束标志。区别5,5,5注意:字符串结束标志是由系统自动添加的。,不同类型间的转换,自动转换不同类型的数据混合运算时,编译系统自动完成类型转换。若参与运算量的类型不同,则先转换成同一类型,然后进行运算。如10+a+1.5转换按数据长度增加的方向进行,以保证精度不降低。所有的浮点运算都是以双精度进行的,即使仅含float单精度量运算的

15、表达式,也要先转换成double型再运算。char型和short型参与运算时,必须先转换成int型在赋值运算中,赋值号两边量的数据类型不同时,赋值号右边量的类型将转换为左边量的类型。如果右边量的数据类型长度比左边长时,将丢失一部分数据,这样会降低精度,丢失的部分按四舍五入向前舍入。,转换规则,1.横向的箭头表示必定的转换,例如float型数据在进行计算时,即使两个数都是float型,也要先转换成double型才行。这样做是为了提高精度。2.纵向箭头标明了数据类型级别的高低,由低向高进行转换。例如int型和double型运算,首先int型数据要转换成double型,然后再运算。,强制转换,通过类

16、型转换运算来实现,其一般形式为:(类型说明符)(表达式)其功能是把表达式的运算结果强制转换成类型说明符所表示的类型。例如:(float)a 把a转换为实型(int)(x+y)把x+y的结果转换为整型注意:无论是强制转换或是自动转换,都只是运算的需要而对变量的数据长度进行的临时性转换,而不改变该变量的类型,例2.8 强制类型转换,#include main()int m=5;printf(m/2=%dn,m/2);printf(float)(m/2)=%fn,(float)(m/2);printf(float)m/2=%fn,(float)m/2);printf(m=%dn,m);,m/2=2(

17、float)(m/2)=2.000000(float)m/2=2.500000m=5,运算符,算术运算符:用于各类数值运算。包括加(+)、减(-)、乘(*)、除(/)、求余(或称模运算,%)、自增(+)、自减(-)共七种。关系运算符:用于比较运算。包括大于()、小于(=)、小于等于()六种。赋值运算符:用于赋值运算,分为简单赋值(=)、复合算术赋值(+=,-=,*=,/=,%=)和复合位运算赋值(&=,|=,=,=,=)三类共十一种。条件运算符:这是一个三目运算符,用于条件求值(?:)。逗号运算符:用于把若干表达式组合成一个表达式(,)。指针运算符:用于取内容(*)和取地址(&)二种运算。求字

18、节数运算符:用于计算数据类型所占的字节数(sizeof)。特殊运算符:有括号(),下标等几种。,运算符的优先级与结合性,运算符的优先级:在表达式中,优先级较高的先于优先级较低的进行运算。而在一个运算量两侧的运算符优先级相同时,则按运算符的结合性所规定的结合方向处理。运算符的结合性:语言中各运算符的结合性分为两种左结合性(自左至右)和右结合性(自右至左)。C语言中多数运算符为左结合,例如表达式x-y+z。C中满足右结合的运算符单目运算符赋值运算符条件运算符,运算符的优先级,1.()-.2.!+-+-*&(类型)sizeof3.*/%4.+-5.6.=7.=!=8.&9.10.|11.&12.|1

19、3.?:14.=+=-=*=/=%=&=|=15.,用括号来控制运算顺序更直观、方便,并减少出错的概率,算术运算符,+,-,*,/,%,-(取反)两整数相除结果仍为整数求余运算的操作数必须为整数,余数符号与被除数相同算术表达式用算术运算符将运算对象连接起来的式子复杂的算术表达式经常需要用到math.h中提供的标准数学函数P34注意事项,常用的标准数学函数,自增和自减运算符,n+,n-,+n,-n+让参与运算的变量加1,-让参与运算的变量减1作为后缀运算符时,先用n的原值参与运算,然后n的值加/减1作为前缀运算符时,先对n的值进行加/减,然后用n的现值参与运算int i=8;printf(%dn

20、,+i);9 printf(%dn,-i);8 printf(%dn,i+);8 printf(%dn,i-);9 printf(%dn,-i+);-8 printf(“%dn”,-i-);-9自增自减运算符的运算对象只能是变量,不能是表达式例如(a+b)+、(-i)+都是错误的,关系运算符,,=,b且bc?关系表达式abc的值为真吗?,逻辑运算符,逻辑运算也被称为布尔(Boolean)运算与运算&a&b当且仅当两者都为真,则结果为真(a b&b c)a大于b,并且b大于c或运算|a|b只要两者中有一个为真,结果就为真(a b|b c)a大于b,或者b大于c求反!(!a)如果a是0,结果非0;

21、如果a是非0,结果是0并不改变a的值,实例,ch是英文大写字母(ch=A)&(ch=Z)判断某一年year是否是闰年的条件是满足下列两个条件之一:能被4整除,但不能被100整除;能被400整除;(year%4=0)&(year%100!=0)|(year%400=0),赋值运算符,赋值表达式变量名=表达式,计算右边表达式的值并将其赋给左边的变量。左侧不允许表达式,只能是标识一个存储单元的变量.判断a+b=c,x=x+1是否为合法的赋值表达式?赋值运算符优先级低于算术运算符、关系运算符和逻辑运算符。满足右结合性。赋值表达式的值等于运算完成后左操作数的值a=b=c=5 等价于a=(b=(c=5)赋

22、值表达式将自动进行类型转换,复合赋值运算符,复合赋值表达式变量 二元运算符=表达式 等价于变量=变量 二元运算符 表达式a+=5 等价于a=a+5 x*=y+7 等价于x=x*(y+7)r%=p 等价于r=r%p算术运算符+、-、*、/、%和位运算符、&、|运算符都可进行复合赋值运算。,位操作运算符,&按位与运算|按位或运算按位异或运算,按位右移运算按位求反,见书本P41页,例2.9 逻辑运算与位运算,#include void main()int x=12,y=8;printf(n%5d%5d%5d,!x,x|y,x,逗号运算符,语言中逗号,也是一种运算符,称为逗号运算符,常见形式:表达式1

23、,表达式2,.,表达式n其功能是把多个表达式连接起来组成一个表达式,称为逗号表达式。其求值过程是依次求各个表达式的值,并以最右边表达式n的值作为整个逗号表达式的值。在所有运算符中优先级最低,具有左结合性。,条件表达式,关系表达式?值1:值2若关系表达式为真的时候,整个条件表达式值为值1,否则为值2.例如,z取值为a和b中的较大值,例2.10 sizeof()运算符,#include void main()printf(Data type Number of bytesn);printf(-n);printf(char%dn,sizeof(char);printf(int%dn,sizeof(i

24、nt);printf(short int%dn,sizeof(short);printf(long int%dn,sizeof(long);printf(float%dn,sizeof(float);printf(double%dn,sizeof(double);,小结,变量的命名规则数据类型char,short,int,long,float,double,long doublesigned,unsignedenum常量、转义字符运算符算术运算符、自增/自减运算符、关系运算符、逻辑运算符、位运算符、赋值运算符、类型强转运算符、逗号运算符、条件运算符(?:)、sizeof类型转换优先级和结合性表达式,作业,P46习题2.1和2.2准备上机练习题,

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

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号