跳到主要内容

C 语言入门

一、计算机系统组成

输入设备

鼠标、键盘、麦克风、扫描仪。

输出设备

显示屏、扬声器、打印机。

中央处理器(CPU)

运算速度非常快,达到 ns 级别。其内部组成包括:

  • 运算器(算逻单元):负责数据运算。
  • 控制器:帮助 CPU 获取指令,交给运算器。
  • 寄存器:存储 CPU 用来运算的数据。
  • 预取器:从内存中获取程序中的指令。
  • MMU:虚拟内存映射。

内存储器(内存)

  • ROM:read only memory(只读存储器)。
  • RAM:random access memory(随机访问存储器)。

内存靠 "电信号" 来存储数据,断电后数据即消失,数据存储不能持久化。优点:数据读写速度快。

外存储器(硬盘)

硬盘采用 "磁信号" 来存储数据,断电后数据依然存在,能持久化存储。缺点:数据读写速度慢。


二、硬件系统

主机部分

  • CPU
  • 内存储器

外设部分

  • 输入设备:读入。
  • 输出设备:写出。
  • 外存储器:持久化存储。

三、软件系统

系统软件

操作系统

优秀的商业公司、开源组织,站出来编写一套针对硬件的底层程序,管理声卡、显卡、网卡、磁盘等这些硬件。

  • 概念:操作系统就是管理计算机硬件与软件资源的一个计算机程序。
  • 本质:程序!

操作系统的作用可分为向下和向上两个方向:

  • 向下:提供驱动程序,管理硬件。
  • 向上
    • 图形界面:普通用户,鼠标点点点。
    • 终端界面:普通用户、开发人员都可以使用。
    • 系统调用:操作系统提供给开发人员使用的函数。

常用操作系统:

  • Windows:微软。
  • macOS:苹果。
  • Linux
  • Unix

语言系统

  • 计算机语言:C、C++、Java、Python、PHP ……
  • 机器语言:二进制(如 10101001)。

应用软件

需要根据实际需求来制定功能,例如:

  • 文件处理
  • 图形处理
  • 表格处理
  • 实时控制

编译器和语言

编程语言

  • 作用:控制计算机硬件工作。
  • 组成:字母、特殊字符。
  • 每个编程语言都有自己一套规则、语法。——这就是学习目标!

编译器

  • 原因:CPU 只认识 1010010 这样的二进制码,abc、汉字它看不懂。
  • 作用:将人类易读易懂的语言转换成 CPU 能读懂的语言,这个过程就是 编译
  • 语言不同,语法不同,因此使用的编译器不同:
    • Java 使用 javac 编译器,不能拿来编译 C 语言。
    • C 语言使用 gcc 编译器,不能拿来编译 Java 语言。

四、C 语言简述

计算机语言发展史

  1. 机器语言:如 101100110
  2. 汇编语言:使用助记符(如 abc 对应 10100101)。问题:硬件不同,指令不同,不同架构(CPU)指令集不同,只能支持某一种特定的硬件,跨平台性差。由此衍生出 B 语言。
  3. C 语言:借助编译器,就能将 C 代码转换成各种平台使用的指令,实现跨平台。
  4. C++、Java、OC、Python:面向对象编程,程序扩展性好!
  5. SQL 语句:更贴近人类理解。

机器生汇编,汇编生 B,B 生 C,C 生万物!!


五、C 语言标准

标准简史

  1. 1972 年,C 语言在贝尔实验室诞生,丹尼斯·里奇参考 B 语言开发。
  2. 1970-80 年代,C 语言被广泛应用,产生很多不同的 C 语言版本,程序可移植性比较差。
  3. 1983 年,美国国家标准委员会(ANSI)成立一个小组来制定 C 语言的标准,规定 C 语言支持哪些语法、支持哪些功能等等。
  4. 1989 年,通过了 C 语言的第一个标准,即 C89 标准
  5. 1990 年,国际标准化组织(ISO)和国际电工委员会(IEC)将 C89 标准当做国际的 C 语言标准,即 C90 标准。(C89 和 C90 指的是同一个标准。)
  6. 1994 年,ISO 和 IEC 对 C89 标准进行修订,即 C94 标准。由于并没有增加新的语法特性,还是叫做 C89 或者 C90。
  7. 1995 年,ISO 和 IEC 再次做了修正,即 C95 标准。
  8. 1999 年,ISO 和 IEC 发布了 C 语言新标准(C 语言第二个标准)。在该标准中,新增许多实用的 C 语言语法特性,增加新的关键字、可变长数组等等,即 C99 标准
  9. 2007 年,重新修订了 C 语言。
  10. 2011 年,发布新的版本,新增了一些语法,如泛型、国际化支持。目前为止最新版本是 C11

标准的影响

  1. 可将 C 语言的标准理解为 C 语言说明书。但它并没有强制性约束力。例如:微软拿到标准,认为有些标准不合理,便不支持;微软认为某些特性非常好,但标准中没有,就自己新增语法。
  2. 如果编译器不支持标准,我们即使使用标准中的语法仍然会报错。
  3. 编译器版本也会影响程序。因此,编写程序之前要确定编译器版本。
  4. 常见的 C/C++ 编译器:
    • Borland C++:宝蓝公司。
    • Intel C++:英特尔编译器。
    • VC++:微软公司。
    • g++ 编译器(gcc 是编译套件):Linux 默认使用的编译器,对标准支持最好。

C 语言的优缺点

优点:

  • 学习成本低。
  • 运行速度快。
  • 功能强大。

缺点:

  • 代码实现周期长。
  • 可移植性差。
  • 对经验要求高。
  • 对平台库依赖多。

