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

下载本文档

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

文档简介

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

2、围3. 其上可进展的操作其上可进展的操作n根本数据类型类型符号关键字数的表示范围所占位数整型字符型实型有无(signed) int32-21474836482147483647(signed) short16-3276832767(signed) long32-2147483648214748364732unsigned int042949672953204294967295unsigned longunsigned short16065535有float323.4e-383.4e38有double641.7e-3081.7e308有char8-128127无unsigned char8025

3、5阐明:数据类型所占字节数随机器硬件不同而不同,上表以IBM PC机为例2.2 常量与变量常量与变量n标识符标识符n定义:用来标识变量、常量、函数等的字定义:用来标识变量、常量、函数等的字符序列符序列n组成:组成:n只能由字母、数字、下划线组成,且第一只能由字母、数字、下划线组成,且第一个字母必需是字母或下划线个字母必需是字母或下划线n大小写敏感大小写敏感n不能运用关键字不能运用关键字 讨论:判别以下标识符号合法性讨论:判别以下标识符号合法性sumSumM.D.JohndayDate3days student_name#33lotus_1_2_3charababove $123 _toDayM

4、.D.John3days#33char$123abp长度:最长长度:最长32个字符个字符p命名原那么:命名原那么:p见名知意,采用简约有含义的英文单词或缩见名知意,采用简约有含义的英文单词或缩写写p不宜混淆不宜混淆 如如1与与L, o与与0 标识符命名实例标识符命名实例stu_name, sum, total, day, count, sortn常量常量n在程序运转过程中,其值不能改动的量称为常量在程序运转过程中,其值不能改动的量称为常量n常量可为恣意数据类型常量可为恣意数据类型n字面常量直接常量字面常量直接常量n整型:整型: 12、0、-3n实型:实型: 4.6、-1.23n字符型:字符型:

5、a、dn字符串常量:字符串常量:Hello、Good Morning!p符号常量:标识符代表常量符号常量:标识符代表常量p定义格式:定义格式: #define 符号常量定义举例符号常量定义举例#define PI 3.1415926#define STAR *阐明阐明:符号常量符号常量普通运用大写英普通运用大写英文字母表示,以文字母表示,以区别普通用于小区别普通用于小写字母表示的变写字母表示的变量。量。p符号常量运用符号常量运用例例 符号常量举例符号常量举例#include #define PRICE 30void main() int num,total; num=10; total=num

6、*PRICE; printf(total=%d,total);运转结果:运转结果:total=300符号常量的运用能给符号常量的运用能给程序员带来哪些益处?程序员带来哪些益处?n变量变量n其值可以改动的量称为变量其值可以改动的量称为变量n变量也可以为恣意数据类型变量也可以为恣意数据类型n变量定义的普通格式变量定义的普通格式n数据类型数据类型 变量变量1,变量,变量2,变量,变量n;决议分配字节数决议分配字节数和数的表示范围和数的表示范围变量定义举例变量定义举例: int a,b,c; float data;p变量的运用:作强迫定义,也就是变量的运用:作强迫定义,也就是“先定义,先定义,后运用后

7、运用例例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 n整型数据整型数据n整型常量整型常量形式形式表示方式表示方式举例举例十进制整数十进制整数由数字由数字0-9和正负号表示和正负号表示123,-456,0八进制整数八进制整数由数字由数字0开头开头,后跟数字后跟数字07表示表示0123,011十六进制整数十六进制整数由由0 x开头开头,后跟后跟09,af,AF表

8、示表示0 x123,0Xff问题:问题:0123 = ( )100 x123 = ( )100Xff = ( )10 83291255整型常量的类型整型常量的类型根据其值所在范围确定其数据类型根据其值所在范围确定其数据类型在整常量后加字母在整常量后加字母l l或或L L,以为它是,以为它是long int long int 型型常量常量例例 12 与与 12L例例30000 为为int型型65536 为为long int型型p整型变量整型变量p整型变量在内存中以二进制的方式存放整型变量在内存中以二进制的方式存放p根据占用的字节数不同,分为不同类别根据占用的字节数不同,分为不同类别整型变量的定义

