CC语言通关
第01课 · 程序设计和C语言
教材对照
第1章 · 书页 1–14

第01课 · 程序设计和C语言

程序、计算机语言、C语言特点、第一个 C 程序、运行步骤

17 个小节 16 段代码 建议 2h
教材依据第1章《程序设计和C语言》书页 p.1–14
本课覆盖:教材第1章正文 + 书末习题(p.14)。标「教材 p.X」= 教材段落总结;「例题」= 教材例题;「习题」= 书末题目;「本课补充」= 非教材原文。
在全书对照表中查看 →

教材第1章《程序设计和C语言》| 时长:2h | 日期:10/17


📖 背诵清单(先背这个,再往下看)

📖 教材 p.1–14 · 要点汇总

下面 4 块是第 1 章要背的全部内容,忠于教材,完整列出。先背熟,再进入后面的理解讲解。

1. 程序的定义

程序,是为完成某一项任务而编写的、计算机能执行的有序指令集合(指令序列)。

2. 计算机语言(三级)

  • 机器语言:由 0 和 1 组成的二进制代码指令,是计算机唯一能直接识别和执行的语言。
  • 汇编语言:用助记符(如 ADD、SUB)代替二进制指令的语言,需翻译成机器语言后才能执行。
  • 高级语言:接近自然语言(英文)的编程语言,易学易用,需编译成机器语言后执行。

3. C 语言的主要特点(8 条)

  1. 语言简洁、紧凑,使用方便、灵活。
  2. 运算符丰富。
  3. 数据类型丰富。
  4. 具有结构化的控制语句,用函数作为程序的模块单位,便于实现模块化。
  5. 语法限制不太严格,程序设计自由度大。
  6. 允许直接访问物理地址,能进行位(bit)操作,能实现汇编语言的大部分功能,可直接对硬件进行操作。
  7. 生成的目标代码质量高,程序执行效率高。
  8. 用 C 语言编写的程序可移植性好。

4. C 程序的结构(4 条)

📖 教材 p.9–10 · 正文总结
  1. 一个 C 程序由一个或多个函数组成,其中必须有且只有一个 main 函数(主函数)。
  2. 程序总是从 main 函数开始执行,无论 main 函数写在程序的什么位置。
  3. 每条语句以分号 ; 结尾。
  4. #include <stdio.h> 是预处理指令,用来包含头文件(把标准输入输出函数"拿进来")。

课前一句话

📖 本课补充 · 非教材原文

这节课只解决一件事:搞明白"程序"到底是什么,然后亲手写出你人生第一个 C 程序。学完你就能理解下面这 6 行代码为什么长这样。


一、先补地基:计算机是台"只会照做的机器"

📖 本课补充 · 非教材原文

在讲 C 语言之前,先建立一个最底层的认识:

计算机很笨,但很快。它不会思考,只会一字不差地照着你写的"步骤清单"去做。

打个比方:计算机就像一个新来的厨师学徒——他厨艺为零,但你给他一张写得清清楚楚的菜谱,他就能一步步做出菜来。你写程序,就是给这个学徒写菜谱。

  • 菜谱里写什么,他就做什么;写错一个字,他就做错一道菜。
  • 他不会"猜"你的意思,只会照做。

这个认识很重要,后面你遇到一切"程序报错",根源都是:你写的"菜谱"里有计算机看不懂或做不了的一步。


二、什么是程序(📖 要背)

📖 教材 p.1 · 正文总结

一句话:程序,就是指挥计算机完成某个任务的一串指令(步骤)。

拆开讲:

  • "程" = 过程、流程;"序" = 顺序、次序。合起来就是"有顺序的过程"。
  • 程序 = 一系列按顺序排列的、计算机能执行的指令。

举例子:早上起床的程序可以写成:

c
1. 睁眼
2. 下床
3. 刷牙
4. 洗脸
5. 吃早饭

这就是一个"程序"——它是给人看的步骤。C 语言程序,就是把这套步骤写成计算机能看懂的话。

程序设计 = 设计这份"步骤清单"的过程。核心不是打字,而是想清楚步骤。


三、什么是计算机语言(📖 要背)

📖 教材 p.1–2 · 正文总结

