跳转至

1. 绪论

C 语言由 Bell 实验室的 D. M. Ritchie 在 1972 年研制,最初和 UNIX 系统一起发展起来。

1.1 程序、算法与结构化设计

算法:解决一类问题的一组有限步骤。每一步都得写清楚,而且最终必须停下来。只说“不断尝试,直到成功”不算完整的算法,因为没有说明怎样尝试,也不能保证一定结束。

从题目到程序,大致要走下面几步:

  1. 分析问题,明确输入、输出和约束;
  2. 建立数学模型,选择数据结构和算法;
  3. 用流程图、NS 图或伪代码描述流程;
  4. 编码、编译、链接、运行;
  5. 测试并调试。

结构化程序归根到底只有三种结构:顺序、选择、循环。复杂程序看着长,其实也只是这三种结构的嵌套,再加上函数拆分。

传统流程图用箭头表示控制流,容易出现随意跳转,也不便于表示嵌套。NS 图把每个基本结构画成一个方框,结构边界、作用域和嵌套关系更清楚。

NS 图中的三种基本结构

1.2 测试与调试

测试是为了找错,不是为了证明程序没错。自己测程序时,至少准备这几类数据:

  • 正常情况;
  • 边界值,如 0、1、最大值、最小值;
  • 特殊情况,如空输入、重复值、除数为 0;
  • 非法输入(题目要求处理时)。

错误大致分四类:

  • 编译错误:语法、类型或声明有问题;
  • 链接错误:函数只有声明却没有定义,或缺少所需库;
  • 运行错误:越界、空指针解引用、除零等;
  • 逻辑错误:程序能运行,但算法或边界处理不对。

调试时先看中间量从哪一步开始不对。找到第一个错误状态后再往前追,比看到答案不对就到处改代码靠谱得多。

1.3 程序设计语言与 C 程序

机器语言直接写机器指令,汇编语言用助记符代替二进制指令,高级语言则更接近人的表达。C 程序从源文件到真正运行,中间还要经过预处理、编译、链接

#include <stdio.h>

int main(void)
{
    int a, b;
    scanf("%d%d", &a, &b);
    printf("%d\n", a + b);
    return 0;
}
  • #include <stdio.h> 引入标准输入输出函数的声明;
  • main 是程序入口,返回类型写成 int
  • 花括号围成函数体或复合语句;
  • C 区分大小写,一般语句以分号结束;
  • 注释可写成 /* ... */// ...

评论