【教学课件】第三章-数据类型运算符与表达式.ppt

上传人:小飞机 文档编号:5660637 上传时间:2023-08-07 格式:PPT 页数:63 大小:771KB
返回 下载 相关 举报
【教学课件】第三章-数据类型运算符与表达式.ppt_第1页
第1页 / 共63页
【教学课件】第三章-数据类型运算符与表达式.ppt_第2页
第2页 / 共63页
【教学课件】第三章-数据类型运算符与表达式.ppt_第3页
第3页 / 共63页
【教学课件】第三章-数据类型运算符与表达式.ppt_第4页
第4页 / 共63页
【教学课件】第三章-数据类型运算符与表达式.ppt_第5页
第5页 / 共63页
点击查看更多>>
资源描述

《【教学课件】第三章-数据类型运算符与表达式.ppt》由会员分享,可在线阅读,更多相关《【教学课件】第三章-数据类型运算符与表达式.ppt(63页珍藏版)》请在三一办公上搜索。

1、1,第 三 章,数据类型、运算符与表达式,2,一、上机环境与步骤 Visual C+集成开发环境二、C的数据类型三、常量与变量四、基本数据类型五、运算符与表达式,主要内容,3,1、编辑方法一:先创建C源程序方法二:先创建空工程2、编译和链接编译|编译 Ctrl+F7编译|构件 F7 3、执行编译|执行 Ctrl+F5,一、上机环境与步骤 Visual C+集成开发环境,文件|新建,4,方法一:先创建C源程序,文件标签,文件类型,文件名,目录,5,方法二:先创建空工程步骤1,工程标签,工程类型,工程名,目录,6,方法二:先创建空工程步骤2,选择空工程,7,方法二:先创建空工程步骤3,文件标签,文

2、件类型,文件名,选中此项,8,3.1 C语言的数据类型,(一)什么是数据类型?(二)C语言的数据类型有哪些?,9,(一)什么是数据类型?,数据结构+算法=程序,C语言中以“数据类型”形式存在,对数据的描述,对操作的描述,10,在程序中对用到的所有数据都必须指定其数据类型.,?,不同类型的数据,所占内存的字节数不同,对应的操作也不相同。,(二)C的数据类型,11,(一)常量和符号常量(二)变 量,3.2常量与变量,12,概念,在程序运行过程中,其值不能被改变的量。,分类,字面常量(直接常量):12-44.6 a Hello!符号常量:用一个标识符代表一个常量。,字符串常量,符号常量的定义,格式:

3、#define 常量名 字面常量举例:#define PRICE 100#define PI 3.14#define C1 a,习惯上常量名用大写,变量名用小写。,意义,1、含义清楚。2、在需要改变一个常量时,能够做到“一改全改”。,符号常量的定义放在函数外面。,(一)常量,13,常量举例(求某商品总价),#include#define PRICE 100/定义符号常量void main()int sum;sum=PRICE*20;printf(%dn,sum);,单价符号常量,数量直接常量,14,概念,其值可以改变的量称为变量。,变量,要素,(1)变量名。每个变量都必须有一个名字变量名,变量

4、命名遵循标识符命名规则。(2)变量值。在程序运行过程中,变量值存储在内存中。在程序中,通过变量名来引用变量的值。,15,标识符identifier,1、标识符就是一个名字(如常量名、变量名、函数名),对数据对象命名的有效字符序列.2、组成:只能由字母、数字、下划线组成。且第一个字符必须为字母或下划线。3、长度:标识符的有效长度随系统而异,如果超长,则超长部分被舍弃。VC+6.0中规定最大长度为247个字符。建议变量名的长度不要超过8个字符4、标识符命名的良好习惯见名知意,例如,name(姓名)、age(年龄),16,下列标识符是否合法,为什么?sum a1 b2 s_name123#ss a.

5、b.c 1a8bc,思 考?,合法,不合法,17,变量定义,数据类型 变量名,变量名2;,习惯上,变量名用小写字母。常量名用大写字母。,18,方式:1、定义变量的同时赋初值(也叫变量初始化)。格式:数据类型 变量名=初值,变量名2=初值2;2、通过一个赋值语句给变量赋初值。格式:变量名=初值;,变量赋初值,出现在函数体的声明部分,出现在函数体的执行部分,int a,b=3;,int a,b;b=3;,19,1、程序中用到的变量必须“先定义(declare),后使用”。2、C语言的关键字不能用作变量名。3、C语言对英文字母的大小写敏感,即同一字母的大小写,被认为是两个不同的字符。4、定义变量时,

