一, 基本字符,标识符,关键字
- 基本字符:数字0~9,大小写字母,标点符号,特殊字符(空格、换行、制表符(空白字符),起分隔作用)
- 标识符:程序语言里各种对象的名字
以字母或下划线“_”开头(“_”下划线看作是字母)的字母或数字组成的连续序列。关键字不可作为标识符
合法:f2048,sx211_12a,abc_…
不合法:123X(不是字母开头), a b1(包含了空格这样的特殊字符) - 关键字(也叫做保留字):具有固定含义和用途的标识符
每种高级语言都有一套关键字,C语言的关键字,ANSIC 共有32个
(这些当然不需要死记,在以后敲代码的时间里会慢慢记住的)
二,常量和变量
常量:在程序运行过程中,其值不能被改变的量
1.整型常量:即整数
-
整数十进制写法 (%d以十进制形式输出整数)(常用):
(1) 除0本身外首字符不能为0
(2) 长整数写法:加后缀l或 L(不能有间隔)
◼ 123L 304l 25278L 1l 0L
◼ 小写l易与数字1混淆,建议用大写
(3) 整数前可以加正负号 -
整数八进制写法(%o以八进制形式输出整数):八进制→逢八进一
(1) 0开始的数字序列
(1) 只允许用0~7共8个数字
◼ 0123,06254,0531,0765432L
(3) 八进制数值解读示例
0123→ 1×82 +2×81 +3×80 = 64+16+3 =83 -
整数十六进制写法(%x或%X以十六进制形式输出整数):十六进制→逢十六进一
(1)16进制数的主要目的在于表示冗长的二进制数
(2)共16个数字,除0~9外,用字母 a~f 或 A~F表示其余6个数字,分别代表10~15
(3)每一位16进制数代表4位二制数
(4)写法: 在C语言中用0x或0X开头的数字序列表示
例子:0xA3B5→
◼ 值为10×163 +3×162+11×161+5×160=41909 的整数
◼ 表示二进制数1010 0011 1011 0101
2.实型常量:即小数
- 普通十进制写法
◼ 数字序列,需包含小数点“.”(可以是首/末字符)
例子: 3.2,3.,.93 - 指数写法或科学记数法
◼ e/E 开头数字序列(可带符号),以10为底。可同时有小数点和指数,应注意:e/E之前必须有数字,后面的数字必须为整型
例子:2E-3,2.45e17 - 实数前可以有正负号
3.字符常量:以单撇号‘’括起的占一个字节常量
字符常量(如‘a’)存储在计算机存储单元中时,并不是存储字符(如:a)本身,而是以其代码(一般采用ASCII代码)存储的,例如:字符‘a’ 的ASCII代码时97,则在存储单元中存放的就是01100001(二进制数97)
熟记:‘0’ =48 ‘A’=65 ‘a’=97
- (1)普通字符:用单撇号‘’括起来的一个字符(数字,大写字母,小写字母,标点符号)
- (2)转义字符:以字符“\”开头的字符序列
Printf(“%d %c %c %c \101”,’A’,65,’\101’,’\x41’) ;//输出结果 65 A A A A
4.字符串常量:以双撇号“”括起的全部字符(但不包括双撇号本身)
- 辨析:字符常量和字符串常量
字符常量仅占1个字节,字符串常量占字符数加1个字节(系统自动在字符结尾加’\0’)
5.符号常量:用#define指令(是一个编译预处理命令,它所定义的符号常量在预编译阶段被替换为对应的字符串。),指定用一个符号名称代表一个常量。
- 如:#define PI 3.14
#define TIMES (NUM/4) 也可以定义常量表达式(必须是已定义过的符号常量)
则在编程过程中,用PI即可代替数字3.14,这样既可以减轻程序员的失误性,又可以做到“一改全改”
- 注意:(1)行末没有分号!!
(2)符号名称符合标识符要求
(3)一般写在程序的最上面
(4)为了与变量名相区别,习惯上符号常量用大写表示
6.枚举常量:枚举常量是一种用符号表示的整型数字常量,且由标识符表示。
(1)定义:使用关键字enum定义
(2)初始化和赋值:
- 如果枚举常量被赋了值,则以给定值作为枚举符对应的常量值。
- 当枚举常量没有给定值,只是一个标识符时,该枚举常量的值等于其前面枚举常量的值加1。
- 如果该枚举常量是第一个标识符时且没有给定值,该枚举常量的值等于0。
特别说明:枚举常量在初始化之后不可改变
enum {A, B, C, D, E = 50, F, G, H, I};
//A=0,B=1,C=2,D=3,E=50,F=51,G=52,H=53,I=54
enum {JAN = 1, FEB, MAR, APR, MAY, JUN, JLY, AUG,SEP, OCT, NOV, DEC};`
//FEB=2,......,DEC=12)
变量:在程序运行过程中可以改变的量
变量必须先定义,再使用
1.变量的定义:指定变量的类型和名称
- 变量类型便于编译系统给每一个变量名分配对应的内存空间,变量名便于被引用。
- 可以同时定义多个同类型的变量
double x;
int k, n, sum, count;
2.数据类型:
(只有整型(包括字符型)数据可以用signed或unsigned修饰符,实型数据不能加)
3.变量的初始化:定义变量时指定变量的初始值
- 可用数值或者数值表达式为变量做初始化
double s = (3 + 5 + 7) / 2.0;
long double x = 4.5L, y = 3.24L;
-
初始化只能一次对一个变量做
int i =j=2; (X)
4.变量的赋值
-
赋值:用赋值运算符(=,赋值号)表示
-
赋值语句:赋值号左边是赋值目标(变量),右边是提供值的表达式 如: x=5.0;
-
左边变量和右边的表达值都有类型
◼ 规定 若表达式值与被赋值变量类型不同,该值先转换到变量类型的值,然后赋值。
5.全局变量:在函数之外定义的变量
- 全局变量可以为本文件中其他函数所公用,有效范围为:从定义变量的位置开始到本源文件结束
6.局部变量:在函数内定义的变量
- 定义局部变量可能的两种情况
(1)在函数的开头定义 (在整个函数内有效)
(2)在函数内的复合语句内定义(在程序块内有效)
- 不同函数中可以使用同名的变量,他们代表不同的对象,互不干扰。他们也分别有自己的有效范围。
如:1班有一名同学叫李华,2班也有一名同学叫李华,但这两个人并不是同一个人。1班的活动,只有1班李华参加有效,2班李华不可以冒名顶替哦~
三,运算符与表达式
-
两个实数相除的结果是双精度实数,两个整数相除的结果是为整数
C语言中采取“向零取整”,即取整后向零靠拢。5/3=1;-5/3=-1 -
%(取余)要求参加运算的运算对象为整数,结果也是整数
-
括号是很好的控制计算顺序的手段,这样可以使你的程序计算逻辑更加清晰
-
出现混合类型计算,程序自动将运算对象转换到相同类型的值,而后计算。
自动类型转换原则
◼ 把表示范围小的类型的值转换为表示范围大的类型的值
◼ 各种类型的表示范围从小到大是int<long<float<double<long double -
自增自减
++i,–i (在使用i之前,先使i的值加(减)1)
i++,i-- (在使用i之后,使i的值加(减)1)
例子:x=2
①y=(x++ ) +2 → y=2+2=4 x=2+1=3
x先与2相加,结果赋给y,然后再自加1
②z=(++x) +2 → z=3+2=5 x=2+1=3
x先加1,再与2相加,结果赋给z -
关系运算符“等于”一定是两个等号!!!
-
强制类型转换运算符:(类型名) (表达式)
(double)a →(将a转换成double型)
(int)(x+y)→(将x+y的值转换成int型)
注意: 在强制类型转换时,得到一个所需类型的中间数据,而原来的变量的类型和数值均未发生改变。 -
条件表达式:表达式1? 表达式2:表达式3
表达式1:条件
表达式2:条件成立时计算
表达式3:条件不成立时计算
例子:
a=5,b=8;
max=(a>b)? a:b; //max=b=8
- 复合赋值运算符:+=、-=、*=、/=、%=
例子:sum=sum+n ; 等价于 sum+=n ;