ch数据类型上课PPT课件_第1页
ch数据类型上课PPT课件_第2页
ch数据类型上课PPT课件_第3页
ch数据类型上课PPT课件_第4页
ch数据类型上课PPT课件_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

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

文档简介

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

2、节数数据占内存字节数2. 数据取值范围数据取值范围3. 其上可进行的操作其上可进行的操作第2页/共56页 基本数据类型类型符号关键字数的表示范围所占位数整型字符型实型有无(signed) int32-21474836482147483647(signed) short16-3276832767(signed) long32-2147483648214748364732unsigned int042949672953204294967295unsigned longunsigned short16065535有float323.4e-383.4e38有double641.7e-3081.7e30

3、8有char8-128127无unsigned char80255说明:数据类型所占字节数随机器硬件不同而不同,上表以IBM PC机为例第3页/共56页2.2 常量与变量常量与变量 标识符标识符 定义:用来标识变量、常量、函数等的字符序列定义:用来标识变量、常量、函数等的字符序列 组成:组成: 只能由只能由字母、数字、下划线字母、数字、下划线组成,且第一个字母必须是字母或下划线组成,且第一个字母必须是字母或下划线 大小写敏感大小写敏感 不能使用关键字不能使用关键字 讨论:判断下列标识符号合法性讨论:判断下列标识符号合法性sumSumM.D.JohndayDate3days student_na

4、me#33lotus_1_2_3charababove $123 _toDay3days#33char$123ab第4页/共56页 长度:最长长度:最长32个字符个字符 命名原则:命名原则: 见名知意,采用简洁有含义的英文单词(或缩写)见名知意,采用简洁有含义的英文单词(或缩写) 不宜混淆不宜混淆 如如1与与L, o与与0 标识符命名实例标识符命名实例stu_name, sum, total, day, count, sort第5页/共56页 常量常量 在程序运行过程中,其值不能改变的量称为常量在程序运行过程中,其值不能改变的量称为常量 常量可为任意数据类型常量可为任意数据类型 字面常量(直接

5、常量)字面常量(直接常量) 整型:整型: 12、0、-3 实型:实型: 、 字符型:字符型:a、d 字符串常量:字符串常量:”Hello”、”Good Morning!”第6页/共56页 符号常量:标识符代表常量符号常量:标识符代表常量 定义格式:定义格式: #define 符号常量定义举例符号常量定义举例#define PI #define STAR *说明说明:符号常量符号常量一般使用一般使用大写大写英英文字母表示,以文字母表示,以区别一般用于小区别一般用于小写字母表示的变写字母表示的变量量。第7页/共56页 符号常量使用符号常量使用例例 符号常量举例符号常量举例#include #def

6、ine PRICE 30void main() int num,total; num=10; total=num*PRICE; printf(total=%d,total);运行结果:运行结果:total=300符号常量的使用能给符号常量的使用能给程序员带来哪些好处?程序员带来哪些好处?第8页/共56页 变量变量 其值可以改变的量称为变量其值可以改变的量称为变量 变量也可以为任意数据类型变量也可以为任意数据类型 变量定义的一般格式变量定义的一般格式数据类型数据类型 变量变量1,变量,变量2,变量,变量n;决定分配字节数决定分配字节数和数的表示范围和数的表示范围变量定义举例变量定义举例: int

7、 a,b,c; float data;第9页/共56页 变量的使用:作强制定义,也就是变量的使用:作强制定义,也就是“先定义,后使用先定义,后使用”例例1 int student; stadent=19; /Undefined symbol stadent in function main 例例2 float a,b,c; c=a%b; /Illegal use of floating point in function main 第10页/共56页整型数据整型数据整型常量整型常量形式形式表示方式表示方式举例举例十进制整数十进制整数由数字由数字0-9和正负号表示和正负号表示123,-456,0

8、八进制整数八进制整数由数字由数字0开头开头,后跟数字后跟数字07表示表示0123,011十六进制整数十六进制整数由由0 x开头开头,后跟后跟09,af,AF表示表示0 x123,0Xff问题:问题:0123 = ( )100 x123 = ( )100Xff = ( )10 83291255第11页/共56页整型常量的类型整型常量的类型 根据其值所在范围确定其数据类型根据其值所在范围确定其数据类型 在整常量后加字母在整常量后加字母l l或或L L,认为它是,认为它是long int long int 型常量型常量例例 12 与与 12L例例30000 为为int型型65536 为为long i

9、nt型型第12页/共56页 整型变量整型变量 整型变量在内存中以二进制的形式存放整型变量在内存中以二进制的形式存放 根据占用的字节数不同,分为不同类别根据占用的字节数不同,分为不同类别第13页/共56页整型变量的定义整型变量的定义整型变量定义举例整型变量定义举例: int a,b; unsigned short c,d; long e, f;#include void main() int a,b,c,d; unsigned u; a=12; b=-24; u=10; c=a+u; d=b+u; printf(“a+u = %d, b+u = %dn”,c, d); 运行结果:运行结果:a+u

