第1章 C++介绍:1.1 程序与编程语言

2025-02-28  本文已影响0人  hwdong

第1章 C++介绍

1.1 程序与编程语言

1.1.1 计算机是什么

计算机是一种通用计算设备,能够根据指令处理数据。每台计算机都配备一个 中央处理单元(CPU),它是一块微处理器芯片,负责执行数据处理指令。不同的计算机可能使用不同的 指令集

计算机指令

计算机通过执行一系列指令来处理任务,并通常会生成某种输出。这类似于人们按照步骤完成任务的方式。例如,“做饭”可以分解为以下步骤:

  1. 取米并放入洗米盆。
  2. 用自来水冲洗大米。
  3. 如果电饭锅未清洗,则清洗电饭锅。
  4. 将米和水放入电饭锅。
  5. 插上电源,按下开关。
  6. 饭煮好后,拔下电源(任务完成)。

虽然人类可以理解复杂的自然语言指令,但计算机只能处理简单的 机器指令,它们使用特定的计算机语言表示。无论多么复杂的计算任务,计算机最终都会将其分解成一系列简单的、逐条执行的 机器指令。这些指令的集合被称为 程序

以下是几种常见的计算机指令:

计算机的组成部分

计算机由四大类核心组件组成:

  1. 输入设备:用于接收用户输入,例如键盘、鼠标、扫描仪和麦克风。
  2. 处理单元:执行计算任务的组件,主要是 中央处理单元(CPU)。现代计算机还可能配备 图形处理单元(GPU),最初用于图形处理,但如今也可用于通用计算。
  3. 存储设备:包括 主存储器(内存)二级存储器(如硬盘、光盘、U 盘等),用于存储程序和数据。
  4. 输出设备:用于向用户呈现计算结果,例如显示器、扬声器和打印机。

示例:自动售票机
虽然自动售票机并不完全是计算机,但它可以帮助理解计算机的基本组成部分:

中央处理单元(CPU)

CPU 是计算机的核心,被称为 计算机的大脑,负责计算、数据处理和设备控制。它主要由以下部分组成:

  1. 算术/逻辑单元(ALU):执行数学运算和逻辑判断。
  2. 控制单元(CU):决定下一条要执行的指令。
  3. 寄存器:高速存储区域,用于存放临时数据。

不同类型的 CPU 支持不同的 指令集,例如 Intel x86-64、IBM PowerPCARM

存储器

计算机将 程序数据 存储在 存储器(Memory) 中,存储器分为 主存储器辅助存储器

主存储器(内存,RAM)

辅助存储器(外存)

计算机的 操作系统 提供对辅助存储器的管理,允许用户以 文件 形式存储数据,并通过 文件系统 组织文件。例如,Windows 操作系统使用 资源管理器 访问文件和目录。

1.1.2 计算机编程

1. 算法(Algorithm)

算法 是完成特定任务或解决某个问题的一系列步骤(指令)。它类似于菜谱中的制作步骤或数学家祖冲之计算圆周率的方法。

2. 程序与编程

程序 是算法在计算机中的实现,即计算机可执行的指令序列。编程 则是将算法转换为计算机可以理解的程序的过程,使用特定的计算机语言编写指令,使计算机按照既定逻辑执行任务。

3. 二进制

计算机的底层硬件由大量 晶体管 组成,而晶体管只有 "开"(1)和 "关"(0)两种状态。因此,计算机采用 二进制(0 和 1)来表示所有数据,包括整数、字符等。

在计算机中,一个晶体管可以存储 1 个二进制位(bit,简称 b),即 0 或 1。多个晶体管可以组合表示更复杂的数值。例如:

4. 机器语言

计算机内部的指令和数据都是以 0 和 1 组成的 二进制代码 进行存储和处理。机器语言(Machine Language) 是计算机能够直接理解和执行的一种指令集合。

例如,以下是用 Intel 8086 机器语言执行 17 + 20 的指令:

1011 0000 0001 0001   // 将 17 存入 AL 寄存器  
0000 0100 0001 0100   // 将 20 加到 AL 寄存器  
1010 0010 0100 1000 0000 0000   // 将 AL 的值存入内存地址 0x0048

解析:

早期编程的挑战
在 20 世纪 40 年代,程序员必须直接使用机器语言进行编程,甚至通过穿孔卡片输入指令。这种方式既繁琐又容易出错,极大地限制了计算机的使用效率。

5. 汇编语言(Assembly Language)**

为了简化机器语言的编写,引入了 汇编语言(Assembly Language)。汇编语言使用 助记符(Mnemonic) 代替二进制代码,使程序更易读,例如:

MOV AL, 17D         ; 将 17 存入 AL 寄存器  
ADD AL, 20D         ; 将 20 加到 AL 寄存器  
MOV [0048H], AL     ; 将 AL 的值存入内存地址 0x0048

汇编语言的特点

尽管汇编语言相较于机器语言更加直观,但仍然对程序员要求较高,且代码冗长,不利于开发大型程序。

6. 高级语言(High-Level Languages)

由于汇编语言仍然过于低级,程序员需要书写大量指令才能完成简单任务。因此,开发者创造了 高级语言,如 C、C++、Python、Java 等,使编程更加高效。

在高级语言中,一条指令可能对应多条机器指令,并且采用接近自然语言的表达方式。例如:

sum = 17 + 20;

这行 C++ 代码等效于上面的机器语言和汇编语言指令。高级语言的优点包括:

由于计算机无法直接理解高级语言,必须借助 编译器(Compiler)解释器(Interpreter) 先将其转换为机器语言,然后再执行。

机器语言、汇编语言、高级语言对比

