《第3章数据类型、运算符.ppt》由会员分享,可在线阅读,更多相关《第3章数据类型、运算符.ppt(66页珍藏版)》请在三一办公上搜索。
1、第三章 数据类型、运算符与表达式,学习目标了解c语言的数据类型理解常量与变量掌握几种基本的数据类型:整型、浮点型、字符型掌握不同类型数据间的混合运算掌握算术、赋值、逗号运算符,难点符号常量变量命名字符常量与字符串常量自增、自减运算符逗号运算符,3.1 C语言的数据类型,算法处理的对象是数据,而数据是以某种特定的形式存在的,不同的数据之间往往还存在某些联系。数据结构指数据的组织形式。不同的计算机语言所允许定义和使用的数据结构是不同的。处理同一类问题,如果数据结构不同,算法也会不同。在考虑算法时,必须注意数据结构。,3.1 C语言的数据类型,3.2 常量与变量,3.2.1 常量和符号常量常量:在程
2、序运行过程中,其值不能被改变的量。常量类型字面常量(直接常量):从字面形式即可判别-1,0,1,2 整型常量1.1,-1.1,4.6 实型常量a,d 字符型常量,3.2.1 常量和符号常量,符号常量:用一个标识符代表一个常量。格式:#define 常量名 字面常量#define PRICE 30#define PI 3.1415926,3.2.1 常量和符号常量,例:从键盘输入圆的半径,计算并输出圆面积与周长。,#include#define PI 3.14void main()float r=0,s=0,c=0;scanf(%f,3.2.1 常量和符号常量,使用符号常量的好处:含义清楚一改全
3、改注意:作为常量,符号常量的值在其作用域内不能改变,也不能再被赋值。习惯上,符号常量名用大写。,3.2.2 变量,变量:程序运行期间值可以改变的量。变量在内存中占据一定的存储单元,在存储单元中存放变量的值。一个变量有一个变量名。注意变量名和变量值的区别:变量名是一个符号地址,在程序编译时由系统给每个变量名分配一个内存地址。在程序中从变量中取值,实际上是通过变量名找到相应的内存地址,从其存储单元中读取数据。,3.2.2 变量,标识符:用来标识变量、符号常量、函数、数组、类型等数据对象的有效字符序列。简单的说,标识符就是一个名字。C语言规定:标识符只能由字母、数字或下划线组成,且第一个字符必须为字
4、母或下划线。正确:zzia,zzia123,_zzia,zzia_123错误:*zzia*,123zzia123,zzia-123,3.2.2 变量,注意:C语言区分大小写,大写字母和小写字母被认为是两个不同的字符。Zzia与zzia是不同的标示符变量名不能与关键字相同。一般变量名用小写字母表示。不同系统对标识符的长度规定不同。假如长度超出规定长度,超出部分将不被识别。student_name与student_number标识符的命名应做到见名知意。,3.2.2 变量,变量必须先定义,后使用。目的:保证程序中变量名使用正确;为变量指定类型,在编译时系统为其分配相应的存储单元;编译时,可以对变量
5、将进行的运算进行合法性检查。,3.3 整型数据,3.3.1整型常量的表示方法整型常量即整常数。C语言中整常数可以用以下三种形式表示:十进制整数八进制整数:以数字0开头012,相当于十进制数10十六进制整数:以0 x开头-0 x12,相当于十进制数-18,3.3.2 整型变量,1.整型数据在内存中的存放形式整型数据在内存中是以二进制形式存放的。整型变量在内存中占2个字节(基本整型)。int i;i=3;注意:不同的编译系统为整型数据分配的字节数是不同的。Visual C+6.0分配4个字节,3.3.2 整型变量,数值是以补码表示的。正数的补码和其原码形式相同。10的补码0000000000001
6、010求负数的补码:将该数的绝对值的二进制形式按位取反再加1。求-10的补码:绝对值:10二进制:0000000000001010取 反:1111111111110101加 1:1111111111110110,3.3.2 整型变量,整数的存储单元中,最左面一位表示符号,如果为0,表示数值为正,如果位1,表示数值为负。整型变量的取值范围?-3276832767,即-215(215-1),3.3.2 整型变量,2.整型变量的分类基本类型符为int。根据数值的范围可分为基本整型、短整型和长整型。基本整型,int短整型,short int或short长整型,long int或long,3.3.2 整
7、型变量,2.整型变量的分类在实际应用中,变量的值常常是正的。为了充分利用变量的表数范围,可将变量定义为无符号类型。对以上三种类型都可以加上unsigned,指定为无符号数。这样存储单元中所有的二进制位都用作存放数本身,不包括符号。int a;unsigned in b;a的数值范围为-3276832767,b的数值范围为065535。,3.3.2 整型变量,2.整型变量的分类C语言并没有规定各类数据所占内存的字节数,只要求long型数据长度不短于int型,short型不长于int型。具体由编译系统决定。,3.3.2 整型变量,3.整型变量的定义对变量的定义,通常放在函数开头部分的声明部分。,例
8、3.2#include stdio.hvoid main()int a,b,c,d;unsigned u;a=12;b=-24;u=10;c=a+u;d=b+u;printf(%d,%dn,c,d);,3.3.2 整型变量,4.整型数据的溢出,#includevoid main()int a,b;a=32767;b=a+1;printf(“%d,%d”,a,b);输出:32767,-32768,3.3.3 整型常量的类型,1.值在-3276832767之间的,认为是int型,可以赋给int型和long int型变量。2.值超出上述范围,认为是长整型,可以赋给long int型变量。3.如果sh
9、ort和int在内存中长度相同,int型常量也可以赋给short int型变量。,3.3.3 整型常量的类型,4.一个整型常量后面加一个字母u或U,认为是unsigned int型。5.一个整型常量后面加一个字母l或L,认为是long int型。,3.4浮点型数据,3.4.1浮点型常量的表示方法浮点数即实数,有两种表示形式:十进制小数形式指数形式,3.4.1浮点型常量的表示方法,2.指数形式如123.456可表示为1.23456e2(规范化的指数形式),12.3456E1,0.123456e3注意:e(E)之前必须有数字且e(E)后面必须为整数一个浮点数在用指数形式输出时,是按规范化的指数形式
10、输出的。,3.4.2 浮点型变量,1.浮点型变量在内存中的存放形式一个浮点型数据在内存中占4个字节(单精度浮点型),按指数形式存储。系统把浮点型数据分成小数和整数两部分,分别存放。,3.4.2 浮点型变量,2.浮点型变量的分类单精度,float双精度,double长双精度,long double,3.4.2 浮点型变量,3.浮点型数据的舍入误差浮点型变量的有效数字位数有限。,#include void main()float a,b;a=123456.789e5;b=a+20;printf(%fn,b);,3.4.3 浮点型常量的类型,C编译系统将浮点型常量作为双精度来处理。计算:f=2.45
11、6789*4523.65系统将2.456789和4523.65按双精度数据存储并计算,得到双精度结果,然后取前7位赋给f。如果在数字的后面加字母f或F,如1.65f,系统会按单精度处理。一个浮点型常量可以赋给一个float型、double型和long double变量,系统根据变量的类型截取相应有效长度。,3.5 字符型数据,3.5.1字符常量用单撇号括起来的一个字符。如a、b、A。注意:a和A是不同的字符常量。转义字符:以开头的字符常量。注意表3-3:n,”,ddd,xhh 104表示什么?x44表示什么?,3.5.2 字符变量,字符变量:用于存放字符常量,只能存放一个字符,在内存中占1个字
12、节。字符变量的定义格式:char 变量名 char c1,c2;字符变量的赋值 c1=a;c2=n;,3.5.3 字符数据在内存中的存储形式及使用方法,将一个字符常量放到一个字符变量中,实际上是把该字符的ASC代码放到存储单元中。由于字符数据的存储形式与整数相同,所以字符数据和整型数据之间可以通用。一个字符数据可以以字符形式输出,也可以以整数形式输出,也可以对字符数据进行算术运算。,#include void main()char c1,c2;c1=97;/*相当于c1=a;*/c2=98;/*相当于c2=b;*/printf(%c%dn,c1,c1);printf(%c%dn,c2,c2);
13、,注意:字符数据只能存放0-255内的整数。,#include void main()char c1,c2;c1=a+3;c2=a+8-5;printf(%c%dn,c1,c1);printf(%c%dn,c2,c2);,c1的值是什么?,例3.7#include void main()char c1,c2;c1=a;c2=b;c1=c1-32;c2=c2-32;printf(%c%cn,c1,c2);,ASCII码表中,小写字母比对应的大写字母的值大32。,3.5.4 字符串常量,字符串常量:用一对双撇号扩起来的字符序列。“how are you”,“fine,thank you”可以输出字
14、符串。printf(“how are you”);,3.5.4 字符串常量,不要将字符常量与字符串常量混淆。字符串结尾有一个字符串结束标志0,这是由系统自动加上的。“china”在内存中占6个字节。”a”占几个字节?a占几个字节?C语言中没有字符串变量,如果想把字符串常量存放在变量中,需要使用字符数组。,3.6 变量赋初值,程序中常需要对一些变量预先设置初值,称作变量初始化。C语言允许在定义变量的同时对变量初始化。int a=3;float f=3.56;char c=a;int a,b,c=5;int a=3,b=3,c=3;初始化不是在编译阶段完成的,而是在程序运行时执行该函数时进行的。i
15、nt a=3;相当于:int a;a=3;,3.7各类数值型数据间的混合运算,整型、浮点型、字符型数据间可以进行混合运算。运算时,不同类型的数据要先转换成同一类型,这由系统自动完成。转换方向:图3-10int i;float f;double d;long e;计算:10+a+i*f-d/e结果为double型。运算中,如果有一个数为实数,则结果为double型。(为什么?),3.8 算术运算符和算术表达式,3.8.1C运算符简介C语言的运算符类型较多,3.8.2 算术运算符和算术表达式,1.基本的算术运算符+、-、*、/、%两个整数相除的结果为整数。多数机器采取向零取整的方法。5/3=1,-
16、5/3=-1%两侧均应为整型数据。7%4=3,#include void main()int i;float s=0;for(i=1;i100;i+)s=s+1/i;printf(%fn,s);运算结果是什么?,3.8.2算术运算符和算术表达式,2.算术表达式和运算符的优先级与结合性算术表达式:用算术运算符和括号将运算对象连接起来的、符合C语法规则的式子。运算对象包括常量、变量、函数等。C语言规定了运算符的优先级和结合性。在表达式求值时,先按运算符的优先级高低次序执行,然后按规定的“结合方向”处理。运算符的结合方向:左结合、右结合,3.8.2算术运算符和算术表达式,3.强制类型转换运算符可以用
17、强制类型转换运算符将一个表达式转换成所需类型。一般形式为:(类型名)(表达式)(double)a(int)(x+y)(float)(5%3)注意:表达式应该用括号括起来。(int)(x+y)与(int)x+y不同,3.8.2算术运算符和算术表达式,在强制类型转换时,得到一个所需类型的中间变量,原来变量的类型未发生变化。,#include void main()float x;int i;x=3.6;i=(int)x;printf(x=%f,i=%dn,x,i);,3.8.2算术运算符和算术表达式,数据类型转换有两种:系统自动进行的类型转换。强制类型转换。,3.8.2 算术运算符和算术表达式,4
18、.自增、自减运算符作用:使变量的值加1或减1。+i,-i:在使用i之前,先使i的值加1或减1i+,i-:在使用i之后,使i的值加1或减/1,#include void main()int a=1,b=1,c,d;c=+a;d=b+;printf(a=%d,b=%d,c=%d,d=%dn,a,b,c,d);,3.8.2 算术运算符和算术表达式,注意:自增运算符和自减运算符只能用于变量,不能用于常量或表达式。自增运算符和自减运算符的结合方向是自右向左。自增运算符和自减运算符常用于循环语句。,3.8.2 算术运算符和算术表达式,负号运算符:优先级略低于自增、自减运算符,结合性自由向左-d+相当于-(
19、d+)int d=1;printf(“%dn”,-d+);/*输出:-1*/printf(“%d”,d);/*输出:2*/,3.9 赋值运算符和赋值表达式,1.赋值运算符(=):把一个数据赋给一个变量。2.类型转换:如果运算符两侧数据类型不一致,在赋值时自动进行类型转换。,3.9 赋值运算符和赋值表达式,2.类型转换:将浮点型数据赋给整型变量时,将舍弃小数部分。,#include void main()int a=12.89;printf(%dn,a);,3.9 赋值运算符和赋值表达式,2.类型转换:将整型数据赋给浮点型变量时,数值不变,但以浮点数形式存储到变量中。,#include void
20、 main()float a=12;printf(%fn,a);,3.9 赋值运算符和赋值表达式,2.类型转换:将字符型数据赋给整型变量时,将字符数据放到整型变量的低8位中。,3.9 赋值运算符和赋值表达式,2.类型转换:将一个double型数据赋给float变量时,截取其前面7位有效数字。,#include void main()float a=123456789.89;printf(%fn,a);,3.9 赋值运算符和赋值表达式,2.类型转换:将一个整型数据赋给一个char型变量,只将其低8位存放到char型变量中。,#include void main()char a=256;print
21、f(%dn,a);,3.9 赋值运算符和赋值表达式,3.复合的赋值运算符在=前加上其它运算符,构成复合的运算符。a+=b 等价于 a=a+bx*=y+8 等价于 x=x*(y+8)C语言采用复合运算符的目的:简化程序提高编译效率,3.9 赋值运算符和赋值表达式,4.赋值表达式赋值表达式:由赋值运算符将一个变量和一个表达式连接起来的式子。一般形式:a=2*3赋值表达式的求解过程:先求赋值运算符右侧“表达式”的值,然后赋给左侧的“变量”。,3.9 赋值运算符和赋值表达式,4.赋值表达式赋值表达式左侧的标识符称为左值。赋值表达式右侧的表达式称为右值。凡是左值都可以作为右值int a=3,b,c;b=
22、a;c=b;,3.9 赋值运算符和赋值表达式,4.赋值表达式赋值表达式中的“表达式”又可以是一个赋值表达式。a=(b=5)赋值运算符的结合顺序:自右向左。a=b=c=5a=5+(c=6)a=(b=4)+(c=6)a=(b=10)/(c=2),3.9 赋值运算符和赋值表达式,4.赋值表达式赋值表达式可以包含复合的赋值运算符。a=3;a+=a-=a*a;a为-12赋值表达式可以出现在赋值语句中,也可以出现在其它语句中,如输出语句、循环语句等。printf(“%d”,a=b);,3.10 逗号运算符和逗号表达式,逗号运算符:用于将两个表达式连接起来。一般形式:表达式1,表达式2求解过程:先求表达式1
23、,后求表达式2,整个逗号表达式的值是表达式2的值。在所有的运算符中,逗号运算符的优先级最低。,3.10 逗号运算符和逗号表达式,a=3*5,a*4 a=15,表达式的值为60(a=3*5,a*4),a+5 a=15,表达式的值为20 x=(a=3,6*3)x值为18,表达式的值为18x=a=3,6*3 x值为3,表达式的值为18,3.10 逗号运算符和逗号表达式,使用逗号表达式的目的通常是为了得到各个表达式的值,而并非要得到整个逗号表达式的值。逗号表达式常用于循环语句。注意:并不是任何地方出现的逗号都是逗号运算符。printf(“%d,%d,%d”,a,b,c);,作业,书面作业(下一周第一次上课交)3.2,3.5,3.9,3.10,3.12自主上机(发到邮箱)3.7,3.8,3.10,