《数据类型运算符与表达式ppt课件.ppt》由会员分享,可在线阅读,更多相关《数据类型运算符与表达式ppt课件.ppt(48页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1数据类型运算符与表达式ppt课件 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望2例例例例2.1 2.1 第一个第一个第一个第一个C C程序程序程序程序#include void main()printf(“This is a program.n”);编译预处理命令编译预处理命令编译预处理命令编译预处理命令导入导入stdio.h:标准输入输标准输入输出头文件出头文件C程序的主函数程序的主函数,每个,每个C程序有且仅有一个主函程序有且仅有一个主函数,数,void表
2、示主函数不表示主函数不返回任何值。返回任何值。是是stdio.h中定义的标中定义的标准输出函数,用于准输出函数,用于在屏幕上显示。在屏幕上显示。()中就是需要输出的内中就是需要输出的内容,将用容,将用“”引起来引起来的字符串原样显示的字符串原样显示在屏幕上即可在屏幕上即可n是一个特殊的字符,是一个特殊的字符,称为转义字符。用称为转义字符。用于控制光标移动到于控制光标移动到下一行下一行3例例例例2.2 2.2 第二个第二个第二个第二个C C程序程序程序程序#include void main()int a,b,sum;a=123;b=456;sum=a+b;printf(sum is%dn,su
3、m);编译预处理命令编译预处理命令编译预处理命令编译预处理命令导入导入stdio.h:标准输入输标准输入输出头文件出头文件C程序的主函数程序的主函数,每个,每个C程序有且仅有一个主函数,程序有且仅有一个主函数,void表示主函数不返回任何表示主函数不返回任何值。值。定义了三个变量,名字分别定义了三个变量,名字分别是是a,b,sum.这三个变量都是这三个变量都是int型。型。给变量给变量a赋值赋值123,实际上就,实际上就是向该内存单元放入值是向该内存单元放入值123;给变量;给变量b赋值赋值456.变量变量sum的值是变量的值是变量a的值的值加上变量加上变量b的值;的值;调用调用stdio.h
4、中的中的printf函数函数,在屏幕上显示计算在屏幕上显示计算结果。首先原样输出结果。首先原样输出sum is,后面的,后面的%d是格是格式控制符,表示式控制符,表示“以十以十进制整数形式输出进制整数形式输出”变变量量sum的值的值4例例例例2.3 2.3 第三个第三个第三个第三个C C程序程序程序程序#include void main()int max(int x,int y);int a,b,c;scanf(%d,%d,&a,&b);c=max(a,b);printf(max is%dn,c);int max(int x,int y)int z;if(xy)z=x;else z=y;re
5、turn(z);声明后面的语句中将使声明后面的语句中将使用一个用户自定义的函用一个用户自定义的函数数max,该函数使用两,该函数使用两个整型参数,并且返回个整型参数,并且返回一个整型值一个整型值使用使用stdio.h中定义的标中定义的标准库函数准库函数scanf,从键盘,从键盘读取两个十进制整数,读取两个十进制整数,分别赋值给分别赋值给a和和b以以a和和b作为参数调用用作为参数调用用户自定义函数户自定义函数max,并且并且将该函数的返回值赋给将该函数的返回值赋给变量变量c使用使用stdio.h中定义的标中定义的标准输出库函数准输出库函数pintf这里是函数这里是函数max的定义的定义部分,该函
6、数使用两个部分,该函数使用两个整型参数整型参数x和和y,作用是,作用是找出找出x和和y中较大的值并中较大的值并返回给主程序返回给主程序5C C程序的特点程序的特点程序的特点程序的特点函数是程序的基本单位函数是程序的基本单位函数是程序的基本单位函数是程序的基本单位主函数主函数主函数主函数用户自定义函数用户自定义函数用户自定义函数用户自定义函数系统提供的库函数系统提供的库函数系统提供的库函数系统提供的库函数函数由函数头和函数体组成函数由函数头和函数体组成函数由函数头和函数体组成函数由函数头和函数体组成函数头包括返回值类型、函数名、形式参数列表函数头包括返回值类型、函数名、形式参数列表函数头包括返回
7、值类型、函数名、形式参数列表函数头包括返回值类型、函数名、形式参数列表函数体函数体函数体函数体 由由由由 语句;语句;语句;语句;组成组成组成组成6常量(常量(常量(常量(ConstantConstant)程序运行过程中保持固定值的数据,根据类型分为:程序运行过程中保持固定值的数据,根据类型分为:程序运行过程中保持固定值的数据,根据类型分为:程序运行过程中保持固定值的数据,根据类型分为:整型常量整型常量整型常量整型常量如如如如5 5,程序,程序,程序,程序2 2中的中的中的中的123123,456456实型常量实型常量实型常量实型常量如如如如4.64.6,-1.23-1.23,1e-41e-4
8、字符常量字符常量字符常量字符常量如如如如55,c c,/n/n字符串常量字符串常量字符串常量字符串常量如如如如“5”“5”和程序和程序和程序和程序1 1中的中的中的中的“This is a program.”This is a program.”符号常量(宏常量)符号常量(宏常量)符号常量(宏常量)符号常量(宏常量)#define PI=3.1415926#define PI=3.1415926 枚举常量枚举常量枚举常量枚举常量 enumenum enum responseyesenum responseyes,nono;enum response answer;enum response a
9、nswer;answer=yes;answer=yes;7变量(变量(变量(变量(VariableVariable)在程序执行过程中值会发生改变的量在程序执行过程中值会发生改变的量在程序执行过程中值会发生改变的量在程序执行过程中值会发生改变的量变量名代表着内存中的一个存储单元,里面存放变量名代表着内存中的一个存储单元,里面存放变量名代表着内存中的一个存储单元,里面存放变量名代表着内存中的一个存储单元,里面存放的就是变量的值。的就是变量的值。的就是变量的值。的就是变量的值。怎么给变量起名字呢?怎么给变量起名字呢?怎么给变量起名字呢?怎么给变量起名字呢?标识符的命名规则标识符的命名规则标识符的命名
10、规则标识符的命名规则由英文字母、数字和下划线组成,只能以字母和下划由英文字母、数字和下划线组成,只能以字母和下划由英文字母、数字和下划线组成,只能以字母和下划由英文字母、数字和下划线组成,只能以字母和下划线开头。不允许使用关键字作为标识符的名字线开头。不允许使用关键字作为标识符的名字线开头。不允许使用关键字作为标识符的名字线开头。不允许使用关键字作为标识符的名字 。区分大小写区分大小写区分大小写区分大小写 除了变量名外,符号常量、自定义函数、数组等的名字也都是标识符,除了变量名外,符号常量、自定义函数、数组等的名字也都是标识符,除了变量名外,符号常量、自定义函数、数组等的名字也都是标识符,除了
11、变量名外,符号常量、自定义函数、数组等的名字也都是标识符,简单地说,标识符就是用户在程序中起的一个名字。简单地说,标识符就是用户在程序中起的一个名字。简单地说,标识符就是用户在程序中起的一个名字。简单地说,标识符就是用户在程序中起的一个名字。123123456456我的名字叫我的名字叫a我的名字叫我的名字叫b8变量使用的原则变量使用的原则变量使用的原则变量使用的原则使用变量的基本原则使用变量的基本原则使用变量的基本原则使用变量的基本原则先定义,后使用先定义,后使用先定义,后使用先定义,后使用编译时确定该变量所占用的内存单元的大小编译时确定该变量所占用的内存单元的大小编译时确定该变量所占用的内存
12、单元的大小编译时确定该变量所占用的内存单元的大小编译时进行合法性检查编译时进行合法性检查编译时进行合法性检查编译时进行合法性检查例如例如例如例如%求余运算要求两个操作数均为求余运算要求两个操作数均为求余运算要求两个操作数均为求余运算要求两个操作数均为intint型。型。型。型。一条定义语句可定义若干个同类型的变量,以一条定义语句可定义若干个同类型的变量,以一条定义语句可定义若干个同类型的变量,以一条定义语句可定义若干个同类型的变量,以逗号分隔逗号分隔逗号分隔逗号分隔定义后没有赋初值的变量,其值为随机数定义后没有赋初值的变量,其值为随机数定义后没有赋初值的变量,其值为随机数定义后没有赋初值的变量
13、,其值为随机数例例例例2 2中先定义,然后再赋初值中先定义,然后再赋初值中先定义,然后再赋初值中先定义,然后再赋初值 int a,b,sum;a=123;b=456;也可以在定义的同时初始化也可以在定义的同时初始化也可以在定义的同时初始化也可以在定义的同时初始化charchar esc=a;esc=a;intint i=1;i=1;9数据的类型数据的类型数据的类型数据的类型数据为什么要区分类型?数据为什么要区分类型?数据为什么要区分类型?数据为什么要区分类型?不同类型的数据代表不同的不同类型的数据代表不同的不同类型的数据代表不同的不同类型的数据代表不同的数据表示形式数据表示形式数据表示形式数据
14、表示形式合法的取值范围合法的取值范围合法的取值范围合法的取值范围占用内存空间大小占用内存空间大小占用内存空间大小占用内存空间大小可参与的运算种类可参与的运算种类可参与的运算种类可参与的运算种类 常用数据类型有整型、浮点型、字符型等常用数据类型有整型、浮点型、字符型等常用数据类型有整型、浮点型、字符型等常用数据类型有整型、浮点型、字符型等10整型数据之整型数据之整型数据之整型数据之整型常量整型常量整型常量整型常量十进制整数十进制整数18、-31八进制整数八进制整数以以0开头,数取开头,数取0-7如如022,-037,注意区分,注意区分022和和22的值的值十六进制整数十六进制整数以以0 x开头,
15、数取开头,数取0-F或者或者0-f0 x12,-0 x1f整型常量的后缀整型常量的后缀无后缀为基本整型无后缀为基本整型L或者或者l,表示表示long长型,占用比基本整型更长的存储单元,长型,占用比基本整型更长的存储单元,如如 123占用两个字节,占用两个字节,123l、123L占用占用4个字节,但数值个字节,但数值一样。一样。U或者或者u,表示表示unsigned无符号无符号,只能表示正数,涉及最高,只能表示正数,涉及最高位的意义。位的意义。0XA5Lu11整型数据之整型数据之整型数据之整型数据之整型变量整型变量整型变量整型变量数据在内存中以二进制的补码形式存放。数据在内存中以二进制的补码形式
16、存放。数据在内存中以二进制的补码形式存放。数据在内存中以二进制的补码形式存放。正数的补码和原码相同。正数的补码和原码相同。正数的补码和原码相同。正数的补码和原码相同。负数的补码:将该数绝对值的二进制形式,按负数的补码:将该数绝对值的二进制形式,按负数的补码:将该数绝对值的二进制形式,按负数的补码:将该数绝对值的二进制形式,按位取反再加位取反再加位取反再加位取反再加1 1。例:求例:求例:求例:求-10-10的补码的补码的补码的补码 1010的原码的原码的原码的原码取反取反取反取反再加再加再加再加1 1就得到了就得到了就得到了就得到了-10-10的补码的补码的补码的补码-1012整型变量的分类整
17、型变量的分类整型变量的分类整型变量的分类根据所占内存大小根据所占内存大小根据所占内存大小根据所占内存大小基本型:类型说明符为基本型:类型说明符为基本型:类型说明符为基本型:类型说明符为intint,占,占,占,占2 2个字节。个字节。个字节。个字节。短整型:类型说明符为短整型:类型说明符为短整型:类型说明符为短整型:类型说明符为short intshort int或或或或shortshort。完全等同。完全等同。完全等同。完全等同于基本型。于基本型。于基本型。于基本型。长整型:类型说明符为长整型:类型说明符为长整型:类型说明符为长整型:类型说明符为long intlong int或或或或lon
18、glong,在内存中占,在内存中占,在内存中占,在内存中占4 4个字节。个字节。个字节。个字节。根据是否有正负符号根据是否有正负符号根据是否有正负符号根据是否有正负符号有符号,修饰符有符号,修饰符有符号,修饰符有符号,修饰符signedsigned。默认为。默认为。默认为。默认为signed,signed,可省略不写可省略不写可省略不写可省略不写无符号,修饰符无符号,修饰符无符号,修饰符无符号,修饰符unsignedunsigned两种分类方法交叉组合成六种整型变量两种分类方法交叉组合成六种整型变量两种分类方法交叉组合成六种整型变量两种分类方法交叉组合成六种整型变量13signed VS un
19、signedsigned VS unsignedsignedsigned与与与与unsignedunsigned型的区别:型的区别:型的区别:型的区别:signedsigned的最高位代表符号,的最高位代表符号,的最高位代表符号,的最高位代表符号,0 0为正,为正,为正,为正,1 1为负为负为负为负unsignedunsigned的最高位也代表数值的最高位也代表数值的最高位也代表数值的最高位也代表数值以基本整型以基本整型以基本整型以基本整型intint为例,为例,为例,为例,signed intsigned int和和和和unsigned unsigned intint都是占用两个字节,但表示
20、范围不同。都是占用两个字节,但表示范围不同。都是占用两个字节,但表示范围不同。都是占用两个字节,但表示范围不同。有符号整型量有符号整型量有符号整型量有符号整型量signed int signed int,最大表示,最大表示,最大表示,最大表示 =32767 =32767无符号整型量无符号整型量无符号整型量无符号整型量unsigned intunsigned int =65535 =6553514整型变量的取值范围整型变量的取值范围整型变量的取值范围整型变量的取值范围如果超出了该变量的取值范围,会出现什么情况呢如果超出了该变量的取值范围,会出现什么情况呢?溢出!溢出!溢出!溢出!15例例例例2.
21、4 2.4 溢出举例溢出举例溢出举例溢出举例#include void main()int i,j,m,n;i=32767;j=i+1;m=-32768;n=m-1;printf(i=%d,j=%dn,i,j);printf(m=%d,n=%dn,m,n);16溢出溢出溢出溢出(OverflowOverflow)C C语言直接提供的任何类型都有取值范围。当向语言直接提供的任何类型都有取值范围。当向语言直接提供的任何类型都有取值范围。当向语言直接提供的任何类型都有取值范围。当向其赋超过此范围的数值,就会产生数值溢出,其赋超过此范围的数值,就会产生数值溢出,其赋超过此范围的数值,就会产生数值溢出,
22、其赋超过此范围的数值,就会产生数值溢出,得到一个不正确的结果。得到一个不正确的结果。得到一个不正确的结果。得到一个不正确的结果。int int 型数型数型数型数3276732767在内存中的表示方法:在内存中的表示方法:在内存中的表示方法:在内存中的表示方法:加加加加1 1补码解释为补码解释为补码解释为补码解释为-32768-32768如何避免类似的错误?如何避免类似的错误?如何避免类似的错误?如何避免类似的错误?typeoverflow.ctypeoverflow.c1 1 1 1 1 1 11 1 1 1 1 1 1010 0 0 0 0 0 00 0 0 0 0 0 01017浮点型数据
23、之浮点型数据之浮点型数据之浮点型数据之浮点型常量浮点型常量浮点型常量浮点型常量浮点数就是实数,有两种表示形式浮点数就是实数,有两种表示形式浮点数就是实数,有两种表示形式浮点数就是实数,有两种表示形式十进制小数形式十进制小数形式十进制小数形式十进制小数形式0.0、25.0、5.789、0.13、5.0、300.、-267.8230必须有小数点必须有小数点指数形式指数形式指数形式指数形式如如2.1e5、-2.8E-2等。等。E之前必须有数字,并且指数部分为整数。之前必须有数字,并且指数部分为整数。例:例:123.456可以表示为:可以表示为:123.456e0,12.3456e1,1.23456e
24、2,0.123456e3,0.0123456e4后缀为后缀为后缀为后缀为“f f”或或或或“F F”表示该数为单精度浮点数表示该数为单精度浮点数表示该数为单精度浮点数表示该数为单精度浮点数365是浮点数吗?是浮点数吗?365.是浮点数吗?是浮点数吗?365.00是浮点数吗?是浮点数吗?365f是浮点数吗?是浮点数吗?18浮点型数据的存放浮点型数据的存放浮点型数据的存放浮点型数据的存放浮点型数据在内存中以指数形式存放浮点型数据在内存中以指数形式存放N=SN=S2222j j j j阶码符号阶码符号阶码的数值阶码的数值尾数符号尾数符号尾数的数值尾数的数值阶码阶码j尾数尾数S所占位数决定所占位数决定
25、所占位数决定所占位数决定实数的取值范围实数的取值范围实数的取值范围实数的取值范围所占位数决定所占位数决定所占位数决定所占位数决定实数的精度实数的精度实数的精度实数的精度19例例例例2.52.5关于实数的输出关于实数的输出关于实数的输出关于实数的输出#include main()float f=123.456;printf(f in decimal:%fn,f);printf(f in exponent:%en,f);20浮点型变量的分类浮点型变量的分类浮点型变量的分类浮点型变量的分类单精度(单精度(单精度(单精度(floatfloat型)型)型)型)占用占用占用占用4 4个字节,有效数字个字节
26、,有效数字个字节,有效数字个字节,有效数字7 7位位位位双精度(双精度(双精度(双精度(doubledouble型)型)型)型)占用占用占用占用8 8个字节,有效数字个字节,有效数字个字节,有效数字个字节,有效数字1616位位位位长双精度(长双精度(长双精度(长双精度(long doublelong double型)型)型)型)占用占用占用占用1616个字节,较少使用个字节,较少使用个字节,较少使用个字节,较少使用什么是有效数字?什么是有效数字?什么是有效数字?什么是有效数字?回顾例回顾例回顾例回顾例2.52.5的执行结果的执行结果的执行结果的执行结果注意:浮点型常量都作为双精度来处理注意:浮
27、点型常量都作为双精度来处理21例例例例 2.6 float2.6 float型的有效位数型的有效位数型的有效位数型的有效位数#include stdio.hmain()float a;double b;a=123456.789e4;b=123456.789e4;printf(%fn%fn,a,b);float型中通常用位来存放以二进制表示的尾数部分。将一个较大的型中通常用位来存放以二进制表示的尾数部分。将一个较大的十进制小数转化成二进制,通常都会超出位的长度,所以在内存中十进制小数转化成二进制,通常都会超出位的长度,所以在内存中存放时会舍去后面的小数。之后读取时,按照二进制到十进制的转换规存放
28、时会舍去后面的小数。之后读取时,按照二进制到十进制的转换规则,输出的就不再是之前赋予的值了。则,输出的就不再是之前赋予的值了。22字符型数据之字符常量字符型数据之字符常量字符型数据之字符常量字符型数据之字符常量字符常量是用单引号括起来的一个字符。字符常量是用单引号括起来的一个字符。字符常量是用单引号括起来的一个字符。字符常量是用单引号括起来的一个字符。如如a,A,5,%,$等等转义字符是一种特殊的字符常量。转义字符是一种特殊的字符常量。转义字符是一种特殊的字符常量。转义字符是一种特殊的字符常量。转义字符以反斜线转义字符以反斜线开头,后跟一个或几个字符。开头,后跟一个或几个字符。转义字符具有特定
29、的含义,不同于字符原有的意义,转义字符具有特定的含义,不同于字符原有的意义,故称故称“转义转义”字符。字符。23常见转义字符常见转义字符常见转义字符常见转义字符字符形式字符形式 含义含义ASCIIASCII代码代码nn回车换行回车换行tt跳到下一个跳到下一个tabtab位置位置bb退格退格rr回车,将当前位置移到本行开头回车,将当前位置移到本行开头ff换页换页反斜杠字符反斜杠字符“”单引号字符单引号字符”双引号字符双引号字符dddddd8 8进制数进制数ASCIIASCII码码xhhxhh1616进制数进制数ASCIIASCII码码101表示?表示?24字符型数据之字符变量字符型数据之字符变量
30、字符型数据之字符变量字符型数据之字符变量字符变量字符变量字符变量字符变量代表内存中的一个存储单元,长度为一个字节,用代表内存中的一个存储单元,长度为一个字节,用代表内存中的一个存储单元,长度为一个字节,用代表内存中的一个存储单元,长度为一个字节,用来存放一个字符来存放一个字符来存放一个字符来存放一个字符 char c1,c2;char c1,c2;c1=A;c1=A;c2=a;c2=a;25字符型数据在内存中的形式字符型数据在内存中的形式字符型数据在内存中的形式字符型数据在内存中的形式字符型数据是以其字符型数据是以其字符型数据是以其字符型数据是以其ASCIIASCII码值的形式存放在内码值的形
31、式存放在内码值的形式存放在内码值的形式存放在内存单元之中的。存单元之中的。存单元之中的。存单元之中的。char c1,c2;char c1,c2;c1=A;c1=A;c2=a;c2=a;字符型数据可以作为取值范围字符型数据可以作为取值范围字符型数据可以作为取值范围字符型数据可以作为取值范围0-2550-255间的整间的整间的整间的整型数据处理。型数据处理。型数据处理。型数据处理。0100 0001C10110 0001C2%c%dA65%c%da9726例例例例2.7 2.7 字符型数据的处理字符型数据的处理字符型数据的处理字符型数据的处理#include void main()char c1
32、,c2;c1=97;c2=98;printf(%c,%cn,c1,c2);printf(%d,%dn,c1,c2);字符型数据可以以其字符型数据可以以其ASCII码值参与算术运算;码值参与算术运算;字符型数据可以与整型数据互相赋值;字符型数据可以与整型数据互相赋值;例如例如int i=a;char c=97;27字符串(字符串(字符串(字符串(StringString)常量)常量)常量)常量字符串常量是由一对双引号括起的字符序列。字符串常量是由一对双引号括起的字符序列。字符串常量是由一对双引号括起的字符序列。字符串常量是由一对双引号括起的字符序列。例如:例如:例如:例如:CHINA CHINA
33、,C program C program ,$12.5$12.5 等都是合等都是合等都是合等都是合法的字符串常量。法的字符串常量。法的字符串常量。法的字符串常量。字符常量和字符串常量的区别:字符常量和字符串常量的区别:字符常量和字符串常量的区别:字符常量和字符串常量的区别:字符常量由单引号括起来,字符串常量由双引号括起来。字符常量由单引号括起来,字符串常量由双引号括起来。字符常量只能是单个字符,字符串常量则可以包含一个或多个字符。字符常量只能是单个字符,字符串常量则可以包含一个或多个字符。字符常量只占一个字节的内存空间。字符串常量占的内存字节数等于字符串字符常量只占一个字节的内存空间。字符串常
34、量占的内存字节数等于字符串中字符数加中字符数加1,增加的一个字节用于存放字符,增加的一个字节用于存放字符“0”(ASCII码为码为0),也就是字符,也就是字符串结束标志。串结束标志。区别区别5,5,5 注意:字符串结束标志是由系统自动添加的。注意:字符串结束标志是由系统自动添加的。28不同类型间的转换不同类型间的转换不同类型间的转换不同类型间的转换自动转换自动转换自动转换自动转换不同类型的数据混合运算时,编译系统自动完成类型转换。不同类型的数据混合运算时,编译系统自动完成类型转换。若参与运算量的类型不同,则先转换成同一类型,然后进行若参与运算量的类型不同,则先转换成同一类型,然后进行运算。如运
35、算。如10+a+1.5转换按数据长度增加的方向进行,以保证精度不降低。转换按数据长度增加的方向进行,以保证精度不降低。所有的浮点运算都是以双精度进行的,即使仅含所有的浮点运算都是以双精度进行的,即使仅含float单精度单精度量运算的表达式,也要先转换成量运算的表达式,也要先转换成double型再运算。型再运算。char型和型和short型参与运算时,必须先转换成型参与运算时,必须先转换成int型型在赋值运算中,赋值号两边量的数据类型不同时,赋值号右在赋值运算中,赋值号两边量的数据类型不同时,赋值号右边量的类型将转换为左边量的类型。如果右边量的数据类型边量的类型将转换为左边量的类型。如果右边量的
36、数据类型长度比左边长时,将丢失一部分数据,这样会降低精度,丢长度比左边长时,将丢失一部分数据,这样会降低精度,丢失的部分按四舍五入向前舍入。失的部分按四舍五入向前舍入。29转换规则转换规则转换规则转换规则高高 double float long unsigned 低低 int char、short 1.横向的箭头表示必定的转换,例如横向的箭头表示必定的转换,例如float型数据在进行计算时,型数据在进行计算时,即使两个数都是即使两个数都是float型,也要先转换成型,也要先转换成double型才行。这样做型才行。这样做是为了提高精度。是为了提高精度。2.纵向箭头标明了数据类型级别的高低,由低向
37、高进行转换。纵向箭头标明了数据类型级别的高低,由低向高进行转换。例如例如int型和型和double型运算,首先型运算,首先int型数据要转换成型数据要转换成double型,型,然后再运算。然后再运算。30强制转换强制转换强制转换强制转换通过类型转换运算来实现,其一般形式为:通过类型转换运算来实现,其一般形式为:通过类型转换运算来实现,其一般形式为:通过类型转换运算来实现,其一般形式为:(类型说明符类型说明符类型说明符类型说明符)()(表达式表达式表达式表达式)其功能是把表达式的运算结果强制转换成类型说其功能是把表达式的运算结果强制转换成类型说其功能是把表达式的运算结果强制转换成类型说其功能是把
38、表达式的运算结果强制转换成类型说明符所表示的类型。明符所表示的类型。明符所表示的类型。明符所表示的类型。例如:例如:例如:例如:(float)a (float)a 把把把把a a转换为实型转换为实型转换为实型转换为实型 (int)(x+y)(int)(x+y)把把把把x+yx+y的结果转换为整型的结果转换为整型的结果转换为整型的结果转换为整型注意:注意:注意:注意:无论是强制转换或是自动转换,都只是运算的需无论是强制转换或是自动转换,都只是运算的需要而对变量的数据长度进行的临时性转换,而不改变要而对变量的数据长度进行的临时性转换,而不改变该变量的类型该变量的类型31例例例例2.8 2.8 强制
39、类型转换强制类型转换强制类型转换强制类型转换#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(float)(m/2)=2.000000(float)m/2=2.500000m=532运算符运算符运算符运算符算术运算符算术运算符:用于各类数值运算。包括加用于各类数值运算。包括加(+)、减、减(-)、乘、乘(*)、除、除(/)、求余、求余(或称模运算,或称模运算,%)、自增、自增(+
40、)、自减、自减(-)共七种。共七种。关系运算符关系运算符:用于比较运算。包括大于用于比较运算。包括大于()、小于、小于(=)、小于等于、小于等于(=)和不等于和不等于(!=)六种。六种。逻辑运算符逻辑运算符:用于逻辑运算。包括与用于逻辑运算。包括与(&)、或、或(|)、非、非(!)三种。三种。位操作运算符位操作运算符:参与运算的量,按二进制位进行运算。包括位与参与运算的量,按二进制位进行运算。包括位与(&)、位或、位或(|)、位非、位非()、位异或、位异或()、左移、左移()六种。六种。赋值运算符赋值运算符:用于赋值运算,分为简单赋值用于赋值运算,分为简单赋值(=)、复合算术赋值、复合算术赋值
41、(+=,-=,*=,/=,%=)和复合位运算赋值和复合位运算赋值(&=,|=,=,=,.()-.2.2.!+-+-*&(!+-+-*&(类型类型类型类型)sizeof3.3.*/%/%4.4.+-+-5.5.6.6.=7.7.=!=!=8.8.&9.9.10.10.|11.11.&12.12.|13.13.?:?:14.14.=+=-=*=/=%=&=|=+=-=*=/=%=&=|=15.15.,用括号来控制运算顺序更直观、方便,并减少出错的概率用括号来控制运算顺序更直观、方便,并减少出错的概率35算术运算符算术运算符算术运算符算术运算符+,-,*,/,%,-(取反取反取反取反)两整数相除结果
42、仍为整数两整数相除结果仍为整数两整数相除结果仍为整数两整数相除结果仍为整数求余运算的操作数必须为整数,余数符号与被除数相同求余运算的操作数必须为整数,余数符号与被除数相同求余运算的操作数必须为整数,余数符号与被除数相同求余运算的操作数必须为整数,余数符号与被除数相同算术表达式算术表达式算术表达式算术表达式用算术运算符将运算对象连接起来的式子用算术运算符将运算对象连接起来的式子用算术运算符将运算对象连接起来的式子用算术运算符将运算对象连接起来的式子复杂的算术表达式经常需要用到复杂的算术表达式经常需要用到复杂的算术表达式经常需要用到复杂的算术表达式经常需要用到math.hmath.h中提供的标准数
43、学函数中提供的标准数学函数中提供的标准数学函数中提供的标准数学函数P34P34注意事项注意事项注意事项注意事项常用的标准数学函数函数名函数名功功 能能函数名函数名功功 能能sqrt(x)计计算算x的平方根,的平方根,x应应大于等于大于等于0 exp(x)计计算算ex的的值值fabs(x)计计算算x的的绝对值绝对值pow(x,y)计计算算xy的的值值log(x)计计算算lnx的的值值sin(x)计计算算sinx的的值值,x为为弧度弧度值值log10(x)计计算算lgx的的值值cos(x)计计算算cosx的的值值,x为为弧度弧度值值36自增和自减运算符自增和自减运算符自增和自减运算符自增和自减运算
44、符n+n+,n n-,+n+n,-n-n+让参与运算的变量加让参与运算的变量加让参与运算的变量加让参与运算的变量加1 1,-让参与运算的变量减让参与运算的变量减让参与运算的变量减让参与运算的变量减1 1作为作为作为作为后缀后缀后缀后缀运算符时,先用运算符时,先用运算符时,先用运算符时,先用n n的原值参与运算,然后的原值参与运算,然后的原值参与运算,然后的原值参与运算,然后n n的值的值的值的值加加加加/减减减减1 1作为作为作为作为前缀前缀前缀前缀运算符时,先对运算符时,先对运算符时,先对运算符时,先对n n的值进行加的值进行加的值进行加的值进行加/减,然后用减,然后用减,然后用减,然后用n
45、 n的现的现的现的现值参与运算值参与运算值参与运算值参与运算int i=8;printf(%dn,+i);9 printf(%dn,-i);8 printf(%dn,i+);8 printf(%dn,i-);9 printf(%dn,-i+);-8 printf(“%dn”,-i-);-9自增自减运算符的运算对象只能是变量,不能是表达式自增自减运算符的运算对象只能是变量,不能是表达式自增自减运算符的运算对象只能是变量,不能是表达式自增自减运算符的运算对象只能是变量,不能是表达式例如(例如(例如(例如(a+ba+b)+、(-i)+(-i)+都是错误的都是错误的都是错误的都是错误的37关系运算符关
46、系运算符关系运算符关系运算符,=,=bab且且且且bc?bc?关系表达式关系表达式关系表达式关系表达式abcabc的值为真吗?的值为真吗?的值为真吗?的值为真吗?38逻辑运算符逻辑运算符逻辑运算符逻辑运算符逻辑运算也被称为布尔(逻辑运算也被称为布尔(逻辑运算也被称为布尔(逻辑运算也被称为布尔(BooleanBoolean)运算)运算)运算)运算与运算与运算与运算与运算&a&ba&b当且仅当两者都为真,则结果为真当且仅当两者都为真,则结果为真当且仅当两者都为真,则结果为真当且仅当两者都为真,则结果为真(a b&b c)(a b&b c)a a大于大于大于大于b b,并且,并且,并且,并且b b大
47、于大于大于大于c c或运算或运算或运算或运算|a|ba|b只要两者中有一个为真,结果就为真只要两者中有一个为真,结果就为真只要两者中有一个为真,结果就为真只要两者中有一个为真,结果就为真(a b|b c)(a b|b c)a a大于大于大于大于b b,或者,或者,或者,或者b b大于大于大于大于c c求反求反求反求反!(!a)(!a)如果如果如果如果a a是是是是0 0,结果非,结果非,结果非,结果非0 0;如果;如果;如果;如果a a是非是非是非是非0 0,结果是,结果是,结果是,结果是0 0并不改变并不改变并不改变并不改变a a的值的值的值的值39实例实例实例实例chch是英文大写字母是英
48、文大写字母是英文大写字母是英文大写字母 (ch=A)&(ch=A)&(ch=Z)判断某一年判断某一年判断某一年判断某一年yearyear是否是闰年的条件是满足下列两个条件是否是闰年的条件是满足下列两个条件是否是闰年的条件是满足下列两个条件是否是闰年的条件是满足下列两个条件之一:之一:之一:之一:能被能被能被能被4 4整除,但不能被整除,但不能被整除,但不能被整除,但不能被100100整除;整除;整除;整除;能被能被能被能被400400整除;整除;整除;整除;(year%4=0)&(year%100!=0)|(year%400=0)(year%4=0)&(year%100!=0)|(year%4
49、00=0)40赋值运算符赋值运算符赋值运算符赋值运算符赋值表达式赋值表达式赋值表达式赋值表达式变量名变量名变量名变量名=表达式,计算右边表达式的值并将其赋给左边表达式,计算右边表达式的值并将其赋给左边表达式,计算右边表达式的值并将其赋给左边表达式,计算右边表达式的值并将其赋给左边的变量。的变量。的变量。的变量。左侧不允许表达式,只能是标识一个存储单元的变量左侧不允许表达式,只能是标识一个存储单元的变量左侧不允许表达式,只能是标识一个存储单元的变量左侧不允许表达式,只能是标识一个存储单元的变量.判断判断a+b=c,x=x+1是否为合法的赋值表达式?是否为合法的赋值表达式?赋值运算符优先级低于算术
50、运算符、关系运算符和逻辑赋值运算符优先级低于算术运算符、关系运算符和逻辑赋值运算符优先级低于算术运算符、关系运算符和逻辑赋值运算符优先级低于算术运算符、关系运算符和逻辑运算符。运算符。运算符。运算符。满足右结合性。赋值表达式的值等于运算完成后左操作满足右结合性。赋值表达式的值等于运算完成后左操作满足右结合性。赋值表达式的值等于运算完成后左操作满足右结合性。赋值表达式的值等于运算完成后左操作数的值数的值数的值数的值a=b=c=5 等价于等价于a=(b=(c=5)赋值表达式将自动进行类型转换赋值表达式将自动进行类型转换赋值表达式将自动进行类型转换赋值表达式将自动进行类型转换41复合赋值运算符复合赋