《C语言程序设计》第2章数据类型、运算符与表达式.ppt
第2章 数据类型、运算符与表达式,本章要求:,掌握各种常用数据类型的数据在内存中的存放形式掌握常量的分类,变量的定义和变量名的命名规则理解指针的含义,掌握指针变量的定义及简单应用掌握算术运算符、赋值运算符、逗号运算符及其表达式掌握各种位运算的运算规则及简单应用掌握一些常用内部函数的使用,本章难点:不同数据类型的数据在内存中的存放形式,运算符的优先级与结合性。,本章重点:变量与常量的概念、各种运算符与表达式,2.1 C的数据类型,语言中,数据类型可分为:基本数据类型(整型、实型、字符、枚举类型等)构造数据类型(数组、结构体、共用体类型等)指针类型空类型注意:在程序中用到的常量与变量必须是上面的一种数据类型;正确地区分和使用不同的数据类型,可使程序运行时占用较少的内存,确保程序运行的正确性和可靠性。,2.1.2 基本数据类型,基本数据类型是构成C语言的数据类型的最基本要素,包括:整型(int)实型(float 和 double)字符型(char)例如:int类型数据在内存中占两个字节,数据的取值范围是-32768至32767,2.2各类数据在内存中的存放方式,计算机中只有二进制数值,如:正整数:,变量:在程序运行中其存储的值可以改变。常量:在程序运行中其值不可以改变。,2.字符的存储形式ASCII码,2.3 常量,2.3.1 数值常量 1.整型常量 在语言中,使用的整常数有八进制、十六进制和十进制三种。(1)十进制整常数:237-568 0 1627(2)八进制整常数:(前导为0)015(十进制为13)0101(十进制为65)(3)十六进制整常数:(前导为0 x或0X)0X2A(十进制为42)0XA0(十进制为160),注意:若要表示长整型(long)整数,在数的最后加表示长整型的后缀修饰符号字母“l”。,2.实型常量,实型也称为浮点型。语言中,实数只采用十进制。它有二种形式:小数形式:0.123.123 123.0-123.指数形式:十进制数 加 e或E 加 价码 3.5E+8(等于3.5108)1.5E-8(等于1.510-8),正号可以省略,规范化的指数形式其值同0.15E-7,2.3.2 字符常量,字符常量是用单引号括起来的一个字符:a,b,=,+,?注意:单个字符可以是字符集中任意字符。但不能是单引号()和反斜杠()5和5 是不同的。字符按ASCII码来存储:字符0 ASCII码为48,字符A ASCII码为65,字符a ASCII码为97,2.3.3 字符串常量,字符串常量是一对双引号括起来的字符序列:ABC,A,123lkdf 注意:每个字符串最后有一结束标志 0。,因此在程序中,长度为n个字符的字符串常量,在内存中占有n+1个字节的存储空间。,2.3.4 转义字符,转义字符以反斜线()开头,后跟一个或几个字符。n(换行)0(空字符NULL)(单引号)(双引号),a,b,c,d,e,fghi,a=65 b=A c=A,main()printf(“a b ctd ebfghin”);printf(“a=65 b=101 c=x41n”);,输出结果:,2.3.5 符号常量,可以使用一个符号表示一个多次常用的常量使用命令#define来定义,格式:#define 符号常量名标识符 常数表达式,#define PI 3.14159/*定义PI为符号常量,值为3.14159*/#define PI2 2*PI,结尾没有分号,说明:(1)符号常量名常常用大写字母、变量名用小写字母。(2)符号常量不能在其作用域范围内重新赋值。,2.4 变量,变量包括:一个名字和相应的数据类型通过名字来引用一个变量,数据类型则决定了该变量的存储方式和在内存中占据存储单元的大小 定义:int x=20;,2.4.1 变量的定义,C语言中使用的变量都要作类型强制定义,即要求“先定义,后使用”的原则。其目的:1)保证程序中变量名使用的正确性2)编译程序为其分配相应的储存单元3)保证运算的合法性定义形式:类型说明符 变量名列表;char ch/*定义ch为字符型变量*/int i,j;/*定义i,j为基本整型变量*/float x,y,z;/*定义x,y,z单精度实型变量*/,2.4.2 变量的赋初值,C语言中,当定义一个变量后,系统只是按定义的数据类型分配其相应的存储单元,并不对其单元初始化,其中是一个不定值。void main()int k;printf(“k=%dn”,k);程序运行,输出k的值就是无意义的不定值,在不同系统环境下运行的结果也可能不同。,赋初值的一般形式为:类型说明符 变量1=值1,变量2=值2,;类型说明符 变量1,变量2,变量3;变量1=值1;变量2=值2;,在说明中不允许连续赋值:,int a=b=c=5;,2.5 运算符与表达式,2.4.1 C语言中的运算符,算术运算符,关系运算符,逻辑运算符,位运算符,赋值运算符,条件运算符,逗号运算符,指针运算符,字节数运算符,特殊运算符,运算符分类,2.5.2 优先级与结合性,注意的几个问题:运算符的功能;与运算量的关系求运算量的个数求运算量的类型运算符的优先级别运算符的结合性(也称结合方向)运算结果的类型,单目(如取负)双目(加减乘除)三目(如条件运算符),如求余的运算只能用于整型数据,,原则:在表达式中,优先级别较高的先于优先级别较低的进行运算。运算符优先级相同时,根据运算符的结合性所规定的方向处理。,a+b*c,*的优先级高于+,相当于a+(b*c),a=b=c=5;,赋值号=的右结合性,决定a=(b=(c=5),2.5.3 算术运算符与算术表达式,1.C语言的基本算术运算符:取负 乘法*除法/求余%加法+减法 其中:当“/”被用于整数或字符时,结果取整例如:5/2结果=2,1/2的结果=0 5/2.0结果=2.5,1.0/2结果=0.5取负的运算为单目运算符。求余%运算要求两个运算量均为整型数据。,2 自增,自减运算符,自增运算符:+使变量的值自增1。自减运算符:-使变量的值自减1。其中:为单目运算,要求运算对象只能是变量结合方向:为由右至左。优先级:高于双目运算可有以下四种形式:+I 先加1再用 i+先用再加1-i 先减1再用 i-先用再减1,main()int x,y;x=10;y=+x;printf(“%d,%d”,x,y);,main()int x,y;x=10;y=x+;printf(“%d,%d”,x,y);,x,y,10,11,11,x,y,10,11,10,程序阅读,void main()int i=8;printf(%dn,+i);printf(%dn,-i);printf(%dn,i+);printf(%dn,i-);printf(%dn,-i+);printf(%dn,-i-);,9,9,屏幕打印内容,变量i,8,8,8,9,9,8,-8,9,-9,8,3算术表达式,定义:由算术运算符、括弧、内部函数及数据组成的式子。,a*a/(b*c*c-34),(x*x-5*x+26)/(x-5),2.5.4 赋值运算符与赋值表达式,1.简单赋值运算符与表达式 其一般形式为:变量=表达式 说明:计算表达式的值再赋予左边的变量。整个赋值表达式的值为:左边变量的值例如:x=a+b结合方向:由右至左,优先级较低a=b=c=5可理解为:a=(b=(c=5),加分号后x=a+b;就是赋值语句,如果赋值运算符两边的数据类型不相同,系统将自动进行类型转换,即把赋值号右边的类型换成左边的类型。具体转换规定如下:1)实型赋予整型,舍去小数部分。2)整型赋予实型,数值不变,但将以浮点形式存放,即增加小数部分(小数部分的值为0)。3)字符型赋予整型,由于字符型为一个字节,整型为二个字节,故将字符的ASCII码值放到整型量的低八位中,高八位为0。4)整型赋予字符型,只把低八位赋予字符量。,并非四舍五入,2.复合赋值运算符与表达式,复合赋值符:+=,-=,*=,=,%=,=,&=,=,|=复合赋值表达式:变量 双目运算符=表达式它等效于:变量=变量 运算符 表达式 例如:a+=5 等价于 a=a+5 x*=y+7 等价于 x=x*(y+7)r%=p 等价于 r=r%p复合赋值符的优先级和结合方向与赋值运算符(=)相同,2.5.5 位运算符,语言提供了位运算的功能,这使得语言也能像汇编语言一样用来编写系统程序。所谓位运算是指,按二进制位进行的运算。语言提供了6种位运算符:&|,1按位与&,(1)格式:x&y(2)规则:对应位均为1时才为1,否则为0:例如,3&9=1:,(3)主要用途:取(或保留)1个数的某(些)位,其余各位置0。,0011&1001 0001,39,1,2按位或|,(1)格式:x|y(2)规则:对应位均为0时才为0,否则为1:例如,3|9=11:,(3)主要用途:将1个数的某(些)位置1,其余各位不变。,0011|1001 1011,39,11,3按位异或 xy4按位取反 x5按位左移 x位数说明:(1)x、y和“位数”等操作数,都只能是整型或字符型数据。除按位取反为单目运算符外,其余均为双目运算符。(2)参与运算时,操作数x和y,都必须首先转换成二进制形式,然后再执行相应的按位运算。,2.5.6 逗号运算符和逗号表达式,逗号运算符(,)是把两个表达式连接起来组成一个表达式,称为逗号表达式。其一般形式为:表达式1,表达式2,表达式n 其求值过程是分别求表达式1、表达式2表达式n的值,并以最后一个表达式n的值作为整个逗号表达式的值。如:a=3;b=4;y=(x=a+,x+b);,程序执行后:a=4 b=4 x=3 y=7,2.5.7 表达式中的类型转换,1隐式数据类型转换 定义:不同类型常量及变量参与运算,若参与运算的两个数据类型不同,编译程序按照一定的规则将它们变换为同一类型的量进行运算。转换规则:,double floatlongunsignedint char,short,2强制类型转换,强制类型转换符()功能:强制将一个表达式结果的数据类型转换为特定类型 其一般形式为:(类型符)表达式 注意:类型符和表达式都要加括号,如:(int)(x+y)(float)z无论隐式转换、强制转换都是临时转换,不改变数据的类型和值。,2.7 常用库函数,#include 或#include“头文件”中声明了C语言中大部分关于输入输 出操作的函数 中声明的库函数用来处理相关的数学问题 中声明了许多相当基本的函数 对字符串的各种处理 对字符的相关处理 与在图形界面作图有关的处理,函数的使用方法:调用方法:函数名(参数列表)/*有参函数*/函数名/*无参函数*/说明:(1)使用库函数要注意参数的个数及其参数的数据类型(2)要注意函数的定义域(自变量或参数的取值范围)例如:sqrt(x)要求:x=0(3)要注意函数的值域。例如:exp(23773)的值就超出实数在计算机中的表示范围,数学函数,需要#include 注意:使用abs()函数需要#include sin(x)、cos(x)、tan(x)在三角函数中的自变量是以弧度为单位。如:sin30 sin(3.14159/180*30)sqrt(x)返回x的平方根,注意自变量x需要大于0。,2随机函数,需要#include rand():返回032767的随机整数。例如:rand()%100random(num):返回0num-1的随机整数。例如:random(90)+10要产生N,M之间的随机整数?randomize()函数:可使rand()产生不相同序列的随机数。函数调用形式:randomize();,3字符函数,需要#include(1)判断字符函数 isalpha()、isalnum()、isdigit()(2)字符大小写转换函数 tolower()、toupper(),