3.1 基本概念
1.标识符
用来标识变量名、函数名、数组名等的有效字符序列称为标识符。
规则:
1.必须以英文字母或下划线开头,其后可以跟英文字母、数字和下划线。
2.不能用系统的保留字。
3.标识符的长度不超过8个字符。
4.区分大小写。
例:
sum, x, _price, a8都是合法的标识符
x+y, 2g, n*y,int等都是非法的标识符
此外,命名时,应做到“见名知意”。如: day,sum
2.常量
在程序运行过程中,其值不能被改变的量。
3.变量
在程序运行过程中,其值可以改变的量。变量只有一个名字,必须先声明后使用。
3.2 C的数据类型
3.3 常量
1. 整型常量(整常数)
(1) 十进制整数:78 -324 0
(2) 八进制整数:以0开头,如0123
(3) 十六进制整数:以0x开头,如0x123
2. 实型常量(浮点数)
⑴ 小数形式(必须有小数点)
0.00123 -56.878
123.0 123.
0.123 .123
⑵ 指数形式
1e3
1.2e-5
注意:字母e(或E)之前必须有数字,e后面指数部分必须是整数。
错误:
e3
2.1e3.5
e
3. 字符常量:
是用单撇号括起来的一个字符。
‘a’ ‘x’ ‘d’ ‘?’ ‘[’
转义字符:将反斜杠后面的字符转变成另外的意义。
‘\n’
‘\\’
‘\ddd’ 例如:‘\376’
‘\xhh’ 例如:‘\x11’
4. 字符串常量:
用一对双撇号括起来的字符序列。
"CHINA", "a"
在内存中的存放:每一个字符均以其ASCII码存放,且最后添加一个“空字符”(\0)。所以”a”与‘a’不同。
5. 符号常量:
用一个标识符表示一个常量。
习惯上,符号常量名用大写,变量名用小写。
例1
#define PI 3.14159
main( )
{float r,area,perimeter;
r=5;
area=PI*r*r;
perimeter=2*PI*r;
printf("area=%f\n",area);
printf("perimeter=%f\n", perimeter);
}
3.4 变量
1. 整型变量
⑴ 整型变量可分为:基本型、短整型、长整型和无符号型四种。
基本型 ( int)
短整型( short 或 short int )
长整型 (long 或 long int )
无符号型 (unsigned[int]、unsigned short、unsigned long)
⑵ 整型变量的定义
例2
main( )
{ int a,b,c,d;
unsigned u;
a=12;b=-24;u=10;
c=a+u;d=b+u;
printf("a+u=%d,b+u=%d\n",c,d);
}
2. 实型变量
单精度实型变量在内存中占4个字节,具有7位有效数字。
float x,y;
双精度实型变量在内存中占8个字节,具有15~16位有效数字。
double z;
注意:由于实型数据存在舍入误差,所以避免将一个很大的数和一个很小的数直接相加或相减。
main( )
{
float a,b;
a=123456.789e5;
b=a+20;
printf(“%f”,b);
}
3.字符型变量
字符型变量只能放一个字符。
定义 char c1,c2;
赋值 c1= 'a';c2= 'b';
字符数据是以ASCII码存储的。
c1= 'a'; 等价于 c1=97;
例3
main( )
{char c1,c2;
int i;
c1=97;c2=98;i='a';
printf("%c ,%d\n",c1,c1);
printf("%c ,%d\n",i,i);
printf("%c ,%c\n",c1,c2);
c1=c1-32;c2=c2-32;
printf("%c %c\n",c1,c2);
}
3.5 变量赋初值
可以在定义变量的同时使变量初始化。
int a=3; /*指定a为整型变量,初值为3*/
float f=3.56;
char c= 'a';
int g,d,e=5;
int a=b=c=3; 错误!
变量赋初值是在程序运行时完成的。
int a=3;
相当于
int a;
a=3;
3.6 各类数值型数据间的混合运算
整型、实型(单、双精度)、字符型数据间可以混合运算。
10+'a'+1.5-8765.1234*'b'
例4
main( )
{int a=2;
float b=6.7,x;
char c='A';
x=a/3+b-c;
printf("%f\n",x);
}
3.7 运算符和表达式
1.运算符的种类
1) 算术运算符 +- * / %
2) 关系运算符 > < == >= <= !=
3) 逻辑运算符 ! && ||
4) 位运算符 《 》 ~ | ^ &
5) 赋值运算符 =及其扩展赋值运算符
6) 条件运算符 ?:
7) 逗号运算符 ,
8) 指针运算符 *&
9) 求字节数运算符 sizeof
10) 强制类型转换运算符 类型
11) 分量运算符 ·→
12) 下标运算符 [ ]
13) 其它 如函数调用运算符()
2. 算术运算符和算术表达式
1) 算术运算符
+ - * / %
说明:
两个整数相除结果为整数。
1/2
5/2
求模运算的两个操作数必须是整数。
5%2
8%2
2%5
2) 算术表达式和运算符的优先级
算术表达式:
用算术运算符和括号将运算对象(也称操作数)连接起来,符合语法规则的式子。
算术运算符的优先级: * / % + - (乘、除、求模、加、减)
常用数学函数:
fabs(x)
exp(x)
log(x)
log10(x)
pow(x,y)
sqrt(x)
sin(x)
cos(x)
tan(x)
书写C语言表达式时应注意:
- 乘号不能省。如:ab应写成 a*b。
- 上下角标不能直接写,需要转换。
- 只可用圆括号,可以嵌套使用,但左、右括号必须匹配。
- 避免两个运算符并置。如a*b/-c应该为 a*b/(-c)。
两个整数相除结果仍为整数,所以要转换成实数。
5/12
应该写成
5.0/12 或 5/12.0 或 5.0/12.0
标准库函数的自变量必须用括号括起来。
如: |-2163| 应写成 fabs(-2163)
sin12 应写成 sin(12)
三角函数的自变量的单位是弧度。
如: sin50应写成:
sin(50*3.14159/180)
3)可以利用强制类型转换运算符将一个表达式转换成所需类型。
一般形式:(类型名)(表达式)
如: (int)x
(int)(x+y)
例如:
float x,y,z;
x=3.5;y=6.7;
z=(int)x+6.7;
4)自增、自减运算符
++i (先将i的值自增1,再使用i的值)
--i (先将i的值自减1,再使用i的值)
i++ (使用i的值之后,将i的值自增1)
i-- (使用i的值之后,将i的值自减1)
例5
main( )
{int i=2,j;
printf("%d",i++);
printf(",%d\n",i);
printf("%d",-i++);
printf(",%d\n",i);
printf("%d",++i);
printf(",%d\n",i);
/* j=(i++)+(i++)+(i++);
printf(“%d,%d”, i,i ++); */
}
运行结果:
3. 赋值运算符和赋值表达式
1)赋值运算符 =
作用:将一个表达式的值赋给一个变量。
x=12.6-3*y
结合性:右结合
例6:比较两者的运行结果。
2)赋值时的类型转换问题
3)复合的赋值运算符
4)赋值表达式:
由赋值运算符将一个变量和一个表达式连接起来的式子。
一般形式: <变量><赋值运算符><表达式>
执行过程:将赋值运算符右侧的表达式的值赋给左侧的变量。赋值表达式的值就是被赋值的变量的值。
4. 逗号运算符和逗号表达式
1) 逗号运算符又称顺序求值运算符。
2) 一般形式:
表达式1,表达式2
3) 执行过程:
先求解表达式1,再求解表达式2,整个表达式的值是表达式2的值。
例1 求4个数的和。
三种基本结构的特点:
(1)只有一个入口、一个出口;
(2)结构中的每一部分都有被执行到的机会;
(3)结构内没有死循环。
例2 交换a、b两个变量的内容。