Skip to content

Commit cde752d

Browse files
committed
feat: 更新教程内容,增加代码对比和小测验部分,优化字符串字面量描述
1 parent 9310495 commit cde752d

File tree

3 files changed

+82
-30
lines changed

3 files changed

+82
-30
lines changed

docs/教程/正文/语法和标准库/1_在开始编程之前.md

Lines changed: 46 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,23 @@
1010

1111
**你不用学一辈子 C 语言,但我们可以做一辈子朋友。**
1212

13-
OK,我们开始。这一章的内容很轻松,就当闲聊了。
13+
OK,我们开始。这一章的内容很轻松(不理解的概念性内容跳过就好),就当闲聊了。
1414

1515
## 1. 什么是编程
1616

1717
### 1.1 定义
1818

19+
用不严谨的话说:**编程是把人类世界的问题,抽象成计算机世界的逻辑,并指挥计算机去执行。**
20+
21+
这个过程包含两个核心步骤:
22+
23+
1. **思维的形式化(Formalization)**
24+
你首先要把脑海中模糊的想法(比如“帮我算一下全班平均分”),拆解成逻辑严密、毫无歧义的步骤(“读取所有分数” -> “累加” -> “除以总人数”)。
25+
2. **逻辑的翻译(Translation)**
26+
使用一种人能读懂、计算机也能通过工具(编译器)理解的语言——**编程语言**,将上述步骤记录下来。
27+
28+
所以,编程不是单纯的“敲代码”,那是打字员的工作。
29+
1930
### 1.2 编程的两个起源
2031

2132
1. 两个计算模型:图灵机 (Turing Machine) 和 lambda 演算 (Lambda-calculus)
@@ -78,6 +89,10 @@ OK,我们开始。这一章的内容很轻松,就当闲聊了。
7889

7990
你的目标,是在更高的抽象层次上思考:通过掌握一个个“套路”,**将解决问题的步骤打包成可以直接调用的“模式”**
8091

92+
### 2.4 我需不需要理解某些“概念”?
93+
94+
追究概念的“本质”是非常难的。许多概念的演变,涉及复杂的历史过程,涉及到十分基础的数学、逻辑等理论原理。关于编程语言理论的很多讨论超出了本教程的范围——很多时候,本教程只讲应用。
95+
8196
## 3. 关于 C
8297

8398
### 3.1 发展历史
@@ -211,25 +226,19 @@ IDE 一般会自带 debugger。
211226

212227
目前主流的大语言模型在幻觉问题上已经有了很大改善,辅助一些比较简单的内容的学习时(几乎)不会胡编乱造,可以放心大胆地提问。
213228

214-
截至目前(注:2025.8.4),主流的大语言模型提供商有如下几个:
229+
截至目前,主流的大语言模型提供商有如下几个:
215230

