一句话结论
C语言期末不会考你“多么高深的算法”,
它主要考的是:语法细节 + 指针 + 数组 + 结构体 + 读程序写结果。
你把下面这几块搞清楚,就够你及格甚至冲良好。
一、先搞清楚:期末一般考什么?
根据很多学校的考点总结,大致是这些模块:
-
C语言基础
- 程序结构(顺序、选择、循环)
- 标识符、关键字、进制转换、数据类型、运算符与表达式
-
控制结构
- if / switch
- while / for / do-while
- break / continue
-
数组与字符串
- 一维数组、二维数组
- 字符数组与字符串处理函数
-
函数
- 函数定义、调用、声明
- 递归、作用域、生存期
-
指针(大重点)
- 指针变量、指针与数组、指针与字符串
- 指针作为函数参数
-
结构体与文件(部分学校考)
- 结构体定义、结构体数组、结构体指针
- 文件打开/关闭/读写
-
预处理命令(概念题)
- #define、#include、条件编译等
二、基础:这些“坑点”年年考
1. 标识符 & 关键字
- 合法标识符:字母、数字、下划线,且首字符不能是数字
- 区分:
main、scanf、printf、define、include都不是关键字,只是预定义标识符If、For(大写)可以当标识符,因为不是关键字。
2. 进制 & 数据类型
- C语言只有八、十、十六进制,没有直接二进制,但机器内部用二进制。
- 八进制以
0开头,如012;十六进制以0x开头,如0x1A。 int一般 4 字节,char1 字节,double8 字节。
3. 运算符“坑点”
记住几个高频坑:
/:两边都是整型 → 整除,3/2 == 1
有一边浮点 → 浮点除,3/2.0 == 1.5%:只能用于整数,余数符号和被除数相同。- 自增自减:
++a:先加再用a++:先用再加
- 逗号表达式:整个表达式的值是最右边那个表达式的值。
三、指针:不会就是真的不会
1. 指针基础
- 指针变量存的是地址,通过
&取地址,通过*间接访问。 - 指针一定要初始化,要么指向某个变量,要么赋
NULL,否则是野指针。
2. 指针与数组
- 数组名是指向首元素的指针常量。
a[i]等价于*(a+i);&a[i]等价于a+i。- 指针加减整数:移动的是“多少个元素”,不是字节。
3. 指针与字符串
- 字符串常量本质是地址:
char *s = "hello";指向的是常量区字符串,不能通过s[0] = 'H'这样改。 - 字符数组:
char s[] = "hello";可以修改内容。
4. 指针与函数参数
- 传值:形参是实参的拷贝,不影响实参。
- 传指针:可以修改实参指向的内容(所谓“传地址”)。 典型考法:
- 写一个
swap(int *a, int *b),用指针交换两个整数。 - 判断程序是否有“野指针”、“空指针解引用”等问题。
四、数组 & 字符串:考试必出读写题
1. 一维数组
- 定义:
int a[10];下标 0~9。 - 初始化:
int a[5] = {1,2,3};后面自动补 0int a[] = {1,2,3};长度自动为 3。 常见考法:找最大/最小值、统计、逆序、排序、查找等。
2. 二维数组
- 理解成“数组的数组”,
a[i][j]是第 i 行第 j 列。 - 初始化:可以省略行数,不能省略列数。 常见考法:矩阵运算、找行/列最值、鞍点等。
3. 字符数组与字符串函数
- 字符串以
'\0'结尾,"abc"实际占 4 个字节。 - 常用函数(要会写、会改错):
strlen、strcpy、strcat、strcmp等。
五、结构体:考得不难,但很“值钱”
1. 结构体定义
struct Student {
char name[20];
int id;
float score;
};
- 定义结构体类型不分配内存,定义变量时才分配。
2. 结构体变量与访问
struct Student stu;
stu.id = 1001;
stu.score = 88.5;
- 字符串成员不能
stu.name = "张三";,要用strcpy(stu.name, "张三");。
3. 结构体指针与 ->
struct Student *p = &stu;
p->id = 1002; // 等价于 (*p).id = 1002;
p->成员是通过指针访问结构体成员的标准写法。
4. 结构体数组
struct Student class[3];
- 可以在定义时初始化,遍历时用
class[i].score等。 常见考法: - 定义一个结构体表示学生/职工,然后写一个函数:
求平均分、按成绩排序、查找某个学号的学生等。
六、函数 & 递归:大题必出
1. 函数基础
- 函数要先声明,再定义,再调用。
- 注意:函数不能嵌套定义,但可以嵌套调用。
2. 递归
典型题目:
- 计算
n!、斐波那契数列、汉诺塔、数的全排列等。 写递归三要素:
- 递归出口(终止条件)
- 递推公式
- 收敛条件(问题规模逐步缩小)
七、文件操作:有的学校考,有的不考
大致考点:
- 打开文件:
FILE *fopen(const char *filename, const char *mode);
常用模式:"r"、"w"、"a"等。 - 关闭文件:
fclose(fp); - 读写函数:
fscanf、fprintf、fread、fwrite等。 典型考法: - 给一段文件读写代码,让你补全或改错。
- 写一个程序:从文件读入数据 → 处理 → 输出到另一个文件。
八、最后给你一个“救命复习顺序”
如果只剩一两天,建议按这个顺序过:
- 基础概念 + 运算符坑点:1~2 小时
- 看一遍:标识符、数据类型、表达式、逗号、自增自减
- 数组 & 字符串:2 小时
- 手写 1~2 道排序/查找/字符串处理题
- 指针:3 小时
- 搞懂:
*p、&a、a[i]与*(a+i)的关系 - 写一个
swap、一个用指针遍历数组的程序
- 搞懂:
- 结构体:1 小时
- 会定义结构体、结构体数组、结构体指针,并写一个简单的遍历/排序
- 函数 & 递归:1~2 小时
- 写一个递归求阶乘,再写一个简单排序/查找函数
- 文件 & 预处理:看 30 分钟概念即可
- 记住
fopen/fclose的基本用法和#define的坑
- 记住
如果你愿意,把你学校往年试卷的题型(比如:有没有文件题、有没有编程题)看一下,很大几率是从往年的题参考。