资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,第二章 数据类型与表达式,C语言的数据类型,常量与变量,整型数据,实型数据,字符型数据,运算符和表达式,不同类型数据间的混合运算,2.1,C语言的数据类型,数据类型总表,C,数,据,类,型,基本类型,构造类型,指针类型,空类型void,定义类型typedef,字符类型char,枚举类型enum,整 型,实型,单精度型float,双精度型double,数组,结构体struct,共用体union,短整型short,长整型long,整型int,数据类型决定:,1.数据占内存字节数,2.数据取值范围,3.其上可进行的操作,语言程序设计,第二章,数据类型与表达式,C,根本数据类型,类型,符号,关键字,数的表示范围,所占位数,整型,字符型,实型,有,无,(signed),int,16,-3276832767,(signed),short,16,-3276832767,(signed),long,32,-21474836482147483647,16,unsigned,int,065535,32,04294967295,unsigned,long,unsigned,short,16,065535,有,float,32,3.4e-383.4e38,有,double,64,1.7e-3081.7e308,有,char,8,-128127,无,unsigned char,8,0255,语言程序设计,第二章,数据类型与表达式,C,2.2 常量与变量,标识符,定义:用来标识变量、常量、函数等的字符序列,组成:,只能由字母、数字、下划线组成,且第一个字母必须是字母或下划线,大小写敏感,不能使用关键字,长度:最长32个字符,命名原那么:,见名知意,不宜混淆 如l1与lI,oo与o0,例:判断以下标识符号合法性,sum Sum M.D.John day Date 3days,student_name#33 lotus_1_2_3,char ab _above$123,3days,#33,char,$123,ab,语言程序设计,第二章,数据类型与表达式,C,一般用大写字母,是宏定义预处理命令,不是C,语句,直接常量:,整型常量,实型常量,字符常量,字符串常量,如#define PRICE 30,常量,定义:程序运行时其值不能改变的量即常数,分类:,符号常量:用标识符代表常量,定义格式:#define 符号常量 常量,例 符号常量举例(ch2_1.c),#define PRICE 30,main(),int num,total;,num=10;,total=num*PRICE;,printf(total=%d,total);,运行结果:total=300,语言程序设计,第二章,数据类型与表达式,C,整型常量整常数,三种形式:,十进制整数:由数字09和正负号表示.如 123,-456,0,八进制整数:由数字0开头,后跟数字07表示.如0123,011,十六进制整数:由0 x开头,后跟09,af,AF表示.如0 x123,0Xff,例 12 与,12L,例 30000 为int,型,65536 为long int 型,整型常量的类型,根据其值所在范围确定其数据类型,在整常量后加字母l或L,认为它是,long int,型常量,问题:,0123 =(),10,0 x123=(),10,0Xff =(),10,83,291,255,问题:,0123 =(),10,0 x123=(),10,0Xff =(),10,语言程序设计,第二章,数据类型与表达式,C,实型常量实数或浮点数,表示形式:,十进制数形式:必须有小数点 如0.123,.123,123.0,0.0,123.,指数形式:e或E之前必须有数字;指数必须为整数如12.3e3,123E2,1.23e4,e-5 ,实型常量的类型,默认double,型,在实型常量后加字母f或F,认为它是float 型,语言程序设计,第二章,数据类型与表达式,C,字符常量,定义,:,用,单引号,括起来的单个,普通字符,或,转义字符,.,字符常量的,值,:该字符的,ASCII,码值,转义字符及其含义:,转义字符,含义,n,v,r,a,ddd,t,b,f,“,xhh,转义字符,含义,换行,垂直制表,回车,响铃,单引号,3位8进制数代表的字符,水平制表,退格,换页,反斜线,双引号,2位16进制数代表的字符,如 101 -A 012 -n,376 -,x61 -a,60 -0 483 -(,),例:,A-101-x41-65,如 A65,a97,,048,n10,如 a A?n 101,转义字符,:反斜线后面跟一个字符或一个代码值表示,例 转义字符举例(ch2_001.c,ch2_004.c),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,例 main(),printf(“Yb=n);,运行结果:,屏幕显示:=,打印机输出:,字符常量与字符串常量不同,字符串常量,定义:用双引号(“)括起来的字符序列,存储:每个字符串尾自动加一个 0 作为字符串结束标志,h e l l o,0,例 字符串“hello”,在内存中,a,a 0,例,a,“a”,例,空串 “”,0,例:char ch;,ch=“A;,例:char ch;,ch=A;,语言程序设计,第二章,数据类型与表达式,C,编译程序根据变量定义为其,分配指定字节的内存单元,.,地址,int a=1,b=-3,c;,a,b,c,2字节,2字节,2字节,地址,地址,.,内存,1,-3,随机数,变量,概念:其值可以改变的量,变量名,与,变量值,变量定义的一般格式:,数据类型,变量1,变量2,变量n;,变量初始化:定义时赋初值,例:,int a,b,c;,float data;,决定分配字节数,和数的表示范围,合法标识符,例:,int a=2,b,c=4;,float data=3.67;,char ch=A;,int x=1,y=1,z=1;,int x=y=z=1;,变量的使用:,先定义,后使用,例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,变量定义位置:,一般,放在函数开头,main(),int a,b=2;,float data;,a=1;,data=(a+b)*1.2;,printf(“data=%fn”,data);,变量定义,可执行语句,main(),int a,b=2;,a=1;,float data;,data=(a+b)*1.2;,printf(“data=%fn”,data);,Ch2_005.c,整型变量,占字节数随机器不同而不同,一般占一个机器字,shortintlong,可用sizeof(类型标识符测量,实型变量,float,:,占4字节,提供7位有效数字,double,:,占8字节,提供15,16位有效数字,字符型变量,字符变量存放字符,ASCII,码,char,与,int,数据间可进行算术运算,例 float a;,a=11.1111111;/*a=11.111111*/,double b;,例 a=D;/*a=68;*/,x=A+5;/*x=65+5;*/,s=!+G /*s=33+71;*/,没有,字符串变量,,用字符数组存放,Ch2_006.c,语言程序设计,第二章,数据类型与表达式,C,例 /*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,语言程序设计,第二章,数据类型与表达式,C,2.3 不同类型数据间的转换,隐式转换,什么情况下发生,运算转换-不同类型数据混合运算时,赋值转换-把一个值赋给与其类型不同的变量时,输出转换-输出时转换成指定的输出格式,函数调用转换-实参与形参类型不一致时转换,运算转换规那么:不同类型数据运算时先自动转换成同一类型,语言程序设计,第二章,数据类型与表达式,C,double,float,long,unsigned,int,char,short,低,高,说明:,必定的转换,运算对象类型不同时转换,例 char ch;,int i;,float f;,double d;,ch/i +f*d -(f+i),int,int,double,double,double,double,double,double,int,int,double,double,double,double,double,double,10+a +i*f -d/l,例 int i;,float f;,double d;,long l;,显式转换强制转换,一般形式:类型名表达式,例 (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,精度损失问题,较高类型向较低类型转换时可能发生,Ch2_007.c,Ch2_008.c,语言程序设计,第二章,数据类型与表达式,C,2.4,运算符和表达式,C,运,算,符,算术运算符:(+-*/%+-),关系运算符:(=!=),逻辑运算符:(!&|),位运算符 :(|&),赋值运算符:(=及其扩展),条件运算符:(?:),逗号运算符:(,),指针运算符:(*&),求字节数 :(sizeof),强制类型转换:(类型),分量运算符:(.-),下标运算符:(),其它 :(()-),语言程序设计,第二章,数据类型与表达式,C,学习运算符应注意:,运算符功能,与运算量关系,要求运算量个数,要求运算量类型,运算符优先级别,结合方向,结果的类型,语言程序设计,第二章,数据类型与表达式,C,算术运算符和表达式,根本算术运算符:+-*/%,结合方向:从左向右,优先级:-*/%-+-,(14)(13)(12),说明:,“-可为单目运算符时,右结合性,两整数相除,结果为整数,%要求两侧均为整型数据,例 5/2 =,5%2 =,例 -5/2.0 =,-5%2 =,1/10 =,5%1 =,5.5%2 =,例 5/2 =,2,5%2 =,1,例 -5/2.0 =,-2.5,-5%2 =,-1,1/10 =,0,5%1 =,0,5.5%2,(,),语言程序设计,第二章,数据类型与表达式,C,自增、自减运算符+-,作用:使变量值加1或减1,种类:,前置 +i,-i (先执行i+1或i-1,再使用i值,后置 i+,i-(先使用i值,再执行i+1或i-1,例 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,语言程序设计,第二章,数据类型与表达式,C,自增、自减运算符+-,作用:使变量值加1或减1,种类:
展开阅读全文