9、整型变量的定义整型变量定义举例整型变量定义举例: 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 = 22, b+u = -14n实型数据实型数据n实型常量实型常量n表示方式:表示方式:n 十进制数方式:必需有小数点十进制数方式:必需有小数点n 指数方式:指数方式:e e或或E E之前必需有数字;指之前必需有数字

10、;指数必需为整数数必需为整数n实型常量的整数部分为时可以省略,且实型常量的整数部分为时可以省略,且E E或或e e后面指数必需为整数。后面指数必需为整数。十进制数方式实型常量0.123, .123, 123.0, 0.0, 123.指数方式实型常量12.3e3 ,123E2, 1.23e4 , e-5 , 1.2E-3.5 , .e3n字符常量字符常量n定义:用单引号括起来的单个普通字符或定义:用单引号括起来的单个普通字符或本义字符。本义字符。n字符常量的值:该字符的字符常量的值:该字符的ASCIIASCII码值码值n本义字符:反斜线后面跟一个字符或一个本义字符:反斜线后面跟一个字符或一个代码

11、值表示代码值表示如 a A ? n 101如 A65, a97, 048 , n10本义字符及其含义:本义字符含义nvradddtbf“xhh本义字符含义换行垂直制表回车响铃单引号单引号3位位8进制数代表的字符进制数代表的字符程度制表退格换页换页反斜线反斜线双引号双引号2位位16进制数代表的字符进制数代表的字符如 101 -A 012 -n 376 - x61 -a 60 -0 483 -()例:A-101-x41-65例例 本义字符举例本义字符举例 #include ;void main() printf(101 x42 Cn); printf(I say:How are you?n); p

12、rintf(C Programn); printf(Turbo C);A B CI say:How are you? C ProgramTurbo Cp本卷须知:本卷须知:p单撇号中的字符不能是单撇号中的字符不能是或者或者 p一个字符占一个字节,存其对应的一个字符占一个字节,存其对应的ASCIIASCII码码p思索:思索:99和和9 9的区别的区别p字符型数据可像证书一样在程序中参与字符型数据可像证书一样在程序中参与相关的运算相关的运算a 32 结果为结果为65n字符变量字符变量n字符变量存放字符字符变量存放字符ASCIIASCII码码ncharchar与与intint数据间可进展算术运算数据

13、间可进展算术运算例例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);/*ch2_003.c*/ #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); 宏定义宏定义变量定义变量定义输出结果输出结果

14、运转结果:运转结果:total=37.500000, ch1=d例子例子n字符串常量字符串常量n定义:用双引号定义:用双引号(“(“) )括起来的字符序列括起来的字符序列n存储:每个字符串尾自动加一个存储:每个字符串尾自动加一个 0 0 作为字符串终了标志作为字符串终了标志n字符常量与字符串常量不同字符常量与字符串常量不同h e l l o 0例例 字符串字符串“hellohello在内存中在内存中例例 空串空串 “ “0a a 0例例 aaa例例: char ch; ch=A; 例例: char ch; ch=A; 没有字符串变量,用字符数组存放没有字符串变量,用字符数组存放5C言语无言语无

15、I/O语句,语句,I/O操作由函数实现操作由函数实现5 #include 格式输入输出函数 p规范输入函数规范输入函数scanf格式格式: scanf(“格式控制串格式控制串,地址表,地址表功能:按指定格式从键盘读入数据,存入地址表指定的功能:按指定格式从键盘读入数据,存入地址表指定的 存储单元中存储单元中,并按回车键终了并按回车键终了返值:正常,前往输入数据个数返值:正常,前往输入数据个数地址表:变量的地址,常用取地址运算符地址表:变量的地址,常用取地址运算符&格式字符格式字符:d,i,o,x,u,c,s,f,e例例 scanf(“%d,&a); 输入:输入:10 那么那么

