《C语言程序设计》期末救急版,“考前最后看一遍”。

0 阅读5分钟

一句话结论

C语言期末不会考你“多么高深的算法”,

它主要考的是:语法细节 + 指针 + 数组 + 结构体 + 读程序写结果

你把下面这几块搞清楚,就够你及格甚至冲良好。

一、先搞清楚:期末一般考什么?

根据很多学校的考点总结,大致是这些模块:

  1. C语言基础

    • 程序结构(顺序、选择、循环)
    • 标识符、关键字、进制转换、数据类型、运算符与表达式
  2. 控制结构

    • if / switch
    • while / for / do-while
    • break / continue
  3. 数组与字符串

    • 一维数组、二维数组
    • 字符数组与字符串处理函数
  4. 函数

    • 函数定义、调用、声明
    • 递归、作用域、生存期
  5. 指针(大重点)

    • 指针变量、指针与数组、指针与字符串
    • 指针作为函数参数
  6. 结构体与文件(部分学校考)

    • 结构体定义、结构体数组、结构体指针
    • 文件打开/关闭/读写
  7. 预处理命令(概念题)

    • #define、#include、条件编译等

二、基础:这些“坑点”年年考

1. 标识符 & 关键字

  • 合法标识符:字母、数字、下划线,且首字符不能是数字
  • 区分:
    • mainscanfprintfdefineinclude不是关键字,只是预定义标识符
    • IfFor(大写)可以当标识符,因为不是关键字。

2. 进制 & 数据类型

  • C语言只有八、十、十六进制,没有直接二进制,但机器内部用二进制。
  • 八进制以 0 开头,如 012;十六进制以 0x 开头,如 0x1A
  • int 一般 4 字节,char 1 字节,double 8 字节。

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}; 后面自动补 0
    • int a[] = {1,2,3}; 长度自动为 3。 常见考法:找最大/最小值、统计、逆序、排序、查找等。

2. 二维数组

  • 理解成“数组的数组”,a[i][j] 是第 i 行第 j 列。
  • 初始化:可以省略行数,不能省略列数。 常见考法:矩阵运算、找行/列最值、鞍点等

3. 字符数组与字符串函数

  • 字符串以 '\0' 结尾,"abc" 实际占 4 个字节。
  • 常用函数(要会写、会改错):
    strlenstrcpystrcatstrcmp 等。

五、结构体:考得不难,但很“值钱”

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!、斐波那契数列、汉诺塔、数的全排列等。 写递归三要素:
  1. 递归出口(终止条件)
  2. 递推公式
  3. 收敛条件(问题规模逐步缩小)

七、文件操作:有的学校考,有的不考

大致考点:

  • 打开文件:FILE *fopen(const char *filename, const char *mode);
    常用模式:"r""w""a" 等。
  • 关闭文件:fclose(fp);
  • 读写函数:fscanffprintffreadfwrite 等。 典型考法:
  • 给一段文件读写代码,让你补全或改错。
  • 写一个程序:从文件读入数据 → 处理 → 输出到另一个文件。

八、最后给你一个“救命复习顺序”

如果只剩一两天,建议按这个顺序过:

  1. 基础概念 + 运算符坑点:1~2 小时
    • 看一遍:标识符、数据类型、表达式、逗号、自增自减
  2. 数组 & 字符串:2 小时
    • 手写 1~2 道排序/查找/字符串处理题
  3. 指针:3 小时
    • 搞懂:*p&aa[i]*(a+i) 的关系
    • 写一个 swap、一个用指针遍历数组的程序
  4. 结构体:1 小时
    • 会定义结构体、结构体数组、结构体指针,并写一个简单的遍历/排序
  5. 函数 & 递归:1~2 小时
    • 写一个递归求阶乘,再写一个简单排序/查找函数
  6. 文件 & 预处理:看 30 分钟概念即可
    • 记住 fopen/fclose 的基本用法和 #define 的坑

如果你愿意,把你学校往年试卷的题型(比如:有没有文件题、有没有编程题)看一下,很大几率是从往年的题参考。