216231
- 国外:
217-
- OpenAI:**GPT** 系列和 **o** 系列,免费用户只能体验有限功能;Plus 订阅每个月 20\$,Pro 订阅每个月 200\$
218-
- Google:**Gemini** 系列,免费用户在官网上的使用次数受限;在 **Google AI Studio** 上可以免费使用。
219-
- Anthropic:**Claude** 系列,官网注册需要国外手机号,免费用户只能体验有限功能。在某些 AI 编辑器中可以直接使用。
220-
221-
Anthropic 还推出了终端编程助手 [**Claude Code**](https://www.anthropic.com/claude-code),Pro 用户使用额度较少,Max 用户额度较多。充 Max 一定要充每个月 200 美元的。
222-
223-
这个公司对中国不友好。
224-
225-
- xAI:**Grok** 系列,自 Grok 4 起,只有付费用户才能在官网使用。
232+
- OpenAI:**GPT** 系列。
233+
- Google:**Gemini** 系列。
234+
- Anthropic:**Claude** 系列。
235+
- xAI:**Grok** 系列。
226236

227237
- 国产:
228238
- DeepSeek:[官网](https://chat.deepseek.com/)免费使用。
229239
- Kimi:[官网](https://www.kimi.com/)免费使用。
230240
- 通义千问:[官网](https://chat.qwen.ai/)免费使用。
231-
- 质谱清言:[官网](https://chat.z.ai/)免费使用。
232-
- 豆包:不要用豆包写代码。太糖了。
241+
- 智谱清言:[官网](https://chat.z.ai/)免费使用。
233242

234243
[**Poe**](https://poe.com) 上充值(每天有免费额度)后,可以使用上述所有模型。
235244

@@ -283,7 +292,7 @@ Code is cheap, show me the proof.
283292
## 7. 推荐阅读或学习
284293

285294
1. **SICP** (Structure and Interpretation of Computer Programs) 第二版(用 **Scheme** 写的那个版本)
286-
2. **UML**
295+
2. **CS:APP** (Structure and Interpretation of Computer Programs)
287296
3. [**pl-docs**](https://github.com/FrankHB/pl-docs/blob/master/zh-CN)
288297

289298
注:[**CS 自学指南**](https://csdiy.wiki/CS%E5%AD%A6%E4%B9%A0%E8%A7%84%E5%88%92/) 上面汇集了计算机各个领域的课程资料。
@@ -330,7 +339,7 @@ Code is cheap, show me the proof.
330339
331340
<template #question>
332341

333-
根据 3.3 节,以下哪些是 C 语言的主要应用领域?(多选)
342+
以下哪些是 C 语言的主要应用领域?(多选)
334343

335344
</template>
336345

@@ -354,7 +363,7 @@ C 语言的核心优势在于系统级编程和对硬件的直接控制。
354363
355364
<template #question>
356365

357-
关于 2.2 节中 `for``while` 的“套路”(Idioms),哪个描述是正确的?
366+
关于 `for``while` 的“套路”(Idioms),哪个描述是正确的?
358367

359368
</template>
360369

@@ -366,3 +375,24 @@ C 语言的核心优势在于系统级编程和对硬件的直接控制。
366375
因此,选项 B 是对 `for` 循环“套路”的正确描述。
367376

368377
</Quiz>
378+
379+
<Quiz
380+
type="single"
381+
:options="[
382+
{ label: 'VS Code', value: 'A' },
383+
{ label: 'MSVC', value: 'B' },
384+
{ label: 'Clang', value: 'C' },
385+
{ label: 'MSVC', value: 'D' }
386+
]"
387+
answer="A"
388+
>
389+
390+
<template #question>
391+
392+
以下哪个工具****是编译器?
393+
394+
</template>
395+
396+
GCC,Clang,MSVC 是常见编译器,VS Code 是代码编辑器。
397+
398+
</Quiz>
Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,40 @@
11
# 字符串字面量 (String Literal)
22

3-
1. 在需要内嵌字符串到源代码中使用
3+
## 1. 字符串
44

5-
2. 字符串字面量**不能修改**(通常实现为放在只读内存中)
5+
字符串是编程语言中表示文本的一种数据类型。形式化的定义请见 [维基百科](https://zh.wikipedia.org/zh-cn/%E5%AD%97%E7%AC%A6%E4%B8%B2)
66

7-
3. 形式如下:
7+
在 C 语言中,使用**以一个空字符终止的序列**(这个字符不算字符串的一部分)表示字符串,称为**空终止字符串**,也叫 **C 风格字符串**
8+
9+
## 2. 字符串字面量
10+
11+
1. 在需要内嵌字符串到源代码中使用。
12+
2. 字符串字面量**不能修改**,修改会导致未定义行为。
13+
3. 末尾隐含一个空字符。
14+
4. 形式上用双引号包裹(可以有前缀,前缀指定编码),例如:
815

916
```c
10-
const char* str = "hello world";
17+
"Hello world"
18+
u"Hello world"
19+
L"Hello world"
1120
```
1221

13-
4. 字符串字面量的类型为 `char[N]`,其中 **N** 为字符串中字符的个数,包括空终止符`\0`
14-
5. Unicode 的讲解,详见 **[Unicode](/教程/番外/2_Unicode.md)**
15-
6. 几种带编码前缀的字符串字面量(编码前缀指定其编码格式):
22+
5. 字符串字面量的类型为对应字符类型的数组类型(例如,如果不带前缀,类型就是 `char[N]`,其中 **N** 为字符串字面量中字符的个数,包括空终止符(例如,`"mdr"` 的类型是 `char[4]`
23+
6. Unicode 的讲解,详见 **[Unicode](/教程/番外/2_Unicode.md)**
24+
7. 几种带编码前缀的字符串字面量(编码前缀指定其字符集):
1625
1. `u8" "`:UTF-8
1726
2. `u" "`:UTF-16
1827
3. `U" "`:UTF-32
19-
4. `L" "`:宽字符:在内存中用 Unicode 进行保存,输出的时候转化成多字节编码(相比之下,UTF-8 UTF-16
20-
UTF-32 用多字节编码进行保存,较耗费存储空间)
21-
7. 字符串的拼接:
28+
4. `L" "`:宽字符:在内存中用 Unicode 进行保存,输出的时候转化成多字节编码
29+
30+
如果不带编码前缀,那么字符串字面量使用的字符集是实现定义的。
31+
8. 字符串字面量的拼接:
2232

2333
```c
2434
const char* message = "Hello, " "C " "World!";
2535
printf("%s\n", message); // 输出 Hello, C World!
2636
```
2737
28-
注意事项:
29-
1. 如果一个字符串字面量无编码前缀,则结果字符串字面量拥有**有编码前缀的那个字符串指定的前缀**
30-
2. C23 起**不能**拼接两个拥有不同编码前缀的字符串字面量(C23 前为实现定义行为)
38+
## 3. 字符串字面量和字符串
39+
40+
1. 一个字符串字面量不一定表示一个字符串。如果字符串字面量的中间有 `'\0'`(例如 `"mdr\0mdr"`),那么它可以表示两个或多个字符串。

docs/杂项/组件展示.md

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22

33
不得不说,Vitepress 太强大了啊 :)
44

5+
## CodeCompare 代码对比
6+
7+
左侧是错误代码,右侧是正确代码;可以分别起标题。
8+
59
<CodeCompare left-title="使用 switch" right-title="使用 if-else">
610

711
<template #left>
@@ -38,12 +42,16 @@ if (grade >= 90) {
3842

3943
</CodeCompare>
4044

45+
## Quiz 小测验
46+
47+
分为单选和多选;单选选择之后直接给出答案,多选点击“确认答案”之后给出答案。
48+
4149
<Quiz
4250
type="single"
4351
:options="[
4452
{ label: 'int p = &a;', value: 'A' },
4553
{ label: 'int *p = a;', value: 'B' },
46-
{ label: 'int*p = &a;', value: 'C' },
54+
{ label: 'int *p = &a;', value: 'C' },
4755
{ label: '*int p = &a;', value: 'D' }
4856
]"
4957
answer="C"
@@ -91,6 +99,10 @@ if (grade >= 90) {
9199

92100
</Quiz>
93101

102+
## TerminalWindow 程序输出直观展示
103+
104+
可以加标题。MCT 中所有 TerminalWindow 的标题均为 "zsh - ***"。
105+
94106
<TerminalWindow title="zsh - my_program">
95107

96108
<span class="prompt">$</span> gcc main.c -o main

0 commit comments

Comments
 (0)