1、符号常量和常变量的区别?
#define PI 3.1415926 //定义符号常量
const float pi=3.1415926 //定义常变量
符号常量PI和常量pi都代表3.1415926,在程序中都能使用。但二者性质不同:
I.定义符号常量用#define预编译指令,它只是用符号常量代表一个字符串,在预编译时仅是进行字符替换,在预编译后,符号常量就不存在了(全部置换成3.1415926),对符号常量的名字不分配储存单元;
II.常变量占用存储单元,有变量值,只是该值不改变。
从使用角度看,常变量具有符号变量的优点,且使用更方便。有了常变量后,可以不必多用符号常量。
2、标识符
C语言规定标识符只能由字母、数字和下划线组成,且第一个字符必须为字母或下划线。
注:标识符区分大小写。
3、数据类型
整型数据
(1)int型:编译系统分配2个字节(16个二进位,Turbo C 2.0)或4个字节(32个二进位,Visual C++),在存储单元中的存储方式是:用整数的补码形式存放。
正数补码:该数的二进制形式,如5的补码:00000000 00000101
负数补码:先将此数的绝对值写成二进制形式,然后对其后面所有各二进位按位取反,再加1
-5的补码:11111111 11111011
5的原码: 00000000 00000101
按位取反:11111111 11111010
再加1: 11111111 11111011
存储单元中,最左边一位为符号位,0表示正数,1表示负数。所以,若给整型变量分配2个字节时,正数最大为01111111 111111111(即2^15-1),最小值为10000000 00000000(即-2^15),也就是说,一个整型变量的取值范围为:-2^15~2^15-1;同理,若给整型变量分配4个字节时,取值范围为-2^31~2^31-1。
不同编译系统给数据分配不同的空间,为了方便,后文全部以Visual C++ 6.0为例。
(2)short int型:分配2个字节。
(3)long int型:分配4个字节。
(4)long long int型:分配8个字节。
注:C标准没有具体规定各种类型数据所占用存储单元的长度,这是由各编译系统决定的,C标准只要求long型数据长度大于int型,int型大于short型。
字符型数据
存储方式:代码(整数)形式存储,即以整数形式(字符的ASCII代码)存放在内存单元中的。
大写字母ASCII代码:65~90
小写字母ASCII代码:97~122
数字0~9ASCII代码:48~57
char型数据分配1个字节,即一个char型变量的取值范围为:-128~127,但字符的代码不可能为负值,所以在存储字符是实际上只用到0~127这一部分,其第一位都是0.
浮点型数据
存储方式:以指数形式存储。存储时将实型数据分成小数部分和指数部分。
float型(单精度浮点型):分配4个字节,6位有效数字。
double型(双精度浮点型):分配8个字节15位有效数字。
long double型(长双精度型):Turbo C 2.0系统分配16个字节,19位有效数字,Visual C++ 6.0系统分配8个字节,15个有效数字。
4、运算符和表达式
基本运算符
+,-,*,/,%,+,-
注:i) 两个实数相除结果是双精度实数,两个整数相除结果是整数,如5/3=1;但若除数或被除数中有一个为负值,则舍入方向不固定。
ii) %运算符要求参加运算的运算对象是整数,结果也是整数。
自增、自减运算符
区分++i,i++:
++i:使用i**之前**,i的值加1;
i++:使用i**之后**,i的值加1;
如:
i=3;
printf("%d",++i); //输出:4
printf("%d",i++); //输出:3
运算符和结合性
结合方向自右至左的运算符:!,~,++,–,-(负号),(类型)即类型转换符,*,&,sizeof,? :(条件运算符),赋值运算符。其运算符结合方向为自左至右。
优先级:
初等运算符 () [ ] -> ·
单目运算符
算数运算符
关系运算符
逻辑运算符(不包括!)
条件运算符
赋值运算符
逗号运算符