语言类型 示例 特点
机器语言 1011 0000 0001 0001 计算机直接执行,效率最高,但极难理解
汇编语言 MOV AL, 17D 可读性稍强,但仍然复杂
高级语言 sum = 17 + 20; 可读性好,跨平台,易于编写

随着计算机技术的发展,高级语言成为主流,但在底层优化、操作系统开发、嵌入式系统等领域,汇编语言仍然有一定的应用价值。

7 编译器、解释器与 C++ 语言

高级语言编写的程序在计算机执行之前,必须转换为机器语言。这种转换方式主要有两种:编译(Compilation)解释(Interpretation)

C++ 是一种 编译型语言,它的源代码必须经过 编译器(Compiler) 转换为机器代码,才能运行。

编译器与解释器的区别

对比项 编译器(Compiler) 解释器(Interpreter)
工作方式 先将整个程序翻译成机器代码,然后执行 逐行翻译并执行
执行效率 运行速度快,因为已转换为机器语言 运行速度较慢,因为需要边翻译边执行
错误检测 只有在编译时发现错误 可以在执行时逐行发现错误
常见语言 C、C++、Java(编译为字节码后解释执行) Python、JavaScript、Shell 脚本

编译型语言的优势

编译器能对代码进行全局优化,提高运行效率。因此,C++ 在高性能计算、系统编程、嵌入式开发等领域具有广泛应用。相比解释型语言,编译后的 C++ 程序通常运行更快,并且可以直接操纵硬件。

8 C++ 语言概述

C++ 语言的起源与发展

C++ 由 Bjarne Stroustrup1979-1980 年贝尔实验室(Bell Labs) 开发,初衷是对 C 语言 进行扩展,使其支持 面向对象编程(OOP)

C++ 的应用领域

C++ 具有高效的执行性能和强大的底层操作能力,被广泛应用于以下领域:

现代 C++ 的演进

在 20 世纪 80 年代至 2000 年初,C++ 语言的标准化进程较为缓慢。然而,自 2011 年 起,C++ 进入了 现代 C++(Modern C++) 时代。

如今,工业界已普遍采用 现代C++ 进行开发,而传统的 C 语言风格编程逐渐被淘汰。

为何直接学习现代 C++?

在高校教学中,许多课程仍然停留在 C 语言或 C++98 时代,导致学生学习的知识 落后于工业界。相比之下,直接学习 C++17 或 C++20 能够:

总之,C++ 既是一门 高效、强大 的系统级编程语言,也是不断演进、与时俱进的现代化语言。学习 现代 C++,才能真正发挥 C++ 的优势,适应当前的技术趋势。

9 C++ 程序开发步骤

与其他编程语言类似,使用 C++ 编写程序也需要遵循一定的步骤。这个过程包括以下几个主要阶段:

  1. 理解问题
    首先,需要清楚地理解所面临的问题。关键问题包括:
    • 输入:程序需要哪些数据?这些数据从哪里来?(如键盘、文件等)
    • 输出:程序将输出什么结果?该结果如何显示或保存?(如屏幕显示、保存到文件等)
  2. 提出算法
    根据问题描述,设计出解决问题的步骤和逻辑。算法是用来描述如何解决问题的指令序列,通常用伪代码或流程图来表示。
  3. 编写程序
    将算法转化为 C++ 代码。通过编程语言的语法和规则,将算法实现为可执行的程序。
  4. 测试
    通过不同的测试用例验证程序的正确性。测试时,除了使用有效数据进行验证外,还要考虑非法输入的情况,查看程序是否能够正确处理错误。

举例:计算一组数值的平均值

假设我们要编写一个程序来计算一组数值的平均值,以下是整个开发流程的实例:

  1. 理解问题

    • 输入:这些数值从哪里来?用户是通过键盘输入,还是从文件中读取?
    • 输出:程序计算出来的平均值是如何呈现的?是打印在屏幕上,还是保存到文件中?
  2. 提出算法
    算法的核心思想是:

    • 初始化两个变量,一个用于存储总和,另一个用于计数。
    • 循环读取每一个数值,将其加到总和中,并增加计数器。
    • 最后,用总和除以计数器,得到平均值。

    伪代码示例:

    -----------start-------------
    总和 sum = 0
    计数器 count = 0
    重复:
        读入一个数值
        如果读取失败,结束循环
        否则:
            将读取的数值加到总和 sum
            计数器 count 增加 1
    计算平均值:average = sum / count
    输出/打印平均值 average
    -----------end-------------
    
  3. 编写程序
    根据上述算法,使用 C++ 语言将其实现为程序:

    #include <iostream>
    using namespace std;
    
    int main() {
        double sum = 0;      // 总和
        int count = 0;       // 计数器
        double value;        // 输入的数值
    
        while (cin >> value) {
            sum += value;
            count++;
        }
    
        if (count > 0) {
            double average = sum / count;
            cout << "平均值为: " << average << endl;
        } else {
            cout << "没有输入有效的数值!" << endl;
        }
    
        return 0;
    }
    
  4. 测试
    运行程序时,输入不同的测试数据,确保其输出结果正确。

    • 正常情况:输入一系列数字,程序计算并输出正确的平均值。
    • 边界情况:没有输入任何数值时,程序应该提示用户没有有效数据输入。
    • 非法输入:输入非数值数据(如字符串或特殊字符),程序应当能够适当地处理错误或提示。

    示例测试输入:

    10 20 30
    

    输出结果:

    平均值为: 20
    

通过这种方法,我们可以从理解问题、设计算法、编写程序,到最终的测试,逐步完成一个 C++ 程序的开发过程。

上一篇 下一篇

猜你喜欢

热点阅读