C语言概括
第1章 C语言概括
1. C源程序的结构特点
- 一个C语言源程序可以由一个或多个源文件组成
- 每个源文件可由一个或多个函数组成
- 一个源程序不论由多少个文件组成,都只有一个且只有一个main函数,即主函数
- 源程序中可以有预处理命令(include 命令仅为其中一种),预处理命令通常应放在源文件或源程序的最前面
- 每一个说明,每一个语句都必须以分号结尾。但预处理命令,函数头和花括号“{}”之后不能加分号
- 标识符,关键字之间必须至少加一个空格以示间隔。若已有明显的间隔符,也可不再加空格来间隔
2. 书写程序时应总遵循的规则
- 一个说明或一个语句占一行
- 用 {} 括起来的部分,通常表示了程序的某层次结构。{} 一般与结构语句的第一个字母对齐,并单独占一行
- 低一层次的语句或说明可比高一层次的语句或说明缩进若干格后书写。
3. C语言的字符集
-
字符是组成语言的最基本的元素,C语言字符集由字母,数字,空格,标点和特殊字符组成,在字符常量中,字符串常量和注释中还可以使用汉字或其它可表示的图形符号
-
字母:小写字母 a~z ,大写字母 A~Z
- 数字:0~9 共10个
- 空白符(空格符,制表符,换行符)只在字符常量和字符串常量中起作用。其它地方,只起间隔作用
- 标点和特殊字符
4. C语言词汇
-
六类:标识符,关键字,运算符,分隔符,常量,注释符
-
标识符:在程序中使用的变量,函数名,标号等统称为标识符。除库函数的函数名由系统定义外,其余都由用户定义。C 规定,标识符只能是字母(A~Z,a~z)、数字(0~9)、下划线()组成的字符串,并且第一个字符必须是字母或者下划线(总之不能是数字)
- 关键字:是由C语言规定的具有特定意义的字符串,通常也称为保留字。用户定义的标识符不应与关键字同名
1) 类型说明符:用于定义、说明变量、函数或其它数据结构的类型;如 int double等
2) 语句定义符:用于表示一个语句的功能;if else 条件语句
3) 预处理命令字:用于表示一个预处理命令; include等 - 运算符:C语言中含有相当丰富的运算符。运算符与变量,函数一起组成表达式,表示各种运算功能。运算符由一个或多个字符组成
- 分隔符:有逗号和空格两种。逗号主要用在类型说明和函数参数表中,分隔各个变量。空格多用于语句各单词之间,做间隔符
- 常量:C语言中使用的常量可分为数字常量,字符常量,字符串常量,符号常量,转义字符等多种
- 注释符:“/* */” 多行注释 # 单行注释
第2章 数据类型,运算符,表达式
1. C语言的数据类型
- 可分为:基本数据类型,构造数据类型,指针类型,空类型
- 基本数据类型:其值不可以再分解其他类型,
- 构造数据类型:是根据已定义一个或多个数据类型用构造的方法来定义的。一个构造类型的值可以分解成多个“成员”或“元素”。每个成员都是一个基本数据类型或又是一个构造类型。构造类型:数组类型,结构类型,联合类型
- 指针类型:其值用来表示某个量在内存存储器中的地址
- 空类型:在调用函数值时,通常应向调用者返回一个函数值,类型说明符为:void
对于基本数据类型量,按其取值是否可以改变分为变量和常量;在程序执行中,其值不发生改变的量称为常量,反之;可分为:整型常量,整型变量,浮点常量,浮点变量,字符常量,字符变量,枚举常量,枚举变量。在程序中,常量是可以不经说明而直接引用的,而变量则必须先说明后使用
2. 整型量
- 整型量包含整型常量、整型变量。整型常量就是整常数:八进制,十六进制,十进制
二进制到八进制转换
1 100 011 100 110
1 4 3 4 6
二进制到十六进制转换:
1 1000 1110 0110
1 8 E 6
- 整型常量
1) 八进制整常数八进制整常数必须为0开头,即以0作为八进制数的前缀。数码取值为0~7,八进制通常是无符号数
015(十进制为13) 0101(65)
2) 十六进制整常数的前缀为0X或0x。数码取值 0~9,A~F 或 a~f
0X2A(十进制13) 0XA0(160)
3) 十进制整常数没有前缀。数码取值 0~9
十进制无符号整常数的范围为 0~65535 有符号数为 -32768~32767 ; 八进制无符号数的表示范围为 0~0177777 ; 十六进制无符号数的表示范围为 0X0~0XFFFF 或 0x0~0xFFFF
如果使用的数据超过了上述范围,就必须用长整型数来表示。长整型数是用后缀 "L" 或 "l"
十进制长整常数 158L (十进制为158) 358000L(十进制为 -358000)
八进制长整常数 012L (十进制为 10) 077L (十进制为 63)
十六进制进制长整常数 0X15L (十进制为 21) 0X10000L (十进制为 65536)
整型常数的无符号数的后缀为 “U” 或 “u”
- 整型变量
1) 基本型:int 在内存中占 2 个字节,其取值为基本整常数 -32768~32768
2) 短整量:short int 同基本型 -32768~32768
3) 长整型:long int 或 long 在内存中占4个字节,其取值为长整常数 -32768~32768
4) 无符号型:unsigned
- 变量说明的一般形式:类型说明符 变量名称标识符 …:
1 int a, b, c // (a,b,c 为整型变量) 2 long x, y // (x,y 为长整型变量)
- 注意:
1.允许在一个类型说明符后,说明多个相同类型的变量。各变量之间用逗号 间隔,类型说明符与变量名之间至少用一个空格间隔
2.最后一个变量名之后必须以“;”号结尾
3.变量说明必须在变量使用之前,一般放在函数体的开头部分
3. 实型量
-
实型常量:实型也称为 浮点型;实型常量也称为实数或者 浮点数;十进制数形式和指数形式
1) 十进制数形式:由数码 0~9 和小数点组成
2) 指数形式:由十进制数,加阶码标志“e”或“E”以及阶码组成(其一般形式为a E n (a为十进制数,n为十进制整数)其值为 a10,n 如: 2.1E5 (等于2.110,5)) -
实型变量:单精度型和双精度型
1) 单精度说明符:float 在C中单精度型占4个字节(32位)内存空间,其数值范围为3.4E-38~3.4E+38,只能提供七位有效数字;
2) 双精度说明符:double 双精度型占8个字节(64位)内存空间,其数值范围为1.7E-308~1.7E+308,可提供16位有效数字
3) 实型变量说明的格式和书写规格与整型相同
4. 字符型量
-
字符常量包括字符常量和字符变量
-
字符常量:是用单引号括起来的一个字符。'a' 'b' '+' '?' 都是合法的字符常量
1) 字符常量只能用单引号括起来,不能用双引号或其他括号
2) 字符常量只能是个单个字符,不能是字符串
3) 字符可以是字符集任意字符,但数字被定义为字符后就不能参入数值运算 - 转义字符:转义字符以反斜线"\"开头,后跟一个或几个字符
转义字符 | 转义字符的意义 |
---|---|
\n | 回车换行 |
\t | 横向跳到下一制表位置 |
\v | 竖向跳格 |
\b | 退格 |
\r | 回车 |
\f | 走纸换页 |
\ | 反斜线符"\" |
\' | 单引号符 |
\a | 鸣铃 |
\ddd | 1~3位八进制数所代表的字符 |
\xhh | 1~2位十六进制数所代表的字符 |
-
字符变量:的取值是字符常量,即单个字符。字符变量的类型说明符是 char。
1) 如x的十进制ASCII码是120,y的十进制ASCII码是121。对字符变量a,b赋予'x'和'y'值: a='x';b='y';实际上是在a,b两个单元内存放120和121的二进制代码: a 0 1 1 1 1 0 0 0
b 0 1 1 1 1 0 0 1 -
字符串常量:是由一对双引号括起的字符序列,"charn" "REBT";字符串常量和字符常量是不同的量:
1) 字符常量由单引号 括起来,字符串常量由双引号 括起来
2) 字符常量只能是单个字符,字符串常量则可以含一个或多个字符
3) 可以把一个字符常量赋值一个字符变量,但不能把一个字符串常量赋予一个字符变量;但是可以用一个字符数组来存放一个字符串常量
4) 字符常量占一个字节 的内存空间,字符串常量占的内存字节数等于字符串字节数加1,增加的一个字节存放字符"\0",这是字符串结束的标志 - 符号常量:可以用一个标识符来表示一个常量,在使用前必须先定义,其形式: #define 标识符 常量(宏定义命令)
5. 变量的初始值和类型转换
-
变量赋初值:常常需要对变量赋初值,以便使用变量;
类型说明符 变量1 = 值1, 变量2 = 值2···;
1 int a = 4, b = 2; 2 char = ch1 = 's', ch2 = 'a'; 3 int a = b = c = 4; // error 不允许连续赋值
-
变量类型的转换:变量的数据类型是可以转换的,自动转换 和 强制转换
1) 自动转换:发生在不同数据类型的量在混合运算时,由编译系统自动完成,规则:
· 若参与运算量的类型不同,则先转换成统一类型,然后进行运算
· 转换按数据长度增加的方向进行,以保证精度不降低。如 int型和long型运算时,先把int量转成long型后在进行运算
· 所有的浮点运算都是以双精度进行的,即使仅含float单精度量运算的表达式,也要转成double型,再做运算
· char型和short型参与运算时,必须先转换成int型
· 在赋值运算中,赋值号两边量的数据类型不同时,赋值号右边量的类型将转换为左边量的类型,如果右边量的数据类型长度左边长时,将丢失一部分数据,这样会降低精度,丢失的部分按四舍五入向前舍入
2) 强制转换:是通过类型转换来实现的,一般形式:(类型说明符) (表达式) 其功能是把表达式的运算结果强制转换成类型说明符所表示的类型;
例如:(float) a 把a转换为实型; (int) (x+y) 把x+y的结果运算结果强制转换为整型
· 类型说明符和表达式都必须加括号(单个变量可以不加括号),
· 无论是强制转换或是自动转换,都只是为了本次运算的需要而对变量的数据长度进行的临时性转换,而不改变数据说明时对该变量定义的类型
6. 基本运算符和表达式[]
- 优先级和结合性:运算符的运算优先级分为15级,优先级较高的先于优先级低的进行运算,而在一个运算量两则的运算符优先级相同时,则按运算符的结合性:即左结合性(自左向右) 和右结合性(自右向左)
-
算术运算符和算术表达式基本的算术运算符:
1) 加法运算符"+" :双目运算符,即应有两个量参与加法运算,具有右结合性
2) 减法运算符"-" :双目运算符,但'-'也可作为负值运算符,此时为单目运算符,具有左结合性
3) 乘法运算符" * " :双目运算符,具有左结合性
4) 除法运算符"/" :双目运算符,参与运算量均为整型时,结果也为整型,舍去小数;如果运算量中有一个是实型,则结果位双精度实型,具有左结合性
5) 求余运算符"%" :双目运算符,要求参与运算的量均为整型,求余运算的结果等于两数相除后的余数,具有左结合性 -
自增自减运算符:自增1运算符记为"++",其功能是使变量的值自增1,自减1运算符记为"--",其功能是使变量值自减1;自增1,自减1运算符均为单目运算符,具有右结合性:
· ++i i自增1后再参与其它运算
· --i i自减1后再参与其它运算
· i++ i参与运算后,i的值再自增1
· i-- i参与运算后,i的值再自减1 -
算术表达式:由算术运算符和括号连接起来的式子,例如:
(a2)/c (x+r)8-(a+b)/7 ++i sin(x)+sin(y) (++i)-(j++)+(k--) -
赋值运算符和赋值表达式:简单的赋值运算符记为"="。由 "="连接的式子称为赋值表达式,形式:变量 = 表达式;赋值表达式的功能是计算表达式的值再赋予左边的变量。赋值运算符具有右结合性。因此 a=b=c=5 可理解为 a=(b=(c=5))
- 复合赋值符及表达式:在赋值符"="之前加上其它双目运算符可构成复合赋值符;构成复合赋值表达式的形式:变量 双目运算符 = 表达式 它等效于 变量 = 变量 运算符 表达式
- 逗号运算符:"," 其功能是把两个表达式连接起来组成一个表达式,一般形式:表达式1,表达式2···
小结
- C的数据类型:
基本类型 构造类型 指针类型 空类型 - 基本类型的分类及特点:
类型说明符 | 字节 | 数值范围 |
---|---|---|
字符型 char | 1 | C字符集 |
基本整型 int | 2 | -32768~32767 |
短整型 short int | 2 | -32768~32767 |
长整型 long int | 4 | -214783648~214783647 |
无符号型 unsigned | 2 | 0~65535 |
无符号长整型 unsigned long | 4 | 0~4294967295 |
单精度实型 float | 4 | 3/4E-38~3/4E+38 |
双精度实型 double | 8 | 1/7E-308~1/7E+308 |
- 常量后缀:
L或l 长整型
U或u 无符号数
F或f 浮点数 - 常量类型:
整数 长整数 无符号数 浮点数 字符 字符串 符号常数 转义字符 - 数据类型转换:
· 自动转换:在不同类型数据的混合运算中,由系统自动实现转换,由少字节类型向多字节类型转换。不同类型的量相互赋值时也由系统自动进行转换,把赋值号右边的类型转换为左边的类型
· 强制转换:由强制转换运算符完成转换 - 运算符优先级和结合性:
一般而言,单目运算符优先级较高,赋值运算符优先级低;算术运算符优先级较高,关系和逻辑运算符优先级较低;多数运算符具有左结合性,单目运算符,三目运算符、赋值 - 表达式:
是由运算符连接常量、变量、函数所组成的式子。每个表达式都有一个指和类型。表达式求值按运算符的优先级和结合性所规定的顺序进行~~~~