C 语言的应用领域

  1. 服务器。
  2. 操作系统。
  3. 上层应用(MFC、QT)。
  4. 嵌入式。
  5. 人工智能、硬件驱动。
  6. 中间件。
  7. 网络攻防、数据安全。
  8. 大学必修课。
  9. 名企、外企。

C 语言 32 个关键字

📷(此处原文为配图,略)


六、文本编辑 HelloWorld

编写第一个程序的步骤

  1. 修改计算机显示扩展名(显示文件的后缀名)。
  2. 打开任意一个目录。
  3. 编写第一个 hello world 程序。
  4. 编译 hello world 程序 ——> 得到机器能识别的二进制码。

其中 cd 目录 命令的含义:进入这个目录。

第一个程序代码如下:

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

快捷打开 HelloWorld.c 文件所在目录

  1. 进入到 HelloWorld.c 文件所在目录。
  2. 直接在 "地址栏" 中键入 cmd,即可切换到该目录,不需要 cd 目录

七、常见 IDE

IDE:集编辑器、编译器、调试器于一身的集合工具。

平台常见 IDE / 工具
WindowsVS2013、VS2015、VS2017、VS2019;CLion(跨平台);Qt Creator(跨平台);Eclipse
macOSXcode;CLion(跨平台);Qt Creator(跨平台);Eclipse
Linuxvi/vim(文本编辑器);CLion(跨平台);Qt Creator(跨平台);Eclipse

VS2019 基本使用

  1. 打开 VS2019,新建项目。
  2. 创建项目,指定项目目录。
  3. 确保保留 "解决方案资源管理器"。
  4. 创建 helloworld.c 文件。
  5. 编写 helloworld.c 程序。
  6. 修改字体:工具 —— 选项 —— 环境 —— 字体和颜色,选择字体。(Ctrl + 鼠标滚轮 可放大、缩小字号。)
  7. 编写完成,点击运行图标运行。

📷(此处原文为配图,略)

解决窗口一闪而过问题

  1. 使用函数解决:在 return 0; 代码前添加一行代码 system("pause");

    system("pause");
  2. 修改 VS2019 工具配置属性解决:项目名上,右键 —— 属性 —— 配置属性 —— 连接器 —— 系统 —— 子系统 —— 下拉框中选择 "控制台 (/SUBSYSTEM:CONSOLE)" —— 点击 "应用" —— 点击确定。


八、HelloWorld 释义

代码释义

以下面这段代码为例:

#include <stdio.h>
int main(void)
{
printf("hello world!\n");
return 0;
}
  1. #:代表引入头文件专用特殊字符。
  2. include:引入头文件专用关键字。
  3. <>:用来包裹库头文件名。
  4. stdio.h:使用的头文件。因为程序中使用了 printf() 函数,就必须使用该头文件。
    • std:标准,standard。
    • i:input,输入。
    • o:output,输出。
  5. int:main 函数返回值为整型 int。
  6. main:整个程序的入口函数。任何 .c 程序,有且只有一个 main 函数。
  7. (void):当前 main 函数没有参数。
  8. {}:内部放函数体。
  9. printf("hello world!\n")
    • printf():C 语言向屏幕输出字符使用的函数。
    • hello world!:待写出的字符串内容。
    • \n:回车换行。
  10. return 0;
    • return:返回。C 程序要求,main 函数要有返回值,借助 return 实现返回。
    • 0:成功!因为返回类型是 int,返回整数。

注意事项

  1. 程序中使用的所有的字符,全部是 "英文半角" 字符。
  2. 程序中,严格区分大小写。
  3. ; 代表一行结束。不能使用中文 ";",必须是英文。

代码运行 4 种模式

  1. Debug x86:以调试模式,运行 32 位程序。
  2. Debug x64:以调试模式,运行 64 位程序。
  3. Release x86:以发布模式,运行 32 位程序。
  4. Release x64:以发布模式,运行 64 位程序。
  • Debug:调试模式。生成的 .exe 文件比 Release 模式生成的文件大,带有调试信息。学习中,只使用该模式。
  • Release:发布模式。生成的 .exe 文件没有调试信息,文件较小。

热键:运行编写好的程序 —— Ctrl + F5

注释

  • 单行注释:// 待注释的内容
  • 多行注释:/* 待注释的内容 */

多行注释内,可以嵌套单行注释;多行注释之间不能嵌套。


九、System 函数

作用:执行 Windows 系统中指定的命令。

常用命令:

命令作用
pause暂停
cmd启动新的终端
calc唤起 Windows 下的计算器
notepad唤起 Windows 下的记事本
mspaint唤起 Windows 下的画图工具
cls清空当前 Windows 终端中的内容

Sleep() 函数

Sleep() 函数用于指定程序睡眠,默认单位是毫秒,需要使用头文件 #include <Windows.h>

综合示例代码:

#include <stdio.h> // 引入头文件 stdio.h , 因为下面使用了 printf() 必须添加此头文件。
#include <Windows.h> // 引入头文件 Windows.h, 因为下面使用 Sleep() 函数。

int main(void) // main 是程序的入口函数。void 表示没有参数。int 表示返回整数。
{
printf("hello world1!\n"); // 打印 helloworld 字符串到屏幕。 \n 换行之意。
printf("hello world2!\n");
printf("hello world3!\n");
printf("hello world4!\n");
printf("hello world5!\n");
printf("hello world6!\n");
printf("hello world7!\n");
Sleep(3000); // 使当前程序,打印完 helloworld 后,睡眠 3s 钟
// system("cmd"); // 3s 后,再有机会执行。启动一个新终端。
// system("calc"); // 3s 后,启动计算器
// system("notepad"); // 3s 后,启动记事本
// system("mspaint"); // 3s 后,启动画图工具
system("cls"); // 3s 后,将当前终端清空。
return 0; // 因为 main 返回 int 。所以这里有 return 0;
}