1、l 计算给定半径的圆周长和面积计算给定半径的圆周长和面积 l 计算输入半径的圆周长和面积计算输入半径的圆周长和面积 关键字与标识符关键字与标识符 基本数据类型基本数据类型 常量与变量常量与变量 基本表达式基本表达式 C语句语句 格式化输入输出格式化输入输出 预处理命令预处理命令 l C程序概貌程序概貌 C程序的结构特点程序的结构特点 书写书写C程序时应遵循的规则程序时应遵循的规则#include /*预处理命令预处理命令*/main()/*主函数主函数*/printf(hello,world!n);/*库函数,输出字符序列库函数,输出字符序列*/问题:问题:(1)这个程序包括哪些组成部分?)这
2、个程序包括哪些组成部分?(2)这里显示的是字符序列,能不能显示数字数据呢?)这里显示的是字符序列,能不能显示数字数据呢?预处理预处理 主函数主函数mainmain 注释注释 l#include 告诉编译器在本程序中包含标准告诉编译器在本程序中包含标准输入输入/输出库的信息。输出库的信息。printf函数在函数在stdio.h中声明。中声明。l main表示表示C语言的一个特殊函数,称之为主函数。语言的一个特殊函数,称之为主函数。每个每个C程序都必须有一个且只能有一个主函数,整个程序都必须有一个且只能有一个主函数,整个程序从主函数开始执行,最后结束于主函数。程序从主函数开始执行,最后结束于主函数
3、。main()表示主函数的函数头。表示主函数的函数头。l“”中的内容是函数体。主函数中的所有操作(或语中的内容是函数体。主函数中的所有操作(或语句)都在这一对句)都在这一对“”之间。本程序的主函数中只有之间。本程序的主函数中只有一条函数调用语句。一条函数调用语句。l“/*/”表示注释,不执行。表示注释,不执行。第一个程序显示的是第一个程序显示的是,能不能显,能不能显示示数字数据数字数据呢?呢?C程序还可以包括哪些内容呢?程序还可以包括哪些内容呢?下面仿照第一个下面仿照第一个C程序来编写其他程序。程序来编写其他程序。例例2-1 2-1 编写编写C C程序计算圆的周长和面积,程序计算圆的周长和面积
4、,并将结果输出到屏幕。并将结果输出到屏幕。要计算圆面积和周长,务必知道圆半径,要计算圆面积和周长,务必知道圆半径,怎样才能获得呢?怎样才能获得呢?另外,要输出面积和周长(数值数据),另外,要输出面积和周长(数值数据),该怎么办呢?该怎么办呢?下面我们进一步来分析第一个下面我们进一步来分析第一个C程序的组成:程序的组成:lprintf是是C语言的库函数,功能是把要输出语言的库函数,功能是把要输出的内容送到显示器去显示。本语句表示的内容送到显示器去显示。本语句表示main函数将函数将“Hello,World!n”作为参数调作为参数调用库函数用库函数printf以显示字符序列。以显示字符序列。“n”
5、代代表示换行符。表示换行符。lmain和和printf是系统预定义的标识符,分别是系统预定义的标识符,分别表示主函数名和标准输出函数名。其中,表示主函数名和标准输出函数名。其中,main是不能改变其用途的,而是不能改变其用途的,而printf是可以是可以改变用途的。改变用途的。main();函数头函数头函数体函数体C语句语句l每条语句用分号每条语句用分号“;”结束。结束。不是语句的,不能以分号结束,如预处理不是语句的,不能以分号结束,如预处理命令。命令。在例中使用在例中使用printf库函数输出了库函数输出了“hello,world!n”字符序列。而在例字符序列。而在例2-1中要输出中要输出数
6、值数据,其函数如何表示呢?数值数据,其函数如何表示呢?printf库函数的一般形式:库函数的一般形式:printf(格式控制字符串格式控制字符串,输出项列表,输出项列表)格式输出函数格式输出函数 printf(格式控制字符串格式控制字符串,输出项输出项表列表列);输出若干个任意类型的数据输出若干个任意类型的数据printf(a=%d b=%f,a,b);函数名函数名输输出出表表列列普通普通字符字符格式说明格式说明 格式控制字符串是用双引号引起来的字符格式控制字符串是用双引号引起来的字符串,它包括格式转换说明符和普通字符。串,它包括格式转换说明符和普通字符。格式转换说明符由格式转换说明符由%、修
7、饰符、格式字、修饰符、格式字符组成,它的作用是将输出的数据转换为符组成,它的作用是将输出的数据转换为指定的格式输出。指定的格式输出。如:如:%f表示将数据按实数形式输出;普表示将数据按实数形式输出;普通字符按原样输出,如逗号、空格、提示通字符按原样输出,如逗号、空格、提示信息等;信息等;输出列表项给出需要输出的一些数据,其输出列表项给出需要输出的一些数据,其个数必须与格式控制字符串中格式字符的个数必须与格式控制字符串中格式字符的个数一致。个数一致。例如:例如:printf(area=%fn,3.14159*5.3*5.3);表示原样显示表示原样显示“area=”,再按实数形式显,再按实数形式显
8、示表达式示表达式“3.14159*5.3*5.3”的结果,并的结果,并换行。换行。#include void main()printf(area=%fn,3.14159*5.3*5.3);/*输出面积输出面积*/printf(circumference=%fn,2*3.14159*5.3);/*输出周长输出周长*/下面仿照例下面仿照例1-3使用使用printf库函数实现例库函数实现例2-1,这里,这里printf库函数输出实数。库函数输出实数。例例2-12-1程序说明:程序说明:linclude是预处理命令是预处理命令 lvoid是系统定义的关键字,表示空类型是系统定义的关键字,表示空类型li
9、nclude、stdio是系统定义的标识符是系统定义的标识符l3.14159和和5.3是实型常量是实型常量l3.14159*5.3*5.3和和2*3.14159*5.3是算术表达式是算术表达式l%f是格式转换说明符,表示表达式的结果按实数形式输出是格式转换说明符,表示表达式的结果按实数形式输出 void是系统定义的关键字,表示空类型,表示函是系统定义的关键字,表示空类型,表示函数没有返回值;数没有返回值;VC要求每个函数必须要写明返回要求每个函数必须要写明返回值类型,如果没有,则是值类型,如果没有,则是void。include、stdio是系统定义的标识符是系统定义的标识符 3.14159和和
10、5.3是实型常量是实型常量 3.14159*5.3*5.3和和2*3.14159*5.3是算术表是算术表达式达式%f是格式转换说明符,表示表达式的结果按实数是格式转换说明符,表示表达式的结果按实数形式输出形式输出 主函数主函数mainmain 标识符与关键字标识符与关键字 基本数据类型基本数据类型 常量与变量常量与变量 基本表达式基本表达式 C C语句语句 格式化输入输出格式化输入输出 预处理命令预处理命令 注释注释 前面反复提到标识符、关键字,什么是关前面反复提到标识符、关键字,什么是关键字、标识符呢?键字、标识符呢?关键字(关键字(Keyword)又称为保留字,又称为保留字,C语言中预先规
11、定的具有固定含义的一语言中预先规定的具有固定含义的一些单词些单词 如:如:int,float等等 标识符(标识符(Identifier)系统预定义标识符,如:系统预定义标识符,如:main,printf,include,stdio 等等 用户自定义标识符,如:用户自定义标识符,如:r,Add,x,y 等等C C语言中的常用的关键字(附录语言中的常用的关键字(附录B)有以下)有以下32个:个:(1 1)类型名关键字:)类型名关键字:intint、charchar、floatfloat、doubledouble、shortshort、longlong、unsignedunsigned、voidvo
12、id(2 2)存储类别关键字:存储类别关键字:autoauto、static static、register register、extern extern(3 3)控制语句关键字:控制语句关键字:if if、whilewhile、do do、gotogoto、break break、continuecontinue、for for、default default、case case、switch switch、returnreturn、else else(4 4)自定义类型关键字:自定义类型关键字:structstruct、union union、enumenum (5 5)其他关键字:其他关
13、键字:typedeftypedef、sizeofsizeof 、signedsigned、includeinclude、definedefine另外,另外,Turbo C2.0扩展关键字有:扩展关键字有:asm,_cs,_ds,_es,_ss,cdecl,far,near,huge,interrupt,pascal 标识符分为:标识符分为:系统预定义标识符(如系统预定义标识符(如 main、printf 等)等)用户自定义标识符(如用户自定义标识符(如Add、r、x,y,sum等)等)在程序中使用的常量、变量、语句标号以及函在程序中使用的常量、变量、语句标号以及函数的名称等统称为标识符(数的名
14、称等统称为标识符(Identifier)除库函数的函数名、头文件名和预处理命令由除库函数的函数名、头文件名和预处理命令由系统定义外,其余都由用户自定义系统定义外,其余都由用户自定义标识符的命名必须遵守以下原则标识符的命名必须遵守以下原则:(1)不能是)不能是C语言中的关键字,如语言中的关键字,如int,do,for等等等。等。(2)只能由字母,数字,和下划线三种字符组成,)只能由字母,数字,和下划线三种字符组成,且第一个字符必须是字母或下划线。且第一个字符必须是字母或下划线。(3)不要太长。旧的)不要太长。旧的ANSI C规定前规定前6个字符有效;个字符有效;在在IBM-PC的的MSC系统中取
15、系统中取8个字符;个字符;Turbo C则则允许允许32个字符。个字符。(4)见名知义。区分大小写。)见名知义。区分大小写。合法的标识符合法的标识符 不正确的标识符不正确的标识符 smart 5smart smart 5smart _decision bomb?_decision bomb?key_boardkey_board key.boardkey.board FLOAT FLOAT floatfloat Year2008 a%Year2008 a%lC C 语言的注释符是以语言的注释符是以“/*”开头并以开头并以“*/”/”结尾的字符序列。在结尾的字符序列。在“/*”和和“*/”/”之间
16、的即为注释。之间的即为注释。l注释在程序中起提示、解释程序的作用。注释可出现在程序中的任何位置。注释在程序中起提示、解释程序的作用。注释可出现在程序中的任何位置。程序编译时,不对注释作任何处理。程序编译时,不对注释作任何处理。l在软件开发过程中,还可以将注释用于程序的调试,暂时屏蔽一些语句。在软件开发过程中,还可以将注释用于程序的调试,暂时屏蔽一些语句。l注释与软件的文档同等重要,要养成使用注释的良好习惯,这对软件的维注释与软件的文档同等重要,要养成使用注释的良好习惯,这对软件的维护相当重要。护相当重要。如:如:/*LI2_1.cLI2_1.c*/#include#include void m
17、ain()void main()printf(areaprintf(area=%=%fnfn,3.14159,3.14159*5.3 5.3*5.35.3);/);/*输出面积输出面积 */printf(circumferenceprintf(circumference=%fn,2 =%fn,2*3.14159 3.14159*5.3);/5.3);/*输出周长输出周长 */l 数据为什么要区分类型?数据为什么要区分类型?例例2-1中中“2*3.14159*5.3”的的2为整数,为整数,5.3和和3.14159为实数,其范围不一样为实数,其范围不一样开辟不同的内存空间开辟不同的内存空间可以参加
18、的运算不同可以参加的运算不同l 不同类型的数据代表不同的不同类型的数据代表不同的数据表示形式数据表示形式合法的取值范围合法的取值范围占用内存空间大小占用内存空间大小可参与的运算种类可参与的运算种类 在程序中指定数据的类型就是为了明确存在程序中指定数据的类型就是为了明确存储空间的大小,以便对内存中的数据进行储空间的大小,以便对内存中的数据进行操作!操作!数据类型数据类型基本类型基本类型构造类型构造类型指针类型指针类型空类型空类型整型整型实型(浮点型)实型(浮点型)字符型字符型枚举类型枚举类型数组类型数组类型结构体类型结构体类型共用体类型共用体类型单精度实型单精度实型双精度实型双精度实型基本整型基
19、本整型长整型长整型短整型短整型无符号整型无符号整型l 整型整型int 整数,在目前绝大多数机器上占整数,在目前绝大多数机器上占4个字节。个字节。TC环境中是环境中是2个字节个字节l 单精度实型单精度实型float 单精度浮点数,一般是单精度浮点数,一般是4个字节长个字节长l 双精度实型双精度实型double 双精度浮点数,一般是双精度浮点数,一般是8个字节长个字节长l 字符型字符型char 字符,一般是字符,一般是1个字节长个字节长 用来表示用来表示256个个ASCII字符,或者字符,或者0255的整数的整数l 枚举型枚举型enum类型符号关键字数的表示范围所占位数整型整型字符型字符型实型实型
20、有无(signed)int16-3276832767(signed)short16-3276832767(signed)long32-2147483648214748364716unsigned int0655353204294967295unsigned longunsigned short16065535有float323.4e-383.4e38有double641.7e-3081.7e308有char8-128127无unsigned char80255说明说明:数据类型所占字节数随机器硬件不同而不同数据类型所占字节数随机器硬件不同而不同,上表以上表以IBM PC机为例。机为例。v占字节
21、数随机器不同而不同占字节数随机器不同而不同,一般占一一般占一个机器字个机器字vshortintlongshortintlongv可用下面运算可用下面运算测量测量:sizeofsizeof(数据或数据数据或数据类型符类型符或变量名或变量名)求出的结果为表达式值所属类型或者求出的结果为表达式值所属类型或者类型占用的字节数类型占用的字节数#include void main(void)printf(Data type Number of bytesn);printf(-n);printf(char%dn,sizeof(char);printf(int%dn,sizeof(int);printf(sh
22、ort int%dn,sizeof(short);printf(long int%dn,sizeof(long);printf(float%dn,sizeof(float);printf(double%dn,sizeof(double);l在基本数值数据类型之前都可以加各种类在基本数值数据类型之前都可以加各种类型修饰符。型修饰符。l short short int,短整数,一般,短整数,一般2个字节长。通常简写为个字节长。通常简写为shortl long long int,长整数,一般是,长整数,一般是4个字节长。通常简写为个字节长。通常简写为long long double,长双精度(高精度
23、)浮点数,一般是,长双精度(高精度)浮点数,一般是10个字节长。个字节长。l signed 用来修饰用来修饰char、int、short和和long,说明他们是有符,说明他们是有符号的整数(正整数、号的整数(正整数、0和负整数)。一般缺省都是有符号和负整数)。一般缺省都是有符号的,所以这个修饰符通常省略的,所以这个修饰符通常省略l unsigned 用来修饰用来修饰char、int、short和和long,说明他们是无符,说明他们是无符号的整数(正整数和号的整数(正整数和0)整型(以补码方式存储)整型(以补码方式存储)实型(默认为实型(默认为double型,以浮点数指数形式存储)型,以浮点数指
24、数形式存储)N=S2 2j j 字符型(存放字符型(存放ASCII码值码值)阶码符号阶码符号阶码的数值阶码的数值尾数符号尾数符号尾数的数值尾数的数值阶码阶码j尾数尾数Sl具体问题具体分析,尽量选择取值范围较具体问题具体分析,尽量选择取值范围较大些的数据类型大些的数据类型 1+2+3+1!+2!+3!+13+23+33+在例在例2-1中,将圆半径用一个实型变量中,将圆半径用一个实型变量r来存放,程来存放,程序源代码如下:序源代码如下:#include void main()float r=5.3;/*定义实数变量,以备后面使用定义实数变量,以备后面使用*/printf(area=%fn,3.14
25、159*r*r);/*输出面积输出面积*/printf(circumference=%fn,2*3.14159*r);/*输出周长输出周长*/#include void main()int a=23,b=45;/*定义两个整型变量定义两个整型变量*/printf(sum=%dn,a+b);其中,其中,“%d”表示按十制整数输出。表示按十制整数输出。如果我们希望将面积和周长、以及两数和如果我们希望将面积和周长、以及两数和保存起来,应该怎么办?保存起来,应该怎么办?数据的表现形式有两种:数据的表现形式有两种:常量常量 变量变量 在上述程序中,在上述程序中,常量(常数):常量(常数):5.3、23、
26、45 变量:变量:r、a、bl常量是一种在程序中保持固定类型和固定值常量是一种在程序中保持固定类型和固定值的数据。编译系统从数据形式上可以区分的数据。编译系统从数据形式上可以区分(除枚举类型外)。常量分为:(除枚举类型外)。常量分为:整型常量整型常量 实型常量实型常量 字符常量字符常量 字符串常量字符串常量 枚举常量枚举常量l变量是在程序执行过程中可以改变。变量是在程序执行过程中可以改变。l整型常量整型常量 十进制:十进制:18、-31 long int型常量型常量 123l、123L、123456l、123456L unsigned int型常量型常量 123u、123U 根据实际数据大小确
27、定根据实际数据大小确定int型还是型还是long型型l 以数字以数字“0”开始的整型常量是八进制数开始的整型常量是八进制数 022、-037 010和和10大小不一样大小不一样 因为八进制并不常用,所以此种表示法比较少见因为八进制并不常用,所以此种表示法比较少见l 以以“0 x”或者或者“0X”开始的整型常量是十六进制开始的整型常量是十六进制 AF和和af用来表示十进制的用来表示十进制的1015 十六进制的形式比较常用十六进制的形式比较常用 0 x12、-0 x1F,-0 x1fv三种形式:三种形式:十进制整数:由数字十进制整数:由数字0 09 9和正负号表示和正负号表示.如如 123,-45
28、6,0123,-456,0八进制整数:由数字八进制整数:由数字0 0开头开头,后跟数字后跟数字0 07 7表示表示.如如0123,0110123,011十六进制整数:由十六进制整数:由0 x0 x开头开头,后跟后跟0 09,a9,af,Af,AF F表示表示.如如0 x123,0Xff0 x123,0Xff例例 12 与与 12L例例 30000 为为int型型 65536 为为long int 型型v整型常量的类型整型常量的类型根据其值所在范围确定其数据类型根据其值所在范围确定其数据类型在在整常量后加字母整常量后加字母l l或或L L,认为它是认为它是long int 型常量型常量问题:问题
29、:0123 =()100 x123=()100Xff =()1083291255问题:问题:0123 =()100 x123=()100Xff =()10l实型常量实型常量 十进制小数形式十进制小数形式:123.45、456.78 指数形式指数形式:1e-2、4.5e3 float型常量型常量 123.45f、456.78F、1e-2f、4.5e3F long double型常量型常量 123.45l、456.78L、4.5e3L 缺省为缺省为doublel 字符常量的表示方法字符常量的表示方法 a,A,5,%,$单引号内只能有一个字符,除非用单引号内只能有一个字符,除非用“”开头开头l 就是
30、一个普通整数,也可以参与各种数学运算就是一个普通整数,也可以参与各种数学运算 每个字符具有一个每个字符具有一个0255之间的数值,可从之间的数值,可从ASCII表表查出查出 注意:注意:5和整数和整数5的区别的区别 字符的数学运算在密码学内用得比较多字符的数学运算在密码学内用得比较多l 用用“”开头的字符为转义字符开头的字符为转义字符 例如,例如,n,代表,代表1个字符个字符附录附录Al转义字符转义字符 一些特殊字符(无法从键盘输入或者另有它用)用一些特殊字符(无法从键盘输入或者另有它用)用转义字符表示转义字符表示转义字符转义字符含义含义nvradddtbf“xhh转义字符转义字符含义含义换行
31、换行垂直制表垂直制表回车回车响铃响铃单引号单引号3位位8进制数代表的字符进制数代表的字符水平制表水平制表退格退格换页换页反斜线反斜线双引号双引号2位位16进制数代表的字符进制数代表的字符/*LI2_4.c*/#include void main(void)printf(*ntABC 123n abc 321tbn*n);用双引号括住的由用双引号括住的由0个或多个字符组成的字符序列个或多个字符组成的字符序列 I am a string 表示空字符串表示空字符串 转义字符也可以在字符串中使用转义字符也可以在字符串中使用 引号只作为字符串开始和结束的标志引号只作为字符串开始和结束的标志 C语言内部用
32、语言内部用0表示字符串的结束表示字符串的结束 除注释外,是唯一可以出现中文的地方除注释外,是唯一可以出现中文的地方 x和和x是不同的是不同的 里定义了一系列专门的字符串处理函数里定义了一系列专门的字符串处理函数 假如不使用常量,直接使用常数,有什么影响?假如不使用常量,直接使用常数,有什么影响?程序的可读性变差程序的可读性变差 容易发生书写错误容易发生书写错误 修改麻烦修改麻烦 常量只能在定义时赋值,以后常量只能在定义时赋值,以后不能不能再改变其值再改变其值 符号常量(宏常量)符号常量(宏常量)枚举常量枚举常量 常数、符号常量和枚举常量,都可以用来表示一个常数、符号常量和枚举常量,都可以用来表
33、示一个永远不会改变的数永远不会改变的数 建议不要直接使用常数,而用后二者代替建议不要直接使用常数,而用后二者代替 也可以用标识符代表常量,称为符号常量。也可以用标识符代表常量,称为符号常量。其定义格式为:其定义格式为:#define 符号常量符号常量 常数或字符序列常数或字符序列 符号常量符号常量 也称宏常量也称宏常量 一般采用大写字母表示一般采用大写字母表示 不是语句,而是一种编译预处理命令不是语句,而是一种编译预处理命令 宏替换宏替换 使用字符序列替换使用字符序列替换 area=7.068577circumference=9.424770#include#define PI 3.14159
34、void main()float r=5.3;printf(area=%fn,PI*r*r);printf(circumference=%fn,2*PI*r);枚举即一一列举,枚举类型描述一组有限个整型数枚举即一一列举,枚举类型描述一组有限个整型数据值的集合。据值的集合。例子:例子:enum weeks SUN,MON,TUE,WED,THU,FRI,SAT;enum weeks today;enum response no,yes,none;enum response answer;today =TUE;answer=yes;if(answer=yes)printf(Today is Tue
35、sday.n);else printf(Today is NOT Tuesday.n);l 概念:其值可以改变的量概念:其值可以改变的量l 三要素:变量名、变量值、存储单元三要素:变量名、变量值、存储单元l 使用变量的基本原则使用变量的基本原则 变量必须先定义,后使用变量必须先定义,后使用 所有变量必须在第一条可执行语句前定义所有变量必须在第一条可执行语句前定义l 存储单元的地址使用存储单元的地址使用&获取获取3a变量名变量名变量值变量值存储单元存储单元v变量初始化变量初始化:定义时赋初值定义时赋初值 例:int a,b,c;float data;决定分配字节数和数的表示范围合法标识符例:in
36、t a=2,b,c=4;float data=3.67;char ch=A;int x=1,y=1,z=1;int x=y=z=1;v变量的使用:先定义,后使用变量的使用:先定义,后使用例 int student;stadent=19;/Undefined symbol statent in function main 例 float a,b,c;c=a%b;/Illegal use of floating point in function main v变量定义位置:一般放在函数开头变量定义位置:一般放在函数开头main()int a,b=2;float data;a=1;data=(a+b
37、)*1.2;printf(“data=%fn”,data);变量定义可执行语句main()int a,b=2;a=1;float data;data=(a+b)*1.2;printf(“data=%fn”,data);编译程序根据变量定义为其分配指定字节的内存单元.地址int a=1,b=-3,c;abc2字节2字节2字节地址地址.内存1-3随机数v变量定义的一般格式:变量定义的一般格式:数据类型数据类型 变量变量1,变量,变量2,变量,变量n;#include void main()int a=23,b=45;/*定义两个整型变量定义两个整型变量*/int sum;/*定义存放结果的整型变量
38、定义存放结果的整型变量*/sum=a+b;/*赋值语句赋值语句*/printf(sum=%dn,sum);/*显示程序运算结果显示程序运算结果*/其中,其中,“%d”表示按十制整数输出。表示按十制整数输出。例例 intint i=10,j,k;i=10,j,k;j=1;j=1;/*赋值语句赋值语句*/k=20;k=20;/*赋值语句赋值语句*/printf(“%dn”,sizeof(intprintf(“%dn”,sizeof(int);/);/*结果为?结果为?*/printf(“%dn”,sizeof(iprintf(“%dn”,sizeof(i);/);/*结果为?结果为?*/print
39、f(“%dn”,sizeof(longprintf(“%dn”,sizeof(long);/);/*结果为?结果为?*/printf(“%dn”,sizeof(10L);/printf(“%dn”,sizeof(10L);/*结果为?结果为?*/有符号整型变量有符号整型变量 基本型:一般占基本型:一般占2 2个字节个字节(16(16位位),intint 短整型:一般占短整型:一般占2 2个字节个字节(16(16位位),short short intint 长整型:一般占长整型:一般占4 4个字节个字节(32(32位位),long long intint 有符号整型变量使用有符号整型变量使用si
40、gnedsigned修饰,但缺省的数据类型即表示有符号整型数修饰,但缺省的数据类型即表示有符号整型数据,因此可以省略修饰符据,因此可以省略修饰符signedsigned。无符号整型变量无符号整型变量 无符号基本型:一般占无符号基本型:一般占2 2个字节个字节(16(16位位),unsigned unsigned intint 无符号短整型:一般占无符号短整型:一般占2 2个字节个字节(16(16位位),unsigned short unsigned short intint 无符号长整型:一般占无符号长整型:一般占4 4个字节个字节(32(32位位),unsigned long unsigne
41、d long intint11 11 11 11 11 11 11 11unsigned int型:型:最大:6553500 00 00 00 00 00 00 00最小:001 11 11 11 11 11 11 11int型:最大:3276710 00 00 00 00 00 00 00最小:-32768 ANSIANSI标准建议各标准建议各种整型数据所占位数种整型数据所占位数和数值范围如右表所和数值范围如右表所示示(TurboCTurboC与该表定与该表定义一致义一致):注意:注意:在微机上用在微机上用longlong型可以得到大范围的型可以得到大范围的整数,但同时会降低整数,但同时会降
42、低运算速度,因此除非运算速度,因此除非不得已,不要随便使不得已,不要随便使用用longlong型数据。型数据。类型类型名称名称比特比特数数最小取值范围最小取值范围signed short int有符号短有符号短整型整型16-3276832767 即即-215(215-1)signed int有符号基有符号基本整型本整型16-3276832767 即即-215(215-1)signed long int有符号长有符号长整型整型32-2147483648-2147483647 即即-231(231-1)unsigned short int无符号短无符号短整型整型16065535 即即0(216-1
43、)unsigned int无符号基无符号基本整型本整型16065535 即即0(216-1)unsigned long int无符号长无符号长整型整型3204294967295 即即0(232-1)有符号整数的范围有符号整数的范围-3276832767-3276832767,无符号整数的范围,无符号整数的范围065535065535。无符号整数。无符号整数使用使用unsignedunsigned修饰。在声明变量时,如果不指定修饰。在声明变量时,如果不指定unsignedunsigned或指定或指定signedsigned,则表则表示有符号型数据,符号位有效。如果指定示有符号型数据,符号位有效。
44、如果指定unsignedunsigned,则表示无符号型数据,符则表示无符号型数据,符号位为该数本身。号位为该数本身。032767有符号整型有符号整型变量变量a:111111111111111符号位符号位165535无符号整型无符号整型变量变量c:111111111111111代表数据代表数据的第一位的第一位1-1有符号整型有符号整型变量变量b:111111111111111如:如:intint a,b;a,b;a=32767;a=32767;b=-1;b=-1;unsigned unsigned intint c;c;c=65535;一个一个int型变量的最大允许值为:型变量的最大允许值为:
45、32767。如果再加。如果再加1,则结果会变成,则结果会变成-32768。032767a:1111111111111111-32768b:000000000000000例例:void main()int a=32767,b;long c;b=a+1;c=(long)a+1L;printf(“a=%d,b=%d,c=%ld”,a,b,c);运行结果为:运行结果为:32767,-32768,32768例例:void main()int x=-1;unsigned int y;y=x;printf(“%d,%d,%un”,x,y,y);运行结果为:运行结果为:-1,-1,65535 无符号数输出时,
46、最高位数值变成符号位。如符号位为无符号数输出时,最高位数值变成符号位。如符号位为1,则输出负数。,则输出负数。&实型变量实型变量vfloatfloat:占占4 4字节,提供字节,提供6 67 7位有效数字,位有效数字,10-371038vdoubledouble:占占8 8字节,提供字节,提供15151616位有效数字,位有效数字,10-30710308例例 float a;a=123456.123;/*a=123456.1 共共7位位*/double b;b=123456.123;/*b=123456.123000000 共共15位位*/printf(“%dn”,sizeof(float);
47、/*结果为结果为4*/printf(“%dn”,sizeof(a);/*结果为结果为4*/printf(“%dn”,sizeof(double);/*结果为结果为8*/printf(“%dn”,sizeof(b);/*结果为结果为8*/一个实型变量在内存中是按浮点数指数形式存放的。系统把一个实型数据一个实型变量在内存中是按浮点数指数形式存放的。系统把一个实型数据分成小数部分和指数部分,分别存放。不少分成小数部分和指数部分,分别存放。不少C C编译系统以编译系统以2424位表示小数部分位表示小数部分(包包括符号括符号),以,以8 8位表示指数部分位表示指数部分(包括指数的符号包括指数的符号)。小
48、数部分占的位。小数部分占的位(bit)(bit)数愈数愈多,数的有效数字就越多,精度愈高。指数部分占的位数越多,则能表示的数多,数的有效数字就越多,精度愈高。指数部分占的位数越多,则能表示的数值范围就越大。值范围就越大。+.3141592+.314159 *102符号符号小数部分小数部分指数指数31.4159 如实数:如实数:31.415931.4159的指数形式为:的指数形式为:.314159.314159*10102 2 ,它在内存中的存放形式可以它在内存中的存放形式可以表示为右图所示。表示为右图所示。图中用十进制表示的,实际上在计算机图中用十进制表示的,实际上在计算机中是用二进制来表示小
49、数部分,用中是用二进制来表示小数部分,用2的幂次的幂次来表示指数部分。来表示指数部分。1000 xx.xx阶符阶码数符尾数例例:void main()float a,b;a=123456.789e5;b=a+20.0f;printf(“a=%fnb=%fn”,a,b);运行结果:运行结果:a=12345678848.000000 b=12345678848.000000 输出结果是输出结果是a与与b相等。虽然理论上相等。虽然理论上b应应比比a大大20,应为,应为12345678920。而实型变量。而实型变量只能保证只能保证7位有效数字,后面的数字是无位有效数字,后面的数字是无意义的,并不准确地
50、表示该数。意义的,并不准确地表示该数。因此应该避免将一个很大的数和一个因此应该避免将一个很大的数和一个很小的数直接相加或相减,否则就会很小的数直接相加或相减,否则就会“丢丢失失”小的数。小的数。同样,计算同样,计算1.0/3.0*3.0的结果并不等的结果并不等于于1。由于实型变量是用有限的存储单元存储的,因此能提供的有效数字总是有由于实型变量是用有限的存储单元存储的,因此能提供的有效数字总是有限的,在有效位以外的数字将被舍去,由此可能会产生一些误差。限的,在有效位以外的数字将被舍去,由此可能会产生一些误差。1234567936.0000001234567890.000000&字符型变量字符型变