Skip to content

1.1 C语言概述与基本概念

计算机程序设计 · C语言 · 1.1 C语言概述与基本概念(零基础讲义)

C语言概述与基本概念

🎯 一句话秒杀:C语言是面向过程的编程语言,程序由函数组成,main函数是程序入口;学完本章你就能看懂任何 C 程序的"骨架"。


① 📊【历年真题考情】

本章(C语言概述与基本概念)在广东专升本计算机统考中的位置:

项目结论
出题频次★★★☆☆(基础送分模块,几乎年年 1-2 题;2026 新增"编译/链接/运行错误"考点后重要性上升)
常考题型单选(2022 单选4、2024 单选1/2、2026 单选8)、判断(2023 判断1)
预估分值3~8 分 / 200 分(约 2%~4%),性价比最高的送分题
考纲归属2026 考纲「C 语言基础」模块(程序结构、数据类型、运算符、输入输出)

考场真实出现过的高频题:

  • 2022 单选4:合法标识符判断(_6_ ✅ / 6_6 ❌ / define ❌ / typedef ❌)
  • 2023 判断1:注释只能在程序最开始?(——注释位置任意)
  • 2024 单选1:C 语言注释格式(\N 是陷阱,正确的是 /* *///
  • 2024 单选2:strcmp 函数需要包含的头文件(string.h
  • 2026 单选8:编译错误、链接错误、运行错误的区分(2026 考纲新增重点

🎯 学习目标:学完本章,你能 ① 一眼判断标识符合法性;② 说清注释的正确写法;③ 知道每个常用函数在哪个头文件;④ 区分编译/链接/运行错误发生在哪一阶段——这四类题就是本章真题的全部考法。


② 🗣️【零基础大白话引入】

编程是什么? 想象你开了一家餐厅,给厨房的机器人下指令。机器人听不懂人话,只听得懂"切土豆""放锅里""煮 5 分钟"这种一步一步的明确指令——这一整套指令就是程序,而 C 语言就是和这个机器人交流的"菜谱语言"。

C 语言能干嘛? 小到计算器、游戏,大到操作系统(Windows、Linux 的内核就是 C 写的)、嵌入式设备(洗衣机、汽车芯片),全都有 C 语言的身影。学完 C,你就掌握了"给计算机下命令"的基础能力。

本章先学什么? 就像学做菜先认识厨房一样,本章先带你认识:

  • 菜谱长什么样(C 程序的基本结构)
  • 菜谱是怎么被机器人执行的(编译/链接/运行——2026 新考点)
  • 食材怎么命名(标识符——2022 考过)
  • 菜谱上的小字备注(注释——2023/2024 考过)

💡 记住:C 程序 = 一个 main 主函数 + 若干其他函数。main 是"总厨",其他函数是"帮厨",各干各的活,最后拼成一道完整的菜。


③ 📖【正式核心知识点讲解】

本章知识点 = 考纲要求 + 历年真题实际考过的内容。真题未考、考纲不作要求的内容已剔除或标注"了解"。

3.1 C语言发展史(了解即可,近年 0 出题)

年份事件
1972丹尼斯·里奇在贝尔实验室设计C语言
1978Kernighan & Ritchie 出版《C程序设计语言》→ K&R C
1989ANSI 发布 C89/C90 标准(最经典,考试基准
1999C99 标准(新增//注释、变长数组等)
2011C11 标准
2024C23 最新标准(超纲,了解即可,不考

💡 一句话记住:1972 年里奇发明 C,考试认 C89 标准

3.2 第一个C程序(必背)

c
#include <stdio.h>   // 预处理指令——包含标准输入输出头文件

int main()           // 主函数——程序入口
{
    printf("Hello, World!\n");  // 调用库函数输出
    return 0;        // 返回整型0给操作系统,表示正常结束
}

🚨 红牌警告

  • main 是程序的唯一入口,一个程序有且只有一个 main 函数
  • return 0; 必不可少——表示程序正常退出(很多考试问这个)
  • #include# 开头——不需要分号结尾
  • stdio.h头文件printfscanf 都在里面

3.2.1 语句的书写规则(2024 单选1-D 考点)

每条语句以分号 ; 结尾;一条语句可以分成多行写

c
printf("Hello, "      // 第一行
       "World!\n");   // 第二行——同一语句跨两行,合法
// 等价于 printf("Hello, World!\n");

✅ 2024 真题:一条语句可以分成多行来写正确(单选1-D)

3.2.2 注释的写法与位置(2024 单选1 / 2023 判断1 · 必考)

C 语言只有两种注释:/* ... *///。不存在 \N 这种注释!注释可以出现在程序的任何位置!

c
// 这是单行注释(C99 起支持,C89 用 /* */)
/* 这是多行
   注释 */
int main() {
    /* 注释可以在函数内部 */
    // 注释可以在语句中间
    printf("hi\n"); // 注释可以在行尾
    return 0;
}

🚨 2024 真题陷阱:选项 C"注释可以用 \N 开始" → 错误,C 语言没有 \N 注释 🚨 2023 判断1:"注释只能在程序最开始" → 错误,注释位置任意(行首、行尾、语句中间、函数内外都可以)

3.3 C程序的执行过程(2026 新增考点重点)

源代码 (.c) → 预处理 → 编译 → 汇编 → 链接 → 可执行文件 (.exe)
阶段产物说明
预处理.i 文件处理 #include#define 等指令
编译.s 文件将C代码转为汇编代码
汇编.o / .obj 文件将汇编代码转为机器指令
链接.exe 文件将多个目标文件+库文件合并成可执行文件

🔑 秒杀秘籍

考试常考:链接是把所有目标文件连起来生成最终exe;编译只是把单个.c变成.obj

🗣️ 零基础类比:你把中文菜谱交给只会英文的机器人,中间需要"翻译官"把菜谱变成机器人能懂的机器指令。

  • 编译 = 把一页菜谱翻译成英文草稿(.s 汇编)→ 再转成机器码零件(.obj)
  • 链接 = 把"切菜步骤"“炒菜步骤”“装盘步骤"三份零件拼成一份完整可执行的菜谱(.exe)
  • 所以:编译管单页,链接管拼接——这就是"链接是把所有目标文件连起来"的意思。

3.3.1 编译错误 vs 链接错误 vs 运行错误(2026 单选8 · 考纲新增必考)

错误类型什么时候发现典型例子
编译错误编译阶段(写代码时)缺少分号、括号不匹配、变量未声明
链接错误链接阶段(生成exe时)函数/变量只有声明没有定义(符号找不到)
运行错误程序运行时数组越界、除以 0、访问空指针

2026 真题单选8:下列说法正确的是 → B. 缺少分号通常属于编译错误 解析:缺分号破坏语法 → 编译器报告;数组越界/除以 0 多在运行阶段暴露(A、C 错);链接错误常见于符号找不到定义(D 说"一定不会报警"错)

🚨 记法语法问题找编译,符号问题找链接,越界/除零找运行

3.4 C语言的基本构成——函数(2024 单选1-B 必考)

c
返回值类型 函数名(参数列表)
{
    语句序列;
    return 返回值;
}

C程序 = 一个 main 函数 + 若干其他函数

mermaid
flowchart TD
    A["C 程序"] --> B["main 主函数<br/>程序唯一入口<br/>有且仅有一个"]
    A --> C["其他函数<br/>函数1(如 add)"]
    A --> D["其他函数<br/>函数2(如 print)"]
    B --> E["main 调用其他函数<br/>分工协作完成程序"]

    style A fill:#2F6B9E,color:#fff
    style B fill:#C0392B,color:#fff
    style C fill:#E67E22,color:#fff
    style D fill:#27AE60,color:#fff
    style E fill:#8E44AD,color:#fff

📌 2024 单选 1-B:C 程序的基本组成单位是函数,main 是入口。

  • 函数是C程序的基本单位(2024 单选1-B:C 程序的基本组成单位是函数 → 正确
  • 不允许函数嵌套定义(一个函数内不能定义另一个函数)
  • 但可以嵌套调用(函数A里调用函数B,函数B里调用函数C)

3.5 标识符与关键字(2022 单选4 必考)

标识符命名规则

  1. 字母、数字、下划线 组成
  2. 不能以数字开头
  3. 区分大小写(Sum ≠ sum)
  4. 不能与关键字重名

✅ 合法:sum, _count, student_name, MaxValue ❌ 非法:2num(数字开头), a+b(特殊符号), int(关键字)

🚨 红牌警告

考试最爱考:2aa_1_intint ❌(关键字) 注意:下划线可以开头_a 是合法标识符

2022 真题单选4:可用作 C 自定义标识符的是 → A. _6_ 逐项判断:A _6_:下划线开头合法 ✅;B 6_6:数字开头 ❌;C define:关键字 ❌;D typedef:关键字 ❌

常见关键字(32个,C89标准)

类别关键字
数据类型int char float double void short long signed unsigned
控制语句if else switch case default for while do break continue goto return
构造类型struct union enum typedef
存储类别auto static extern register const volatile
其他sizeof

💡 不需要背全部 32 个——只要会判断"某个词是不是关键字"即可(考试只考判断)。

3.6 预处理指令

指令用途示例
#include包含头文件#include <stdio.h>
#define定义宏常量/宏函数#define PI 3.14159
#ifdef / #endif条件编译

3.6.1 #define 宏常量示例

c
#define PI 3.14159      // 定义宏常量:程序中所有 PI 都会替换为 3.14159
#define MAX 100

int main() {
    printf("%f\n", PI);          // 编译时 PI → 3.14159
    printf("%d\n", MAX);         // MAX → 100
    return 0;
}

💡 宏替换发生在预处理阶段——先把代码里的 PI 全部换成 3.14159,再交给编译器。

3.6.2 #include < >#include " " 的区别(教材经典)

#include <文件名> 在系统头文件目录下搜索(直接查找) #include "文件名" 先在当前目录搜索,再到系统目录搜索(先局部后全局)

3.6.3 头文件与函数对应表(2024 单选2 必考)

头文件常见函数
stdio.hprintf scanf getchar putchar
string.hstrcmp strcpy strlen strcat
math.hsqrt pow fabs sin cos
stdlib.hmalloc free exit atoi

2024 真题单选2:使用 strcmp 函数需要包含的头文件是 → A. string.h 解析:字符串函数全在 string.hmath.h 是数学函数;stdlib.h 是标准库(malloc/free);stdio.h 是输入输出


④ 🧪【真题同源例题】

例题 1:入门基础题(先热热身)

判断下列标识符是否合法,并说明原因:

c
sum      // ①
2num     // ②
_a       // ③
int      // ④
Max_Value  // ⑤

逐项分析:

  1. sum:字母开头,由字母组成 → 合法 ✅
  2. 2num数字开头 → 非法 ❌(规则:不能以数字开头)
  3. _a下划线开头 → 合法 ✅(下划线可以和字母一样开头)
  4. int:是关键字 → 非法 ❌(不能与关键字重名)
  5. Max_Value:字母+下划线,非关键字 → 合法 ✅

✅ 对应 2022 真题单选4 的解题套路:一看开头是不是数字,二看有没有非法符号,三看是不是关键字

例题 2:2024 真题改编(单选 · 注释格式)

下列关于 C 语言注释的说法,错误的是(  )

A. 可以用 // 表示单行注释 B. 可以用 /* */ 表示多行注释 C. 注释可以用 \N 开始 D. 注释可以出现在程序中的任何位置

逐项分析:

  1. A:// 是单行注释(C99 起)→ 说法正确
  2. B:/* */ 是多行注释 → 说法正确
  3. C:\N 开始?C 语言不存在 \N 注释 → 说法错误 ← 选它
  4. D:注释位置任意 → 说法正确(2023 判断1 佐证)

✅ 对应 2024 单选1,答案 C。陷阱就是 C 选项——把不存在的 \N 混进来。

例题 3:2024 真题改编(单选 · 头文件)

C 语言中,使用 strcpy 函数需要包含的头文件是(  )

A. stdio.h  B. math.h  C. string.h  D. stdlib.h

逐项分析:

  1. A stdio.h:输入输出函数(printf/scanf)的家 → 不是
  2. B math.h:数学函数(sqrt/pow)的家 → 不是
  3. C string.h字符串函数(strcpy/strcmp/strlen/strcat)的家 → 选它 ✅
  4. D stdlib.h:标准库(malloc/free)的家 → 不是

✅ 对应 2024 单选2(strcmp 变 strcpy),答案 C。记住"字符串三兄弟 strcpy/strcmp/strlen 全在 string.h"。

例题 4:2026 真题改编(单选 · 编译/链接/运行错误)

下列说法正确的是(  )

A. 数组越界一定能在编译阶段发现 B. 缺少分号通常属于编译错误 C. 除以 0 一定属于链接错误 D. 函数声明不匹配一定不会报警

逐项分析:

  1. A:数组越界 → 编译阶段发现不了,运行时才崩 →
  2. B:缺少分号 → 破坏语法 → 编译阶段报错对 ✅
  3. C:除以 0 → 运行错误(不是链接错误)→
  4. D:函数声明不匹配 → 编译器通常会报警

✅ 对应 2026 单选8,答案 B。记法:语法找编译,符号找链接,越界/除零找运行


⑤ ⚠️【历年真题高频扣分坑】

#陷阱错误做法正确做法出处
1\N 注释以为 C 有 \N 注释C 只有 /* *///2024 单选1
2注释位置以为注释只能在开头注释位置任意2023 判断1
3下划线开头以为 _a 非法_a 合法,下划线可开头2022 单选4
4define/typedef当普通标识符都是关键字,不可作标识符2022 单选4
5头文件混淆strcmpstdio.h字符串函数在 string.h2024 单选2
6错误阶段混淆数组越界当编译错误越界/除0是运行错误2026 单选8
7预处理加分号#include 后写 ;#include# 开头,不加分号经典
8return 0 省略以为可省略表示正常退出,考试常问经典
9语句跨行以为一行只能一条语句一条语句可分多行2024 单选1-D
10main 位置以为 main 必须在开头main 可出现在任何位置,但有且仅有一个闭卷经典

📌 最值钱的一条:第 6 条(编译/链接/运行错误)是 2026 考纲新增重点,题型固定为"下列说法正确的是"——用"语法找编译、符号找链接、越界除零找运行"口诀秒杀。


⑥ 📝【课后自测练习题】

1. 下列选项中,可用作 C 语言合法标识符的是(  )(2022 真题风格)

A. 2abc  B. _xyz  C. float  D. a+b


2. 下列关于 C 语言注释的说法,正确的是(  )(2024 真题风格)

A. 注释只能写在程序最开头 B. \N 可以开始一行注释 C. 注释可以用 /* */ 包含多行 D. 注释中不能出现中文


3. C 语言中,使用 strlen 函数需要包含的头文件是(  )(2024 真题风格)

A. stdio.h  B. string.h  C. math.h  D. stdlib.h


4. 下列关于编译错误、链接错误、运行错误的说法,错误的是(  )(2026 真题风格)

A. 缺少分号通常属于编译错误 B. 数组越界通常在运行阶段才被发现 C. 链接错误常见于符号找不到定义 D. 除以 0 属于编译错误


👆 点击展开参考答案与解析

第1题B. _xyz

  • A 2abc:数字开头 ❌
  • B _xyz:下划线开头,合法 ✅
  • C float:关键字 ❌
  • D a+b:含特殊符号 +

第2题C. 注释可以用 /* */ 包含多行

  • A 错:注释位置任意(2023 判断1)
  • B 错:C 语言没有 \N 注释(2024 单选1)
  • C 对:/* */ 就是多行注释 ✅
  • D 错:注释里可以出现中文

第3题B. string.h

  • strlen 是字符串函数,在 string.h(和 strcmp/strcpy/strcat 同族)

第4题D. 除以 0 属于编译错误

  • 除以 0 是运行错误(运行时才崩),不是编译错误
  • A/B/C 说法均正确(2026 单选8 口径)

📝 原有闭卷真题挑战(保留原内容)

(点击下方空白查看答案)

1. C程序的基本单位是?
2. main函数的位置?
3. 以下哪个是合法标识符?
   A. 2ab   B. _abc   C. int   D. a+b
4. C程序的执行过程顺序?
5. #include < > 和 #include " " 的区别?
👆 点击展开答案
  1. 函数
  2. main函数可以出现在程序的任何位置——但一个程序有且只有一个main函数
  3. B. _abc(A数字开头,C关键字,D含特殊符号)
  4. 预处理 → 编译 → 汇编 → 链接
  5. < > 只在系统目录搜索," " 先当前目录再系统目录

📖 教材习题对照

教材习题知识点难度
习题1.1C语言的特点
习题1.4编译与链接的区别⭐⭐
习题1.5标识符判断
习题1.6编写第一个C程序

对应教材:谭浩强《C程序设计》第5版 → 第1章 程序设计和C语言 对应考试大纲:考点1 — C语言基本概念

📺 配套视频

复习到本考点 → 先看视频补讲,再刷上面「闭卷挑战」。

仅供个人学习 · 考生回忆版 · 非考试院原卷