一句话:计算机听不懂人话,人和计算机之间需要一种"中间语言",这就是计算机语言。

为什么需要它:

  • 计算机底层只认 0 和 1(机器语言),但人没法直接写 0 和 1。
  • 所以有了高级语言:用接近人类习惯的英文单词来写,再由一个"翻译官"翻给计算机听。

计算机语言分三类(考试爱考,记这张表):

类别是什么特点例子
机器语言直接是 0 和 1计算机直接懂,人看不懂10110000…
汇编语言用助记符代替 0/1接近机器,仍很底层ADD A, B
高级语言接近人的英文语句人好懂,需翻译C、Python、Java

C 语言属于高级语言。

顺便拆个词:以后你会反复看到 "编译" 这个词。它 = 把高级语言写的程序,翻译成计算机能执行的机器语言的过程。翻译官叫编译器。


四、C 语言的特点(📖 要背)

📖 教材 p.3–4 · 正文总结

C 语言是 1972 年诞生的,到今天快 50 年了还是程序员的核心语言。它的特点(背这几个就够):

  1. 简洁紧凑、灵活方便:总共只有 32 个关键字(后面会逐个认识)。
  2. 运算符丰富:能直接做很多运算。
  3. 数据类型丰富。
  4. 能直接操作内存和硬件(这是 C 强大的根源,也是"指针"那一章的伏笔)。
  5. 效率高、可移植性好:写的程序换个机器基本也能跑。

一句话记住:C 语言 = 长得像高级语言,能力接近机器语言,所以既好写、又强大。


五、你的第一个 C 程序(⌨️ 要写代码)

📖 教材 p.5–10 · 正文总结

先直接看完整代码,别怕,我会一行一行拆:

c
#include <stdio.h>
int main()
{
    printf("Hello, World!\n");
    return 0;
}

运行它,屏幕上会输出一行字:

c
Hello, World!

现在逐行拆解,这是这节课的重点:

第 1 行:#include <stdio.h>

拆分名字(你最爱的方法):

  • std = standard(标准)
  • io = input / output(输入 / 输出)
  • .h = header(头文件)

合起来:stdio.h = 标准输入输出头文件。

它是干嘛的:C 语言自己不带"打印到屏幕"的功能,这些功能被装在仓库里。stdio.h 就是那个仓库的"清单",里面登记了 printf 等函数。第 1 行 #include 的意思是"把这个清单拿进来",这样后面用 printf 时,计算机才认识它。

生活比喻:#include <stdio.h> 就像你进厨房前先喊一声"把调料柜拉过来!",不然炒菜时拿不到盐。

第 2 行:int main()

拆分名字:

  • main = 主要的(主函数)
  • int = integer(整数)

它是干嘛的:main 是程序的入口——程序一运行,就从 main 这里开始执行,就像一本书从第 1 页开始读。每个 C 程序有且只有一个 main 函数。前面的 int 表示这个函数最后要返回一个整数(配合第 6 行理解)。

第 3、5 行:{ 和 }

这对花括号是"函数的身体"。{ 和 } 之间的内容,就是 main 这个函数要干的事。

比喻:{ 和 } 像一个抽屉,抽屉里装的是"步骤清单"。

第 4 行:printf("Hello, World!\n");

这是全程序唯一真正干活的一行。

拆分名字:

  • print = 打印
  • f = formatted(格式化)

合起来 printf = 按格式打印。

拆开看这行的三部分:

  1. printf(...) —— 调用"打印"这个功能。
  2. "Hello, World!\n" —— 引号里的,是要打印的文字。
  3. \n —— 一个特殊记号,叫换行符,作用=让光标跳到下一行。\ 是"转义"的意思,n = newline(新行)。

末尾的 ;(分号):它叫语句结束符,表示"这句话说完了"。C 语言里每条语句末尾都要写 ;,忘了写就报错——这是新手第一大坑。

记住口诀:引号里 = 文字,原样打印;引号外 = 代码,真的执行。

第 6 行:return 0;

  • return = 返回。
  • 0 表示"正常结束"。

这行是告诉操作系统:"我跑完了,一切正常。" 呼应第 2 行的 int(函数要返回一个整数,这里就返回了 0)。