10、 = 22, b+u = -14第14页/共56页 实型数据实型数据实型常量实型常量表示形式:表示形式: 十进制数形式十进制数形式:(必须有小数点):(必须有小数点) 指数形式指数形式:(:(e e或或E E之前必须有数字;指数必须为整数)之前必须有数字;指数必须为整数)实型常量的整数部分为时可以省略,且实型常量的整数部分为时可以省略,且E E或或e e后面指数必须为整数。后面指数必须为整数。十进制数形式实型常量0.123, .123, 123.0, 0.0, 123.指数形式实型常量12.3e3 ,123E2, 1.23e4 , e-5 , 1.2E-3.5 , .e3第15页/共56页 字

11、符常量字符常量 定义:用定义:用单引号单引号括起来的单个括起来的单个普通字符普通字符或或转义字符转义字符。 字符常量的字符常量的值值:该字符的:该字符的ASCIIASCII码值码值 转义字符:反斜线后面跟转义字符:反斜线后面跟一个字符一个字符或或一个代码值一个代码值表示表示如 a A ? n 101如 A65, a97, 048 , n10转义字符及其含义:转义字符含义nvradddtbf“xhh转义字符含义换行垂直制表回车响铃单引号单引号3位位8进制数代表的字符进制数代表的字符水平制表退格换页换页反斜线反斜线双引号双引号2位位16进制数代表的字符进制数代表的字符如 101 -A 012 -n

12、 376 - x61 -a 60 -0 483 -()例:A-101-x41-65第16页/共56页例例 转义字符举例转义字符举例 #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第17页/共56页 注意事项:注意事项: 单撇号中的字符不能是单撇号中的字符不能是或者或者 一个字符占一个字节,存其对应的一个字符占一个字节,存其对应的ASCIIASCII码

13、码 思考:思考:99和和9 9的区别的区别 字符型数据可像证书一样在程序中参与相字符型数据可像证书一样在程序中参与相关的运算关的运算a 32 结果为结果为65第18页/共56页 字符变量字符变量 字符变量存放字符字符变量存放字符ASCIIASCII码码 charchar与与intint数据间可进行算术运算数据间可进行算术运算例例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);第19页/共56页/*ch

14、2_003.c*/ 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例子例子第20页/共56页 字符串常量字符串常量 定义:用双引号定义:用双引号(“”)(“”)括起来的字符序列括起来的字符序列 存储:每个字符串尾存储:每个字符串尾自动自动加一个加一个 0 0 作为字符串结束标志作为字符串结束标志 字符常量与

15、字符串常量不同字符常量与字符串常量不同h e l l o 0例例 字符串字符串“hello”hello”在内存中在内存中例例 空串空串 “” “”0a a 0例例 a aa例例: char ch; ch=A; 例例: char ch; ch=A; 没有没有字符串变量字符串变量,用字符数组存放,用字符数组存放第21页/共56页5C语言无语言无I/O语句,语句,I/O操作由函数实现操作由函数实现5 #include n格式输入输出函数格式输入输出函数 p标准输入函数标准输入函数scanf格式格式: scanf(“格式控制串格式控制串”,地址表),地址表)功能:按指定格式从键盘读入数据,存入地址表指

16、定的功能:按指定格式从键盘读入数据,存入地址表指定的 存储单元中存储单元中,并按回车键结束并按回车键结束返值:正常,返回输入数据个数返值:正常,返回输入数据个数地址表:变量的地址,常用取地址运算符地址表:变量的地址,常用取地址运算符&格式字符格式字符:d,i,o,x,u,c,s,f,e例例 scanf(“%d”,&a); 输入:输入:10 则则 a=10例例 scanf(“%x”,&a); 输入:输入:11 则则 a=17第22页/共56页附加格式说明符(修饰符)附加格式说明符(修饰符)例例 scanf(“%4d%2d%2d”,&yy,&mm,&

17、dd); 输入输入 19991015 则则1999yy, 10 mm, 15 dd例例 scanf(“%3d%*4d%f”,&k,&f); 则则123k, 8765.43f例例 scanf(“%2d %*3d %2d”,&a,&b); 输入输入 12 345 67 则则12a, 67b例例 scanf(“%3c%2c”,&c1,&c2); 输入输入 abcde 则则ac1, d c2l修饰符修饰符功功 能能hm*用于用于d,o,xd,o,x前,指定输入为前,指定输入为shortshort型整数型整数用于用于d,o,xd,o,x前,指定输入为前,指