16、a=10例例 scanf(“%x,&a); 输入:输入:11 那么那么 a=17附加格式阐明符修饰符附加格式阐明符修饰符例例 scanf(“%4d%2d%2d,&yy,&mm,&dd); 输入输入 20191015 那么那么2019yy, 10 mm, 15 dd例例 scanf(“%3d%*4d%f,&k,&f); 输入输入 12345678765.43 那么那么123k, 8765.43f例例 scanf(“%2d %*3d %2d,&a,&b); 输入输入 12 345 67 那么那么12a, 67b例例 scanf(“%3

17、c%2c,&c1,&c2); 输入输入 abcde 那么那么ac1, d c2l修饰符修饰符功功 能能hm*用于用于d,o,xd,o,x前,指定输入为前,指定输入为shortshort型整数型整数用于用于d,o,xd,o,x前,指定输入为前,指定输入为longlong型整数型整数用于用于e,fe,f前,指定输入为前,指定输入为doubledouble型实数型实数指定输入数据宽度,遇空格或不可转换字符那么终了指定输入数据宽度,遇空格或不可转换字符那么终了抑制符,指定输入项读入后不赋给变量抑制符,指定输入项读入后不赋给变量输入分隔符的指定输入分隔符的指定普通以空格、普通以空格、TA

18、BTAB或回车键作为分隔符或回车键作为分隔符其它字符做分隔符:格式串中两个格式符间字符其它字符做分隔符:格式串中两个格式符间字符例 scanf(“%d%o%x,&a,&b,&c); printf(“a=%d,b=%d,c=%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,

19、b=%d,c=%d,&a,&b,&c); 输入 a=12,b=24,c=36 2.3 2.3 不同类型数据间的转换不同类型数据间的转换n隐式转换隐式转换n什么情况下发生什么情况下发生n运算转换运算转换-不同类型数据混合运算时不同类型数据混合运算时n赋值转换赋值转换-把一个值赋给与其类型不同把一个值赋给与其类型不同的变量时的变量时n输出转换输出转换-输出时转换成指定的输出格输出时转换成指定的输出格式式n函数调用转换函数调用转换-实参与形参类型不一致实参与形参类型不一致时转换时转换a 32 int age;age = 11.1char name=a;printf(“%dn,

20、name);p运算转换规那么运算转换规那么: :不同类型数据运算时先自动不同类型数据运算时先自动转换成同一类型转换成同一类型doublefloatlongunsignedintchar,short低低高高阐明阐明:必定的转换必定的转换运算对象类型不同时转换运算对象类型不同时转换 char ch; int i; float f; double d;ch/i + f*d - (f+i)intintdoubledoublefloatdoubledoubledouble例例1intintdoubledoubledoubledoubledoubledouble10+a +i*f - d/l例例2 int

21、 i;float f;double d;long l;n显示转换显示转换n可以利用强迫类型转换将一个表达式转可以利用强迫类型转换将一个表达式转换成所需类型换成所需类型n普通方式:类型名表达式普通方式:类型名表达式n例例: (int)(x+y): (int)(x+y)n (int)x+y (int)x+yn (double)(3)/2 (double)(3)/2 n(int)3.6 (int)3.6 n阐明:强迫转换得到所需类型的中间变量,阐明:强迫转换得到所需类型的中间变量,原变量类型不变原变量类型不变 例例 main() float x; int i; x=3.6; i=(int)x; pr

22、intf(“x=%f,i=%d,x,i); 结果:结果:x=3.600000,i=3较高类型向较低类型转换时能够发生精度损失问题2.4 2.4 算术运算符和算术表达式算术运算符和算术表达式nC运算符简介运算符简介C运运算算符符算术运算符算术运算符 :+ - + - * * / % + - / % + -关系运算符关系运算符 : = != = !=逻辑运算符逻辑运算符 :!:! & |& |位位 运运 算算 符:符: | & | &赋值运算符赋值运算符 := = 及其扩展及其扩展条件运算符条件运算符 :?:?:逗号运算符逗号运算符 :, ,指针运算符指针运算符 :

23、* * & &求求 字字 节节 数:数:sizeofsizeof强迫类型转换:类型强迫类型转换:类型分量运算符分量运算符 :. -. -下标运算符下标运算符 :其它其它 :( ) -( ) -学习运算符应留意学习运算符应留意 运算符功能运算符功能 与运算量关系与运算量关系 要求运算量个数要求运算量个数 要求运算量类型要求运算量类型 运算符优先级别运算符优先级别 结合方向结合方向 结果的类型结果的类型n根本的算术运算符根本的算术运算符n+加法运算或正值运算符加法运算或正值运算符n-减法运算或负值运算符减法运算或负值运算符n*乘法运算符乘法运算符n/除法运算符,求商除法运算符,求商

