-
词法符号
1.关键词
是由系统预定义的词法符号,有特定的含义,不允许用户重新定义。下面是一些基本关键字:
(1)存储类型:auto(自动型) static(静态) extern(外部引用) register(寄存器)
(2)数据类型:char(字符型) short(短整型) int(整型) long(长整型) float(浮点型) double(双精度浮点型) unsigned(无符号) signed(有符号)struct(结构体) union(共用体) enum(枚举) void(空类型)
(3)控制语句:if(条件语句) else(条件语句中否定分支) while(循环语句的循环条件) do(循环语句的循环体)for(一种循环语句) switch(开关语句) case(开关语句分支) default(开关语句中其他分支) break(中断循环) continue(继续下一轮循环) goto(跳转) return(返回)
(4)其他:sizeof(计算数据所占空间大小) const(声明只读变量)typedef(重命名) volatile(防止被编译器优化)
2.标识符
C语言的命名规则如下:
1) 标识符由一个或多个字母、数字或下划线组成
2)标识符的第一个字符必须是字母或下划线
3)标识符不能与任何关键字相同
3.运算符
运算符是表示运算的词法符号,C语言有非常丰富的运算符,按功能可以分为:算术运算符、 逻辑运算符、关系运算符、位运算符、赋值运算符、其他运算符
- 算术运算符:+,-,*,/,%,++,--
- 逻辑运算符:!,&&,||
- 关系运算符:<,>,>=,<=,==,!=
- 位操作运算符:&,|,~,^,<<,>>
- 赋值运算符:=,+=,-=,*=,/=,%=,&=,|=,^=,<<=,>>=
- 其他运算符:三目运算符, sizeof()
4.分割符
是用来分隔其他的词法符号,主要包括: 空格符、制表符、换行符号、注释。
通过对分隔符的恰当运用,使得代码的外观格式更为清晰易读,还可以帮助分析程序中的语法错误
5.标点符号
C语言中的标点符号有逗号、分号、冒号、花括号、圆括号。标点符号的作用与分隔符相似,但用法非常严格,有着明确的语法规定。有些标点符号出现在表达式中时,当作运算符使用。
(1) 逗号
在定义变量语句中,用于分隔变量名
在函数的参数表中,用于分隔函数参数
(2)分号
用于表达式语句的结束
在for循环语句中,分隔括号内的三个表达式
单独出现,构成一条空语句
(3) 冒号
用于三目运算符
用于switch case语句中case块中
(4) 花括号
用做枚举类型定义的开始和结束
用做数组初始值定义的开始和结束
用做函数体的开始和结束
用做语句块的开始和结束
用做结构类型定义块的开始和结束
(5) 圆括号
用在函数头定义中,作为参数表的开始和结束
用在流程控制语句中,作为条件表达式的开始和结束
用在函数调用中,作为参数表的开始和结束
-
基本数据类型
1.变量
类型 | 存储大小 | 值范围 | |
char | 字符类型 | 1 字节 | -2^7 到 (2^7-1) |
unsigned char | 无符号字符类型 | 1 字节 | 0 到 (2^8-1) |
int | 整数类型 | 4 字节 | -2^31 到 (2^31-1) |
unsigned int | 无符号整数类型 | 4 字节 | 0 到 (2^32-1) |
short | 短整型 | 2 字节 | -2^15 到 (2^15-1) |
unsigned short | 无符号短整形 | 2 字节 | 0 到 (2^16-1) |
long | 长整型 | 4 字节 | -2^31 到 (2^31-1) |
unsigned long | 无符号长整形 | 4 字节 | 0 到 (2^32-1) |
float | 单精度浮点型 | 4字节 | 有效数据6-7位 |
double | 双精度浮点型 | 8字节 | 有效数据15-16位 |
注:64位操作系统long类型为8字节
局部变量与全局变量区别
局部变量 | 全局变量 | |
| 函数体内部 | 函数体外部 |
| 栈区 | 全局区 |
| 同函数体共存亡 | 同整个程序共存亡 |
| 作用于函数体内部 | 作用域整个程序 |
| 未初始化,值为随机值 | 未初始化时,值为0 |
2.常量
2.1 字符型常量
类型 | 存储大小 | 值范围 | |
char | 字符类型 | 1 字节 | -128 到 127 |
unsigned char | 无符号字符类型 | 1 字节 | 0 到 255 |
signed char | 带符号字符类型 | 1 字节 | -128 到 127 |
原码、反码和补码:
- 最高位表示符号位,正数是0,负数是1。
- 正数原码、反码和补码都是一样的。
- 负数要用补码来计算:
- 原码就是在数值前面直接加符号表示
- 反码等于原码的符号位不变其余按位取反
- 补码等于反码加一
2.2字符串常量
通过“”包括起来的为字符串常量,'\0'是字符串结束的标志
2.3整型常量
2.4浮点型常量
2.5指数常量:通过科学计数法进行表示
2.6标识常量(宏定义)
宏定义:起到标识作用的
(1)只是单纯的进行文本替换,在预处理的时候进行。
(2)遵循标识符的命名规则
(3)一般大写表示
格式: #define 宏名 常量或表达式
3.运算符和表达式
运算符按功能分为:算数运算符、赋值运算符、关系运算符、逻辑运算符、位运算符和其他运算符
3.1算术运算符:+ - * / % ++ --
/:整数相除,向下取整;%只能用于整数运算,取余;++自增;--:自减
3.2赋值运算符:= += -= *= /=
3.3关系运算符:> < <= >= == !=
运算符 | 名称 | 示例 | 功能 | 缩写 |
< | 小于 | a<b | a小于b时返回真,否则返回假。 | LT |
<= | 小于等于 | a<=b | a小于等于b时返回真,否则返回假。 | LE |
> | 大于 | a>b | a大于b时返回真,否则返回假。 | GT |
>= | 大于等于 | a>=b | a大于等于b时返回真,否则返回假。 | GE |
== | 等于 | a==b | a等于b时返回真,否则返回假。 | EQ |
!= | 不等于 | a!=b | a不等于b时返回真,否则返回假。 | NE |
3.4逻辑运算符:&& || !
&&(逻辑与):全真则真,一假则假;||(逻辑或):一真则真,全假则假;!(逻辑非):非真为假,非假为真
注:短路法则/截断法则
逻辑或||运算中: 如果前面的表达式为真,则后面的表达式不执行。
逻辑与&&运算中: 如果前面的表达式为假,则后面的表达式不执行。
3.5位运算符:& | ^ ~ << >>
含义 | C语言 |
按位与 | a&b |
按位或 | a|b |
按位异或 | a^b |
按位取反 | ~a |
左移 | a<<b |
右移 | a>>b |
无符号右移 | / |
注意:负数都是用补码进行运算的
置一公式和置零公式
置一公式: a | (1<<n)
置零公式: a & (~(1<<n))
(注意:n代表位数-1)
3.6特殊运算符
三目运算符:表达式1?表达式2:表达式3(先求解表达式1,为真执行表达式2,为假执行表达式3) ;sizeof(数据类型或变量名)计算所占字节数
3.7运算符优先级
口诀:单算移关与,异或逻条赋,从右向左单条赋
-
输入输出
1.按字符输入输出
按字符输出:putchar();按字符输入:getchar()
2.按格式输入输出
按格式输出:printf()
格式:%d int;%ld long;%f float;%lf double;%c char;%s 字符串;%x 十六进制;%o 八进制;%u 十进制无符号整;%p 地址;%e 指数;%m.n含义:
.n: 对实数指定小数点后的位数(四舍五入)
对字符串,指定实际输出的位数
m: 位宽,输出数据的域宽,数据长度<m, 左边补空格,否则按实际输出。
-: 左对齐,默认右对齐
0:输入数值时时指定左边不用的空位置自动补0
按格式输入:scanf()
垃圾字符问题 :scanf函数输入回车符的问题,当用%c方式输入字符时,回车符会被下次的%c接收到。其他给格式不会出现这种问题
-
控制语句
1.分支语句
1.1 if语句
if(表达式)
{
语句块1;
}
else
{
语句块2;
}
switch(变量或表达式)
{
case 常量1: 语句块1; break;
case 常量2: 语句块2; break;
case 常量3: 语句块3; break;
...
case 常量n: 语句块n; break;
default: 语句块n+1;
}
当变量表达式所表达的量与其中一个case语句中的常量相符时,就执行此case语句后面的语句,并依次下去执行后面所有case语句中的语句,除非遇到break, 语句跳出switch语句为止。如果变量表达式的量与所有case语句的常量都不相符,就执行default语句中的语句。
2.循环语句
2.1 for循环
for(表达式1;表达式2;表达式3)
{
语句块;
}
表达式1:赋初值;表达式2:判断的判断条件;表达式3:增值或减值
执行顺序:首先执行表达式1进行赋值,然后判断表达式2是否成立,如果成立就进入循环执行语句块,再执行表达式3进行增值或减值然后继续判断表达式2是否成立,直到表达式2不成立退出循环。
2.2 while循环
while(判断条件)
{
语句块;
增值或减值语句;
}
2.4 循环控制语句
break continue goto
- break: 直接结束循环
- continue: 结束本次循环,继续下一次循环
- goto: 强制跳转到标签位置,可以应用于多重循环嵌套。(尽量不要使用!)