六、C 程序的结构(📖 要背)

📖 教材 p.9–10 · 正文总结

从上面这个程序,能总结出一个 C 程序的标准结构(考试常考):

c
预处理指令(#include …)   ← 拿工具/清单
函数定义(int main …)      ← 程序入口
{                          ← 函数体开始
    语句;                    ← 干活的步骤
    语句;
    return 0;
}                          ← 函数体结束

四个要点:

  1. 一个 C 程序由若干个函数组成,其中必须有且只有一个 main 函数。
  2. 程序从 main 函数开始执行。
  3. #include <stdio.h> 等预处理指令写在最前面。
  4. 每条语句以 ; 结尾。

七、让程序会"打印数字"(⌨️ 要写代码,体现一个知识点)

📖 教材 p.5–8 · 正文总结

刚才只打印了文字,现在看个新知识点:%d 占位符。

c
#include <stdio.h>
int main()
{
    printf("我今年 %d 岁\n", 20);
    return 0;
}

输出:

c
我今年 20 岁

这行代码体现的知识点:printf 的引号里,%d 是一个占位符(占着位置不打印),它会在打印时被逗号后面的那个数(20)替换掉。

  • %d 的 d = decimal(十进制整数),所以 %d = "这里放一个整数"。
  • 逗号后面的 20 就是那个整数。

比喻:%d 像试卷上的填空题空格,20 就是填进空格的答案。几个 %d,就要在逗号后面跟几个数。


八、书上题目(📝 重点,考试可能抽题)

第 1 章的题目偏概念 + 简单写程序,我挑重点的讲:

题 1(概念):什么是程序?什么是程序设计? 答:程序是计算机执行某个任务的一串有序指令;程序设计就是设计、编写这份指令的过程(想清楚步骤)。

题 2(概念):为什么需要计算机语言?高级语言有什么特点? 答:因为计算机只懂 0/1 机器语言,人需要中间语言沟通。高级语言的特点:接近人类自然语言、易学易用、需要编译后才能运行、可移植性好。

题 3(写程序):编写程序,输出 Hello world!

c
#include <stdio.h>
int main()
{
    printf("Hello world!\n");
    return 0;
}

解析:这就是第六节那个程序的翻版,只是把 Hello, World! 换成 Hello world!,末尾有没有逗号、大小写,都要一字不差,否则输出就不对。

题 4(写程序):编写程序,分两行输出你自己的姓名和学号。 思路:用两个 printf,每个末尾带 \n 换行。

c
#include <stdio.h>
int main()
{
    printf("姓名:张三\n");
    printf("学号:20260001\n");
    return 0;
}

解析:第 4 行打印完 姓名:张三 后,\n 把光标换到下一行,所以第 5 行的 学号 出现在新的一行。如果去掉 \n,两句话会挤在同一行——这正是 \n 的作用。


九、运行 C 程序的步骤与方法(教材 1.5,p11–12)📖

📖 教材 p.11–12 · 正文总结

写了 .c 文件不等于能运行。教材把上机过程分成 4 步:

  1. 上机输入和编辑源程序:键盘输入 → 改正录入错误 → 存成 .c 源程序文件(如 f.c)。
  2. 对源程序进行编译:先由预处理器处理 #include 等预处理指令(把 stdio.h 的内容读进来,取代 #include <stdio.h> 行),再由编译器检查语法。有错就发出"出错信息",改完再编译,直到没有语法错误;然后生成二进制目标程序 .obj(如 f.obj)。
  3. 进行连接处理:一个程序可能包含多个源程序文件,编译是以源程序文件为对象的,一次编译只能得到一个目标模块。必须把所有目标模块连接装配起来,再与函数库连接成一个整体,生成可执行程序 .exe(如 f.exe)。连接由"连接编辑程序"完成。
  4. 运行可执行程序,得到运行结果。

教材图 1.2 的流程可以压缩成一句话:

c
编辑 → 编译 → 有错?──是──→ 改源程序,重新编译
                │否
                ↓
              连接 → 执行 → 结果正确?──否──→ 检查逻辑,改源程序
                                    │是
                                    ↓
                                   结束

考点两类错误要分清:

  • 语法错误:编译阶段就能发现(漏分号、括号不配对、变量没定义),编译器会报错,程序根本生成不了 .exe。
  • 逻辑错误:编译能过、也能运行,但结果不对(公式写错、赋值写反)。这类错误要靠调试(debug)和测试(test)发现。

教材的例子很典型:把 b = a; 错写成 a = b;,语法没问题、能通过编译,但结果与预期不符——这是逻辑错误。再如求 c = b / a,当 a=4, b=2 时结果 0.5 正确;但 a=0 时就无法求出——说明程序对某些数据正确、对另一些数据不正确,还有漏洞,需要设计多组测试数据去测。

调试 = 通过上机发现和排除程序中故障的过程。
测试 = 设计多组测试数据,检查程序对不同数据的运行情况,尽量发现漏洞并修改,使之适用于各种情况。


十、程序设计的任务(教材 1.6,p13–14)📖

📖 教材 p.13 · 正文总结

教材给"程序设计"下的定义是:从确定任务到得到结果、写出文档的全过程。不是"敲代码"这一个动作。

一般经历以下 6 个工作阶段:

  1. 问题分析:研究所给条件,分析最后应达到的目标,找出解决问题的规律,选择解题的方法。过程中可以忽略次要因素,使问题抽象化(例如用数学式子表示问题的内在特性)——这就是建立模型。
  2. 设计算法:设计出解题的方法和具体步骤。一般用流程图表示解题步骤。
  3. 编写程序:根据得到的算法,用一种高级语言编写出源程序。
  4. 对源程序进行编辑、编译和连接,得到可执行程序。
  5. 运行程序,分析结果:能运行不等于正确,要对结果进行分析。发现结果不对就要调试;调试出正确结果后还要测试(多组数据),确认程序对各种情况都适用。
  6. 编写程序文档:正式提供给用户使用的程序,必须提供程序说明书(用户文档),内容包括程序名称、功能、运行环境、安装和启动、需要输入的数据、使用注意事项等。

教材的一个结论:软件 = 计算机程序 + 程序文档。商品软件光盘里既有程序,也有使用说明(help / readme)。

考点程序设计 ≠ 写代码:写代码只是第 3 步;前面的"分析问题、设计算法"和后面的"调试、测试、写文档"同样算程序设计。


十一、书上题目补充(第 5–7 题,p14)📝

第 1 章的 7 道习题里,前面第 1–4 题已在上面讲过,这里补上第 5–7 题:

第 5 题(编程):编写一个 C 程序,运行时输出以下图形(五行五列的星号图案)。

c
#include <stdio.h>
int main()
{
    printf("*****\n");   // 第 1 行:5 个星号,然后换行
    printf("*****\n");   // 第 2 行
    printf("*****\n");   // 第 3 行
    printf("*****\n");   // 第 4 行
    printf("*****\n");   // 第 5 行
    return 0;
}

解析:这就是 5 条 printf,每条打印 5 个星号加一个 \n。题目要练的是"一条语句负责一行"的对应关系。

第 6 题(编程):运行时输入 a、b、c 三个值,输出其中最大者。

c
#include <stdio.h>
int main()
{
    int a, b, c, max;
    scanf("%d %d %d", &a, &b, &c);   // 从键盘读入三个整数
    max = a;                          // 先假设 a 最大
    if (b > max) max = b;             // b 更大就换 b
    if (c > max) max = c;             // c 更大就换 c
    printf("max=%d\n", max);          // 输出最大者
    return 0;
}

解析:if 语句第 4 章才正式讲,这里先"照猫画虎":先假定第一个最大,再依次和后面的数比,谁大就把谁记成 max。这是"求最大值"的通用套路,第 5、6 章还会反复用。

第 7 题(操作):用 Visual Studio 对 C 程序进行编辑、编译、连接和运行。

你机器上是 Visual Studio 2022,操作与教材的 2010 版基本一致:

  1. 新建"空项目",命名(如 test1);
  2. 在"源文件"上右键 → 添加 → 新建项 → 选"C++ 文件(.cpp)",文件名写成 test1.c(扩展名必须是 .c,否则按 C++ 编译);
  3. 输入源程序;
  4. 按 Ctrl+F5 编译并运行;有错看"错误列表",改到 0 错误;
  5. 看运行结果,分析是否符合预期。

这三题补齐后,第 1 章书末 7 道习题就全部覆盖了。


🛠 课后练习(只给题不给答案,做完发我判,或上机自验)

📖 本课补充 · 非教材原文

🔮 猜输出(先自己猜,再上机验证猜得对不对)

题 1

c
#include <stdio.h>
int main()
{
    printf("Hello");
    printf("World\n");
    return 0;
}

题 2

c
#include <stdio.h>
int main()
{
    printf("%d + %d = %d\n", 1, 2, 3);
    return 0;
}

🛠 变式题(独立写,写完上机跑)

题 3(照猫画虎):写一个程序,输出 Good Morning!

题 4(翻译):写程序输出一行 我今年20岁,身高175厘米(要求用两个 %d)

题 5(补全):下面代码想分两行输出"第一行""第二行",但它现在会挤在一行。补上缺失的那个东西,让它正确换行:

c
#include <stdio.h>
int main()
{
    printf("第一行");
    printf("第二行");
    return 0;
}

🐛 改错题(找出错在哪,并改对)

题 6

c
#include <stdio.h>
int main()
{
    printf("Hello, World!\n")
    return 0;
}

题 7

c
#include <stdio.h>
int main()
{
    printf("我今年 %d 岁\n");
    return 0;
}

📈 加练题(你随时喊,我随时追加到这里)

📖 本课补充 · 非教材原文

(暂无。想加练就说"再出几道 XX 题",我出的题会标上日期追加在这块。)


💬 问答区(你问过的问题 + 我的解答)

📖 本课补充 · 非教材原文

(暂无。你问的问题和我的解答会按 Q/A 整理进这里。)


该带走的 4 句话

📖 本课补充 · 非教材原文
  1. 程序 = 指挥计算机干活的一串有序指令,写程序就是写"步骤清单"。
  2. C 程序必须有且只有一个 main 函数,程序从 main 开始执行。
  3. 引号里 = 文字(原样打印),引号外 = 代码(真的执行);每条语句结尾别忘了 ;。
  4. printf 里的 %d 是占位符,会被逗号后面的数字替换;\n 是换行。

学完这一课,告诉我"下一课",我们进入第 2 章《算法——程序的灵魂》。如果刚才哪一行还卡着,直接说卡在哪一句 / 哪个词。

📚 教材覆盖清单(第1章,程序设计和C语言)

这张表把本课和教材逐节对上:从网页可以回查书页,从书页也能找到网页位置。标「未展开」的,就是教材里有、本课没讲的部分,已明确列出。

教材节号标题书页网站对应状态
1.1什么是计算机程序p.1二、什么是程序(📖 要背)精讲
1.2什么是计算机语言p.1–2三、什么是计算机语言(📖 要背)精讲
1.3C语言的发展及其特点p.3–4四、C 语言的特点(📖 要背)精讲
1.4最简单的C语言程序p.5–10五、你的第一个 C 程序(⌨️ 要写代码)精讲
1.4.1最简单的C语言程序举例p.5–8七、让程序会"打印数字"(⌨️ 要写代码,体现一个知识点)精讲
1.4.2C语言程序的结构p.9–104. C 程序的结构(4 条)精讲
1.5运行C程序的步骤与方法p.11–12九、运行 C 程序的步骤与方法(教材 1.5,p11–12)📖精讲
1.6程序设计的任务p.13十、程序设计的任务(教材 1.6,p13–14)📖精讲
习题第1章书末习题p.14本课「书上习题精讲」逐题精讲(第1–7题)
插图本课范围内教材插图p.1–13用文字/ASCII 重画未逐张复刻
附录附录 A–Ep.357–370全书对照页未单独成课
  • 教材插图(流程图、内存示意图等)本课用文字/ASCII 重画,未逐张复刻,页码见上表。
  • 附录 A–E(p.357–370)是速查表,未单独成课;全站对照页列出。
  • 标「本课补充」的小节(先补地基、比喻、随课练习等)不是教材原文,是为理解而加的。