C语言入门到入土

第 1 章 C 语言入门

1.1 C 语言简介与应用场景

学习 C 语言是一个重要的起点,无论是想进入计算机科学领域还是想成为一名优秀的程序员。本节将帮助你理解什么是 C 语言、它能用来做什么。

1.1.1 什么是 C 语言

编程语言是一种用于与计算机交流的工具,它使人类能够通过编写代码来指示计算机执行特定的任务。计算机本质上只理解机器语言(由 0 和 1 组成),而编程语言则是介于人类语言与机器语言之间的桥梁,通过编译或解释,将人类编写的代码转换为机器可以执行的指令。

C 语言是一种广泛使用的高级程序设计语言,由丹尼斯·里奇(Dennis Ritchie)于 1972 年在贝尔实验室开发。它最初是为了编写 UNIX 操作系统而设计的,但由于其灵活性、高效性和可移植性,C 语言很快成为了最流行的编程语言之一,并对后来的许多编程语言产生了深远的影响,如 C++、Java、Python 等。

C 语言的主要有以下特点:

  • 简洁灵活:C 语言提供了一种结构化编程的方法,同时保持了语言本身的简洁性。它允许程序员直接操作内存地址,提供了指针的概念,使得程序设计更加灵活。
  • 高效性:C 语言编译后的代码运行效率非常高,接近甚至可以与汇编语言相媲美。这使得 C 语言非常适合开发需要高性能的应用,比如操作系统、嵌入式系统等。
  • 可移植性:虽然 C 语言允许直接访问硬件资源,但它仍然具有良好的可移植性。C 语言的标准库函数在不同的平台上都有实现,这使得用 C 语言编写的程序相对容易在不同的操作系统和硬件架构上运行。
  • 丰富的运算符和数据类型:C 语言提供了多种数据类型和运算符,能够满足不同场景下的需求。例如,整型、浮点型、字符型等基本数据类型,以及数组、结构体、联合体等复合数据类型。
  • 模块化编程支持:通过使用函数和文件来组织代码,C 语言支持模块化编程,有助于提高代码的可维护性和重用性。
  • 标准库:C 语言拥有一个强大的标准库,包括字符串处理、数学计算、输入输出、内存管理等功能,为开发者提供了极大的便利。

1.1.2 C 语言能做什么

C 语言之所以被称为一门非常"哇塞"的计算机语言,是因为它可以用于许多底层开发工作,具体包括以下几个方面:

  • 操作系统开发:C 语言是许多操作系统(如 Linux 内核)的核心语言,提供高效的硬件访问和跨平台的可移植性。
  • 硬件驱动程序:C 语言的低级特性和直接内存访问能力使其成为编写高效、精确的硬件驱动程序的理想选择。
  • 嵌入式开发:C 语言的高效性和对硬件的直接控制能力使其在资源受限的嵌入式系统中广泛应用。
  • 游戏引擎开发:C 语言在游戏引擎的底层开发中发挥关键作用,提供高性能的图形渲染和物理模拟。

这些应用领域通常是其他高级编程语言难以实现的,C 语言因此在程序员中享有极高的声誉。

1.2 C 语言开发环境搭建

在学习 C 语言编程之前,我们需要先进行开发环境的搭建。本节将详细介绍如何选择适合自己的集成开发环境(IDE),并提供 Microsoft Visual Studio (VS) 和 Microsoft Visual C++ (VC++) 的安装教程。

1.2.1 开发工具的选择

IDE(Integrated Development Environment,即集成开发环境)是一种集成了代码编辑、调试和编译等功能的软件工具,旨在为开发者提供更高效的编程体验。