6、给几个变量赋相同的初值,应写成:int a=3,b=3,c=3;不能写成:int a=b=c=3;5、给变量赋值时,正常情况下应给变量赋相同类型的数据。若给变量赋与其类型不同的数据时,需进行类型转换。,关于变量以及变量赋初值的几点说明,20,变量举例,include void main()int student,age;int if=adrress=1;float score=90;stadent=2;Age=20.7;printf(%d%d%d%f,if,student,age,score);,本程序中有几处错误?,undeclared identifier,21,(一)整数类型(二)实数类

7、型(三)字符类型(四)不同类型数据间的转换,四、基本数据类型,22,表示方法,十进制:123,-456,0八进制:0123,-0456,十六进制:0 x123,-0 x456,以数字0开头,以0 x开头,整数类型常量,分类,基本整型(数据范围与int型一样)长整型(在数值后面加“L(l)”,数据范围与long int型一样),如123l,315L,类型匹配规则,一个整型常量,可以赋给能容纳下其值的整型变量,3.3 整型数据,23,整数类型变量,分类及取值范围,表示可以省略,各类型整型变量占用的内存字节数,随系统而异。,24,注意:常量无unsigned型。但一个非负整型常量,只要它的值不超过相

8、应变量的值域(即取值范围),也可以赋给unsigned型变量。,#include void main()long int c,d=9L;unsigned int e=-3,f;f=5;c=-6;printf(%ldn%ldn%un%u,c,d,e,f);,举例,-6942949672935,运行结果,25,整型数据在内存中是以补码表示的。(参见教材P41),整数类型存储方式,26,例如:求-10的补码表示(按16位存储)。,-10的原码,1 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0,除符号位外各位取反,1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1,末位加1,

9、1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0,则得到-10的二进制补码的表示。,27,如果不指定unsigned或指定signed,则存储单元中最高位代表符号(0为正,1为负)。如果指定unsigned,为无符号型,存储单元中全部二进位(bit)用作存放数本身,而不包括符号。,int a;unsigned int b;,28,一个整数(以13为例)在存储单元中的存储情况,29,例3.2整型变量的定义与使用。main()int a,b,c,d;/*指定a、b、c、d为整型变量*/unsigned u;/*指定u为无符号整型变量*/a=12;b=-24;u=10;c=a+u;d=

10、b+u;printf(a+u=%d,b+u=%dn,c,d);,运行结果为a+u=22,b+u=-14,30,4.整数类型溢出举例(P44-例3.3),#include void main()int a,b;a=32767;b=a+1;printf(%dn%d,a,b);,32787-32768,运行结果,改为2147483647,21474836472147483648,运行结果,31,32,表示方法,十进制小数形式:123.34,-0.0045,0.0指数形式:E(e)如0.23e2,-0.45e-3,3.0+5,规范化指数形式,数字和小数点组成,浮点类型常量,关于分类,实型常量不分flo

11、at型和double型。一个实型常量,可以赋给一个实型变量(float型或double型)。,3.4 浮点型(实型)数据,规范化的指数形式:小数部分只能有一位非零整数,如1.23e4,33,指数形式(数符+小数部分+指数部分),小数部分占的位数越多,数的有效数字越多,精度越高.指数部分占的位数越多,表示的数值范围越大.,实数类型存储方式,浮点型数据在内存中是按指数形式存储的。(P46),规范化指数形式:小数部分采用纯小数形式,且最高位不为0。,举例:3.14159在内存中的存放形式为:,34,分类及取值范围,浮点类型变量,2.实型变量的分类 C实型变量分为单精度(float型)、双精度(dou

12、ble型)和长双精度型(long double)三类。,35,3.实型数据的舍入误差 由于实型变量是由有限的存储单元组成的,因此能提供的有效数字总是有限的,在有效位以外的数字将被舍去。由此可能会产生一些误差。,main()float a,b;a=123456,789e5;b=a+20;printf(%f,b);,a和b的值是,36,表示方法,用单引号括起来的一个字符.a A 9=?,不同的两个字符,转义字符,(三)字符类型常量,语言还允许使用一种特殊形式的字符常量,就是以反斜杠 开头的转义字符。,将后面的字符转换为另外的意义.即是一种控制符号.,3.5 字符型数据,37,举例,#include

13、 void main()printf(abcbdnxyz);printf(rlmntopqn);,abdlmn opq,实际中,不会这样使用!,#include void main()printf(x4Fx4Bx21n);/*等价于printf(OK!n);*/printf(x15 xABn);,!,结果:,结果:,38,字符类型变量,存储方式,以ASCII码存储,占一个字节(参见教材P50),类型及范围,char 大小写英文字母,数字,运算符,标点符号等,注意:字符型数据与整型数据在存储方式上的相似性使得两者之间可以通用。但字符型数据的表示范围是:0255。,举例,字符变量ch中存放字符a,

