第2章基本数据类型及其运算●基本数据类型●常量与变量●运算符与表达式第2章基本数据类型及其运算程序由算法和数据构成。
数据是算法的处理对象。
要学习程序设计,首先要了解处理对象—数据的特点。
本章中我们讨论C语言中基本数据及其类型和基本的运算方法。
2.1基本数据类型不同的数据在计算机中的表示方法是不同的(如:定点数、浮点数、字符数据等不同类型),这是由计算机的二进制存储特性所决定的。
在程序中要指定数据的类型,以便编译系统能够按指定类型确定其表示方法、字节个数、以及运算方式。
在上述类型中,虚线框中的类型又称为导出类型,定义这类数据时要用到基本类型。
在C语言的程序中,对于所用到的数据必须事先进行定义即先定义,后使用。
需要指出的是:(1)在Turbo C中:char与signed char型数据在长度、取值范围都一致,故两者是等价的。
与此情况相同的还有: short与signed short型、int与signed int型、long与signed long型。
需要指出的是:(2)在Turbo C中int与short型数据在长度及取值范围是一致的。
在VC中,int与long型数据在长度及取值范围是一致的。
需要指出的是:(3)需要指出的是一般:char型与signed char型或unsigned char型二者之一相同。
int型与short型或long型二者之一相同。
具体如何,视不同编译系统而定。
需要指出的是:(4)在C语言中,字符型数据存放的是字符的ASCII码值。
有符字符型数据用一个字节的最高位作为符号位,低七位表示字符的ASCII码值。
无符字符型用一字节的全部八位表示字符的ASCII码值。
利用这个存储特点,C语言允许字符型数据以其ASCII码值(整型数)参加数值运算。
需要指出的是:(5)在Turbo C中,float型数据的存储格式为:阶码占8位,尾数占23位,一位符号位;double型数据的存储格式为:阶码占11位,尾数占52位,一位符号位。
从表中可以看出:C语言中基本数据类型很多,短的、长的、有符的、无符的,变化丰富。
初学者可能感到比较困难,其实从数据的存储形式上来看,归纳起来实质上只有两大类型的数据—整型数据和实型数据,即定点整数和浮点数。
2.2 常量与变量2.2.1常量所谓“常量”是指在程序运行过程中,其值不能被改变的量。
C语言中常量有整型常量、实型常量、字符型常量、字符串常量、符号常量和枚举常量。
本节将介绍上述除枚举常量外的所有常量,枚举常量在第九章中介绍。
1.整型常量整型常量又简称整数,它又三种形式:十进制整数、八进制整数、十六进制整数。
a.十进制整数十进制整数由0~9十个数字、正号、负号组成,正负号只能出现在最左边,表示一个整数时,正号可以省略,多位数时,最左边的数字不能为0。
例如:123 597―4250―0是合法的整数。
而0932是非法的整数表示方法。
b.八进制整数八进制整数必须以0(零)开头并由0~7八个数字、正号、负号组成,正负号只能出现在最左边。
例如:0123 0404―0453―00是合法的八进制整数,而0128是非法的。
c.十六进制整数十六进制整数必须以0x(0X)开头,由0~9, a,b,c,d,e,f(或A,B,C,D,E,F)这十六个符号和正负号组成,正负号只能出现在最左边。
例如:0x123 0Xfa1―0x9a12―0x0是合法的十六进制数。
0x12g―x897a25b是非法的十六进制数。
d.整型常量的后缀U和LU和L分别是unsigned和long的第一个字母,可以跟在整型常量的后面,以指明该整数为长整型常数(long型)、无符整型常数(unsigned型)以及无符长整型整数(unsigned long型)。
使用时U和L 可以小写。
例如:长整型数:32768l―0761L0xd1dL无符整型数:32768u―0x2a7U0277U无符长整型数:555ul0xabcLU0722ul整型常量的后缀U和L 当一个整型常数的值是在―32768~32767之间,则该整型常量为int型,当它的值超过―32768~32767而在―21亿~21亿之间时,则该整型常量为long型。
通过使用L和U后缀,可以使在―32768~32767之间的int型常量成为long型常量或使有符常量成为无符常量。
2.实型常量实型常量又称浮点型常量,它有两种表示方法:十进制小数形式和指数形式。
a.十进制小数形式十进制小数由0~9十个数字、小数点、正号、负号组成,正负号只能出现在最左边。
例如:123.5―032.45―.00.是合法的实型常量。
b.指数形式指数的一般形式如下:[±][整数部分][.小数部分][e±n]其中[]中内容为可选,但“整数部分”和“小数部分”二者至少选其一,不可全无。
[e±n]为指数部分,e可大写,n是一个1~3位的十进制整数(第一位可为0),2e2表示2 102,。
例如:123.5E3―0.45e―41E 0120e5是合法的指数形式。
-E5-1E2.05.e50.8E kc.实型常量的后缀F和L因为实型常量缺省的类型为双精度实型,为了达到存储、精度、类型转换的需要,可用后缀F和L。
F和L分别是float和long double的第一个字母,可以跟在实型常量的后面,以指明该实数为单精度实数(float型)或长双精度实数(long double型)。
使用时F和L可以小写。
例如:单精度实数:32.768f―1F 1.2e3F 长双精度实数: 1.2e309l―0.1L5L3.字符型常量字符常量是用一对单引号括起来的一个字符,如:'a','A','$',等。
空字符也是字符,它包含0个字符,它的值是0,可以表示为'',也可以表示为'\0',程序中总是用'\0'表示空字符。
在C语言中还有另外一种字符常量,称为转义字符,它是以反斜线(\)开头的字符串,通常也把它们称为控制字符,因为它们中的大多数具有控制功能,如'\n'代表换行符,在printf函数中使用它可以实现换行的功能。
C语言中的转义字符见表2-2。
在C 语言中,字符常量是一个整数,其值是它所对应的ASCII 码的值(见附录Ⅰ),字符型数据可以与数值型数据通用,即可以进行算术运算。
如:'a '的值是97,'A '的值是65,'\'的值是39等。
也可以用\ddd 或\xhh 来表示一个字符。
以下都是表示水平制表符:'\t''\011''\11''\x09''\x9'而'a'也可以写成以下形式:' \141'' \x61'转义字符含义十进制八进制十六进制\0空字符000x00\a 响铃770x07\b 退格,从当前位置向前移动一格8100x08\f 换页,从当前位置换到下一页开头120140x0c \n 换行,从当前位置换到下一行开头100120x0a \r 回车,从当前位置换到本行的开头130150x0d \t 水平制表,水平换到下一tab 位置90110x09\\反斜线字符\921340x5c \ˊ单引号字符ˊ390470x27\〞双引号字符〞340420x22\ddd1到3位八进制数对应的字符0~255000~3770x00~0xff \xhh1到2十六进制数对应的字符0~255000~3770x00~0xff 表2-24.字符串常量字符串常量是由双引号括起来的一串字符。
如:″1234″、″中国,北京″等。
值得注意的是:字符是用单引号括起来的,而字符串是用双引号括起来的。
'a'是字符,而″a″是字符串。
字符串可以为空串即包含0个字符的串,表示为″″。
C语言规定:在每一个字符串后,系统自动加一个'\0',作为字符串的结束标志符,以便判字符串的长度。
由于这个原因,字符串所占字节数比实际长度大1。
空串所占字节数为1,而不是0。
在使用字符串时,应当注意以下情况:(1)单引号作为字符串的组成字符时,可以直接使用。
例如:printf(″It's my book\n″);执行后输出为:It's my book(2)一个字符串不能分写在两行或多行上,如果非要写在两行上,则可在前一行的字符串尾部加一个反斜线\,或者把不同行上的字符串分别用双引号括起来。
例如:printf(″C programming\language is powerful\n″);或者:printf(″C programming″″language is powerful\n″);main(){printf(″Hello,C\n″);printf(″\110\145\154\154\157\54\103\12″); printf(″\″12/4=3\″\t\\is a string\\\n″);}运行结果:Hello,CHello,C''12/4=3''\is a string\5.符号常量符号常量是代表一个字符序列的标识符(又称宏名)。
一旦定义了一个符号常量,则它就与该字符序列是等价的。
在C语言中,定义符号常量的方法有三种:一是使用编译预处理的宏替换功能#define;二是使用类型限定符const说明并初始化;三是使用枚举类型来定义。
在此只介绍#define定义一个符号常量,格式如下:#define标识符字符序列#define标识符字符序列其中:字符序列可以由任意字符组成,还可以是已经定义过的符号常量。
符号常量应先定义后使用,可以出现在程序中的任何位置,习惯上尽量放在程序的前面且符号常量(宏名)用大写字母书写,以示与其它标识符的区别。
需要指出的是:当一个标识符被定义成符号常量,则在编译时,编译预处理首先将程序中所有该标识符用相应的字符序列来替换,然后再进行后续处理。
例如:#define PI 3.14159#define SPACE…‟等。
#define STR1 ″This is a ″main(){#define STR2″joke″#define M STR1STR2/* printf(STR1 STR2); */ printf(M);}运行结果:This is a joke另外,需要时还可使用#undef来取消已经定义了的符号常量。
例如:#undef M取消定义后,该符号常量(宏名)还可再定义并使用。
常量●定义:程序运行时其值不能改变的量(即常数)●分类:–直接常量:●整型常量●实型常量●字符常量●字符串常量–符号常量:用标识符代表常量●定义格式:#define 符号常量常量●一般用大写字母●是宏定义预处理命令,不是C 语句如#define PRICE 30例符号常量举例#define PRICE 30main(){int num,total;num=10;total=num*PRICE;printf("total=%d",total);}运行结果:total=3002.2.2变量1.变量的概念所谓“变量”是指在程序运行过程中,其值可以被改变的量。