C程序设计(第五版) 第三章 知识总结 1
由于第三章知识内容杂多,将分为几部分整理
一(1) 常量和变量 P39
常量
(1)整型常量 如1000,12345,0,-345
(2)实型常量 两种表示形式
1 十进制小数形式如:123.456 0.2 12.0 -3.2 .13 -80.
2 指数形式 如:12.34e3(代表12.3410^3),23.4e-25(代表23.410^-25)
由于计算机输入或输出时无法表示上角或下角,故规定以字母e或E代表10为底数的指数。注意:e或E之前必须有数字,且e或E后面必须为整数。不可写成:e4 ,12e2.5
注意:小数点两边可以没有数,但不能同时没有。
(3)字符常量 两种形式:
1 普通字符 用单撇号括起来的一个字符。注:单撇号只是界限符,字符常量只能是一个字符,不包括单撇号。字符常量不是存储字符本身,而是以其代码(一般用ASCII代码)存储的。不可是:'aab' '12'
2 转义字符 P40
C语言还允许用一种特殊形式的字符常量,就是以字符“\”开头的字符序列。详细转义字符及其作用见P40
指将“\”后面的字符转换成另外的意义。例如:‘\101’ 表示八进制数101的ASCII字符,即‘A’。 对于转义字符来说,只能使用八进制或者十六进制。
注意:“\t”表示使输出位置跳到下一个Tab位置(一个Tab为8列)。这里并不是从光标当前位置开始往后算8列到新位置,而是以当前tab区域开始的位置开算,到下一个Tab区域的开头。例如:printf("abcdefg\ta"); 输出结果为”abcdefg a“因为abcdefg占了7个字符加上一个空格一共8列才表示第一个tab的区域,此时,光标在第8列,所以a是在第二个tab区域的开头输出的。又如:printf("abcdefgh\ta") 结果为“abcdefgh--------a"(-表示空格),因为打印完abcdefgh,此时光标在第9列(第二个tab区域的第一列),所以a在第三个tab区域的开头输出。
(4)字符串常量
用双撇号把若干个字符括起来,字符串常量是双撇号中的全部字符(不包括双撇号本身) 注:单撇号内只能包含一个字符,双撇号内可以包含一个字符串。
(5)符号常量
用#define 指令 指定用一个符号名称代表一个常量。如:
#define PI 3.1416 //末尾没有分号
符号常量优点:1.含义清楚 定义符号常量名时应该考虑“见名知义“ 2.一改全改
注:区分符号常量和变量。符号常量不占内存,只是一个临时符号,代表一个值,不能对符号常量赋新值。
变量
变量代表一个有名字、具有特定属性的一个存储单元。
变量必须先定义,后使用。
变量名实际上是以一个名字代表的一个存储地址。
从变量中取值,实际上是通过变量名找到相应的内存地址,从该存储单元中读取数据。
常变量
C99允许使用常变量,在定义变量时,前面加一个关键字const如:const int a=3; 定义a为一个整型变量,指定其值为3,在变量存在期间其值不能改变。
常变量和常量区别:常变量具有变量基本属性:有类型,占存储单元,只不允许改变其值。
常变量和符号常量的区别:定义符号常量用#define指令,是预编译指令,用符号常量代表一个字符串。符号常量不分配存储单元。常变量要占用存储单元,有变量值。
标识符
对变量、符号常量名、函数、数组、类型等命名的有效字符序列统称为标识符。
标识符只能由字母、数字和下划线3种字符组成,且第1个字符必须为字母或下划线。
一(2)数据类型,数据类型大小 P43
所谓类型,就是对数据分配存储单元的安排,包括存储单元的长度(占多少字节)以及数据的存储形式。详细C语言使用的类型见P43
基本类型(整型和浮点型)和枚举类型变量值都是数值。统称为算术类型。
算术类型和指针类型统称为纯量类型,统称其变量以数字来表示的。
数组类型和结构体类型称为组合类型。共用体类型不属于组合类型。
C语言中既没有逻辑类型也没有集合类型
数据类型决定:
1.数据占内存字节数
2.数值取值范围
3.可以进行的操作
1 整型数据 P44
1.整型数据分类
(1)基本整型(int型)
系统分配给int型数据2个字节或4个字节(Turbo C 2.0 16位 VC++ 32位)。在存储单元中的存储方式:**用整数的补码形式存放**。一个正数的补码是此数的二进制形式,负数应先求出此数的补码。负数求补码方式:**先将此数的绝对值写成二进制形式,再对其所有的二进位按位取反,再加一**。
在存放整数的存储单元中,最左面一位是**符号位**,0表示数值为正,1表示数值为负。
因此,如果整型变量分配2个字节,存储单元中存放最大值是0111111111111111即2^15-1,十进制数32767.最小值1000000000000000,即-2^15,即-32768,范围就是-32768~32767
(2)短整型
类型名为:short int 分配2个字节(16位)。
(3)长整型
类型名:long int 或long 分配4个字节(32位)。
(4)双长整型
类型名 long long int 分配8个字节(64位)。 C99新增类型
2.整型变量的符号属性
整型数据常见的存储空间和值的范围 见p45表格
为了充分利用变量值得范围,可以在类型符号前加上修饰符“unsigned",表示指定该变量是“无符号整数”类型。加上signed或者默认什么都不加表示“有符号类型”
有符号整形数据存储单元最高位表示数值符号(0为正,1为负)。
无符号整型,存储单元中全部二进位都用作存放数值本身。
无符号变量只能存放不带符号的整数,如123,889 不可是-123。
由于无符号数最左边不表示符号,所以比有符号整型变量中正数的范围大一倍。
**注意**:
1.只有整型(字符型)数据可以加signed或unsigned修饰符,**实型数据不可以**!
2.无符号整型数据用**“%u"**格式输出。
3.关于无符号整型赋负值出错的问题。(具体见文档《关于C语言隐式转换以及无符号类型赋负值的问题》http://www.sgyh.xyz/archives/67.html)
2 字符型数据 P47
字符是按其代码(整数)形式存储的。
字符和字符代码只能使用系统的字符集中的字符,大多数系统采用ASCII字符集。各种字符集的基本集都包括了127个字符,详细见P47
ASCII代码对多用7个二进制位就可以表示。在C语言中,指定一个字节(8位)存储一个字符。字节中的第一位置为0.
字符变量:
字符变量是用类型符char定义字符变量。
char c='?'; c是字符变量,实质上是**一个字节的整型变量**,称为字符变量。输出字符变量时,可选择以十进制整数输出(%d)或以字符形式输出(%c)。
**字符类型也属于整型**,也可以用signed和unsigned修饰符。
3 浮点型数据(实型数据) P49
浮点型数据是用来表示具有小数点的实数。由于小数点可以浮动,所以实数的指数形式称为浮点数。
1.float型(单精度浮点型)
每一个float型变量分配4个字节,在存储时,系统将实型数据分成小数部分和指数部分两个部分,分别存放。
在4个字节(32位)中,有的C语言编译系统以24位表示小数部分(包括符号),8位表示指数部分(包括指数符号)
由于二进制形式表示一个实数以及存储单元的长度有限,因此不可能得到完全精确地值。**小数部分的位数越多,数的有效数字越多**,精度越高。**指数部分位数越多**,能表示的**数值范围**越大。
float型能得到6位有效数字(有效数字指是**整数部分和小数部分一共6位**)
范围:-3.4x10^-38~3.4x10^38
2.double型(双精度浮点型)
用8个字节存储一个double型数据,可以**得到15位有效数字**。精度-1.7x10^-308~1.7x10^308
C语言中进行浮点数算术运算时,**将float型数据都自动转换位double型运算**。
3.long double型(长双精度)
Turbo C分配16个字节,19位有效数字。VC++分配8个字节,15位有效数字。
具体实型数据情况见表格P50
注意:要避免一个很大数和一个很小数相减,会有舍入误差。
怎样确定常量类型?
1.整型常量
不带小数点的数值是整型常量,**但应注意其有效范围**!
在一个整数的末尾加大写字母L或小写字母l表示它是**长整型**。
2.浮点型常量
凡以小数形式或指数形式出现的实数均为浮点型类型,在内存中以指数形式存储。
C编译系统**对浮点型常量都按双精度处理**,**分配8个字节**。
注意:在进行编译时,对float变量分配4个字节,但对于浮点型常量3.14159,则按照双精度处理,分配8个字节。可以**在常量末尾加字母F或f,表示是float型常量**,分配4个字节。如果**在后面加大小写L,则指定此常量为long double型**。
如:float a=3.14159f long double a=1.23L
完整文档:https://www.jianguoyun.com/p/De9rgJUQvuOmCRjB6ZAE
引用请注明出处:http://www.sgyh.xyz/archives/69.html
- 上一篇: C语言超出数值范围导致溢出问题原理
- 下一篇: C程序设计(第五版) 第三章 知识总结 2