《ch2数据类型上课.ppt》由会员分享,可在线阅读,更多相关《ch2数据类型上课.ppt(56页珍藏版)》请在三一办公上搜索。
1、第2章 数据类型、运算符与表达式,数据类型常量与变量不同类型数据间的转换算术运算符和算术表达式赋值运算符和赋值表达式逗号运算符和逗号表达式,2.1 数据类型,指针类型,空类型void,定义类型typedef,数据类型决定:1.数据占内存字节数2.数据取值范围3.其上可进行的操作,基本数据类型,整型,字符型,实型,有,无,说明:数据类型所占字节数随机器硬件不同而不同,上表以IBM PC机为例,2.2 常量与变量,标识符定义:用来标识变量、常量、函数等的字符序列组成:只能由字母、数字、下划线组成,且第一个字母必须是字母或下划线大小写敏感不能使用关键字,讨论:判断下列标识符号合法性sumSumM.D
2、.JohndayDate3days student_name#33lotus_1_2_3charababove$123 _toDay,M.D.John,3days,#33,char,$123,ab,长度:最长32个字符命名原则:见名知意,采用简洁有含义的英文单词(或缩写)不宜混淆 如1与L,o与0,标识符命名实例stu_name,sum,total,day,count,sort,常量在程序运行过程中,其值不能改变的量称为常量常量可为任意数据类型字面常量(直接常量)整型:12、0、-3实型:4.6、-1.23字符型:a、d字符串常量:”Hello”、”Good Morning!”,符号常量:标识
3、符代表常量定义格式:#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,符号常量的使用能给程序员带来哪些好处?,变量其值可以改变的量称为变量变量也可以为任意数据类型变量定义的一般格式数据类型 变量1,变量2,变量n;,决定分
4、配字节数和数的表示范围,变量定义举例:int a,b,c;float data;,变量的使用:作强制定义,也就是“先定义,后使用”,例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,整型数据整型常量,问题:0123=()100 x123=()100Xff=()10,83,291,255,整型常量的类型根据其值所在范围确定其数据类型在整常量后加字母l或L,认为它是long
5、int 型常量,例 12 与 12L,例30000 为int型65536 为long int型,整型变量整型变量在内存中以二进制的形式存放根据占用的字节数不同,分为不同类别,整型变量的定义,整型变量定义举例: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=-14,实型数据实型常量表示形式:十进制数形式:(必须有小数点)指数形式:(e或E之
6、前必须有数字;指数必须为整数)实型常量的整数部分为时可以省略,且E或e后面指数必须为整数。,十进制数形式实型常量0.123,.123,123.0,0.0,123.,指数形式实型常量12.3e3,123E2,1.23e4,e-5,1.2E-3.5,.e3,在C语言中,一个实型常数未说明则表示是double型。,字符常量定义:用单引号括起来的单个普通字符或转义字符。字符常量的值:该字符的ASCII码值转义字符:反斜线后面跟一个字符或一个代码值表示,如 a A?n 101,如 A65,a97,048,n10,如 101-A 012-n 376-x61-a 60-0 483-(),例:A-101-x4
7、1-65,例 转义字符举例#include;void main()printf(101 x42 Cn);printf(I say:How are you?n);printf(C Programn);printf(Turbo C);,A B C,I say:How are you?,C Program,Turbo C,注意事项:单撇号中的字符不能是或者一个字符占一个字节,存其对应的ASCII码思考:9和9的区别字符型数据可像证书一样在程序中参与相关的运算,a 32 结果为65,字符变量字符变量存放字符ASCII码char与int数据间可进行算术运算,例1 a=D;/*a=68;*/x=A+5;/
8、*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);,运行结果:total=37.500000,ch1=d,例子,字符串常量定义:用双引号(“”)括起来的字符序列存储:每个字符串尾自动加一个 0 作为字符串结
9、束标志字符常量与字符串常量不同,例:char ch;ch=A;,没有字符串变量,用字符数组存放,C语言无I/O语句,I/O操作由函数实现#include,格式输入输出函数,标准输入函数scanf,格式:scanf(“格式控制串”,地址表)功能:按指定格式从键盘读入数据,存入地址表指定的 存储单元中,并按回车键结束返值:正常,返回输入数据个数,地址表:变量的地址,常用取地址运算符&格式字符:d,i,o,x,u,c,s,f,e,例 scanf(“%d”,输入:10 则 a=10,例 scanf(“%x”,输入:11 则 a=17,附加格式说明符(修饰符),例 scanf(“%4d%2d%2d”,输
10、入 19991015 则1999yy,10 mm,15 dd,例 scanf(“%3d%*4d%f”,输入 12345678765.43 则123k,8765.43f,例 scanf(“%2d%*3d%2d”,输入 1234567 则12a,67b,例 scanf(“%3c%2c”,输入 abcde 则ac1,d c2,输入分隔符的指定一般以空格、TAB或回车键作为分隔符其它字符做分隔符:格式串中两个格式符间字符,例 scanf(“%d%o%x”,输入 123 123 123 输出 a=123,b=83,c=291,例 scanf(“%d:%d:%d”,输入 12:30:45 则12 h,30
11、 m,45 s,例 scanf(“%d,%d”,&a,&b)输入 3,4 则3a,4 b,例 scanf(“a=%d,b=%d,c=%d”,输入 a=12,b=24,c=36,2.3 不同类型数据间的转换,隐式转换什么情况下发生运算转换-不同类型数据混合运算时赋值转换-把一个值赋给与其类型不同的变量时输出转换-输出时转换成指定的输出格式函数调用转换-实参与形参类型不一致时转换,a 32,int age;age=11.1,char name=a;printf(“%dn”,name);,运算转换规则:不同类型数据运算时先自动转换成同一类型,char ch;int i;float f;double
12、d;,ch/i+f*d-(f+i),例1,显示转换可以利用强制类型转换将一个表达式转换成所需类型一般形式:(类型名)(表达式)例:(int)(x+y)(int)x+y(double)(3)/2(int)3.6 说明:强制转换得到所需类型的中间变量,原变量类型不变,例 main()float x;int i;x=3.6;i=(int)x;printf(“x=%f,i=%d”,x,i);结果:x=3.600000,i=3,精度损失问题,2.4 算术运算符和算术表达式,C运算符简介,学习运算符应注意 运算符功能 与运算量关系 要求运算量个数 要求运算量类型 运算符优先级别 结合方向 结果的类型,基本
13、的算术运算符+加法运算或正值运算符-减法运算或负值运算符*乘法运算符/除法运算符,求商,两个整数相除结果为整数%模运算符,求余,要求两则均为整型数据,3+5、+3,5-2、-3,3*5,5/3,7%4,例 5/2=-5/2.0=,例 5%2=-5%2=5%-2=1%10=5%1=5.5%2,2,-2.5,1,-1,1,0,(),1,取模的余数符号由分子(被除数决定),算术表达式和运算符的优先级和结合性算术表达式:用算术运算符和括号将运算对象连接起来的、符合C语法规则的式子。求表达式的值:先按运算符的优先级别高低次序执行;再一个运算对象两则的运算赋的优先级别相同,则按规定的“结合方向”处理。,a
14、*b/c-1.5+a,a b*c/d,自增+、自减运算符作用:使变量值加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+;,3,4,5,4,4,4,则: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=3,j=4,/4,/3,/c=20,a=4,/c=15,a=4,例,注意说明:只能用于变量,
15、不能用于常量或表达式;结合方向“自右向左”;优先级别:-+-*/%-+-自增(减)运算常用于循环语句中循环变量自动加(减)1或指针变量,使指针指向下一个地址,5+()(a+b)+()i+(),例1解答:-i+-(i+)i=3;printf(“%d”,-i+);/-3,例1:-i+i=3;printf(“%d”,-i+);,有关表达式使用中的问题说明表达式中包含多个自加、自减运算时,很容易出错,i+j,应如何结合?调用函数时,实参数地求值顺序,c并无统一规定,2.5 赋值运算符和赋值表达式,简单赋值运算符“”作用:将一个数据赋给一个变量,常量或表达式,只能是变量,不能是常量或表达式,例 3=x-
16、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;,赋值表达式定义:由赋值运算符将一个变量和一个表达式连接起来的式子,叫赋值表达式。一般形式:赋值表达式的值与变量值相等,且可嵌套,结合方向:自右向左优先级: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,
17、a=10,b=4,c=6,/表达式值5,a=5,b=10,c=2,复合的赋值运算符+=-=*=/=%=&=|=,例: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,
18、m,n);,int i,j;,2.6 逗号运算符和逗号表达式,形式:表达式1,表达式2,表达式n结合性:从左向右优先级:15逗号表达式的值:等于表达式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=
19、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);,运行结果:x=3,2.7 关系运算符和关系表达式,关系运算符种类:=!=结合方向:自左向右优先级别:低于算术运算符而高于赋值运算符,例 ca+b/c(a+b)ab!=c/(ab)!=c a=bc/a=(bc),关系表达式的值:是逻辑量“真”或“假”,分别用1和0表示。,例 int a=3,b=2,c=1,d,f;ab(ab)=c b+c
20、b f=abc,/表达式值1,/表达式值1,/表达式值0,/d=1,/f=0,C中没有逻辑型,例1 若a=0;b=0.5;x=0.3;则 a=x=b的值为,0,例2 5278在C中是允许的,值为,0,例3 int i=1,j=7,a;a=i+(j%4!=0);则a=,2,例4 a0 结果为 A100 结果为,1,0,例5 注意区分“=”与“=”int a=0,b=1;if(a=b)printf(“a equal to b”);else printf(“a not equal to b”);,2.8 逻辑运算符和逻辑表达式,逻辑运算符种类:&|!逻辑运算真值表,优先级和结合方向,优先级:,结合方向:,例 ab&xy a=b|x=y!a|ab,/(a=x)&(x=b),/(ab)&(xy),/(a=b)|(x=y),/(!a)|(ab),int a=3,b=0;!a a|b|b+(p&(q&!q)|!(r|(s|!s),例,eg.写出以下表达式1.整型变量m的内容是否为偶数m%2=02.检查字符变量 a的内容是否为字母.a=a&a=A&a=Z,上机地点,