14、其ASCII码为97,在内存中以二进制形式存放,其格式如下:,0 1 1 0 0 0 0 1,ch,39,例 字符变量的字符形式输出和整数形式输出。#include void main()char ch1,ch2;ch1=a;ch2=b;printf(ch1=%c,ch2=%cn,ch1,ch2);printf(ch1=%d,ch2=%dn,ch1,ch2);,字符类型举例1,一个字符型数据,既可以字符形式输出,也可以整数形式输出,ch1=a,ch2=bch1=97,ch2=98,程序运行结果:,40,字符类型举例2,允许对字符数据进行算术运算,此时就是对它们的ASCII码值进行算术运算,例字

15、符数据的算术运算(参考教材P374的ASCII码表)。#include void main()char ch1,ch2;ch1=a;ch2=B;/*字母的大小写转换*/printf(ch1=%c,ch2=%cn,ch1-32,ch2+32);/*用字符形式输出一个大于256的数值*/printf(ch1+200=%dn,ch1+200);printf(ch1+200=%cn,ch1+200);printf(ch1+256=%dn,ch1+256);printf(ch1+256=%cn,ch1+256);,ch1=A,ch2=bch1+200=297ch1+200=)ch1+256=353ch1

16、+256=a,程序运行结果:,41,概念,字符串常量,用一对双引号 括起来的若干字符序列,字符串长度,字符串中字符的个数。长度为0的字符串(即一个字符都没有的字符串)称为空串,表示为(一对紧连的双引号)。,存储方式,C语言规定:在存储字符串常量时,由系统在字符串的末尾自动加一个0作为字符串的结束标志。,“how do you do.”,“CHINA,a,123.45,42,思考?,1、字符串常量How do you do.和Good morning.的长度分别是多少?,2、字符串C:msdosv6.22和I say:Goodbye!在C语言中的字符串常量形式如何表示?,3、字符串CHINA在内

17、存中的实际存储形式是怎样的?占用多少个字节的内存空间?,14和13,C:msdosv6.22和I say:Goodbye!,占用字节而非字节内存空间,43,注意:1、a是字符,a是字符串。2、不能把一个字符串赋给一个字符变 量。如c=a、c=Hello!都是错误的。3、C语言中没有字符串变量,可以用字符数组来表示。,?,请看教材52页,44,总结:字符与字符串的区别有哪些?,定界符不同:字符常量使用单引号,而字符串常量使用双引号;长度不同:字符常量的长度固定为1,而字符串常量的长度,可以是0,也可以是某个整数;存储要求不同:字符常量存储的是字符的ASCII码值,而字符串常量,除了要存储有效的字

18、符外,还要存储一个结束标志0。,45,不同类型数据间的转换,(一)隐式转换(自动转换)(二)显式转换(强制转换),3.7 各类数值型数据间的混合运算,46,(一)隐式转换(自动转换),转换发生条件,运算转换-不同类型数据混合运算时赋值转换-把一个值赋给与其类型不同的 变量时输出转换-输出时转换成指定的输出格式函数调用转换-实参与形参类型不一致时 转换,先转换、后运算,47,转换规则,详见教材54页,1、纵向向上的箭头表示不同类型的 转换方向(由低类型转化为高类 型),不表示转换所经的步骤。2、横向向左的箭头表示必须的转换。,隐式转换(自动转换),48,int i;float f;double

19、d;long e;i=2;f=2.5;d=3.9;e=3;,10+a+i*f-d/e,int,double,double,double,double,思考:根据已知变量定义及赋值语句,计算以下表达式的值,并说明每一步所得结果的数据类型。,49,(二)显式转换(强制转换),一般形式,(要转换成的数据类型)(被转换的表达式)注:当被转换的表达式是一个简单表达式时,外面的一对圆括号可以缺省。,举例,float x,y;x=2.3;y=4.5;(int)(x+y)/6(int)(int)x+y/6.5(double),说明,强制转换得到的是所需类型的中间变量,原变量或表达式的类型不变。,50,#inc

20、lude void main()float x;int i;x=3.6;i=(int)x;printf(x=%f,i=%d,x,i);,思考:以下程序的输出结果是什么?,x=3.600000,i=3,程序运行结果:,结论:较高类型向较低类型转换时可能发生精度损失问题,51,举例:已知三角形的边长a、b、c,求三角形周长的一半。,#include void main()float a,b,c,s;a=3;b=4;c=5;s=1/2*(a+b+c);printf(s=%8.2f,s);,s=0.00,程序运行结果:,?,s=6.00,程序运行结果:,改为:1.0/2(1/2.0)或(float)1

