数据类型、运算符与表达式数据类型课件_第1页
数据类型、运算符与表达式数据类型课件_第2页
数据类型、运算符与表达式数据类型课件_第3页
数据类型、运算符与表达式数据类型课件_第4页
数据类型、运算符与表达式数据类型课件_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第2章 数据类型、运算符与表达式数据类型常量与变量不同类型数据间的转换算术运算符和算术表达式赋值运算符和赋值表达式逗号运算符和逗号表达式数据类型、运算符与表达式数据类型第2章 数据类型、运算符与表达式数据类型数据类型、运算符与表2.1 数据类型C数据类型指针类型空类型void定义类型typedef构造类型枚举类型enum数组结构体struct共用体union基本类型字符类型char整 型实型单精度型float双精度型double短整型short长整型long整型int数据类型决定:1. 数据占内存字节数2. 数据取值范围3. 其上可进行的操作数据类型、运算符与表达式数据类型2.1 数据类型C指

2、针类型空类型void定义类型typede基本数据类型类型符号关键字数的表示范围所占位数整型字符型实型有无(signed) int32-21474836482147483647(signed) short16-3276832767(signed) long32-2147483648214748364732unsigned int042949672953204294967295unsigned longunsigned short16065535有float323.4e-383.4e38有double641.7e-3081.7e308有char8-128127无unsigned char80255

3、说明:数据类型所占字节数随机器硬件不同而不同,上表以IBM PC机为例数据类型、运算符与表达式数据类型基本数据类型类型符号关键字数的表示范围所占位数整型字符型实型2.2 常量与变量标识符定义:用来标识变量、常量、函数等的字符序列组成:只能由字母、数字、下划线组成,且第一个字母必须是字母或下划线大小写敏感不能使用关键字 讨论:判断下列标识符号合法性sumSumM.D.JohndayDate3days student_name#33lotus_1_2_3charababove $123 _toDayM.D.John3days#33char$123ab数据类型、运算符与表达式数据类型2.2 常量与变

4、量标识符 讨论:判断下列标识符号合法性M.D长度:最长32个字符命名原则:见名知意,采用简洁有含义的英文单词(或缩写)不宜混淆 如1与L, o与0 标识符命名实例stu_name, sum, total, day, count, sort数据类型、运算符与表达式数据类型长度:最长32个字符 标识符命名实例数据类型、运算符与表达式常量在程序运行过程中,其值不能改变的量称为常量常量可为任意数据类型字面常量(直接常量)整型: 12、0、-3实型: 4.6、-1.23字符型:a、d字符串常量:”Hello”、”Good Morning!”数据类型、运算符与表达式数据类型常量数据类型、运算符与表达式数据

5、类型符号常量:标识符代表常量定义格式: #define 符号常量定义举例#define PI 3.1415926#define STAR *说明:符号常量一般使用大写英文字母表示,以区别一般用于小写字母表示的变量。数据类型、运算符与表达式数据类型符号常量:标识符代表常量 符号常量定义举例说明:符号常量一般符号常量使用例 符号常量举例#include #define PRICE 30void main() int num,total; num=10; total=num*PRICE; printf(total=%d,total);运行结果:total=300符号常量的使用能给程序员带来哪些好处?

6、数据类型、运算符与表达式数据类型符号常量使用例 符号常量举例运行结果:total=300符变量其值可以改变的量称为变量变量也可以为任意数据类型变量定义的一般格式数据类型 变量1,变量2,变量n;决定分配字节数和数的表示范围变量定义举例: int a,b,c; float data;数据类型、运算符与表达式数据类型变量决定分配字节数变量定义举例:数据类型、运算符与表达式数据变量的使用:作强制定义,也就是“先定义,后使用”例1 int student; stadent=19; /Undefined symbol stadent in function main 例2 float a,b,c; c=

7、a%b; /Illegal use of floating point in function main 数据类型、运算符与表达式数据类型变量的使用:作强制定义,也就是“先定义,后使用”例1 例2 整型数据整型常量形式表示方式举例十进制整数由数字0-9和正负号表示123,-456,0八进制整数由数字0开头,后跟数字07表示0123,011十六进制整数由0 x开头,后跟09,af,AF表示0 x123,0Xff问题:0123 = ( )100 x123 = ( )100Xff = ( )10 83291255数据类型、运算符与表达式数据类型整型数据形式表示方式举例十进制整数由数字0-9和正负号表

8、示1整型常量的类型根据其值所在范围确定其数据类型在整常量后加字母l或L,认为它是long int 型常量例 12 与 12L例30000 为int型65536 为long int型数据类型、运算符与表达式数据类型整型常量的类型例 12 与 12L例数据类型、运算符与表达整型变量整型变量在内存中以二进制的形式存放根据占用的字节数不同,分为不同类别数据类型、运算符与表达式数据类型整型变量数据类型、运算符与表达式数据类型整型变量的定义整型变量定义举例: int a,b; unsigned short c,d; long e, f;#include void main() int a,b,c,d; u

