第二章数据类型及其输入输出PPT讲稿.ppt
第二章数据类型及其输入输出第二章数据类型及其输入输出第1页,共46页,编辑于2022年,星期二本节重点本节重点n数据类型数据类型n常量与变量常量与变量第2页,共46页,编辑于2022年,星期二引入引入数据类型数据类型1 1、数据是程序处理的基本对象。、数据是程序处理的基本对象。2 2、程序中数据分为变量或常量。、程序中数据分为变量或常量。3 3、每个变量或常量都有确定的数据类型。、每个变量或常量都有确定的数据类型。4 4、每种数据类型都有确定的存储长度、取值范围及允许的操作。、每种数据类型都有确定的存储长度、取值范围及允许的操作。5 5、程序中所有数据必须指定其数据类型。、程序中所有数据必须指定其数据类型。第3页,共46页,编辑于2022年,星期二常量常量常量:是指常数或其值不能被改变的量。常量:是指常数或其值不能被改变的量。分为直接常量和符号常量分为直接常量和符号常量1、直接常量:、直接常量:如:如:12,123.5,1.23E7,a,8,A,“hello”,“a”第4页,共46页,编辑于2022年,星期二常量的类型常量的类型、整型常量、整型常量有三种表示方法:有三种表示方法:十进制整数十进制整数123,-784八进制整数八进制整数 0123=十六进制整数十六进制整数 )83()123(108=)291()123(12301016=x常量分为:整型常量、实型常量、字符常量、字符串常量常量分为:整型常量、实型常量、字符常量、字符串常量第5页,共46页,编辑于2022年,星期二、实型常量,也称浮点数。、实型常量,也称浮点数。两种表示方法:两种表示方法:()()十进制小数形式十进制小数形式 由数字和小数点组成(必须有小数点)由数字和小数点组成(必须有小数点)1.123,3.1415;()()指数形式指数形式 123e5,123E5都表示都表示123105 但是但是 1.23E7 为规范化的指数形式。输出指数形式的数据时,按规范化的指数为规范化的指数形式。输出指数形式的数据时,按规范化的指数形式输出。形式输出。第6页,共46页,编辑于2022年,星期二3、字符常量(、字符常量(Character constants)由一对由一对单引号单引号括起的单个字符,称为字符常量。括起的单个字符,称为字符常量。如:如:a,9,+在内存中,字符数据并不是把字符本身放到内存单元中,而是将该字在内存中,字符数据并不是把字符本身放到内存单元中,而是将该字符的相应符的相应ASCII码放到存储单元中。码放到存储单元中。第7页,共46页,编辑于2022年,星期二A6501000001a9701100001ASCII二进制如如:有两个字符型数据有两个字符型数据 A 和和a第8页,共46页,编辑于2022年,星期二4、字符串常量(、字符串常量(String Literals)由一对由一对双引号双引号括起的字符序列称为字符串常量括起的字符序列称为字符串常量,例如:例如:“How do you do?”“china”C规定规定以字符以字符0作为字符串结束的标志作为字符串结束的标志。在内存中所占字节数为:在内存中所占字节数为:实际字符个数实际字符个数+1 如字符串常量如字符串常量“china”在内存中存储形式如下:在内存中存储形式如下:chin0a第9页,共46页,编辑于2022年,星期二数据类型数据类型基本数据类型基本数据类型构造类型构造类型其它类型其它类型整型整型 int字符型字符型 char实型实型枚举类型枚举类型单精度型单精度型float双精度型双精度型double数数 组组结构体结构体共用体共用体指针类型指针类型空空 类类 型型第10页,共46页,编辑于2022年,星期二变量变量1、定义:其值可以改变的量称为变量。、定义:其值可以改变的量称为变量。变量必须先定义后使用变量必须先定义后使用。2、变量的定义、赋值(初始化)、变量的定义、赋值(初始化);(中间记得留空格)(中间记得留空格)int sum;char a,b;float r,s,l;double f,n,c;第11页,共46页,编辑于2022年,星期二3、对变量名的要求。、对变量名的要求。变量名要做到变量名要做到“见名知意见名知意”,不要使用简单的字符作变量名,以增加,不要使用简单的字符作变量名,以增加程序的可读性。程序的可读性。变量名一般用变量名一般用小写字母小写字母表示,长度与所用系统有关表示,长度与所用系统有关(8,c 合法标识符合法标识符非法标识符非法标识符第12页,共46页,编辑于2022年,星期二变量的类型变量的类型变量分为:整型变量、实型变量、字符型变量变量分为:整型变量、实型变量、字符型变量1、整型变量、整型变量 基本类型:用基本类型:用int 标识,在内存中占标识,在内存中占2个字节。个字节。例如:例如:int a,b;int f;修饰符修饰符 unsigned(无符号数)无符号数)signed(有符号数)有符号数)第13页,共46页,编辑于2022年,星期二2、实型变量、实型变量 类型类型 (内存中字节数内存中字节数)有效数字有效数字 float(4字节字节)67位位double (8字节字节)1516位位long double (16字节字节)1819位位定义方法:定义方法:(单精度)(单精度)float 变量名变量名(双精度)(双精度)double 变量名变量名 例如:float area;double t;第14页,共46页,编辑于2022年,星期二3、字符型变量、字符型变量 定义方法:定义方法:char 变量名列表变量名列表 char c1,c2,c3;取值范围取值范围 ASCII码字符集中的字符。码字符集中的字符。char c1,c2;c1=e;c2=3;例如:字符变量的赋值及运算例如:字符变量的赋值及运算 注意:注意:区别:区别:a “a”第15页,共46页,编辑于2022年,星期二定义了变量后定义了变量后,变量并没有值,需要给部分变量赋值。变量并没有值,需要给部分变量赋值。赋值的方法:(1)通过赋值号 =例如例如:int i;i9;/*先定义整型变量先定义整型变量i,然后赋初值然后赋初值9*/float r=1.5;/*定义实型变量定义实型变量r的同时,赋其初值的同时,赋其初值1.5*/char answer=y;也可以使被定义的变量的一部分赋初值。也可以使被定义的变量的一部分赋初值。如如 int a,b,c=5;表示定义表示定义a,b,c为整型变量,并且对为整型变量,并且对c进行初始化,使进行初始化,使c值为值为5。注意:注意:如对几个变量同时赋初值为如对几个变量同时赋初值为5,应写成,应写成 int a=5,b=5,c=5;或者或者 int a,b,c;a=b=c=5;不能写成:不能写成:int a=b=c=5;变量赋值变量赋值第16页,共46页,编辑于2022年,星期二(2)通过输入函数通过输入函数scanf()格式:格式:scanf(“格式控制字符串格式控制字符串”,输入项列表输入项列表);功能:将输入屏幕上的数一一对应的赋给输入项列表中的变量。功能:将输入屏幕上的数一一对应的赋给输入项列表中的变量。例例1:#include main()int a,b,c,d;float t;char ch;scanf(%d%d,&a,&b);scanf(%d%d,&c,&d);scanf(%f,%c,&t,&ch);用VC演示第17页,共46页,编辑于2022年,星期二#includemain()int a,b;char ch1,ch2;float f,r;scanf(“%d%d”,&a,&b);scanf(“%c%c”,&ch1,&ch2);scanf(“%f,%f”,&f,&r);输入时:输入时:125 785 a b 23.456,612.97例例2:第18页,共46页,编辑于2022年,星期二数据输出数据输出、printf()函数函数格式:格式:printf(“格式控制字符串格式控制字符串”,输出项列表输出项列表);功能:将输出项按给定的控制格式输出到输出屏幕上。功能:将输出项按给定的控制格式输出到输出屏幕上。第19页,共46页,编辑于2022年,星期二#includemain()char ch=a;int a=65;float x=123.456;printf(”%c,%d,%3cn”,ch,ch,ch);printf(”%c%d%3dn”,a,a,a);printf(”%f,%-7.2f,%10.4fn”,x,x,x);输出结果是输出结果是:a,97,_ _ a A 65 _ 65 123.456001,123.46_,_ _ 123.4560例例1:第20页,共46页,编辑于2022年,星期二本节重点本节重点n掌握运算符的使用掌握运算符的使用n确定表达式的类型、值确定表达式的类型、值n不同类型的数据的转换不同类型的数据的转换第21页,共46页,编辑于2022年,星期二运算符运算符一、运算符:一、运算符:能够完成某种操作(运算)的符号。能够完成某种操作(运算)的符号。二、根据运算符的运算对象(操作数)的多少,运算符可分为:二、根据运算符的运算对象(操作数)的多少,运算符可分为:单目(一元)运算符单目(一元)运算符 i+-n 双目(二元)运算符双目(二元)运算符 a+b d/e 三目(三元)运算符三目(三元)运算符 xy?x+3:y*9(条件运算符)(条件运算符)第22页,共46页,编辑于2022年,星期二优先级优先级运算符运算符操作数操作数结合性结合性1()-.左左右右2!-+-&*sizeof1右右左左3 */%2左左右右4+-2左左右右5 2左左右右6 =2左左右右7=!=2左左右右8&2左左右右9 2左左右右10|2左左右右11&2左左右右12|2左左右右13?:3右右左左14=*=/=+=2右右左左15,2左左右右第23页,共46页,编辑于2022年,星期二算术运算符算术运算符 1、分类、分类n双目运算符双目运算符 +加加 -减减 *乘乘 /除除%求余求余n单目运算符单目运算符 -负号运算负号运算 +自增自增 -自减自减双目运算符双目运算符:“/”如果是两个整型数相除,取整;如有一个为实数时,其意义就是实数除,结如果是两个整型数相除,取整;如有一个为实数时,其意义就是实数除,结果为果为double型。型。5/2=2 5/2.0=2.5 “%”取余数,只能对整数取余数,不能对浮点数取余数。取余数,只能对整数取余数,不能对浮点数取余数。运算结果的符运算结果的符号与左操作数相同。号与左操作数相同。5%2=1 -35%8=-3 35%-8=3第24页,共46页,编辑于2022年,星期二2、自增操作符和自减操作符、自增操作符和自减操作符格式格式:+i,i+-i,i-作用作用:是使自变量:是使自变量i的值加的值加1或减或减1,相当于,相当于i=i+1或或i=i-1。前置前置自增或前置自减操作:表示先修改操作数使之增自增或前置自减操作:表示先修改操作数使之增1或减或减1,然后取修改后的操作数的值作为表达式的值。然后取修改后的操作数的值作为表达式的值。后置后置自增或后置自减操作:表示在表达式中先取操作数的值,自增或后置自减操作:表示在表达式中先取操作数的值,然后再将操作数值增然后再将操作数值增1或减或减1。例如:例如:int i=3,j;j=i+;j的值为的值为3(首先将(首先将i的原值赋给的原值赋给j,然后,然后i自身再加自身再加1)j=+i;j的值为的值为4(i自身先加自身先加1,然后再将加,然后再将加1后的值赋给后的值赋给j)第25页,共46页,编辑于2022年,星期二main()int i,j,k;i=3;j=i+;k=+i;printf(“i=%d,j=%d,k=%dn”,i,j,k);范例:范例:输出结果输出结果:i=5,j=3,k=5第26页,共46页,编辑于2022年,星期二3、在表达式中如果有、在表达式中如果有2个以上的个以上的“+”或或“-”连写在一起,则编译器首先识别前面两个连写在一起,则编译器首先识别前面两个+或或-为自增或自减操作符。例如:为自增或自减操作符。例如:在使用自增或自减运算符时注意如下几个问题在使用自增或自减运算符时注意如下几个问题:1、自加或自减运算只能用于变量,不能用于常量或表达式;、自加或自减运算只能用于变量,不能用于常量或表达式;错误:错误:25+(i+j)+2 2、-i+,只能理解为只能理解为-(i+)。因为因为(-i)+为表达式,表达式是不能自加自减的。为表达式,表达式是不能自加自减的。i3;j-i+;printf(“%d”,j);输出结果应为输出结果应为-3,而不是是,而不是是-4。int a=1,b=5,c;c=a+b;c=a+b;c=a+b;正确:正确:c=6错误:错误:+不是双目运算符不是双目运算符正确:正确:a+b第27页,共46页,编辑于2022年,星期二赋值运算符和赋值表达式赋值运算符和赋值表达式1、赋值运算符、赋值运算符:=使用方法使用方法:变量名表达式;变量名表达式;赋赋值值运运算算时时先先计计算算右右边边表表达达式式的的值值,然然后后将将右右边边表表达达式式的的值值赋赋给给左边变量左边变量,并以此值作为整个赋值表达式的值。并以此值作为整个赋值表达式的值。(1)赋值运算的优先级为第)赋值运算的优先级为第14级级,次低。次低。如:如:int i,j;j=6;i=3+5%2;/*先计算先计算3+5%2,得到得到4,然后将然后将4 赋给赋给i*/。第28页,共46页,编辑于2022年,星期二(2)理解以下两赋值表达式的含义:)理解以下两赋值表达式的含义:y5;n5;xy;nn1;第29页,共46页,编辑于2022年,星期二2、复合赋值运算、复合赋值运算 算术复合赋值运算符算术复合赋值运算符:+=、=、*=、/=、%=位复合赋值运算符位复合赋值运算符:&=、|=、=、=、=一般形式一般形式:变量变量=表达式;表达式;等价于等价于:变量变量=变量变量表达式;表达式;代表任一双目算术运算符或位运算符。代表任一双目算术运算符或位运算符。复合赋值运算先进行所带运算复合赋值运算先进行所带运算,再进行赋值运算。再进行赋值运算。复合赋值运复合赋值运算的优先级同赋值运算。算的优先级同赋值运算。第30页,共46页,编辑于2022年,星期二例如:例如:(1)int a=3;a+=2;等价于等价于 a=a+2 (2)float x=1.2,y=2.1;y*=x+3.4;等价于等价于 y=y*(x+3.4)(3)int a=1,b=2;b/=a+=1;等价于等价于 b=b/(a=a+1)右结合右结合第31页,共46页,编辑于2022年,星期二关系运算符和关系表达式关系运算符和关系表达式一、关系运算符有:一、关系运算符有:、=、=、!=、=的优先级相同的优先级相同,=、!=的优先级相同,的优先级相同,前者的优先前者的优先级高于后者。级高于后者。二、关系表达式的运算结果是逻辑量二、关系表达式的运算结果是逻辑量 24+(53)c=78三、三、自左向右自左向右结合。结合。假设假设a5,b3,c2 表达式表达式abc的值为的值为0四、操作数也可以是字符型数据四、操作数也可以是字符型数据 如:如:af第32页,共46页,编辑于2022年,星期二 条件运算符和条件表达式条件运算符和条件表达式一、条件运算符的语法形式:一、条件运算符的语法形式:?:解释为:解释为:?:例如:例如:x=a b?a:cd?c:d 相当于相当于ab?a:(cd?c:d)第33页,共46页,编辑于2022年,星期二includemain()int x;scanf(%d,&x);x0?printf(%s,正数正数):printf(%s,负数负数);例例:判断整数的正负。判断整数的正负。第34页,共46页,编辑于2022年,星期二逗号运算符和逗号表达式逗号运算符和逗号表达式逗号运算的优先级最低逗号运算的优先级最低,结合结合自左向右自左向右。逗号表达式的更一般使用形式为逗号表达式的更一般使用形式为:表达式表达式 1,表达式表达式 2,表达式表达式 3,表达式表达式n;先计算表达式先计算表达式 1,再计算表达式再计算表达式 2,再计算表达式再计算表达式 3,再计算表达再计算表达式式n的值的值,并以此作为整个表达式的值。并以此作为整个表达式的值。如:表达式如:表达式x=a=3,6*x,6*a,a+x的值为的值为 6 。逗号运算又称顺序求值运算。逗号运算又称顺序求值运算。第35页,共46页,编辑于2022年,星期二main()int i,j,k;i=1,j=2,k=3;printf(“%d%d%dn”,i,j,k);main()int i,j,k;i=1;j=2;k=3;printf(“%d%d%dn”,i,j,k);并不是任何地方出现的逗号都是逗号运算符,并不是任何地方出现的逗号都是逗号运算符,例如:例如:printf(“%d%d%dn”,i,j,k);(是参数分隔符)是参数分隔符)第36页,共46页,编辑于2022年,星期二求字节数运算求字节数运算 运算符运算符:sizeof(数据类型标识符数据类型标识符)或或 sizeof(表达式表达式)求求字字节节数数运运算算是是单单目目运运算算,操操作作数数可可以以是是类类型型名名,也也可可以以是是变变量量、表表达达式式,用用以以求得相应类型或数据所占的字节数。求得相应类型或数据所占的字节数。此运算的优先级与取地址运算优先级相同。此运算的优先级与取地址运算优先级相同。例如:例如:sizeof(float)值为值为4,单精度类型占,单精度类型占4个字节个字节 sizeof(2*3)值为值为2,算术表达式,算术表达式2*3是是int型型第37页,共46页,编辑于2022年,星期二数据的类型转换数据的类型转换一、系统自动进行的类型转化一、系统自动进行的类型转化由系统自动完成类型转换由系统自动完成类型转换,转换的规则如下:转换的规则如下:int unsigned long double short,char float纵纵向向箭箭头头方方向向表表示示必必定定要要进进行行的的转转换换,short型型、char型型数数据据必必定定先先转转换换成成int型型,float型数据必定先转换成型数据必定先转换成double型型,再进行运算。再进行运算。横横向向箭箭头头方方向向表表示示运运算算对对象象为为不不同同类类型型时时的的转转换换方方向向。由由低低向向高高转转换换,int型型最低最低,double型最高。型最高。第38页,共46页,编辑于2022年,星期二二、赋值时的类型转换二、赋值时的类型转换 (1)将实型数据赋给整型变量时将实型数据赋给整型变量时,舍弃实数的小数部分。舍弃实数的小数部分。如:如:int i;i=1.23;/*结果结果i 的值为的值为1*/(2)将将整整型型数数据据赋赋给给单单、双双精精度度型型变变量量时时,数数值值大大小小不不变变,但但以以浮浮点点形形式式存存储储到到变变量中。量中。第39页,共46页,编辑于2022年,星期二三、强制类型转换三、强制类型转换强制类型转换通过类型转换运算进行。强制类型转换通过类型转换运算进行。格式格式:(类型名)(表达式)(类型名)(表达式)功能:功能:将表达式的类型强制转换成类型名指定的类型。将表达式的类型强制转换成类型名指定的类型。如如:float x=5.2,y=6.3;int z;z=(int)(x+y);(int)(x+y)将表达式将表达式x+y的值强制转换成整型的值强制转换成整型 强强制制类类型型转转换换在在将将高高类类型型转转换换为为低低类类型型时时,数数据据精精度度受受损损,是是一一种种不不安安全全的的转转换换。强强制制类类型型转转换换是是暂暂时时性性的的,一一次次性性的的,并并不不永永久久改改变变所所转转换表达式的类型。换表达式的类型。如如:int a=7;double b;b=(double)a+5;(double)a为双精度为双精度,a依然为整型量。依然为整型量。第40页,共46页,编辑于2022年,星期二表达式表达式一、一、C表达式:表达式:由运算符和由运算符和运算对象运算对象构成的式子。构成的式子。运算对象运算对象可以是常量、变量、函数或可以是常量、变量、函数或表达式表达式。二、二、表达式的表达式的书写原则书写原则 (1)C语言的表达式只能采用线性的形式书写。语言的表达式只能采用线性的形式书写。例如例如:应写成应写成1/3+i+j*j*j。应写成(应写成(a+b)/(c+d)*e+f。第41页,共46页,编辑于2022年,星期二(2)C语语言言的的表表达达式式只只能能使使用用C语语言言中中合合法法的的运运算算符符和和操操作作数数,对对有有些些操操作作必必须须调调用库函数用库函数完成完成,而且运算符不能省略。例如而且运算符不能省略。例如:r2应写成应写成3.14159*r*r。应写成应写成0.5*a*b*sin(a)。|xy|应写成应写成fabs(xy)。y+2X 应写成应写成y+pow(2,x)。第42页,共46页,编辑于2022年,星期二三、表达式的三、表达式的分类分类 C语语言言表表达达式式种种类类很很多多,有有多多种种分分类类方方法法。我我们们一一般般依依据据运运算算的的特征将表达式分为特征将表达式分为:算术表达式算术表达式,如如a+b*2.0-3.0/5.0。关关系系表表达达式式,如如x=y,关关系系表表达达式式可可以以认认为为是是逻逻辑辑表表达达式式的的特特殊殊情况。情况。逻辑表达式逻辑表达式,如(如(x=2)&(xb)?a:b。逗号表达式逗号表达式,如如a=2,b=a*a,c=sqrt(b)。)。第43页,共46页,编辑于2022年,星期二四、表达式值的四、表达式值的数据类型数据类型(1)每个表达式都有一个确定的值,因而有确定的数据类型。)每个表达式都有一个确定的值,因而有确定的数据类型。(2)表达式的分类和数据类型取决于最后执行的运算符,)表达式的分类和数据类型取决于最后执行的运算符,如:如:34.5+(76)为算术表达式,类型是为算术表达式,类型是double型,值型,值35.5 34.5+76 为关系表达式,类型是为关系表达式,类型是int型,值型,值1第44页,共46页,编辑于2022年,星期二作业作业n课本课本40页习题页习题n补充:课本补充:课本21页转义字符的使用及其含义。页转义字符的使用及其含义。第45页,共46页,编辑于2022年,星期二第46页,共46页,编辑于2022年,星期二