21、/2(1/(float)2),52,(一)C运算符简介(二)算术运算符和算术表达式(三)赋值运算符和赋值表达式(四)逗号运算符和逗号表达式,3.8 运算符与表达式,53,(一)、C运算符简介,详见55页!,54,(二)、算术运算符和算术表达式,基本算术运算符,+-*/%,说明,例:5/3=1-5/3=-1,模运算符或求余运算符,算术表达式,用算术运算符和括号将运算对象(也称操作数)连接起来的、符合C语法规则的式子。,优先级和结合性,先乘除、后加减,有括号先算括号。自左至右,常量、变量、函数等,说明,如果一个运算符两侧的数据类型不同,先自动进行类型转换,使二者具有同一类型,然后进行运算。,两个整

22、数相除的结果为整数,舍去小数部分。当商为负数时,多采用“向零取整”的方法。,求余运算的两侧均应为整数 例:5%3=2,例:a*b/c-1.5+a,55,自增、自减运算符,作用:自增运算符()使单个变量的值增1;自减运算符()使单个变量的值减1。,例,i=3;A)j=+i;j=i+;j=-i+;,i=i+1,i=i-1,?j,i,A)j=4 i=4j=3 i=4j=-3 i=4,格式:前置:+i,-i(在使用i之前,使i的值加(减)1)后置:i+,i-(在使用i之后,使i的值加(减)1),+和-结合方向是“自右至左”,56,例,i=3;A)c=(i+)+(i+);B)a=i+;b=i+;c=a+

23、b;,?c,i,A)c=6 i=5B)c=7 i=5,两处i值都为3,例,?i,j,i=4 j=4表达式的值:7,自左而右组合,例,i=3;printf(“%d,%d”,i,i+),?,4,3,函数参数自右至左求值,57,(1)自增、自减运算是语言特有的,常用于循环语句中,使循环控 制变量加(或减),以及指针变量中,使指针指向下(或上)一个地址。(2)自增、自减运算符,不能用于常量和表达式。例如,5+、-(a+b)等都是非法的。(3)+和-的结合方向为自右至左。(P57)(4)如果对一个变量的自增自减运算,单独构成语句,而不是作为表达式的一部分时,前置和后置运算效果一样,都是使变量自加。如i+

24、;和+i;是一样的,都是使i加。(5)在表达式中,连续使用同一变量进行自增或自减运算时,很容易出错,所以最好避免这种用法。,说明,58,3.9赋值运算符和赋值表达式,1赋值运算符,简单赋值运算符:=复合赋值运算符:+=,-=,*=,/=,%=,简单赋值运算符的一般形式为:变量=表达式它的作用是将一个表达式的值赋给一个变量。,不同类型的整型数据间的赋值归根到底就是一条:按存储单元中的存储形式直接传送。,思考题:假设变量num的数据类型为float,其值为2.5,则执行“num=(int)num”后,num的值等于多少?,59,复合赋值运算的一般格式为:变量 双目运算符=表达式 复合赋值运算符 它

25、等价于:变量=变量 双目运算符(表达式)。只有当表达式简化为一个变量或一个常数时,两边的括号可以省略。,C语言规定的10种复合赋值运算符如下:+=,-=,*=,/=,%=;/*复合算术运算符(5个)*/&=,=,|=,=;/*复合位运算符(5个)*/,例如,x+=3/*等价于x=x+3*/y*=x+6/*等价于y=y*(x+6),而不是y=y*x+6*/,2.复合的赋值运算符,60,例1,float a;int b;a=1.2;b=a*3;,?b,b=3,例2,a+=3;x*=y+8,a=a+3;x=x*(y+8),例3,a=b=5;a=7+(b=8),?a,b,a=5;b=5a=15;b=8

26、,自右而左的结合性,3赋值表达式,格式:赋值表达式的值:被赋变量的值 如:a=3*5,类型转换,转换条件:当赋值运算符两侧的数据类型不一致时转换原则:转换为被赋值变量的类型。具体见P59。,61,3.10逗号运算符和逗号表达式,逗号运算符,,,逗号表达式,表达式1,表达式2,表达式n,说明,1、逗号表达式的求解过程为自左至右,依次计算各表达式的值,最后一个表达式的值即为整个逗号表达式的值;2、逗号运算符的优先级最低。3、使用逗号表达式的目的通常是想分别得到各个表达式 的值,而并非一定要得到整个表达式的值。4、常用于for循环语句中,除此以外很少使用。,62,例1,a=3a=(3*5,a*4),?a,a=12,例2,a=3a=3*5,a*4,?a,a=15表达式的值为60,例3,(a=3*5,a*4),a+5,?a,a=15表达式的值为20,63,作 业,P36:2.4(4)分别用流程图、N-S和伪代码表示P66:3.6,3.8,3.9,3.10,3.12,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号