《第2章简单的数据类型、运算符及表达式(精品).ppt》由会员分享,可在线阅读,更多相关《第2章简单的数据类型、运算符及表达式(精品).ppt(32页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第2章 简单的数据类型、运算符及表达式 2.1 常量和变量 2.2基本数据类型 2.3 运算符及表达式 2.4 类型转换2.1 常量和变量 q标识符标识符 v字符集 C语言的字符集是指C程序中允许出现的字符,分为:英文字母(大、小写):A,B,C,Z;a,b,c,z 数字:0,1,2,9 特殊字符:,,*,/,_,(,),!,$,&,.,“,?,|以及空格等 转义字符:n,t,v,b,r,f,a,“,ddd,xhh等 2.1 常量和变量v标识符 C语言中各种对象的名字用标识符表示。所谓标识符就是由字母(a-z,A-Z)、数字(0-9)和下划线(_)组成,并且第一个字符必须为字母或下划线开头的一
2、系列字符。标识符是表示符号常量名、变量名、函数名、类型名、文件名等的字符序列。例如,合法的标识符和变量名:data1,Day,x,program_1,aver,sum 非法的标识符和变量名:J.Agate,$50,ab,3x 在C语言中,大写字母和小写字母的含义是不同的 2.1 常量和变量q标识符的分类标识符的分类 v关键字 关键字,又称保留字,是C语言中一类特殊的标识符。它们是C语言规定的具有特定含义的标识符。每个关键字有固定的含义,用户不能改变关键字的用途。v预定义标识符 预定义标识符也具有特定含义,但是C语言允许用户将这类标识符另作它用,改变其原有意义。为了避免误解,建议用户不要将预定义
3、标识符挪作他用。v用户标识符 用户自定义标识符是用户根据自己的需要而定义的标识符。为提高程序的可读性,建议用户使用有意义的名字来定义标识符。用户标识符不能与关键字同名。2.1 常量和变量q常量常量v数值型常量 整型常量整型常量就是整常数,程序中可以使用的整型常量有三种形式:o十进制整数o八进制整数八进制整数以0开头,每个数字位可以是07。o十六进制整数十六进制整数以0 x开头,其每个数字位可以是09、AF。2.1 常量和变量浮点型常量又称实型常量,语言中使用的实型常量有两种形式:o十进制小数形式 o指数形式 指数形式的格式为:尾数部分尾数部分E E(或或e e)指数部分指数部分 其中,尾数部分
4、的表示如同十进制小数,指数部分只能为整数,尾数部分和指数部分都可以带符号。2.1 常量和变量v字符常量 普通字符普通字符是由一对单引号括起来的一个单一字符。如X,A,U,*,$,3等 转义字符 转义字符是一种特殊的字符常量。转义字符以反斜线“”开头,后跟一个或几个字符。转义字符主要用来表示那些用一般字符不便于表示的控制代码。字符常量都在内存中占用一个字节,用来存放该字符所对应的ASCII码。2.1 常量和变量v字符串常量字符串常量是用双引号括起来的字符序列。如:“Hello,World!”,“How are you?”等是合法的字符串常量。C语言规定字符串的存储方式为:串中的每个字符按照它们的
5、ASCII码值的二进制形式存储在内存中,并在存放串中最后一个字符的位置后面再存入一个字符0。字符0是字符串结束的标志。2.1 常量和变量v符号常量 在C程序中,以上常量不需要定义就可以直接使用。但有时为了使得程序的可读性好,及提高程序的易修改性,在C程序中还经常使用“符号常量”。符号常量一般用大写英文字母表示,其定义的一般形式为:#define define 符号常量符号常量 常量常量符号常量一经定义,以后在程序中所有出现该标识符的地方均代之以该常量值。符号常量的定义在函数体外。2.1 常量和变量#define PI 3.14 main()float length,area,radius;/*
6、length表示周长,area表示面积,radius表示半径*/printf(nInput the radius:);scanf(%f,&radius);/*输入圆的半径*/length=2*PI*radius;/*计算圆的周长*/area=PI*radius*radius;/*计算圆的面积*/printf(n The length is:%f,length);/*输出圆的周长*/printf(n The area is:%f,area);/*输出圆的面积*/程序的运行情况为:Input the radius:2.8 length is:17.584000 area is:24.6175992
7、.1 常量和变量q变量变量v什么是变量 变量是指在程序运行过程中,其值可以被改变的量。习惯上,用小写字母来表示变量名。v变量的声明 类型标识符类型标识符 变量名表;变量名表;数据类型名是C语言的关键字,且必须是C语言的有效数据类型;变量名表可以包含若干个变量,每个变量之间用逗号分隔,最后一个变量之后以分号结束。例如:int x,y,z;float m,n;v变量的值变量名表示存储单元的值C语言允许在变量声明的同时为其赋初值(变量初始化)。例如:int i=1,sum=0;float x1=3.14;2.2基本数据类型 数据类型基本类型构造类型指针类型空类型整型实型字符型数组类型结 构 体 类型
8、共 用 体 类型枚举类型 C语言的数据类型双精度型单精度型2.2基本数据类型 q整型整型v整型数据的取值范围是整数集的一个有限子集 v整型变量的声明形式如下:int int 变量名变量名11,变量名,变量名2 2,变量名变量名nn;例如:int i,j,k;v限定词:short(短),long(长),unsigned(无符号)。其中“short”和“long”的引入是为了满足实际要求的不同长度的整数,而“unsigned”用来限定整数是无符号的。例如,int x,y;/*定义x,y为基本整型变量*/short int a;/*定义a为短整型变量*/long int b;/*定义b为长整型变量*
9、/unsigned int z;/*定义z为无符号整型变量*/sigined int sum;/*定义sum为带符号整型变量*/2.2基本数据类型v整型常量赋给整型变量应遵循如下约定:一个整型常量只可以赋给能容纳下其值的整型变量。常量无unsigned型,但一个非负的整数,只要它的值不超过相应变量的取值范围,就可以赋给unsigned型变量。q实型实型 v实数类型,又称作浮点数据类型。分为单精度实型(float型)和双精度实型(double型)类型。v实型变量的声明形式如下:float float 变量名变量名11,变量名,变量名2 2,变量名变量名nn;或 double double 变量名
10、变量名11,变量名,变量名2 2,变量名变量名nn;例如:float pi=3.14;double f1,f2;v实型常量赋值给实型变量时,只根据实型变量表示的有效数字的位数,在实型常量中按从左向右的方向截取数据。vfloat型的变量只能保存七位有效数字,double型的变量只能保存1516位的有效数字。2.2基本数据类型 q字符型字符型 v字符变量是用来存放字符常量的,一个字符变量中只能存放一个字符。v字符型变量在内存中是以字符的ASCII码形式来存放的,字符变量在内存中占一个字节。v字符类型的标识符是char,字符型变量的说明格式:char 变量名1,变量名2,变量名n;例如:char s
11、ex;/*说明sex为字符型变量*/char ch=w;/*说明ch为字符型变量,并赋初值为小写字母“w”*/v字符型数据和整型数据可以通用 2.2基本数据类型【例2.3】编程序实现大写字母与小写字母之间的相互转换。main()char ch1,ch2;ch1=x;ch2=A;ch1=ch132;ch2=ch2+32;printf(n%cn%c,ch1,ch2);程序的输出结果是:X a2.3 运算符及表达式 运算是对数据进行加工的过程,用来表示各种不同运算的符号称为运算符。q算术运算算术运算 v算术运算符 2.3 运算符及表达式v算术表达式的书写特点 C表达式中的乘号不能省略。例如:数学式b
12、2-4ac 相应的C表达式应写成:b*b-4*a*cC表达式中只能使用系统允许的标识符。例如:数学式r2 相应的C表达式应写成:3.14159*r*r C表达式中的内容必须书写在同一行,不允许有分子分母形式,必要时要利用圆括号保证运算的顺序。例如:数学式 相应的C表达式应写成:(a+b)/(c+d)C表达式不允许使用方括号和花括号,只能使用圆括号来帮助限定运算顺序。可以使用多层圆括号,但左右括号必须配对,运算时从内层圆括号开始,由内向外依次计算表达式的值。2.3 运算符及表达式v算术运算符的优先级、结合性 算术运算符的优先级和结合性 运算种类结 合 性优先级+,(单目)右结合性高低*,/,%左
13、结合性+,(双目)左结合性2.3 运算符及表达式q赋值运算赋值运算 v基本赋值运算符 在C语言中,“=”称为赋值运算符,其使用形式为:变量名变量名 表达式表达式赋值运算的含义是:将赋值运算符右边表达式的值存放到以左边变量名所代表的存储单元中。v复合赋值运算符一般形式为:变量变量 双目运算符双目运算符 表达式表达式等价于:变量变量 变量变量 双目运算符双目运算符 (表达式)(表达式)例如:i5 等价于:ii5 x*y8 等价于:xx*(y8)C语言中,复合赋值运算符共有10种:,*=,2.3 运算符及表达式v赋值表达式 赋值表达式的一般形式:变量变量 赋值运算符赋值运算符 表达式表达式赋值运算符
14、的左边必须是变量,右边的表达式可以是常量、变量、表达式和函数调用表达式。赋值运算具有运算的功能:首先求解右边表达式的值,再将计算结果赋值给左边的变量。一个表达式有一个值及其类型,它们等于计算表达式所得结果的值和类型。赋值表达式作为表达式也是有值的,它的值就是左边变量的最终值。C语言中采用表达式的方式实现赋值操作,也是C语言的灵活性所在。2.3 运算符及表达式v赋值运算符的优先级和结合性在C语言中赋值运算符的优先级别只高于逗号运算符,比其它运算符的优先级都低。例如:x*=3+y%6中优先级最高的是“%”,然后是“+”,最低的是“*=”。赋值运算符具有右结合性。在一个赋值表达式中,若出现多个赋值运
15、算符,其运算顺序是从右向左结合的。例如:x=y=z=0 相当于:x=(y=(z=0)2.3 运算符及表达式q自增自增/自减运算自减运算 v自增、自减运算符及表达式“+”是自增运算符,其功能是使变量的值自增1,“”是自减运算符,其功能是使变量的值自减1。自增、自减运算是一种特殊的赋值运算。参加自增、自减运算的运算对象必须是变量,而不能是常量或表达式。自增、自减运算符可以用在运算对象之前,也可以用在其后。前者称为前缀自增(自减)运算,后者称为后缀自增(自减)运算。前缀运算是变量的值首先加一或减一,然后再以该变量变化后的值参加其所在表达式的运算。后缀运算是变量的值首先参加其所在表达式的运算,然后再将
16、变量的值加一或减一,即参加运算的是变量变化前的值。2.3 运算符及表达式v自增、自减运算符的优先级与结合性 自增、自减运算符的优先级与单目算术运算符(、)优先级相同,比双目算术运算符(*、/、%、)的优先级高。自增、自减运算符具有右结合性。例如:a+;v使用自增、自减运算符的注意事项当一个表达式中,含有若干个子表达式时,ANSI C没有规定运算符和运算对象的计算次序。对于形如a+b的表达式,C语言的编译系统在处理时尽可能多的自左至右将若干个字符结合成一个运算符。在一个表达式中,出现对同一个变量的多次自增、自减运算时,有的编译系统按从左到右的次序处理,而有些系统一次性的处理这些运算。2.3 运算
17、符及表达式【例2.4】请分析下列程序的执行情况。main()int i=6,k=6,a,b;a=(i+)+(i+)+(i+);b=(+k)+(+k)+(+k);printf(ni=%d,k=%d,i,k);printf(na=%d,b=%d,a,b);若按从左到右的次序处理,预期的运行结果为:i=9,k=9 a=21,b=24 若按从左到右的次序处理,程序的运行结果如下:i=9,k=9 a=18,b=272.3 运算符及表达式在调用函数时,对于实参的求值顺序,ANSI C也没有规定。有的系统按从左到右的顺序求值,有的相同按从右到左的顺序求值。【例2.5】请分析下列程序的输出结果。main()i
18、nt i=5;printf(n%d,%d,i,+i);若按从左到右的次序处理,预期的运行结果为:5,6但是,在TURBO C 2.0环境下,程序运行时会输出:6,6编写程序时,应注意把可读性放在第一位,避免编写晦涩难懂、容易引起误解的程序。尤其在使用自增、自减运算符时,尽量不要使用易于误解的表达方式。2.3 运算符及表达式q逗号运算逗号运算 v逗号运算符与逗号表达式逗号表达式的一般形式为:表达式表达式1 1,表达式,表达式2 2逗号表达式的求解过程为:先求解表达式1,再求解表达式2。整个逗号表达式的值就是表达式2的值。逗号表达式一般形式中的表达式1和表达式2 也可以又是逗号表达式。运算符及表达
19、式v逗号运算符的优先级与结合性逗号运算符在所有运算符中的优先级别最低,且具有从左结合性。因此多层嵌套的逗号表达式:表达式表达式1 1,(表达式,(表达式2 2,(表达式,(表达式3 3,(,(,表达,表达式式n n)可以写成以下形式:表达式表达式1 1,表达式,表达式2 2,表达式,表达式3 3,表达式表达式n n求解过程为:自左至右,先求解表达式1,再求解表达式2,最后求解表达式n。表达式n的值即为整个逗号表达式的值。逗号运算符起到了把若干个表达式串联起来的作用,所以又称为“顺序求值运算符”。2.3 运算符及表达式例如:a=3*4,a*5,a+10 求解过程为:先计算3*4,将值12赋给a,
20、然后计算a*5的值为60,最后计算a+10的值为12+10=22,所以整个逗号表达式的值为22。比较x=10-5,10/5与x=(10-5,10/5)前者是逗号表达式,x的值为5,逗号表达式的值为2;后者是赋值表达式,x的值为2,赋值表达式的值为2。注意:o程序中使用逗号表达式,通常是要分别求逗号表达式内各表达式的值,并不一定要求整个逗号表达式的值。o并不是在任何地方出现的逗号都是作为逗号运算符。很多情况下,逗号仅作为分隔符,如变量之间、函数参数之间等都是用逗号作为分隔符。2.4 类型转换 q自动类型转换自动类型转换v自动类型转换的总体规则是:将短类型转换为长类型。v图中纵向的箭头表示当参加运
21、算的数据为不同类型时才进行的转换,转换的方向为由低级向高级。纵向箭头的方向仅表示数据类型级别的高低,而并不表示需要逐级转换。v混合数据类型的表达式按照上述规律进行类型转换后,方可进行计算,其结果的数据类型与较高级别的类型一致。v在赋值语句中,赋值号(=)右边的类型会转换成左边的类型,其结果也是左边的类型。doublefloatlongunsignedintchar,short低高2.4 类型转换 q强制类型转换强制类型转换 强制类型转换的一般格式为:(类型名)表达式(类型名)表达式 强制类型转换表达式的功能是将表达式的的运算结果的类型转换为“()”中类型名所说明的类型。例如:(double)sum /*将sum转换成double类型*/(int)(x+a/b)/*将x+a/b的值转换成int类型*/(double)(146%23)/*将146%23的值转换成double类型*/(int)m+n/*将变量m转换成整型类型后再和变量n相加*/2.4 类型转换【例2.6】请分析下面的程序的输出结果。main()double x=3.14;int i;i=(int)x%3;printf(nx=%f,i=%d,x,i);程序的输出结果是:x=3.140000,i=0