18、定输入为longlong型整数型整数用于用于e,fe,f前,指定输入为前,指定输入为doubledouble型实数型实数指定输入数据宽度,遇空格或不可转换字符则结束指定输入数据宽度,遇空格或不可转换字符则结束抑制符,指定输入项读入后不赋给变量抑制符,指定输入项读入后不赋给变量第23页/共56页输入分隔符的指定输入分隔符的指定一般以空格、一般以空格、TABTAB或回车键作为分隔符或回车键作为分隔符其它字符做分隔符:格式串中两个格式符间字其它字符做分隔符:格式串中两个格式符间字符符例 scanf(“%d%o%x”,&a,&b,&c); printf(“a=%d,b=%d,c

19、=%dn”,a,b,c); 输入 123 123 123 输出 a=123,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 第24页/共56页2.3 2.3 不同类型数据间的转换不同类型数据间的转换 隐式转换隐式转换 什么情况下发生什么情况下发生 运算运算转换转

20、换-不同类型数据混合运算时不同类型数据混合运算时 赋值转换赋值转换-把一个值赋给与其类型不同的变量时把一个值赋给与其类型不同的变量时 输出转换输出转换-输出时转换成指定的输出格式输出时转换成指定的输出格式 函数调用转换函数调用转换-实参与形参类型不一致时转换实参与形参类型不一致时转换a 32 int age;char name=a;printf(“%dn”,name);第25页/共56页 运算转换规则运算转换规则: :不同类型数据运算时先不同类型数据运算时先自动自动转换成同一类型转换成同一类型doublefloatlongunsignedintchar,short低低高高说明说明:必定的转换必

21、定的转换运算对象类型不同时转换运算对象类型不同时转换第26页/共56页 char ch; int i; float f; double d;ch/i + f*d - (f+i)intintdoubledoublefloatdoubledoubledouble例例1intintdoubledoubledoubledoubledoubledouble10+a +i*f - d/l例例2 int i;float f;double d;long l;第27页/共56页 显示转换显示转换可以利用强制类型转换将一个表达式转换成所需类型可以利用强制类型转换将一个表达式转换成所需类型一般形式一般形式:(类型名

22、)(类型名)(表达式)表达式)例例: (int)(x+y): (int)(x+y) (int)x+y (int)x+y (double)(3)/2 (double)(3)/2 (int)3.6 (int)3.6 说明:强制转换得到所需类型的中间变量,原变量类型说明:强制转换得到所需类型的中间变量,原变量类型不变不变 第28页/共56页例例 main() float x; int i; x=3.6; i=(int)x; printf(“x=%f,i=%d”,x,i); 结果:结果:x=3.600000,i=3较高类型向较低类型转换时可能发生精度损失问题第29页/共56页2.4 2.4 算术运算符