9、nsigned u; a=12; b=-24; u=10; c=a+u; d=b+u; printf(“a+u = %d, b+u = %dn”,c, d); 运行结果:a+u = 22, b+u = -14数据类型、运算符与表达式数据类型整型变量的定义整型变量定义举例:#include stdi实型数据实型常量表示形式: 十进制数形式:(必须有小数点) 指数形式:(e或E之前必须有数字;指数必须为整数)实型常量的整数部分为时可以省略,且E或e后面指数必须为整数。十进制数形式实型常量0.123, .123, 123.0, 0.0, 123.指数形式实型常量12.3e3 ,123E2, 1.23

10、e4 , e-5 , 1.2E-3.5 , .e3在C语言中,一个实型常数未说明则表示是double型。数据类型、运算符与表达式数据类型实型数据十进制数形式实型常量指数形式实型常量在C语言中,一个字符常量定义:用单引号括起来的单个普通字符或转义字符。字符常量的值:该字符的ASCII码值转义字符:反斜线后面跟一个字符或一个代码值表示如 a A ? n 101如 A65, a97, 048 , n10转义字符及其含义:转义字符含义nvradddtbf“xhh转义字符含义换行垂直制表回车响铃单引号3位8进制数代表的字符水平制表退格换页反斜线双引号2位16进制数代表的字符如 101 -A 012 -n

11、 376 - x61 -a 60 -0 483 -()例:A-101-x41-65数据类型、运算符与表达式数据类型字符常量如 a A ? n例 转义字符举例 #include ;void main() printf(101 x42 Cn); printf(I say:How are you?n); printf(C Programn); printf(Turbo C);A B CI say:How are you? C ProgramTurbo C数据类型、运算符与表达式数据类型例 转义字符举例 A B CI say:How are y注意事项:单撇号中的字符不能是或者一个字符占一个字节,存其

12、对应的ASCII码思考:9和9的区别字符型数据可像证书一样在程序中参与相关的运算a 32 结果为65数据类型、运算符与表达式数据类型注意事项:a 32 结果为65数据类型、运算符与表字符变量字符变量存放字符ASCII码char与int数据间可进行算术运算例1 a=D; /* a=68; */ x=A+5; /* x=65+5; */ s=!+G /* s=33+71; */例2 main() char c1, c2; c1=97; c2=98; printf(“%c %d”, c1, c2);数据类型、运算符与表达式数据类型字符变量例1 a=D; /* a=68;/*ch2_003.c*/ #

13、define PRICE 12.5 main() int num=3; float total; char ch1,ch2=D; total=num*PRICE; ch1=ch2-A+a; printf(“total=%f,ch1=%cn”,total,ch1); 宏定义变量定义输出结果运行结果:total=37.500000, ch1=d例子数据类型、运算符与表达式数据类型/*ch2_003.c*/ 宏定义变量定义输出结果运行结果字符串常量定义:用双引号(“”)括起来的字符序列存储:每个字符串尾自动加一个 0 作为字符串结束标志字符常量与字符串常量不同h e l l o 0例 字符串“hel

14、lo”在内存中例 空串 “”0a a 0例 aa例: char ch; ch=A; 例: char ch; ch=A; 没有字符串变量,用字符数组存放数据类型、运算符与表达式数据类型字符串常量h e l l o C语言无I/O语句,I/O操作由函数实现 #include 格式输入输出函数 标准输入函数scanf格式: scanf(“格式控制串”,地址表)功能:按指定格式从键盘读入数据,存入地址表指定的 存储单元中,并按回车键结束返值:正常,返回输入数据个数地址表:变量的地址,常用取地址运算符&格式字符:d,i,o,x,u,c,s,f,e例 scanf(“%d”,&a); 输入:10 则 a=1

15、0例 scanf(“%x”,&a); 输入:11 则 a=17数据类型、运算符与表达式数据类型C语言无I/O语句,I/O操作由函数实现标准输入函数scan附加格式说明符(修饰符)例 scanf(“%4d%2d%2d”,&yy,&mm,&dd); 输入 19991015 则1999yy, 10 mm, 15 dd例 scanf(“%3d%*4d%f”,&k,&f); 输入 12345678765.43 则123k, 8765.43f例 scanf(“%2d%*3d%2d”,&a,&b); 输入 1234567 则12a, 67b例 scanf(“%3c%2c”,&c1,&c2); 输入 abcd