24、,两个整数相除结果为两个整数相除结果为整数整数n% 模运算符,求余,要求两那么均为整型模运算符,求余,要求两那么均为整型数据数据3+5、+35-2、-33*55/37%4例 5/2 = -5/2.0 =例 5%2 = -5%2 = 5%-2 = 1%10 = 5%1 = 5.5%22-2.51-110()1取模的余数符号取模的余数符号由分子被除数由分子被除数决议决议n算术表达式和运算符的优先级和结合性算术表达式和运算符的优先级和结合性n算术表达式:用算术运算符和括号将运算算术表达式:用算术运算符和括号将运算对象衔接起来的、符合对象衔接起来的、符合C C语法规那么的式语法规那么的式子。子。n求表

25、达式的值:求表达式的值:n先按运算符的优先级别高低次序执行;先按运算符的优先级别高低次序执行;n再一个运算对象两那么的运算赋的优先级再一个运算对象两那么的运算赋的优先级别一样,那么按规定的别一样,那么按规定的“结合方向结合方向处置。处置。a*b/c-1.5+aa b * c / dn自增自增+、自减运算符、自减运算符n作用:使变量值加作用:使变量值加1或减或减1n种类:种类:n前置前置 +i, -i (先执行先执行i+1或或i-1,再运用,再运用i值值)n后置后置 i+,i- (先运用先运用i值值,再执行再执行i+1或或i-1 int a=3; int b=+a; int c=a+;4a a值

26、值表达式值表达式值a a值值表达式值表达式值+a+aa+a+345444那么:那么:a:5,b:4,c:4。 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例例p留意阐明:留意阐明:p只能用于变量,不能用于常量或表达式;只能用于变量,不能用于常量或表达式;p结合方向结合方向“自右向左自右向左;

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

28、表达式运用中的问题阐明n表达式中包含多个自加、自减运算时,很表达式中包含多个自加、自减运算时,很容易出错容易出错例例1 1: 如如i i3 3,那么,那么k ki i结果:结果:k3,i4例例2 2: 如如i i3 3,那么,那么(i+) + (i+) (i+) + (i+) + (i+)+ (i+)结果:结果:9,i6例例3 3: 如如i i3 3,那么,那么(+ i) + (+ i) (+ i) + (+ i) + (+ i)+ (+ i)结果:结果:16,i6pi+ji+j,应如何结合?,应如何结合?p调用函数时,实参数地求值顺序,调用函数时,实参数地求值顺序,c c并无一致并无一致规定

29、规定C C编译在处置时尽能够多地自左而右将假设编译在处置时尽能够多地自左而右将假设干个字符组成一个运算符。所以应该为干个字符组成一个运算符。所以应该为(i+)+j(i+)+j举例:如举例:如i i3 3,那么,那么printf(“%d,%dprintf(“%d,%d,i,i+),i,i+)解答:解答:假设对参数的求值顺序为自右而左,打印假设对参数的求值顺序为自右而左,打印4,3 4,3 且且 i=4;i=4;假设对参数的求值顺序为自左而右,打印假设对参数的求值顺序为自左而右,打印3,3 3,3 且且 i=4;i=4;2.5 赋值运算符和赋值表达式赋值运算符和赋值表达式n简单赋值运算符简单赋值运

30、算符“n作用:将一个数据赋给一个变量作用:将一个数据赋给一个变量常量或表达式常量或表达式只能是变量,不能是只能是变量,不能是常量或表达式常量或表达式例例 3=x-2*y;a+b=3;例例 a3; a(a+b)*c赋值转换规那么:使赋值号右边表达式值自动转换成其左边变量的类型例例1 float f; int i; i=10; f=i; 那么那么 f=10.0例例2 int i; i=2.56; /结果结果i=2;n赋值表达式赋值表达式n定义:由赋值运算符将一个变量和一个表定义:由赋值运算符将一个变量和一个表达式衔接起来的式子,叫赋值表达式。达式衔接起来的式子,叫赋值表达式。n普通方式:普通方式:

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

32、x=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)#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;2.6 逗号运算符和逗号表达式n方式:表达式方式

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

温馨提示

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

评论

0/150

提交评论