第一、二章
C语言的特点
C语言是一种面向过程的高级语言。
1、C语言语句简介紧凑,使用方便灵活。
2、运算符丰富,表达能力强。
3、C语言程序可移植性好。
4、生成的目标代码质量高,运行效率高。
5、语言处理能力强。
6、C语言是一种结构化语言。
C语言的数据类型
主类 | 子类 |
---|---|
整型 | |
基本类型 | 字符型 |
实型(浮点型) | |
数组类型 | |
构造类型 | 结构体类型 |
共用体类型 | |
枚举类型 | |
指针类型 | |
空类型 |
C语言的常量
一、 直接常量
1、整型常量
十进制:由数组0~9,正、负号组成。
八进制:以0(数字0)为前缀,其后由数字0~7组成。不含符号。
十六进制:以0x或0X为前缀,其后由数字0~9和字母A ~F(大小写都可)组成。不含符号。
注意:
1)在一个整型常量后面加一个字母u或U,认为是 unsigned int 型。
2)在一个整型常量后面加一个字母l 或L,认为是 long int 型。
2、实型常量
1)小数形式
由整数部分、小数点和小数部分组成,当整数部分或小数部分为0时,可以省略不写,但小数点不可省略。
用小数形式表示实数时,必须要有小数点,并且小数点前、后至少一边要有数字。
2)指数形式
由尾数部分、字母E或e和指数部分组成,格式为:+(或 - )尾数E(或e)指数。
用指数形式表示实数时,字母E(或e)前后必须要有数字,并且指数部分只能是整数。
3、字符型常量
特点:
1)字符型常量只能用单引号(‘ ’)括起来,不能用双引号或其他符号。
2)字符型常量只能是单个字符,不能是字符串。
3)字符可以是ASCII字符集中的任意字符。C语言中的字符型常量具有数值特性,可以像整数一样参加运算。
转义字符表:
转义字符 | 转义功能 | ASCII码值 |
---|---|---|
\0 | 空字符 | 0 |
\a | 响铃 | 7 |
\b | 退格(Backspace) | 8 |
\t | 水平制表符(即横向跳格) | 9 |
\n | 回车换行(Enter) | 10 |
\v | 竖向跳格 | 11 |
\f | 换页 | 12 |
\r | 回车 | 13 |
\" | 双引号(“) | 34 |
\’ | 单引号(‘) | 39 |
\? | 问号(?) | 63 |
\\ | 反斜线字符(\) | 92 |
\ddd | 1~3位八进制所代表的字符 | |
\xhh | 1~2位十六进制所代表的字符 |
4、字符串常量
字符串常量由一对双引号括起来的零个或多个字符序列。
字符串常量在内存中占用一段连续的存储单元,系统自动在每个字符串的尾部加上 ’\0‘ 作为字符串的结束标志,因此,n个字符组成的字符串,在内存中要占n+1个字节空间。
C语言的变量
定义格式: 类型说明符 变量名表
类型说明符的类型决定了编译时分配给变量的内存单元的多少。
整型变量
关键字 | 类型 | 占用字节数 |
---|---|---|
short int | 短整型 | 2 |
int | 整型 | 4 |
long int | 长整型 | 4 |
unsigned short | 无符号短整型 | 2 |
unsigned int | 无符号整型 | 4 |
unsigned long | 无符号长整型 | 4 |
实型变量
关键字 | 类型 | 占用字节数 |
---|---|---|
float | 单精度型 | 4 |
double | 双精度型 | 8 |
字符型变量
关键字 | 类型 | 占用字节数 |
---|---|---|
char | 整型 | 1 |
运算符与表达式
复合赋值运算符
运算符 | 应用举例 | 等价形式 |
---|---|---|
+= | a+=x | a=a+(x) |
- = | a-=x | a=a-(x) |
* = | a*=x | a=a*(x) |
/= | a/=x | a=a/(x) |
%= | a%=x | a=a%(x) |
基本算术运算符
运算符 | + | - | * | / | % |
---|---|---|---|---|---|
名称 | 加 | 减 | 乘 | 除 | 求余 |
自加自减运算符
符号 | 名称 | 作用 | 用于前缀 | 用于后缀 |
---|---|---|---|---|
++ | 自增运算符 | 自增运算 | 先加1再赋值 | 先赋值再加1 |
- - | 自减运算符 | 自减运算 | 先减1再赋值 | 先赋值再减1 |
优先级与结合性
优先级由表从上到下依次递减
C语言中各运算符的结合性
1、左结合性(自左至右):
例如算术运算符的结合性是自左至右,即先左后右。如有表达式x-y+z 则y 应先与“-”号结合,执行x-y 运算,然后再执行+z 的运算。这种自左至右的结合方向就称为“左结合性”。
2、右结合性(自右至左)
自右至左的结合方向称为“右结合性”。最典型的右结合 性运算符是赋值运算符。如x=y=z,由于“=”的右结合性,应先执行y=z 再执行x=(y=z)运算。C语言运算符中有不少为右结合性,应注意区别,以避免理解错误。
逗号运算符和逗号表达式
一般表达式: 表达式1,表达式2,表达式3,…,表达式n
逗号表达式的执行顺序是:从左到右依次计算每个表达式的值,并把最后一个表达式的值作为整个逗号表达式的值。
示例:
#include <stdio>
int main()
{ int i,j=7;
float k=5;
i=(j=j+2,j/k);
printf("i=%d\n",i);
return 0;
}
i=1
求字节数运算符
1)sizeof(表达式)或 sizeof 表达式
2)sizeof(数据类型名)
示例:
#include <stdio>
int main()
{ int a,b;
a=sizeof(3+5.0);
//先计算3+5.0为double型的 8.0,再求double型字节数为8。
b=sizeof 3+5.0;
//先计算sizeof 3为4,在计算4+5.0=9.0,赋值给int型变量b时为9。
printf("%d%d%d\n",a,b,sizeof("china"));
//”china“字符串长度为5,加上结束符’\n’为6。
return 0;
}
8,9,6
数据类型转换
自动类型转换
算数运算中,首先有如下类型转换规则:
1、字符必须先转换为整数(C语言规定字符类型数据和整型数据之间可以通用) 。
2、short型转换为int型(同属于整型) 。
3、float型数据在运算时一律转换为双精度(double)型,以提高运算精度(同属于实型) 。
其次,有下面的规则:
当不同类型的数据进行操作时,应当首先将其转换成相同的数据类型(可以没有中间转换类型),然后进行操作,转换规则是由低级向高级转换。转换规则如下图所示:
强制类型转换
强制类型转换是通过类型转换运算来实现的。其一般形式为: (类型说明符) (表达式) 其功能是把表达式的运算结果强制转换成类型说明符所表示的类型。
注意:
1.类型说明符和表达式都必须加括号(单个变量可以不加括号),如把(int)(x+y)写成(int)x+y则成了把x转换成int型之后再与y相加了。
2.无论是强制转换或是自动转换,都只是为了本次运算的需要而对变量的数据长度进行的临时性转换,而不改变数据说明时对该变量定义的类型。