16、e 则ac1, d c2l修饰符功 能hm*用于d,o,x前,指定输入为short型整数用于d,o,x前,指定输入为long型整数用于e,f前,指定输入为double型实数指定输入数据宽度,遇空格或不可转换字符则结束抑制符,指定输入项读入后不赋给变量数据类型、运算符与表达式数据类型附加格式说明符(修饰符)例 scanf(“%4d%2d%2输入分隔符的指定一般以空格、TAB或回车键作为分隔符其它字符做分隔符:格式串中两个格式符间字符例 scanf(“%d%o%x”,&a,&b,&c); printf(“a=%d,b=%d,c=%dn”,a,b,c); 输入 123 123 123 输出 a=12

17、3,b=83,c=291例 scanf(“%d:%d:%d”,&h,&m,&s); 输入 12:30:45 则12 h, 30 m, 45 s例 scanf(“%d,%d”,&a,&b) 输入 3,4 则3a, 4 b例 scanf(“a=%d,b=%d,c=%d”,&a,&b,&c); 输入 a=12,b=24,c=36 数据类型、运算符与表达式数据类型输入分隔符的指定例 scanf(“%d%o%x”,&a,&2.3 不同类型数据间的转换隐式转换什么情况下发生运算转换-不同类型数据混合运算时赋值转换-把一个值赋给与其类型不同的变量时输出转换-输出时转换成指定的输出格式函数调用转换-实参与形参

18、类型不一致时转换a 32 int age;age = 11.1char name=a;printf(“%dn”,name);数据类型、运算符与表达式数据类型2.3 不同类型数据间的转换隐式转换a 32 in运算转换规则:不同类型数据运算时先自动转换成同一类型doublefloatlongunsignedintchar,short低高说明:必定的转换运算对象类型不同时转换数据类型、运算符与表达式数据类型运算转换规则:不同类型数据运算时先自动转换成同一类型doub char ch; int i; float f; double d;ch/i + f*d - (f+i)intintdoubledou

19、blefloatdoubledoubledouble例1intintdoubledoubledoubledoubledoubledouble10+a +i*f - d/l例2 int i;float f;double d;long l;数据类型、运算符与表达式数据类型 char ch;ch/i + f*d 显示转换可以利用强制类型转换将一个表达式转换成所需类型一般形式:(类型名)(表达式)例: (int)(x+y) (int)x+y (double)(3)/2 (int)3.6 说明:强制转换得到所需类型的中间变量,原变量类型不变 数据类型、运算符与表达式数据类型显示转换数据类型、运算符与表达

20、式数据类型例 main() float x; int i; x=3.6; i=(int)x; printf(“x=%f,i=%d”,x,i); 结果:x=3.600000,i=3较高类型向较低类型转换时可能发生精度损失问题数据类型、运算符与表达式数据类型例 main()较高类型向较低类型转换时可能发生精度损失问2.4 算术运算符和算术表达式C运算符简介C运算符算术运算符 :(+ - * / % + -)关系运算符 :( = !=)逻辑运算符 :(! & |)位 运 算 符:( | &)赋值运算符 :(= 及其扩展)条件运算符 :(?:)逗号运算符 :(,)指针运算符 :(* &)求 字 节 数

21、:(sizeof)强制类型转换:(类型)分量运算符 :(. -)下标运算符 :()其它 :(( ) -)学习运算符应注意 运算符功能 与运算量关系 要求运算量个数 要求运算量类型 运算符优先级别 结合方向 结果的类型数据类型、运算符与表达式数据类型2.4 算术运算符和算术表达式C运算符简介C算术运算符 :(基本的算术运算符+加法运算或正值运算符-减法运算或负值运算符*乘法运算符/除法运算符,求商,两个整数相除结果为整数%模运算符,求余,要求两则均为整型数据3+5、+35-2、-33*55/37%4数据类型、运算符与表达式数据类型基本的算术运算符3+5、+35-2、-33*55/37%4数例 5

22、/2 = -5/2.0 =例 5%2 = -5%2 = 5%-2 = 1%10 = 5%1 = 5.5%22-2.51-110()1取模的余数符号由分子(被除数决定)数据类型、运算符与表达式数据类型例 5/2 =例 5%2 =2-算术表达式和运算符的优先级和结合性算术表达式:用算术运算符和括号将运算对象连接起来的、符合C语法规则的式子。求表达式的值:先按运算符的优先级别高低次序执行;再一个运算对象两则的运算赋的优先级别相同,则按规定的“结合方向”处理。a*b/c-1.5+aa b * c / d数据类型、运算符与表达式数据类型算术表达式和运算符的优先级和结合性a*b/c-1.5+a自增+、自减

23、运算符作用:使变量值加1或减1种类:前置 +i, -i (先执行i+1或i-1,再使用i值)后置 i+,i- (先使用i值,再执行i+1或i-1) int a=3; int b=+a; int c=a+;4a值表达式值a值表达式值+aa+345444则:a:5,b:4,c:4。数据类型、运算符与表达式数据类型自增+、自减运算符 int a=3; 4a值表达式值 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

24、/4/3/c=20,a=4/c=15,a=4例数据类型、运算符与表达式数据类型 j=3; k=+j; /k=4,j=4注意说明:只能用于变量,不能用于常量或表达式;结合方向“自右向左”;优先级别: - - + - - * / % - + -自增(减)运算常用于循环语句中循环变量自动加(减)1或指针变量,使指针指向下一个地址5+ () (a+b)+ ()i+ ()例1解答: -i+ -(i+) i=3; printf(“%d”,-i+); /-3 例1: -i+ i=3; printf(“%d”,-i+); 例2: j+k; (j+)+k;数据类型、运算符与表达式数据类型注意说明:5+ () (

25、a+b)+ ()例1解有关表达式使用中的问题说明表达式中包含多个自加、自减运算时,很容易出错例1: 如i3,则ki结果:k3,i4例2: 如i3,则(i+) + (i+) + (i+)结果:9,i6例3: 如i3,则(+ i) + (+ i) + (+ i)结果:16,i6数据类型、运算符与表达式数据类型有关表达式使用中的问题说明例1: 如i3,则ki结i+j,应如何结合?调用函数时,实参数地求值顺序,c并无统一规定C编译在处理时尽可能多地(自左而右)将若干个字符组成一个运算符。所以应该为(i+)+j举例:如i3,则printf(“%d,%d”,i,i+)解答:若对参数的求值顺序为自右而左,打

26、印4,3 且 i=4;若对参数的求值顺序为自左而右,打印3,3 且 i=4;数据类型、运算符与表达式数据类型i+j,应如何结合?C编译在处理时尽可能多地(自左而右)2.5 赋值运算符和赋值表达式简单赋值运算符“”作用:将一个数据赋给一个变量常量或表达式只能是变量,不能是常量或表达式例 3=x-2*y;a+b=3;例 a3; a(a+b)*c数据类型、运算符与表达式数据类型2.5 赋值运算符和赋值表达式简单赋值运算符“”常量或表达赋值转换规则:使赋值号右边表达式值自动转换成其左边变量的类型例1 float f; int i; i=10; f=i; 则 f=10.0例2 int i; i=2.56

27、; /结果i=2;数据类型、运算符与表达式数据类型例1 float f; 例2 int i; 数据类型、赋值表达式定义:由赋值运算符将一个变量和一个表达式连接起来的式子,叫赋值表达式。一般形式: 赋值表达式的值与变量值相等,且可嵌套数据类型、运算符与表达式数据类型赋值表达式数据类型、运算符与表达式数据类型结合方向:自右向左优先级: 14例: a=b=c=5 a=(b=5) a=5+(c=6) a=(b=4)+(c=6) a=(b=10)/(c=2)/表达式值为5,a,b,c值为5/ b=5;a=5/表达式值11,c=6,a=11/表达式值10,a=10,b=4,c=6/表达式值5,a=5,b=

28、10,c=2数据类型、运算符与表达式数据类型结合方向:自右向左例: a=b=c=5/表达式值为5,复合的赋值运算符+= -= *= /= %= = = &= = |=a+=3a=a+3x*=y+8x=x*(y+8)x%=3x=x%3例: a=12; a+=a-=a*a/a=-264 等价于a=a+(a=a-(a*a)例: int a=2; a%=4-1; a+=a*=a-=a*=3; /a=0 等价于a=a+(a=a*(a=a-(a=a*3)数据类型、运算符与表达式数据类型复合的赋值运算符a+=3a=a+3x*=y+8x=x*(y+#include void main() i=8;j=10;

29、int i,j,m=0,n=0;m+=i+;n-=-j;printf(i=%d,j=%d,m=%d,n=%dn,i,j,m,n);分析程序结果:m=+i;n=j+;printf(%d,%d,%d,%dn,i,j,m,n);int i,j;数据类型、运算符与表达式数据类型#include int i,j,m=02.6 逗号运算符和逗号表达式形式:表达式1,表达式2,表达式n结合性:从左向右优先级: 15逗号表达式的值:等于表达式n的值数据类型、运算符与表达式数据类型2.6 逗号运算符和逗号表达式形式:表达式1,表达式2,例1 a=3*5,a*4 a=3*5,a*4,a+5例2 x=(a=3,6*3) x=a=3,6*a例3 a=1;b=2;c=3; printf(“%d,%d,%d”,a,b,c); printf(“%d,%d,%d”,(a,b,c),b,c); 例4 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/其中逗号起分隔作用/其中逗号为逗号运算符数据类型、运算符与表达式数据类型例1 a=3*5,a*4/a=15,表达式值60/例:#inc

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论