面向初学者,C 语言的 IDE 主要有 Visual Studio (VS) 和 Visual C++ (VC),两者各有优点,我们可以根据自身需求来选择:

  1. Microsoft Visual Studio (VS)
    VS 是微软推出的一款全能集成开发环境(IDE),它具有社区版(免费)、功能智能全面并且支持多种编程语言(如 C、C++、C# 等),适合个人开发者和企业研发使用。VS 有多个版本(2022、2019、2015 等),建议选择最新的稳定版本。

  2. Microsoft Visual C++ (VC++)
    VC++ 是微软早期推出的专门针对 C++ 和 C 语言开发的 IDE,尽管已停止更新,但因其稳定性和简洁性,仍被广泛用于教育领域。许多学校教材(如谭浩强编著的《C 程序设计教程》)推荐使用 Visual C++ 2010,适合初学者和学生应对各种考试,如计算机二级 C 语言方向考试、专升本考试和期末考试。

如果是为了考试,则建议选择 VC++,因为考试大纲规定了使用 VC++ 2010 版;如果是用于日常开发或企业研发则建议选择 VS,它功能更智能,开发效率高。

1.2.2 VS 安装教程

此处直接提供 Visual Studio 2022 和 Visual Studio 2019 的在线安装程序:https://pan.baidu.com/s/1G5QJJXHmHRVI1XYovoSBnA

如果需要下载最新版的 VS,请按照以下步骤进行安装:

  1. 访问微软官网:https://www.microsoft.com

  2. 在网页末尾 "开发人员与 IT" 的相关内容下找到 "Visual Studio" 并点击:
    image

  3. 下载 VS 的在线安装程序:
    image

  4. 打开在线安装程序,选择社区版(Community)的 VS 进行安装:
    image

  5. 选择 "使用 C++ 的桌面开发" 工作负荷即可,其他组件可按需选择:
    image

  6. 建议将所有与开发相关的软件安装在一个统一的文件夹中方便管理(注意安装路径不要包含中文、空格或特殊字符,这些可能会导致以后写代码时遇到问题):

    image

    注意:如果不是第一次安装 VS 则后两个安装路径无法更改,此时需要在 "注册表编辑器" 中找到 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\Setup 路径,删除该路径下的 "CachePath" 和 "SharedInstallationPath" 注册表即可。

  7. 安装完成后,打开 "开始菜单",找到 Visual Studio 启动程序。首次启动时需要登录微软账号,如果没有则可以在官网注册。

1.2.3 VC++ 安装教程

由于 VC++ 已停止更新,无法从官网直接下载,此处直接提供 VC++ 2010 的下载链接:https://pan.baidu.com/s/14WXXqQ3mqxu7nJgT3wistw
压缩包下载好后按照一下步骤进行安装:

  1. 解压下载的压缩包,双击 setup.exe 开始安装:
    image

  2. 取消向微软提交安装体验的选项,并安装接受协议:

  3. 取消 Microsoft Silverlight 和 Microsoft SQL Server 2008 Express Service Pack 1 (x64) 这两个软件的安装,因为使用不到:
    image

  4. 选择安装路径(同样建议不要放在 C 盘,并且路径中不要有中文、空格或特殊字符):
    image

  5. 完成安装后,打开开始菜单,找到 Visual C++ 2010 并运行,首次运行时需要进行注册,点击帮助菜单下的 "注册产品",输入压缩包内的注册码即可完成注册。
    image

    image

1.3 第一个 C 语言程序

在完成 C 语言开发环境的搭建后,我们将开始编写第一个 C 语言程序——Hello World。Hello World 是许多编程语言的第一个程序,从 C 语言之父 Dennis Ritchie 的《C 程序设计语言》一书中开始,它成为程序员圈中的传统,标志着编程的起点。这段代码不仅是编程语言的经典入门程序,也帮助我们熟悉 C 语言代码的基本结构。

1.3.1 C 语言程序编写步骤

在 C 语言中编写和运行程序的过程相对简单,只需三步:

  1. 创建文件:创建一个文件,并命名为 hello_world.c,这里 .c 表示这是一个 C 语言文件。
  2. 编写代码:编写代码时,要严格按照格式书写每个字母和符号,以免出现错误。
  3. 运行代码:在 IDE 中运行代码,查看输出结果。

提示:除特殊标注外,本教程默认使用 Visual Studio 2019 做代码案例示范。

1.3.2 创建源文件

源文件通常是指包含源代码的文件,是程序的开发和编译的基础。例如,C 语言项目中的 .c 文件,Java 项目中的 .java 文件,Python 项目中的 .py 文件等,都属于源文件。源文件的主要作用是保存开发者编写的源代码,并供编译器或解释器读取和处理。

以下是利用 VS 创建源文件的具体步骤:

  1. 打开 VS,点击 "创建新项目",选择 "控制台应用":

  2. 为项目命名,并指定存储位置:
    image

    • 解决方案名称
      在 Visual Studio 中,解决方案(Solution) 是一个容器,它包含一个或多个项目(Project)。每个解决方案文件都用 .sln 扩展名保存,主要用于管理和组织与该解决方案相关的多个项目(如 C++ 项目、C# 项目、数据库项目、测试项目等),可以使得大型应用程序的开发更加方便 。

    • 将解决方案和项目放在同一目录中
      勾选 "将解决方案和项目放在同一目录中" 复选框时,Visual Studio 会将解决方案文件 .sln 和项目文件保存在同一个文件夹中。
      ① 若勾选,则 D:\Develop\Code\HelloWorld\ 下包含 HelloWorld.sln 和所有项目文件。如果你的解决方案只有一个项目,那么将解决方案和项目放在同一目录中可以简化文件结构,使得项目文件更集中,避免多层嵌套。
      ② 若未勾选,则 D:\Develop\Code\HelloWorld\ 文件夹中的文件只有 HelloWorld.sln,项目文件则在 D:\Develop\Code\HelloWorld\HelloWorld 目录中。如果你计划在未来向解决方案中添加更多项目,通常建议将解决方案和项目分开存放,以保持项目结构清晰,便于管理每个项目的文件夹和代码资源。

  3. 在新项目中新建 C 语言源文件:
    在新建项目的 "解决方案资源管理器" 中,右键点击 "源文件" 选择 "添加新项",选择添加 "C++ 文件(.cpp)"(默认文件后缀为 .cpp,需手动修改为 .c 以确保这是 C 语言代码):

    注意:新创建好的项目会有一个 .cpp 文件模板,建议将其删除,避免后续由于我们再次创建源文件导致多个主函数而报错。

1.3.3 编写源代码

源代码是开发者用编程语言编写的指令和逻辑的集合。源代码构成了软件的逻辑和功能,可以认为是程序的“设计图”。当源代码被编译或解释后,计算机可以运行该程序,实现开发者设计的功能。

在使用 VS 编辑好源代码后,使用 Ctrl + S 快捷键保存代码。以下是 Hello World 程序的代码及其详细说明:

#include <stdio.h>

int main() {
    printf("Hello World\n");
    return 0;
}

Hello World 程序可以分为预处理和业务代码两部分:

  1. 预处理
    预处理部分的作用是提前引入外部的库或文件,便于程序使用相关功能。例如:

    • #include <stdio.h>:导入标准输入输出库 stdio.h,用于调用 printf 函数。
  2. 业务代码
    业务代码部分负责指示计算机执行具体的操作,比如输出文本、计算等。在 Hello World 程序中,业务代码的主要功能是显示一段文本。例如:

    • int main() {...}main 函数也被称为主函数,是 C 程序的入口,所有代码从这里开始执行。
    • printf("Hello World\n");:调用 printf 函数打印输出 "Hello World"。
    • return 0;:返回 0 表示程序正常结束,如果是其他值(如 1),则表示程序异常结束。

1.3.4 运行代码

在确保源代码被保存后,可以在 "调试" 中选择 "开始调试" 或 "执行不调试" 功能来等待程序编译并执行,即可在输出窗口中应显示 "Hello World" 字样:

不论是调试还是执行,在代码执行无误的情况下,输出窗口应该显示 "Hello World" 字样,但它们的区别如下:

  • 调试模式(快捷键 F5):在调试模式中,可以通过断点检查变量状态。
  • 执行不调试模式(快捷键 Ctrl+F5): 执行不调试模式中,则可以直接观察程序的输出而无需等待断点或调试操作。

1.3.5 附:使用 VC 编写程序

继使用 Visual Studio (VS) 编写 Hello World 程序后,我们现在来学习如何在 Visual C++ (VC) 中实现同样的程序。具体操作步骤如下:

  1. 启动 VC,在 VC 界面中,点击左上角的 "新建项目" 图标:
    image

  2. 选择 "Win32 控制台应用程序",并设置项目名称以及项目存储位置:
    image

    注意:VC 上述配置中的 "为解决方案创建目录" 和 VS 中不勾选 "将解决方案和项目放在同一目录中" 类似。

  3. 在 "Win32 应用程序向导" 的 "附加选项" 中勾选 "空项目":

  4. 在新项目中新建 C 语言源文件:
    在新建项目的 "解决方案资源管理器" 中,右键点击 "源文件" 选择 "添加新项",选择添加 "C++ 文件(.cpp)"(默认文件后缀为 .cpp,需手动修改为 .c 以确保这是 C 语言代码):

  5. 编写源代码:
    以下是 Hello World 程序的代码:

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

    在完成代码编写后,按 Ctrl+S 保存文件,确保代码已成功保存。

  6. 在确保源代码被保存后,可以选择 "开始调试"(快捷键 F5) 或 "执行不调试"(快捷键 Ctrl+F5) 来等待程序编译并执行,即可在输出窗口中应显示 "Hello World" 字样:
    image

    注意:在 VC 中 "调试" 菜单栏中只有 "开始调试",而 "执行不调试" 是隐藏的,需要通过快捷键执行。

  7. (可选)若希望 "执行不调试" 的快捷按钮出现在 "调试" 菜单栏中,则可以按以下步骤操作:

    (1)先右键点击工具栏的空白处,选择 "自定义":

    image

    (2)在弹出的 "自定义" 对话框中,切换到 "命令" 标签,选择配置 "菜单栏" 中的 "调试" 菜单,然后选择 "添加命令" 添加 "执行不调试":

    (3)完成后,关闭 "自定义" 对话框,即可在 "调试" 菜单中看到 “执行不调试” 的按钮:
    image

  8. (可选)若选择 "执行不调试" 运行源代码时,只有一个 CMD 黑窗口一闪而过,则需要在项目属性中进行一些更改,以便正确运行控制台应用程序:

    在 "解决方案资源管理器" 中,右键点击项目名称(即项目根目录),选择 "属性"。然后在 "项目属性" 窗口中,依次展开 "配置属性" > "链接器" > "系统",找到 "子系统" 设置,点击右侧的下拉菜单,选择 "控制台(/SUBSYSTEM:CONSOLE)"。

1.3.6 C 语言程序的执行流程

在编写和运行 Hello World 程序的过程中,Visual Studio (VS) 或 Visual C++ (VC) 自动帮我们完成了许多工作。其实,C 语言程序的执行分为编写、编译、链接和执行四个步骤:

image

  1. 编写代码并创建 C 文件

    首先,我们创建一个 C 语言源文件,并将代码写入其中。文件名一般以 .c 结尾,这样编译器可以识别它为 C 语言文件。

  2. 编译代码

    编译是将 C 语言源代码转换成计算机能理解的二进制文件的过程。因为计算机只识别二进制代码(0 和 1),编译器会将 C 语言代码转换为机器码并生成一个 .obj 文件。这一过程称为编译,生成的 .obj 文件包含程序的二进制数据。

  3. 链接生成可执行文件(EXE 文件)

    在编译生成的 .obj 文件中,虽然包含了源代码的二进制数据,但还无法单独运行,因为可能还需要其他文件或库(如 stdio.h)。链接步骤将 .obj 文件和所需的外部文件整合,生成最终的 EXE 可执行文件。

  4. 执行程序

    生成 EXE 文件后,我们可以运行它。通过双击 EXE 文件或在命令行中运行它,可以看到程序输出的结果。在此例中,程序会在控制台上显示 Hello World。、

下面分别是编译执行前后的项目中的文件结构图:

image

编译执行前的项目文件结构

image

编译执行后的项目文件结构

第 2 章 基础语法

2.1 注释

在编写和阅读代码时,注释扮演着至关重要的角色。注释不仅能提升代码的可读性,还能帮助我们在后续修改和维护时理解代码的意图。下面将详细介绍 C 语言中注释的基本用法及其作用。

2.1.1 什么是注释

注释是指在代码的指定位置添加的说明性文字,对代码进行解释说明。注释在编译时会被忽略,不会影响程序的运行结果。

2.1.2 注释的类型

在 C 语言中,注释分为以下两种:

  • 单行注释:以 // 开头,用于单行说明。

    // 预处理指令:引入标准输入输出库
    #include <stdio.h>
    
    // 主函数,程序的入口
    int main() {
    	// 输出 "Hello World"
    	printf("Hello World\n");
    	return 0; // 程序正常结束
    }
    
  • 多行注释:以 /* 开头,*/ 结尾,适用于较长的说明内容。

    /*
     * 预处理指令:引入标准输入输出库
     * 主函数 main 是程序的入口,程序从这里开始执行
     * printf 用于输出 "Hello World" 字符串
     * return 0 表示程序正常结束
     */
    #include <stdio.h>
    
    int main() {
    	printf("Hello World\n");
    	return 0;
    }
    

在 Visual Studio (VS) 和 Visual C++ (VC) 中,可以使用快捷键来快速添加或取消注释,提高工作效率。

  • 添加注释:快捷键为 Ctrl+K, Ctrl+C,用于给选中的代码行添加单行或多行注释。
  • 取消注释:快捷键为 Ctrl+K, Ctrl+U,用于移除选中代码行的注释格式,恢复代码原貌。

提示:点击需要注释的行,按 Ctrl+K, Ctrl+C 添加单行注释,选中需要注释的代码,按 Ctrl+K, Ctrl+C 添加多行注释。

2.1.3 注释的作用

注释的核心作用是提高代码的可读性,帮助自己和他人理解代码逻辑。在程序变得复杂时,注释显得尤为重要。注释有助于:

  • 快速了解代码的目的:即使隔一段时间再查看代码,也能迅速回想起逻辑。
  • 他人理解代码:良好的注释便于团队协作和代码审核。

2.1.4 注释擦除

在 C 语言编译过程中,注释内容会被忽略,这一过程称为“注释擦除”。编译器在生成二进制文件时会自动去除注释,只保留实际的代码逻辑。由于注释内容不参与编译,因此可以放心添加说明性文字,不会对程序的运行产生任何影响。

2.1.5 注释嵌套

在 C 语言中,注释的嵌套可能会引发错误。具体规则如下:

  • 单行注释嵌套:可以在单行注释中嵌套单行注释,不会产生影响。

    // 这是一个单行注释 // 内部嵌套单行注释
    
  • 多行注释嵌套:不允许在多行注释中再嵌套多行注释。这会导致语法错误,因为编译器会认为内层的 /* ... */ 提前结束了外层的注释。

    /*
    这是一个多行注释
    /* 内部嵌套多行注释 - 错误示例 */
    */
    

2.2 关键字

在 C 语言中,关键字是具有特定含义的保留单词,编译器会将这些关键字识别为特殊的指令或操作。理解关键字的定义及其特点是学习 C 语言的重要基础。

2.2.1 什么是关键字

关键字是由 C 语言赋予特定含义的英文单词,编译器根据关键字来执行特定的操作或指令。例如在 Hello World 程序中,我们已经接触到了 intreturn 两个关键字,分别表示 "整数类型" 和 "程序结束"。

在 C 语言中,共有 32 个关键字。每个关键字都用于特定的功能,随着学习的深入,我们会逐一理解和使用这些关键字:

关键字 描述
auto 自动变量(默认类型)
break 退出当前循环或 switch 语句
case 在 switch 语句中用于定义条件
char 字符类型
const 定义常量,不可修改
continue 跳过当前循环的剩余部分,进入下一轮循环
default switch 语句的默认情况
do do...while 循环的开始
double 双精度浮点数类型
else if 语句的 else 分支
enum 定义枚举类型
extern 声明变量在其他文件中定义
float 单精度浮点数类型
for for 循环的开始
goto 跳转到指定标签
if 条件语句的开始
int 整数类型
long 长整型
register 建议将变量存储在寄存器中
return 从函数返回值
short 短整型
signed 有符号类型(默认类型)
sizeof 获取数据类型或变量的大小
static 静态变量,作用域局限于当前文件或函数
struct 定义结构体
switch 多分支选择结构
typedef 定义类型别名
union 定义共用体
unsigned 无符号类型
void 表示无类型或无返回值的函数
volatile 告诉编译器变量可能会在程序外部改变
while while 循环的开始

2.2.2 关键字的特点

识别关键字的几个特点有助于在代码中快速定位它们:

  • 全部小写:C 语言中的关键字均为小写字母。
  • 特殊颜色标记:在常用的代码编辑器中,关键字通常会被高亮显示。

    提示:VS 中默认情况下关键字会显示为蓝色或紫色;VC 中默认情况下关键字显示为蓝色。

2.3 常量

在 C 语言中,常量是指在程序执行过程中,其值不会改变的数据。理解常量的类型及用法是编写程序的重要基础。

2.3.1 什么是常量

常量是一种在程序执行过程中值不发生改变的量,包括所有的整数、小数、字符和字符串等。常量的特点是它的值在定义后始终保持不变。

2.3.2 常量的分类

常量在 C 语言中可以分为四种类型:

  1. 整型常量:代表所有的整数,包括正数、负数和零。如 1-50 等。

  2. 实型常量:包含小数的数字,带有小数点的数值。如 3.140.001-2.5 等。

  3. 字符常量:表示单个字符,必须用单引号括起来,并且单引号内只能写一个字符,且只能是字母、数字或英文符号。如 'a''B''#' 等。

    注意'' 是语法错误,因为字符常量有且只能有一个字符。

  4. 字符串常量:表示多个字符的字符串,必须用双引号括起来,并且字符串内可以包含任意数量的字符。如 "Hello, World!""123""中文文本" 等。

2.3.3 实型常量的特殊写法

  • 小数点前为零的实型常量可以省略:如 .93 等同于 0.93
  • 小数点后为零的实型常量可以省略:如 18.0 等同于 18.
  • 在表示很大或很小的数时可以使用科学计数法,即使用 e 表示,例如 1.234e7 表示 \(1.234\times10^7\) 的值。

    注意:C 语言中编译器会将科学计数法表示的常量视为实型常量。

2.3.4 使用 printf 输出

  1. printf 函数的基本结构
    在学习完常量之后,我们可以使用 printf 函数进行常量的输出打印,printf 的语法格式为:

    printf("格式字符串", 参数1, 参数2, ...);
    

    说明:

    • 格式字符串:第一个参数是输出内容的格式,可以包含文字和占位符(也称为格式说明符)。
    • 参数:如果格式字符串中存在占位符时,则需要有后续参数对应占位符,用于填补输出内容。
  2. 占位符的作用
    在格式字符串中,占位符相当于为输出的内容预留了位置,程序会将对应的参数值填充到这些位置。使用占位符的好处在于可以动态地输出变量的值,而不必在代码中手动输入。我们可以使用占位符来表示不同类型的数据,以下是常用的占位符:

    占位符 描述
    %d 输出整数
    %f 输出小数
    %c 输出单个字符
    %s 输出字符串

    例如:

    #include <stdio.h>
    
    int main() {
    	printf("我的年龄是:%d\n", 18);
    	printf("我的身高是:%f米\n", 1.93);
    	printf("我的名字的首字母是:%c\n", 'A');
    	printf("欢迎来到我的程序:%s\n", "你好,世界!");
    	return 0;
    }
    
  3. 注意事项

    • 如果想输出多个数据,可以在格式字符串中使用多个占位符,并提供相应的参数,例如:

      printf("我女朋友的名字是:%s,性别:%s,年龄:%d岁,身高:%.2f米,体重:%d斤。\n", 
      				   "刘亦菲", "女", 18, 1.62, 110);
      
    • 可以使用换行符用于指示文本输出时的换行,不同操作系统对换行符的定义有所不同:

      操作系统 换行符 描述
      Windows \r\n 使用回车符(\r)和换行符(\n),光标回到行首后再换行。
      Linux/Unix \n 仅使用换行符,光标直接移动到下一行的开头。
      Mac OS (旧版) \r 仅使用回车符作为换行符,现代 Mac 已改为使用 \n

      当在代码中输出时,使用 \n 是一种跨平台的做法,因为现代编译器会根据运行环境自动处理换行符。在 C 语言中,你可以直接使用 \n,这样可以确保代码在不同操作系统中都有良好的兼容性。例如,在 C 语言中的输出可以这样写:

      printf("第一行内容\n第二行内容\n");
      

      在 Windows 上,这会自动被解释为 \r\n,而在 Linux 上则会直接使用 \n

2.4 变量

在 C 语言中,变量是数据处理的基础。它们作为数据的存储单元,使我们能够在程序中存取和操作信息。本文将深入探讨变量的定义、使用场景及其在实际开发中的重要性。

2.4.1 什么是变量

变量是一种在程序执行过程中值会发生改变的量。变量可以被视为一个存储数据的容器(实质上是内存中的一块存储空间),通过变量,我们可以将数据存储在程序中,并在需要时进行访问和修改。

2.4.2 变量的声明

变量的声明是指告诉编译器我们将使用的变量名称及其数据类型。声明的基本格式如下:

数据类型 变量名;

说明:

  • 数据类型:用于指定变量可以存储的数据的类型。
  • 变量名:是给存储空间的起的一个“名字”,方便程序员在代码中引用和操作该变量的值。

例如:

int a; // 声明一个整数类型的变量 a

2.4.3 变量的赋值

变量的赋值是指我们将特定的值存入变量中。赋值的基本格式为:

变量名 = 数据值;

例如:

int a;
a = 10; // 将 10 赋值给变量 a

此外,我们还可以在定义变量的同时对其进行赋值,例如:

int b = 20; // 初始化变量 b

2.4.4 注意事项

  1. 变量只能存储一个值:每个变量在任意时刻只能保持一个值,后赋值会覆盖之前的值。

  2. 变量名不可重复定义:同一作用域内变量名必须唯一,否则会导致编译错误。

  3. 一条语句可以定义多个变量:虽然可以在一行中定义多个变量,但不推荐以提高代码可读性。

    int a, b, c = 30; 
    

    注意:上述定义中只有变量 c 被初始化为 30,而 ab 并没有被赋予初始值。

  4. 赋值变量前必须先声明:在使用变量之前,必须先声明它并赋值,否则会导致运行时错误。

  5. 使用变量前必须先赋值:在使用变量之前,必须先对其赋值,否则会导致运行时错误。

  6. 变量的作用范围:变量的可访问范围会影响其在不同代码块中的可用性。(后续再详细介绍)

2.5 计算机中的存储规则

我们知道变量是存储数据的容器,数据是以某种特定的方式存储在计算机中。本文将探讨数据在计算机中的存储规则。

2.5.1 进制及其之间的转换

  1. 什么是进制
    进制是一种数值表示系统,它决定了每个数字在特定位置上所代表的值。在计算机科学中,常用的进制系统包括二进制(Binary)、十进制(Decimal)、八进制(Octal)和十六进制(Hexadecimal)。
    常见的进制有:

    • 二进制(Binary):使用数字 01 表示,逢二进一。
    • 十进制(Decimal):使用数字 0~9 表示,逢十进一。
    • 八进制(Octal):使用数字 0~7 表示,逢八进一。
    • 十六进制(Hexadecimal):使用数字 0~9 和字母 A~F 表示,其中 A~F 分别代表 10~15,逢十六进一。
  2. N 进制和十进制之间的转换

    • N 进制转十进制:将 N 进制数的每一位数字乘以其对应的位权(进制的幂),然后求和。
    • 十进制转 N 进制:不断将十进制数除以 N,记录余数,直到商为 0,然后反向排列余数。

    以二进制和十进制之间的转换为例:

    • 二进制数 1011 转换为十进制:

      \(1 \times 2^3 + 0 \times 2^2 + 1 \times 2^1 + 1 \times 2^0 = 8 + 0 + 2 + 1 = 11\)

      因此,二进制 1011 转换为十进制为 11

    • 十进制数 13 转为二进制:

      13 ÷ 2 = 6 余 1
       6 ÷ 2 = 3 余 0
       3 ÷ 2 = 1 余 1
       1 ÷ 2 = 0 余 1
      

      余数倒序排列得 1101,因此十进制 13 转换为二进制为 1101

  3. 二进制、八进制和十六进制之间的转换

    • 二进制和八进制之间的转换:二进制数可以从右往左每三位分组,补齐零后转换为八进制数;反之,可以将每位八进制数转换为三位二进制实现。
    • 二进制和十六进制之间的转换:二进制可以从右往左每四位分组,补齐零后转换为十六进制;反之,可以将每位八进制数转换为四位二进制实现。
    • 八进制和八十六制之间的转换:八进制可以先转为二进制,再转为十六进制,反之亦然。

2.5.2 数据存储的基本原理

计算机主要处理三类数据:

  • 文本数据
  • 图片数据
  • 声音数据

提示:视频数据可以视为图片数据和声音数据的结合体。

无论是何种数据均以二进制的形式存储在计算机中。二进制的概念最早由莱布尼茨提出,他受到中国古典名著《周易》的启发,认为阴阳(0 和 1)可以用来表示万事万物,这一思想为计算机的发展奠定了重要基础:

  • 在早期计算机设计中,数据存储采用了打孔纸带。这种方法简单而直观,孔代表 1,无孔则代表 0,符合当时的技术需求。
  • 随着技术的进步,现代计算机转向使用电流来表示数据:当电压低于 1.5 伏时,表示为 0;当电压高于 1.5 伏时,则表示为 1。

2.5.3 文本数据的存储

2.5.4 图像数据的存储

2.5.5 声音数据的存储

posted @ 2024-10-23 22:25  gokamisama  阅读(136)  评论(0)    收藏  举报