C语言程序设计基础


C语言概述

计算机学院    杨已彪

yangyibiao@nju.edu.cn

概述

  • 什么是程序设计语言

  • 什么是计算机

  • 计算机与编程语言

  • 为什么学习C语言


思考

  • 问题1

    你们觉得计算机会‘听懂人话’吗?为什么 Siri/小爱同学可以和你对话?

  • 问题2

    指定一个数N,让计算机算 1+2+3+…+N,最快的方法是什么?


程序能做什么

  1. 排序一组成绩/批改试卷/统计单词个数等

  2. 游戏、微信、自动驾驶背后都是程序


什么是程序设计语言

人类交流 → 机器交流

  • 人类要交流需要语言(中文、英文)。

  • 人和计算机交流也需要“语言”——程序设计语言。

对比:自然语言 vs 程序语言

  • 自然语言灵活但有歧义;

  • 程序语言严格、无歧义,让机器可以准确执行。


什么是程序设计语言

程序设计语言,就是人类和计算机沟通的工具


什么是计算机

什么是计算机?

计算机:

  • 硬件软件组成

  • 用于接收、处理和存储数据的电子设备

硬件:输入设备、输出设备、存储设备、CPU、内存、主板等物理组件

软件:操作系统、应用程序等,执行各种任务


计算机与编程语言

计算机的基本功能:

  • 输入:各种输入设备(如键盘、鼠标、摄像头等)接收数据和指令

  • 处理:通过中央处理器(CPU)执行指令,进行数据处理和计算。CPU为计算机核心组件,负责执行程序中的逻辑和算术运算。

  • 输出:通过输出设备(如显示器、打印机、扬声器等)将处理结果呈现给用户。

  • 存储:使用内存和存储设备来存储数据和程序。内存:临时存储正在处理的数据;存储设备:长期保存信息。

  • 控制:通过操作系统和应用程序管理硬件资源,协调各组件的工作。


计算机与编程语言

举例:如何制作一杯咖啡

步骤分解:

  1. 确定所需材料(咖啡粉、水、糖、牛奶等)

  2. 煮水

  3. 加入咖啡粉

  4. 混合均匀

  5. 根据需要加入糖或牛奶

将大问题分解为具体小步骤,逐步解决每个部分


计算机与编程语言

举例:如何制作一杯咖啡

  1. 输入
    材料准备:
    咖啡粉、热水、牛奶(可选)、糖(可选)

  2. 处理
    步骤:
    煮水:将水加热到适合冲泡咖啡的温度。
    冲泡咖啡:将热水倒入咖啡粉中,等待几分钟,让咖啡充分浸泡。
    加牛奶和糖(可选):根据个人口味,加入牛奶和糖。

  3. 存储
    等待时间:在冲泡咖啡的过程中,咖啡的状态和时间可以视为存储。咖啡需要在特定时间内浸泡,以确保味道。

  4. 输出
    享用咖啡:完成后,将咖啡倒入杯中,准备饮用。


计算机与编程语言

计算机如何工作: 计算购物总价

假设你在超市购物, 购买了以下商品:

  • 苹果: 3个, 每个2元

  • 香蕉: 5个, 每个1.5元

  • 橙子: 2个, 每个3元


计算机与编程语言

计算机如何工作: 计算购物总价

  1. 输入
    计算机接收用户输入的信息:
    苹果数量: 3, 苹果单价: 2元
    香蕉数量: 5, 香蕉单价: 1.5元
    橙子数量: 2, 橙子单价: 3元

  2. 处理
    计算机执行以下计算:
    苹果总价 = 苹果数量 × 苹果单价 = 3 × 2 = 6元
    香蕉总价 = 香蕉数量 × 香蕉单价 = 5 × 1.5 = 7.5元
    橙子总价 = 橙子数量 × 橙子单价 = 2 × 3 = 6元

  3. 计算总价
    总价 = 苹果总价 + 香蕉总价 + 橙子总价 = 6 + 7.5 + 6 = 19.5元

  4. 输出
    计算机将结果输出到屏幕上:
    “购物总价为: 19.5元”


计算机与编程语言

制作咖啡/计算购物总价的过程,我们可以看到计算机的工作原理:

输入: 材料和配方(用户输入的数据)。
处理: 加热、冲泡和混合(CPU 执行指令)。
存储: 等待时间和状态(内存中的数据)。
输出: 完成的咖啡(计算机的结果展示)。


计算机与编程语言

编程: 使用特定的编程语言编写指令, 控制计算机执行特定任务

  • 接收输入

  • 处理数据

  • 存储数据

  • 输出数据


计算机与编程语言

计算机如何工作的?


计算机与编程语言

语言是人类沟通、交流的工具,交流思想、传递知识等

  • 符号系统:语言由一系列符号(如词汇、字、音节)组成,每个符号都有特定的意义

  • 语法规则:语言遵循特定的语法和结构规则,指导如何将符合组合成有意义的句子或表达


计算机与编程语言

编程语言是用于与计算机进行交流的正式(formal)语言,提供一套规则和语法,使程序员能编写指令,以控制计算机的行为。

  • 符号和语法:由特定符号、关键词和语法规则构成,能使用规则编写源代码

  • 数据结构:提供用于组织和存储数据的方式,如数组、结构体等

  • 控制结构:条件语句(如if, swtich)和循环(如for, while), 用于控制程序的执行流程


计算机与编程语言

编程思维

  • 逻辑思维
    判断一个用户输入的数是否为偶数
  • 问题分解:
    制作一个简单的计算器(输入运算符
  • 算法思维
    排序用户输入的一组数字
  • 抽象化
    交通信号灯,抽象为3种状态
  • 算法思维
    将一组数字排序,比较相邻元素,如果顺序错误则交换,重复直到没有交换为止
  • 条件判断
    根据天气决定穿衣,如果下雨,穿雨衣或带雨伞,否则穿短袖
  • 循环
    打印1到100的数字

C语言的起源

C语言起源可追溯到1970年代中期

贝尔实验室:C语言是在美国贝尔实验室(Bell Labs)由Dennis Ritchie和同事开发

早期的开发:C语言最早是在1972年创建,最初用于编写操作系统,特别是UNIX操作系统。Ritchie和团队使用C语言重写了UNIX的核心部分。


C语言的起源

标准化:1978年,Brian Kernighan和Dennis Ritchie合著了《C程序设计语言》,对C语言的推广起到了重要作用。1989年,C语言被正式标准化为ANSI C,这为后来的C语言版本奠定了基础。

影响力:C语言以其高效性和灵活性被广泛应用于系统编程、嵌入式系统以及应用程序开发。它的设计理念和语法影响了后续许多编程语言,如C++、Java和C#等。


C语言的标准化

K&R C

  • Kernighan和Ritchie合作编写了《C程序设计语言》(1978)
  • 没有正式的C语言标准, 这本书成了事实标准

C89/C90

  • ANSI标准X3.159-1989(1988年完成, 1989年12月正式批准)
  • 国际标准ISO/IEC 9899:1990

C99

  • 国际标准ISO/IEC 9899:1999
  • 包含了一些重要的改变

基于C的语言

C++包括C的所有特性, 添加了类和其他特性以支持面向对象编程

Java基于C++, 因此继承了许多C特性

C#是从C++和Java派生的新的语言

Perl吸收了C的许多特性


C的特点

  1. 低层语言
    提供了对机器级概念的访问(字节和地址)

  2. 小型语言
    更有限的特性集合(K&R第2版参考手册仅用49页描述了整个C语言)
    C语言很大程度依赖一个标准函数的库

  3. 宽松包容
    提供了比其他语言更高的自由度, 不强制进行详细的错误检查


C的优点

  • 效率高
  • 可移植
  • 灵活: C语言特性使用的限制非常少
  • 功能强大: 庞大的数据类型和运算符集合
  • 标准库
  • 与LINUX集成

C的缺点

  • 程序容易隐藏错误

  • 程序可能难以理解

  • 程序可能难以维护


有效使用 C

  • 深入理解以避免C语言的陷阱

  • 避免过于复杂的代码

  • 使用软件工具(lint, 调试器)使程序更可靠

  • 利用现有的代码库

  • 采用一套合理的编码规范

  • 紧贴标准