第二章数据类型、运算符与表达式_第1页
第二章数据类型、运算符与表达式_第2页
第二章数据类型、运算符与表达式_第3页
第二章数据类型、运算符与表达式_第4页
第二章数据类型、运算符与表达式_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第二章

数据类型、运算符与表达式第二章数据类型、运算符与表达式本章主要内容:2.1C语言中的标识符2.2常量与变量2.3整型数据2.4实型数据2.5字符型数据2.6变量的初始值2.7数值型数据间的运算2.8运算符、表达式及常用标准函数本章重点:全部内容《C语言程序设计》2.1C语言中的标识符是用来命名一个名字的,如常量名、变量名、函数名、数组名、类型名等都必须是C语言中合法的标识符。标识符只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线。例如:合法标识符a,x5,count,year,average,student_number,classroom3非法标识符$123,x+y,road#2,studentname,a=b数据类型、运算符与表达式《C语言程序设计》注意:大写字母和小写字母,在C中被认为是两个不同的字符。如count与COUNT不同。在起名时,应注意做到“见名知义”。比如表示姓名: 比较好的标识符:

Name、name、xing_ming、Xingming、xm等 比较差的标识符:

x、y、abc等尽量不用单个的l和o作标识符。代数计算时可以采用习惯的名字。如: 圆:r、s

立方体:a、b、h、v数据类型、运算符与表达式《C语言程序设计》2.2常量与变量常量在程序运行过程中,其值不能被改变的量称为常量。常量有不同的类型,如: 整型常量:15、-8、0等 实型常量:3.7、-8.2等 字符常量:’a’、’A’、’+’、’5’等数据类型、运算符与表达式《C语言程序设计》符号常量用一个标识符代表一个常量。语法: #define符号常量名常量如:#definePI3.1415926例2.1符号常量的使用说明:习惯上,符号常量名用大写,以便与变量名相区分。可读性好。修改方便。数据类型、运算符与表达式《C语言程序设计》变量其值可以改变的量称为变量。变量说明语法: 类型名变量名;一个变量应该有一个名字,即变量名,用来标识在内存中所分配的存储单元。如:

inta;向变量名赋值,即是向该存储单元中存入数据,该数据就是变量的值。如:

a=10;习惯上,变量名用小写。a10数据类型、运算符与表达式《C语言程序设计》变量“先定义、后使用”目的:保证程序中变量名的正确使用。如:

intstudent; ……

studemt=10; /*Error*/为变量分配适当的内存单元。如:

inta;floatb;根据所变量的变量的类型,检查对该变量所进行的操作是否合法。如:

int

a,b;floatc; ……a%b…… /*OK*/ ……a%c…… /*Error*/ab数据类型、运算符与表达式《C语言程序设计》2.3整型数据整型常量有三种表示:十进制整数。如:123、-456、0八进制整数。以0开头的数是八进制数(使用的数码为:0~7)。如0123=(123)8=(83)10。在8进制数中不使用8和9这两个数码,如018、094均为非法。十六进制数。以0x开头的数是十六进制数(使用的数码为:0~9、a~f或A~F)。如0x123=(123)16=(291)10。对于0x1a、0xabcd、0x0FFF等都是合法的16进制数,而0X8a、0h0fff、0xfg等都是非法的

数据类型、运算符与表达式《C语言程序设计》整型变量整型分类、所占字节数及数据范围:例2.2不同整型数据进行的混合运算

数据类型符占字节数(位数)取值范围int2(16)-32768~32767即-215~(215-1)short[int]2(16)-32768~32767即-215~(215-1)long[int]4(32)-2147483648~2147483547即-231~(231-1)unsigned[int]2(16)0~65535即0~(216-1)unsignedshort[int]2(16)0~65535即0~(216~-1)unsignedlong[int]4(16)0~4294967295即0~(232-1)数据类型、运算符与表达式《C语言程序设计》整型常量的类型在程序中当书写一个整型常量时,它占几个字节呢?C是这样处理的:如果其值在-32768~32767范围内,认为它是int类型(占2个字节),否则认为它是long类型(占4个字节)。当需要把一个仅占两个字节的整型常量让它占4个字节时,可以在该数据的后面加上字母L(大小写均可)。如:

longa=10L; 而:

longb=10;b数据类型、运算符与表达式《C语言程序设计》2.4实型数据实型常量实数在C中也称浮点数。实数有两种表示形式:十进制数形式,也称小数形式。如:

0.58、

.58、

58.0、85. 指数形式,也称科学记数法。如:

12.3e3、123E2、1.23e+4、0.12E+5

都代表1.23×104。但要注意字母e(或E)之前必须有数字,且e后面指数必须为整数,如:

e3、2.1e3.5、.e3、e

等都不是合法的实数。《C语言程序设计》实型变量实型分类、所占字节和取值范围:对于实型常量不区分float型和double型。一个实型常量可以赋给一个float型或double型变量。根据变量的类型截取实型常量中相应有效数字。例2.3实型变量的说明及精度分类数据类型占字节数小数位长度精度(有效位)取值范围单精度float467约10-38~1038双精度double8615~16约10-308~10308数据类型、运算符与表达式《C语言程序设计》2.5字符型数据字符常量普通字符常量:用单引号括起来的一个字符,如’a’、’H’、’&’、’9’、’+’等。转义字符:以反斜线“\”开头的特定字符。常见的转义字符:转义字符含义转义字符含义转义字符含义\n换行\t跳格\”字符”\r回车\\字符\\ddd1-3位8进制表示的字符\b退格\’字符’\xhh1-2位16进制表示的字符数据类型、运算符与表达式《C语言程序设计》[例2.4]转义字符应用举例main(){ printf(“abc\tde\rx\n”);

printf(“f\t\b\bg”);}

运行结果:xbc□□□□□def□□□□□ga1区2区bdcexfg数据类型、运算符与表达式《C语言程序设计》字符变量字符类型分类、所占字节和取值范围:[例2.5]字符型数据字符型数据与整型数据的关系将一个字符常量赋给一个字符变量,并不是把该字符本身放在内存单元中去,而是将该字符的ASCII码放到存贮单元中,因此字符型数据也可以象整型数据那样使用。如:charch;

ch=‘A’;数据类型字节长度取值范围[signed]char1-128~127之间的整数unsignedchar10~255之间的整数ch65《C语言程序设计》[例2.6]字符型数据与整型数据的关系#include<stdio.h>main(){ charch;

inti;

ch=’A’; i=65;

printf(“%c,%c\n”,ch,i);

printf(“%d,%d\n”,ch,i);

ch=65; i=’A’;

printf(“%c,%c\n”,ch,i);

printf(“%d,%d\n”,ch,i);

i=321; ch=i;

printf(“i=(%d,%c)\n”,i,ch);}

ich32165数据类型、运算符与表达式《C语言程序设计》字符串常量用双引号括起来。”Hello”、”a”、”123”等。不要把字符常量与字符串常量相混淆。如有:

charch1,ch2,ch3; ch1=’a’; /*ok*/ ch2=”a”; /*error*/ ch3=”CHINA”; /*error*/字符串的长度:双引号括起来的字符个数。如:”CHINA”的长度为5;”abc\txyz”的长度为7(其中\t表示一个字符);””是空字符串,长度为0。数据类型、运算符与表达式《C语言程序设计》字符串的存储除了要存储双引号里面的字符之外,C规定还要多存储一个字符’\0’,作为“字符串的结束标志”。如字符串“CHINA”的存储情况为: 长度为5,而实际需要6个字节。思考: 请说明”5”,’5’,5的区别,它们各占几个字节的存储空间,在内存中是如何存储的。字符串的结束标志数据类型、运算符与表达式《C语言程序设计》2.6变量的初始值在使用变量时,如果它出现在表达式中,事先必须得有一个初始值;否则其值将是一个不确定的值。变量的初始值可以通过赋值语句、读语句和变量初始化来获得。如:

int

x,y,z; x=5;

scanf(“%d”,&y); z=x+y;数据类型、运算符与表达式《C语言程序设计》变量的初始值也可能用变量初始化来获得,即在说明变量的同时给变量赋值。变量说明的完整语法:类型名变量名=初始值;如:

inta=3; floatf=4.5; charc1=’a’,c2;

如果对几个变量赋以同一个初值,不能写成:

inta=b=c=1; /*b、c没有定义*/

应写成:

inta=1,b=1,c=1;

数据类型、运算符与表达式《C语言程序设计》2.7数值型数据间的运算一般情况下,相同类型的数据可直接进行运算,运算的结果就是这种类型。如表达式:

5.0/2.0 /*参加运算的两个数都是实型,结果为实型2.5*/

5/2 /*参加运算的两个数都是整型,结果为整型2*/在C语言中,不同类型的数据可以在同一表达式中进行混合运算,但运算前要进行必要的类型转换。如:

10+’a’-1.5/3

是正确的表达式。数据类型、运算符与表达式《C语言程序设计》类型的自动转换(隐式转换)不同类型的数据在进行运算时,按下图转换规则自动进行:

double←float ↑ long ↑ unsigned ↑

int←char,short横向向左的箭头表示即使类型相同也必定转换。纵向的箭头表示当运算对象为不同类型的数据时转换的方向,并不表示转换过程。数据类型、运算符与表达式《C语言程序设计》类型转换举例:

若inti;floatf;doubled;longe;10+’a’+i*f–d/eintintfloatdoublelongchardoubledoubledoubledoubledoubleintintdoubledoubledouble数据类型、运算符与表达式《C语言程序设计》类型的强制转换类型的自动转换是系统自动进行的,不需要用户干预。但有时为了达到某种目的,还必须进行类型的强制转换,不然会出现错误的运算结果。[例2.7]没有考虑类型转换时,有问题的程序强制类型转换的语法格式:(类型名)表达式如:(double)a (int)(x+y) (int)x+y思考:如何修改例2.7,使之正确。数据类型、运算符与表达式《C语言程序设计》在强制类型转换时,得到一个所需类型的中间值,原来变量的类型及该变量所存储的值并未发生变化。[例2.8]强制转换不影响原变量自动转换一般不会使数据受到损失,而强制转换就有可能使数据受损或结果难以理解,这是由于高级别的类型转换为低级别的类型时无法完整存储造成的。数据类型、运算符与表达式《C语言程序设计》类型转换可简单地理解成下面的方式:整型→实型: 补足小数位及精度。如:2→2.0实型→整型: 截断小数位,只保留整数部分。如:2.8→2 较长整型→较短整型(long→int、int→char等): 截断高位,只保留低位数据。如:数据类型、运算符与表达式《C语言程序设计》较短整型→较长整型(int→long、char→int等):补足高位,数值不变。等长的整型之间的转换(unsigned←→int):各二进制位不变。有符号数→无符号数时,原来的符号位不再作为符号,而变为数据的一部分;无符号数→有符号数时,最高位被当作符号位。如:[例2.9]类型转换对数据的影响数据类型、运算符与表达式《C语言程序设计》2.8运算符、表达式及常用标准函数运算(即操作)是对数据的加工。运算符或操作符:如+、-、*、/等符号。运算量或操作数:被运算的对象(即常量、变量或函数)。表达式:就是用运算符把运算量连接起来所构成的式子。C语言提供了相当丰富的运算符。根据运算符所需要的运算量的个数,运算符还分为单目、双目和三目运算符。数据类型、运算符与表达式《C语言程序设计》2.8.1算术运算符及其表达式由算术运算符与运算量构成的表达式称算术表达式。基本算术运算符

+(加)、-(减)、*(乘)、/(除)、%(取余)前4个是通常的四则运算。但要注意,两个整数相除的结果仍为整数。“%”是取余或称取模运算,只适合于整型数据。x%y就是x除以y所得的余数。如:5%3 /*值为2*/3%5 /*值为3*/6%6或10%2 /*值为0*/数据类型、运算符与表达式《C语言程序设计》自增(++)、自减(--)运算符只能用在变量的前面和后面。如:m=3;m1=m++;m2=++m;数据类型、运算符与表达式前缀形式后缀形式自增++aa++自减--bb--运算时机先使变量变化,再取变量的值参加运算先取变量的值参加运算,再使变变化mm1m233455《C语言程序设计》[例2.10]“++”和“--”运算符在表达式中的使用在一个表达式中对一个变量自增或自减多次,可能造成困惑。如:

a=3;k=(++a)+(++a); b=3;printf(“%d,%d”,b,b++);优先级:()→++、--→*、\、%→+、-数据类型、运算符与表达式akb345103表达式栈bb++计算结果栈输出4,3434《C语言程序设计》2.8.2赋值运算符及其表达式赋值运算符和赋值表达式赋值运算符即“=”,由它构成的表达式称赋值表达式。其语法格式为:变量名=表达式其作用是将“=”右边表达式的值赋给左边的变量。如:

a=1; a=a+5;数据类型、运算符与表达式《C语言程序设计》如果表达式值的类型与变量的类型不同,将会把表达式的值自动转换为变量的类型,这种转换是强制性的。如:

floata; a=5; a=a*2;既然是表达式,表达式就有一个值。如:2+5是算术表达式,值为7;a=3是赋值表达式,C规定这个值就是送给左侧变量的值,即表达式a=3的值为3。则下列合法:a=(b=5); a=2*(c=3); a=b=1;数据类型、运算符与表达式《C语言程序设计》复合赋值运算符及其表达式赋值运算符可以与所有的双目运算符合在一起,构成一种新的运算符(如“+=”、“-=”、“*=”等),称复合的赋值运算符。如:

a+=3 p*=5 h/=2+1 a=a+3 p=p*5 h=h/(2+1)a+=3可以理解为:把3加到a里面去;

p*=5可以理解为:把p扩大5倍。虽然像“a-=a+=a*=5”这样的表达式允许,但我们不提倡这种用法。数据类型、运算符与表达式《C语言程序设计》赋值表达式是程序中使用是频繁的表达式。凡是允许使用表达式的地方,都可以使用赋值表达式,可以说它“无孔不入”。在赋值表达式的后面加分号,就构成了赋值语句。如:

a=10 a=10; b=c+5 b=c+5; x=y=1 x=y=1; p*=q++ p*=q++;赋值运算符的优先级: 其它运算符→=→,数据类型、运算符与表达式赋值表达式赋值语句《C语言程序设计》2.8.3其它运算符逗号运算符由逗号运算符(即“,”字符)与运算量构成的表达式称逗号表达式。其语法格式为:表达式1,表达式2,……,表达式n其求值过程是:从左向右逐个计算每一个表达式,把最右侧表达式(即表达式n)的值作为整个表达式的值。如:

3+2,10-6数据类型、运算符与表达式4《C语言程序设计》逗号运算符是所有运算符中优先级最低的。如:逗号运算的使用是为了程序简洁,但不要滥用。其典型用法是在for循环语句中,如:

for(s=0,i=1;i<=100;s+=i,i++)…数据类型、运算符与表达式p=q=2,q*6p=(q=2,q*6)pqpq逗号表达式的值逗号表达式的值222121212逗号表达式《C语言程序设计》求字节运算符运算符sizeof是用来计算变量或数据类型所占的内存字节数。其语法格式:sizeof(类型名或变量名)如,求整型数据所占字节数:

inta;

printf(“%d,%d”,sizeof(a),sizeof(int));在16位C语言编译系统中输出“2,2”;而在32位C语言编译系统中将输出“4,4”。数据类型、运算符与表达式《C语言程序设计》位运算符C语言中提供了对位的运算,是通过位运算符来实现的。这在某种程度上实现了低级语言的功能。所谓位运算是指按位来进行的运算。所以应该先把参与运算的数据转换为二进制数再进行相应的运算。数据类型、运算符与表达式《C语言程序设计》按位与运算(&)按二进制位进行“与”运算。对应的二进制位都为1时,结果位为1,否则为0。即:0&0=0 0&1=0 1&0=0 1&1=1例如3&5的运算如下:数据类型、运算符与表达式《C语言程序设计》按位或运算(|)按二进制位进行“或”运算。对应的二进制位都为0时,结果位为0,否则为1。即:0|0=0 0|1=1 1|0=1 1|1=1例如3|5的运算如下:数据类型、运算符与表达式《C语言程序设计》按位异或运算(^)对应的二进制位相同时,结果位为0,否则为1。即:0^0=0 0^1=1 1^0=1 1^1=0例如3^5的运算如下:数据

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论