23、和算术表达式算术运算符和算术表达式 C运算符简介运算符简介C运运算算符符算术运算符算术运算符 :(:(+ - + - * * / % + - / % + -)关系运算符关系运算符 :(:( = != = !=)逻辑运算符逻辑运算符 :(!:(! & |& |)位位 运运 算算 符:(符:( | & | &)赋值运算符赋值运算符 :(:(= = 及其扩展)及其扩展)条件运算符条件运算符 :(:(?:?:)逗号运算符逗号运算符 :(:(, ,)指针运算符指针运算符 :(:(* * & &)求求 字字 节节 数:(数:(sizeofsizeof)强制类

24、型转换:(类型)强制类型转换:(类型)分量运算符分量运算符 :(:(. -. -)下标运算符下标运算符 :(:()其它其它 :(:(( ) -( ) -)学习运算符应注意学习运算符应注意 运算符功能运算符功能 与运算量关系与运算量关系 要求运算量个数要求运算量个数 要求运算量类型要求运算量类型 运算符优先级别运算符优先级别 结合方向结合方向 结果的类型结果的类型第30页/共56页 基本的算术运算符基本的算术运算符+ 加法运算或正值运算符加法运算或正值运算符- 减法运算或负值运算符减法运算或负值运算符* 乘法运算符乘法运算符/除法运算符,求商除法运算符,求商,两个整数相除结果为整数两个整数相除结

25、果为整数%模运算符,求余,要求两则均为整型数据模运算符,求余,要求两则均为整型数据3+5、+35-2、-33*55/37%4第31页/共56页例 5/2 = -5/2.0 =例 5%2 = -5%2 = 5%-2 = 1%10 = 5%1 = 5.5%221-110( )1取模的余数符号取模的余数符号由分子(被除数由分子(被除数决定)决定)第32页/共56页算术表达式和运算符的优先级和结合性算术表达式和运算符的优先级和结合性算术表达式:算术表达式:用算术运算符和括号将运算对象连接起来的、符合用算术运算符和括号将运算对象连接起来的、符合C C语法规语法规则的式子。则的式子。求表达式的值:求表达式

26、的值:先按运算符的优先级别高低次序执行;先按运算符的优先级别高低次序执行;再一个运算对象两则的运算赋的优先级别相同,则按规定的再一个运算对象两则的运算赋的优先级别相同,则按规定的“结合结合方向方向”处理。处理。a*b/c-1.5+aa b * c / d第33页/共56页 自增自增+、自减运算符、自减运算符 作用:使变量值加作用:使变量值加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值值表达式

27、值表达式值a a值值表达式值表达式值+a+aa+a+345444则:则:a:5,b:4,c:4。第34页/共56页 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=4,j=4/k=3,j=4/k=3,j=4/4/4/3/3/c=20,a=4/c=20,a=4/c=15,a=4/c=15,a=4例例第35页/共56页 注意说明注意说明: 只能用于变量,不能用于常量或表达式;只能用于变量,不能用于常量或表达式; 结合方向结

28、合方向“自右向左自右向左”; 优先级别:优先级别: - - +- - + - - - - * * / % / % - - + -+ - 自增(减)运算常用于循环语句中循环变量自动加(减)自增(减)运算常用于循环语句中循环变量自动加(减)1 1或指针变量,或指针变量,使指针指向下一个地址使指针指向下一个地址5+ () (a+b)+ ()i+ ()例例1 1解答:解答: -i+ -(i+) i=3; printf(“%d”,-i+); /-3 例例1: -i+ i=3; printf(“%d”,-i+); 例例2: j+k; (j+)+k;第36页/共56页 有关表达式使用中的问题说明有关表达式使

29、用中的问题说明 表达式中包含多个自加、自减运算时,很容易出错表达式中包含多个自加、自减运算时,很容易出错例例1 1: 如如i3,则,则ki结果:结果:k3,i4例例2 2: 如如i3,则,则(i+) + (i+) + (i+)结果:结果:9,i6例例3 3: 如如i3,则,则(+ i) + (+ i) + (+ i)结果:结果:16,i6第37页/共56页 i+ji+j,应如何结合?,应如何结合? 调用函数时,实参数地求值顺序,调用函数时,实参数地求值顺序,c c并无统一规定并无统一规定C C编译在处理时尽可能多地(自左而右)将若干编译在处理时尽可能多地(自左而右)将若干个字符组成一个运算符。

30、所以应该为个字符组成一个运算符。所以应该为(i+)+j(i+)+j举例:如举例:如i i3 3,则,则printf(“%d,%d”,i,i+)printf(“%d,%d”,i,i+)解答:解答:若对参数的求值顺序为若对参数的求值顺序为自右而左自右而左,打印,打印4,3 4,3 且且 i=4;i=4;若对参数的求值顺序为若对参数的求值顺序为自左而右自左而右,打印,打印3,3 3,3 且且 i=4;i=4;第38页/共56页2.5 赋值运算符和赋值表达式赋值运算符和赋值表达式 简单赋值运算符简单赋值运算符“” 作用:将一个作用:将一个数据数据赋给一个赋给一个变量变量常量或表达式常量或表达式只能是变

31、量,只能是变量,不能是不能是常量或表达式常量或表达式例例 3=x-2*y;a+b=3;例例 a3; a(a+b)*c第39页/共56页 赋值转换规则赋值转换规则: :使赋值号右边表达式值使赋值号右边表达式值自动自动转换成其左边变量的类型转换成其左边变量的类型例例1 float f; int i; i=10; f=i; 则则 例例2 int i; i=2.56; /结果结果i=2;第40页/共56页 赋值表达式赋值表达式 定义定义:由赋值运算符将一个变量和一个表达式连接起来的式子,叫赋值表:由赋值运算符将一个变量和一个表达式连接起来的式子,叫赋值表达式。达式。 一般形式一般形式: 赋值表达式的值

32、赋值表达式的值与变量值相等与变量值相等, ,且可嵌套且可嵌套第41页/共56页 结合方向:结合方向:自右向左自右向左优先级优先级: 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=10,c=2第42页/共56页 复合的赋值运算符+= -= *= /= %= = = &= = |=a+=3a=a+3x*=y+8x=x*(y+8)x%=

33、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)第43页/共56页#include void main() i=8;j=10; 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;第44页/共56页2.6 逗

34、号运算符和逗号表达式逗号运算符和逗号表达式 形式形式:表达式:表达式1,1,表达式表达式2,2,表达式表达式n n 结合性结合性: :从左向右从左向右 优先级优先级: 15: 15 逗号表达式的值逗号表达式的值:等于表达式:等于表达式n n的值的值第45页/共56页例例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/其中逗号起分隔作用其中逗号起分隔作用/其中逗号为逗号运算符其中逗号为逗号运算符第46页/共56页例例:#include void main() int x,y=7; float z=4; x=(y=y+6,y/z); printf(x=%dn

温馨提示

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

评论

0/150

提交评论