《第三章数据类型运算符与表达式PPT讲稿.ppt》由会员分享,可在线阅读,更多相关《第三章数据类型运算符与表达式PPT讲稿.ppt(30页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第三章数据类型运算符与表达式第1页,共30页,编辑于2022年,星期二第第3章章 数据类型、运算符与表达式数据类型、运算符与表达式3.1 C的数据类型的数据类型1一个一个C程序包括的内容程序包括的内容程序程序=算法算法+数据结构数据结构+程序设计方法程序设计方法+语言工具和环境语言工具和环境2C的数据类型的数据类型数据类型数据类型基本类型基本类型构造类型构造类型指针类型指针类型()空类型空类型(void)字符型字符型(char)数值类型数值类型枚举类型枚举类型(enum)数组类型数组类型()结构体类型结构体类型(struct)共用体类型共用体类型(union)整型整型(short,int,lo
2、ng,unsigbed)实型实型单精度型单精度型(float)双精度型双精度型(double)第2页,共30页,编辑于2022年,星期二3.2 常量与变量常量与变量1常量和符号常量常量和符号常量常量:常量:在程序运行过程中其值不能被改变的量。在程序运行过程中其值不能被改变的量。例例3.1 定义符号常量:定义符号常量:#define PRICE 30#include stdio.hvoid main()int num,total;num=10;total=num*PRICE;printf(total=%d,total);用用#define命令定义命令定义PRICE代表常量代表常量30,则在整个程
3、序,则在整个程序中出现的中出现的PRICE都代表都代表30,可以和常量一样进行运算。,可以和常量一样进行运算。符号常量:符号常量:标识符形式的常量标识符形式的常量(必须在程序中定义)(必须在程序中定义)。第3页,共30页,编辑于2022年,星期二2变量变量在程序运行过程中其值可以被改变的量称为在程序运行过程中其值可以被改变的量称为变量变量。变量名由变量名由字母、数字字母、数字和和下划线下划线三种字符组成,由三种字符组成,由字母字母或下划线开头或下划线开头。如:如:sum,aver,class,day均为合法变量名;均为合法变量名;$123,#33,3ds均为非法变量名;而均为非法变量名;而fi
4、lename、filename1以及以及filename2 表示同一个变量名。表示同一个变量名。sum、Sum与与SUM是三个不同的变量名。是三个不同的变量名。在在C中,习惯用中,习惯用大写字母大写字母标识标识符号常量符号常量,用,用小写字小写字 母母标识标识变量变量。变量必须先定义后使用变量必须先定义后使用。变量一经定义,就确定了类型。变量一经定义,就确定了类型。注意:在注意:在C语言中对所有变量都要作强制定义语言中对所有变量都要作强制定义变量代表内存中具有特定属性的一个存储单元,它用来存放数据,这数据就是变量的值,在程序运行期间,这些值是可以改变的。第4页,共30页,编辑于2022年,星期
5、二数据类型数据类型基本类型基本类型构造类型构造类型指针类型指针类型()空类型空类型(void)字符型字符型(char)数值类型数值类型枚举类型枚举类型(enum)数组类型数组类型()结构体类型结构体类型(struct)共用体类型共用体类型(union)整型整型(short,int,long,unsigbed)实型实型单精度型单精度型(float)双精度型双精度型(double)3.3 整型数据整型数据第5页,共30页,编辑于2022年,星期二3.3 整型数据整型数据1整型常量整型常量整型常量即整常数。整常数有三种表示形式:整型常量即整常数。整常数有三种表示形式:十进制数十进制数 如:如:123
6、,-456 八进制数八进制数 以以0开头开头。如:。如:0123,-011 十六进制数十六进制数 以以0 x开头开头。如:。如:0 x123,-0 x122整型常量的类型整型常量的类型 其值在其值在-32768+32767时为时为int型型,占用占用2 Bytes。其值在其值在-2147483648+214748647时为时为long int型型,占用占用4 Bytes。常量中无常量中无unsigned型。但非负值的整型常量可以赋值型。但非负值的整型常量可以赋值给给 unsigned型整型变量,只要不产生溢出。型整型变量,只要不产生溢出。在整型常量后面跟一个字母在整型常量后面跟一个字母 l 或
7、或 L,则认为是,则认为是long int 型常量。型常量。第6页,共30页,编辑于2022年,星期二3整型变量整型变量1)整型变量的分类整型变量的分类 基本型基本型 以以int表示。表示。-3276832767(-215215-1)短整型短整型 以以short int或或short表示,取值范围同表示,取值范围同int型。型。长整型长整型 以以long int或或long表示。表示。-21474836482147483647(-231231-1)无符号型无符号型 用全部二进制位用全部二进制位(bit)存放数据存放数据,不能存放负数不能存放负数。unsigned int与与unsigned s
8、hort:065535(0216-1)unsigned long:04294967295(0232-1)2)整型变量的定义整型变量的定义int a,b;unsigned short c,d;long e,f;第7页,共30页,编辑于2022年,星期二第8页,共30页,编辑于2022年,星期二第9页,共30页,编辑于2022年,星期二3.4 实型数据实型数据1实型常量实型常量 十进制数形式:十进制数形式:0.123、.123(小数(小数必须有小数点必须有小数点)。)。指数形式:指数形式:123e3或或123E3都代表都代表123 103(E之前之前必须有数字,必须有数字,E之后指数必须为整数之后
9、指数必须为整数)。)。2实型变量实型变量单精度单精度float:占用:占用4 Bytes,7位有效数字,位有效数字,1038 1038。双精度双精度double:占用:占用8 Bytes,15/16位有效数字,位有效数字,1030810308。如:如:float x,y;/只能接收只能接收7位有效数字位有效数字 /double z;long double t;Long double:占用:占用16 Bytes,18/19位有效数字,位有效数字,104932104932。第10页,共30页,编辑于2022年,星期二3实型数据的舍入误差实型数据的舍入误差因实型变量的存储单元有限,在数据有效位以外的
10、数据将被因实型变量的存储单元有限,在数据有效位以外的数据将被舍去,从而产生误差。舍去,从而产生误差。例例3.4 实型数据的舍入误差实型数据的舍入误差Main()float a,b;a=123456.789e5;b=a+20;printf(“%f”,b);运行结果运行结果:123456712345678848.0000008848.000000(a a和和b b相等)相等)注意:注意:应避免将一个很大的数和一个很小的数直接相加或应避免将一个很大的数和一个很小的数直接相加或相减,否则就会相减,否则就会“丢失丢失”小的数小的数。第11页,共30页,编辑于2022年,星期二3.5 字符型数据字符型数据
11、1字符常量字符常量字符常量是用单引号括起的字符常量是用单引号括起的1个字符。如:个字符。如:a、A、。以以“”开头的字符序列在开头的字符序列在printf 函数中控制输出格式。函数中控制输出格式。1到到2位位16进制数所代表的字符。进制数所代表的字符。如:如:41=A xhh1到到3位位8进制数所代表的字符。进制数所代表的字符。如:如:101=Addd单引号单引号 反斜杠字符反斜杠字符 走纸换页走纸换页 f回车回车r退格退格b竖向跳格竖向跳格 v横向跳格(下一个输出区横向跳格(下一个输出区)t换行换行 n第12页,共30页,编辑于2022年,星期二例例3.5 输出格式控制输出格式控制在打印机上
12、输出在打印机上输出:f ab cgdeh ji k在屏幕上输出在屏幕上输出:f gdeh j k2字符变量字符变量字符变量只能存放字符变量只能存放 1 个字符个字符main()printf(“ab ct derf tgn”);printf(“htibbj k”);char c1,c2;c1=a;c2=b;表示空格符表示空格符第13页,共30页,编辑于2022年,星期二3字符数据在内存中的存储形式及使用方法字符数据在内存中的存储形式及使用方法在在C中中,字符型数据与整型数据可以相互赋值和运算字符型数据与整型数据可以相互赋值和运算。例例3.7main()char c1,c2;c1=a;c2=b;p
13、rintf(“%c%cn”,c1,c2);c1=c132;c2=c232;printf(“%c%cn”,c1,c2);c1=97;c2=98;printf(“%c%cn”,c1,c2);c1=c132;c2=c232;printf(“%c%cn”,c1,c2);输出结果:输出结果:a bA Ba bA B第14页,共30页,编辑于2022年,星期二4字符串常量字符串常量字符串常量是用双引号括起来的字符序列。字符串常量是用双引号括起来的字符序列。如:如:“How do you do.”,“CHINA”,“a”,“$123.45”注意注意:a是字符常量,而是字符常量,而“a”是字符串常量。是字符串
14、常量。不能将一个字符串赋给一个字符变量。字符串不能将一个字符串赋给一个字符变量。字符串 其内部有结束标志其内部有结束标志0,且由系统自动加上的且由系统自动加上的。C中没有字符串变量,需要用字符数组存放字中没有字符串变量,需要用字符数组存放字 符串。符串。第15页,共30页,编辑于2022年,星期二3.6 变量赋初值变量赋初值C规定,可以在定义变量的同时给变量赋初值。如:规定,可以在定义变量的同时给变量赋初值。如:int a=3;float f=3.56;char c=a;int a,b,c=5;/只给只给c赋初值赋初值 /int a=3,b=3,c=3;/不能写成不能写成 int a=b=c=
15、3 /3.7 各类数值型数据间的混合运算各类数值型数据间的混合运算 整型、单精度型、双精度型数据可以混合运算。整型、单精度型、双精度型数据可以混合运算。不同类型的数据要先转换成同一类型,然后进行运算。不同类型的数据要先转换成同一类型,然后进行运算。转换规则如图:转换规则如图:第16页,共30页,编辑于2022年,星期二注注:箭头只表示转换方向,并箭头只表示转换方向,并不是依次转换。不是依次转换。转换过程转换过程是自动完成的是自动完成的。10+a+i f-d/e运算过程为:运算过程为:a 转换成整数转换成整数97与与10相加,结果为相加,结果为107;i 和和f 转换成转换成double型,运算
16、结果为型,运算结果为double型;型;将将107转换成转换成double型与型与i和和f的积相加,结果为的积相加,结果为 double型;型;将将e转换成转换成double型,型,d/e的结果为的结果为double型;型;10+a+i f 的结果与的结果与d/e的商相减,结果为的商相减,结果为 double型。型。例:例:int I;float f;double d;long e;第17页,共30页,编辑于2022年,星期二3.8 算术运算符和算术表达式算术运算符和算术表达式1C 运算符简介运算符简介 在在C中,除了控制语句和输入输出以外的基本操作中,除了控制语句和输入输出以外的基本操作都作
17、为运算符处理。都作为运算符处理。C的运算符有如下几类:的运算符有如下几类:算术运算符算术运算符+、/、%关系运算符关系运算符、=、=、=、!=逻辑运算符逻辑运算符&、|、!位运算符位运算符 ,、|、&赋值运算符赋值运算符=、+=、-=、=、/=、%=第18页,共30页,编辑于2022年,星期二 条件运算符条件运算符?:逗号运算符逗号运算符,指针运算符指针运算符 和和&求字节数运算符求字节数运算符 sizeof 强制类型转换运算符强制类型转换运算符(类型类型)分量运算符分量运算符 或或 下标运算符下标运算符 其它其它如函数调用运算符如函数调用运算符()第19页,共30页,编辑于2022年,星期二
18、C中各类运算符的优先级:中各类运算符的优先级:初等运算符初等运算符()、单目运算符单目运算符!、!、+、+、(类型类型)算术运算符算术运算符、/、%,+、关系运算符关系运算符、=,=、!=逻辑运算符逻辑运算符&、条件运算符条件运算符?:赋值运算符赋值运算符=、+=、=、=、/=、%=逗号运算符逗号运算符,高高低低第20页,共30页,编辑于2022年,星期二2算术运算符和算术表达式算术运算符和算术表达式1)基本的算术运算符基本的算术运算符+、/、%为求余、模运算为求余、模运算(%的两边必须为整型数据的两边必须为整型数据)其中:在除法中,整数相除取整,且大多数机器采其中:在除法中,整数相除取整,且
19、大多数机器采取取“向零取整向零取整”方法,即取整后向零靠拢。实数相除方法,即取整后向零靠拢。实数相除为为double型。型。如:如:5/3=1,-5/3=-1,5/3.0=1.66666666666667。2)算术表达式和运算符的优先级与结合性算术表达式和运算符的优先级与结合性算术表达式是用算术运算符和括号将运算对象算术表达式是用算术运算符和括号将运算对象(常量、常量、变量、函数等变量、函数等)连接起来的、符合连接起来的、符合C语法规则的式子。语法规则的式子。C的算术运算符的结合性为的算术运算符的结合性为“自左向右自左向右”。第21页,共30页,编辑于2022年,星期二3.强制类型转换强制类型
20、转换 当自动类型转换不能达到目的时,可以用强制类型当自动类型转换不能达到目的时,可以用强制类型转换。强制类型转换运算符可以将一个变量或一个表达转换。强制类型转换运算符可以将一个变量或一个表达式转换成所需的类型。式转换成所需的类型。如:如:(double)a 将将 a 转换成转换成 double 类型类型(int)(x+y)将将 x+y 的值转换成的值转换成 int 型型(float)(5%3)将将5%3的值转换成的值转换成float类型类型例例3.8#include“stdio.h”void main()f loat x;int i;x=3.6;i=(int)x;printf(“x=%f,i=
21、%d”,x,i);运行结果:运行结果:x=3.600000,i=3第22页,共30页,编辑于2022年,星期二4.自增、自减运算符自增、自减运算符自增、自减运算符的作用是使变量的值增加自增、自减运算符的作用是使变量的值增加1或减少或减少1。+i,-i i 的值的值先增加先增加(减少减少)1,然后,然后再使用再使用i。i+,i-先使用先使用 i 的值,然后的值,然后 i 再增加再增加(减少减少)1。注意注意:+和和-只能用于变量,不能用于常量和表达式。只能用于变量,不能用于常量和表达式。+和和-的结合方向的结合方向“自左至右自左至右”。如:。如:-i+相当于相当于-(i+)。i+j按按“自左向右
22、自左向右”的原则解释为的原则解释为(i+)+j,而不是而不是i+(+j)。printf(“%d,%d”,i,i+),若,若“自左至右自左至右”,则为,则为“3,3”;若若“自右至左自右至左”,则为,则为“4,3”。Turbo C 自右至左自右至左”原则原则(包括函数调用时参数表中变量的求(包括函数调用时参数表中变量的求 值顺序也是如此)。值顺序也是如此)。第23页,共30页,编辑于2022年,星期二例例:#include“stdio.h”main()int i=1;printf(“%d,%d,%d,%dn”,i,i+,i+,i+);运行结果:运行结果:4,3,2,1 函数调用时函数调用时,函数
23、参数的求值顺序函数参数的求值顺序 从右至左从右至左输出结果怎样?请思考输出结果怎样?请思考第24页,共30页,编辑于2022年,星期二 若若i=3;j=+i;则则j的值为的值为4,i 的值为的值为4。若若i=3;j=i+;则则j是值为是值为3,i 的值为的值为4。若若i=3;k=(i+)+(i+)+(i+);若若i=3;k=(+i)+(+i)+(+i);第25页,共30页,编辑于2022年,星期二3.9 赋值运算符和赋值表达式赋值运算符和赋值表达式“=”的作用是将一个数据或一个表达式赋给其左边的变量。的作用是将一个数据或一个表达式赋给其左边的变量。若若“=”两边的类型不一致,当同为数值型或字符
24、型时,在赋值两边的类型不一致,当同为数值型或字符型时,在赋值 时要进行类型转换。时要进行类型转换。1)将实型数据赋给整型变量时,将实型数据赋给整型变量时,舍弃舍弃实数的实数的小数部分小数部分。2)将整型数据赋给实型变量时将整型数据赋给实型变量时,其其数值不变数值不变,但以浮点数形式存储。但以浮点数形式存储。3)将字符型数据赋给整型变量时,由于字符只占将字符型数据赋给整型变量时,由于字符只占1个字节,而整型个字节,而整型 变量占变量占2个字节,因此,将字符数据个字节,因此,将字符数据放到整型变量的低放到整型变量的低8位中位中。将字符处理为将字符处理为unsigned char时,高时,高8位补位
25、补0。如将变量如将变量c(字符字符376)赋给整型变量赋给整型变量 i。将字符处理为带符号的量时,高将字符处理为带符号的量时,高8位全补位全补1,称为,称为“符号扩展符号扩展”。c=3761 1 1 1 1 1 1 00 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0i:1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 01 1 1 1 1 1 1 0c=376i:1.概述概述第26页,共30页,编辑于2022年,星期二4)将带符号的将带符号的int型数据赋给型数据赋给long int型变量时,进行符型变量时,进行符 号扩展。即将数据送到低号扩展。即将数据送到低16位中,
26、高位中,高16位补位补0或补或补1。5)将将unsigned int型数据赋给型数据赋给long int型变量时,不存型变量时,不存 在符号扩展问题。在符号扩展问题。6)将非将非unsigned型数据赋给型数据赋给unsigned型变量时,原样型变量时,原样 照赋。照赋。2.复合的赋值运算复合的赋值运算复合赋值复合赋值等价于等价于a+=3a=a+3x=y+8x=x(y+8)不得写成:不得写成:x=x y+8右边是一个整体右边是一个整体。x%=3x=x%3x%=y+3x=x%(y+3)不得写成:不得写成:x=x%y+3在在C中可以使用的复合赋值运算符有:中可以使用的复合赋值运算符有:+=、-=、
27、=、/=、%=,=、&=、=、|=第27页,共30页,编辑于2022年,星期二3赋值表达式的一般形式赋值表达式的一般形式 其中:其中:又可以是一个赋值表达式。又可以是一个赋值表达式。a=(b=5)a的值为的值为5a=b=c=5a,b,c的值均为的值均为5a=5+(c=6)a的值为的值为11a=(b=4)+(c=6)a的值为的值为10a=(b=10)/(c=2)a的值为的值为5 赋值表达式可以包含复合的赋值运算符。赋值表达式可以包含复合的赋值运算符。a+=a-=a a若若a=12,则上式的求解步骤为:,则上式的求解步骤为:先进行先进行a-=a a的运算,即的运算,即a=a-a a=12-144=
28、-132 再进行再进行a+=-132的运算的运算,即即a=a+(-132)=-132-132=-264如:如:第28页,共30页,编辑于2022年,星期二3.10 逗号运算符和逗号表达式逗号运算符和逗号表达式逗号表达式的一般形式:逗号表达式的一般形式:表达式表达式1,表达式,表达式2,表达式,表达式n求解过程为:求解过程为:从左至右从左至右求各表达式的值,结果取求各表达式的值,结果取最右边最右边 表达式的值。表达式的值。如:如:a=3 5,a 4 表达式值为表达式值为60(a=3 5,a 4),a+5 表达式值为表达式值为20 x=(a=3,6 3)x的值为的值为18x=a=3,6 a x的值为的值为3例例3.10void main()int m,n;m=(n=3 5,n 4),n+5;printf(“%d,%dn”,m,n);运行结果:运行结果:60,15这两个表达式中不存在 n 的赋值第29页,共30页,编辑于2022年,星期二学习运算符的注意事项学习运算符的注意事项 运算符的功能与运算符的关系:运算符的功能与运算符的关系:要求的运算量个数(如:单目、双目)要求的运算量个数(如:单目、双目)要求运算量的类型要求运算量的类型 运算的优先级别运算的优先级别 结合方向结合方向 结果的类型结果的类型第30页,共30页,编辑于2022年,星期二