文章目录
- C语言程序设计:程序设计和C语言
- 一、计算机程序和语言
- 计算机语言
- C语言的发展及其特点
- C语言的发展历程
- C语言的特点
- 二、编译器安装
- 三、最简单的C 语言程序
- 简单的C语言程序介绍
- 程序执行流程:
- 输出:
- 求两个整数之和
- 运行结果:
- C语言程序的结构
- 1. C 语言程序的基本组成部分
- (1) 源程序文件
- (2) 预处理指令
- (3) 全局声明
- (4) 函数定义
- (5) 主函数 (main)
- 2. C 语言函数的组成
- 3. 程序的模块化
- 4. 输入输出操作
- 5. 程序语句的分号
- 6. 注释
- 四、运行C 程序的步骤与方法
- (1) 上机输入和编辑源程序
- (2) 对源程序进行编译
- (3) 进行连接处理
- 总结流程
- 五、程序设计的任务
- 1. 问题分析
- 2. 设计算法
- 3. 编写程序
- 4. 编辑、编译和连接
- 5. 运行程序并分析结果
- 6. 编写程序文档
- 六、结语
C语言程序设计:程序设计和C语言
一、计算机程序和语言
所谓程序,就是一组计算机能识别和执行的指令。每一条指令使计算机执行特定的操 作。只要让计算机执行这个程序,计算机就会“自动地”执行各条指令,有条不紊地进行工 作。一个特定的指令序列用来完成一定的功能。为了使计算机系统能实现各种功能,需要 成千上万个程序。
计算机的一切操作都是由程序控制的,离开程序,计算机将一事无成。所以,计算 机的本质是程序的机器,程序和指令是计算机系统中最基本的概念。只有懂得程序设计,才 能真正了解计算机是怎样工作的,才能更深入地使用计算机。
计算机语言
计算机语言是一种用来与计算机进行沟通的人工语言,目的是让人类能够给计算机指令或输入数据,并让计算机按照指令进行处理。计算机语言可以分为以下几类:
-
机器语言:这是计算机能够直接理解和执行的语言,它由二进制代码(0和1)组成。每个机器指令代表一个基本的操作,如加法、存储数据、跳转等。不同的计算机体系结构有不同的机器语言。
-
汇编语言:汇编语言是机器语言的符号化表示,它使用助记符代替机器语言中的二进制代码。例如,
MOV
表示将数据从一个位置移动到另一个位置。汇编语言需要通过汇编程序转换为机器语言才能执行。 -
高级语言:这是离人类语言更近的计算机语言,具有较强的抽象能力,允许程序员使用类比自然语言的语法来编写程序。常见的高级语言有:
- C语言:广泛应用于系统编程和嵌入式开发。
- Java:用于开发跨平台应用,特别是在企业和安卓开发中。
- Python:简洁易读,广泛用于数据科学、人工智能、Web开发等领域。
- JavaScript:主要用于Web开发,处理前端交互和后端服务。
-
脚本语言:脚本语言通常用于编写自动化任务和小型程序。它们通常不需要编译,而是直接解释执行。常见的脚本语言有Python、Perl、Ruby、Shell等。
-
标记语言:标记语言用于描述数据的结构,而不是进行计算或逻辑操作。最典型的例子是HTML(用于描述网页的结构)和XML(用于表示和传输数据)。
-
数据库查询语言:用于从数据库中查询和操作数据的语言。例如,SQL(结构化查询语言)用于对关系型数据库进行操作。
7.面向对象的语言:近十多年来,在处理规模较大的问题时,开始使用面向对象的语 言。C++,C#,Visual Basic和 Java 等语言是支持面向对象程序设计方法的语言。
计算机语言的基本特征是其具有一定的语法和语义规则。语法规定了代码的书写规则,语义则定义了代码的含义和执行结果。计算机语言的发展使得编程变得更加高效和抽象,降低了开发的难度。
C语言的发展及其特点
C语言的发展历程
C语言起源于20世纪70年代,由美国贝尔实验室的Dennis Ritchie在开发UNIX操作系统的过程中创造出来。它的前身是B语言,B语言本身是由Ken Thompson基于1960年代的BCPL语言(Basic Combined Programming Language)发展而来的。Ritchie在B语言的基础上加入了数据类型、结构化编程等功能,最终形成了C语言。
C语言的正式版本发布于1972年,并在接下来的几年里迅速发展。1978年,Brian Kernighan与Dennis Ritchie合作编写了《C程序设计语言》一书,进一步推动了C语言的普及。这本书成为C语言的经典教材,也让更多程序员学习和使用C语言。1989年,C语言的标准化进程正式开始,1990年发布了ANSI C标准,之后于1999年又发布了C99标准,并在2011年发布了C11标准。这些标准进一步统一了C语言的语法和特性,使得C语言在全球范围内保持了长久的影响力。
C语言的特点
-
简洁高效
C语言设计简洁,直接映射到计算机硬件的操作,使得程序执行效率极高。它允许程序员直接访问内存(通过指针)和硬件资源,这对于开发操作系统、嵌入式系统等对性能要求极高的应用至关重要。 -
结构化编程
C语言支持结构化编程(Structured Programming),鼓励使用函数来组织代码,这使得程序具有清晰的结构和可维护性。程序被分成多个模块和函数,便于代码的复用和调试。 -
丰富的数据类型
C语言支持多种基本数据类型,如整数、字符、浮点数等,并且可以通过结构体和联合体等方式定义复杂的数据结构。此外,C语言还提供了指针的概念,使得程序可以直接操作内存,极大提高了灵活性和性能。 -
移植性强
C语言的设计使得它具有很高的移植性。C语言编写的程序可以在不同的硬件平台和操作系统上编译执行,尤其是作为操作系统开发的语言,UNIX和Linux系统就大量使用了C语言。 -
低级控制能力
C语言允许程序员精确控制硬件资源,尤其是通过指针操作和内存管理功能,使得C语言成为操作系统、嵌入式系统、驱动程序开发的首选语言。 -
广泛应用
C语言作为一门通用编程语言,被广泛应用于各种领域,包括系统软件(如操作系统、编译器)、应用软件(如数据库、图形处理软件)以及嵌入式系统、网络编程等领域。C语言对现代编程语言如C++、Java、Python等影响深远,是许多语言的基础。
C语言的简洁性、高效性以及对硬件控制的能力,使它在计算机科学和软件开发中占据着重要的地位。尽管现代编程语言日新月异,但C语言依然是操作系统开发、嵌入式系统以及高性能计算的核心工具。
二、编译器安装
个人用的编译器:CLion 2021.1.3 x64,编译器自己用着顺手就行。
没安装的可以下载,自行安装。
Windows的CLion安装包
链接: https://pan.baidu.com/s/1p3KrFRjNiacs1SpyoWirkw?pwd=2025
Mac的CLion安装包
链接: https://pan.baidu.com/s/1SkvbG0lGJHu1RpqBnFISXQ?pwd=2025
安装教程参考王道教程:
https://pan.baidu.com/s/1Rqg7QcfmmetdCkjKkEXWSA?pwd=2025
三、最简单的C 语言程序
简单的C语言程序介绍
#include <stdio.h> // 引入标准输入输出库
// 主函数是程序的入口点
int main() {
// printf是用来输出信息到屏幕的函数
printf("Hello, World!\n"); // 输出 "Hello, World!" 字符串,并换行
return 0; // 返回0,表示程序正常结束
}
-
#include <stdio.h>
#include
是一个预处理指令,用来引入头文件。在这里,<stdio.h>
是一个标准库头文件,里面包含了输入输出相关的函数声明,比如printf
函数。我们用它来进行屏幕输出。
-
int main()
main
函数是C程序的入口函数,也就是说,程序从这里开始执行。每个C程序都必须包含一个main
函数,程序执行时从main
函数开始。int
表示main
函数的返回类型是整数型,程序结束时会返回一个整数值给操作系统。通常,return 0;
表示程序正常结束。
-
printf("Hello, World!\n");
printf
是标准库函数,用来向屏幕打印信息。在这个例子中,它打印字符串"Hello, World!"
。\n
是一个转义字符,表示换行。这样,输出完字符串后,光标会移动到下一行。
-
return 0;
return 0;
表示main
函数的返回值是0。根据约定,返回0表示程序正常执行结束。如果返回其他非零值,通常表示程序发生错误。
程序执行流程:
- 程序从
main
函数开始执行。 - 执行
printf
语句,输出Hello, World!
到屏幕。 - 程序执行到
return 0;
,表示正常结束并返回操作系统。
输出:
Hello, World!
求两个整数之和
#include<stdio.h> // 引入标准输入输出库,允许使用 printf 函数输出内容
// 主函数是程序的入口点
int main() {
// 在主函数中定义3个整数型变量 a, b 和 sum
int a, b, sum;
// 给变量 a 赋值 123
a = 123;
// 给变量 b 赋值 456
b = 456;
// 将 a 和 b 相加,并把结果存储在变量 sum 中
sum = a + b;
// 输出 sum 的值,格式为整数(%d),并换行
printf("sum is %d\n", sum);
// 返回0,表示程序正常结束
return 0;
}
-
#include<stdio.h>
- 这行代码是预处理指令,告诉编译器引入标准输入输出库。这个库中包含了像
printf
这样的标准函数,用来进行屏幕输出。
- 这行代码是预处理指令,告诉编译器引入标准输入输出库。这个库中包含了像
-
int main()
main
函数是C程序的入口,操作系统从这个函数开始执行程序。int
表示main
函数的返回类型是整数型。
-
int a, b, sum;
- 这行声明了三个整数变量:
a
、b
和sum
。a
和b
用来存储两个待相加的整数,sum
用来存储加法运算的结果。
- 这行声明了三个整数变量:
-
a = 123;
- 给变量
a
赋值为123,即a
现在存储的值是123。
- 给变量
-
b = 456;
- 给变量
b
赋值为456,即b
现在存储的值是456。
- 给变量
-
sum = a + b;
- 计算
a
和b
的和,并将结果存储到sum
中。此时,sum
的值为123 + 456 = 579
。
- 计算
-
printf("sum is %d\n", sum);
- 使用
printf
函数输出sum
的值。%d
是格式控制符,表示输出一个整数。\n
表示输出后换行。输出的结果是sum is 579
。
- 使用
-
return 0;
return 0;
语句表示程序正常结束,返回值为0。这个返回值传递给操作系统,通常0表示程序运行没有错误。
运行结果:
sum is 579
这个程序的核心逻辑就是进行两个整数的相加,然后把结果输出到屏幕上。通过变量a
、b
、sum
来存储相关数据,并使用printf
输出结果。
C语言程序的结构
1. C 语言程序的基本组成部分
一个 C 语言程序通常由以下几部分构成:
(1) 源程序文件
-
源程序文件是 C 语言程序的核心,一个程序可以由一个或多个源程序文件组成。
- 小型程序通常只有一个源程序文件(例如,例1.1 和 例1.2)。
- 较大的程序可能包含多个源程序文件,每个源程序文件中包含多个函数,以便于管理和调试。
一个源程序文件一般包括以下三个部分:
- 预处理指令:如
#include<stdio.h>
等,用于在编译前引入库文件或定义常量。 - 全局声明:通常指在函数外部定义的变量(全局变量)。
- 函数定义:定义程序的具体功能。一个 C 语言程序至少包含一个
main
函数,通常还会包含其他用户自定义的函数。
(2) 预处理指令
-
预处理指令是 C 语言程序的第一部分,在编译开始之前由预处理器执行。它们不属于程序的可执行部分,但会影响程序的结构。
#include
:引入头文件,例如#include<stdio.h>
用来引入标准输入输出库。#define
:定义宏常量或宏函数。
例如,
#include<stdio.h>
会使得stdio.h
中的声明(例如printf
,scanf
等函数的声明)被引入到程序中。
(3) 全局声明
-
全局声明是指在所有函数外部定义的变量,这些变量在整个源程序文件中都有效。
- 例如:
int a, b, sum;
这样的声明会让变量a
,b
, 和sum
在程序的所有函数中都能访问。
这种方式使得不同函数之间可以共享数据。但过多的全局变量可能会导致程序难以维护,因此通常推荐局部变量的使用。
- 例如:
(4) 函数定义
- 函数是 C 语言程序的基本组成单元,每个函数执行特定的操作。程序的执行从
main
函数开始,其他功能可以通过调用用户自定义的函数实现。-
每个函数由两部分组成:
- 函数首部:声明函数的名称、返回类型、参数类型等。
- 函数体:函数的具体实现,包括声明局部变量和执行语句。
示例:
int max(int x, int y) { if (x > y) return x; else return y; }
-
(5) 主函数 (main)
-
C 语言程序的执行总是从
main
函数开始。main
函数是程序的入口,任何其他函数都是在main
函数中调用的。main
函数的形式可以有多种,但一般来说有两种常见的写法:int main(void) { ... } // 无参数的 main 函数 int main() { ... } // 也可以没有参数
2. C 语言函数的组成
每个 C 语言函数的基本组成包括:
- 函数首部:包括函数类型、函数名和参数。
- 函数体:分为两部分:
- 声明部分:声明函数体内用到的局部变量或其他需要的声明。
- 执行部分:包含具体的操作和语句。
一个函数的格式通常为:
返回类型 函数名(参数类型 参数名, ...) {
// 声明部分
// 执行部分
}
例如:
int add(int a, int b) {
int sum;
sum = a + b;
return sum;
}
3. 程序的模块化
在大型程序中,为了提高可维护性和可重用性,通常会将程序分成多个源程序文件(模块)。每个源程序文件都可以包含多个函数,程序编译时会将这些模块编译成目标文件,再通过链接器将目标文件连接成最终的可执行文件。
4. 输入输出操作
C 语言的输入输出操作是通过库函数来实现的,例如 printf()
用于输出,scanf()
用于输入。C 语言本身不提供直接的输入输出功能,所有的输入输出操作都依赖于标准库提供的函数。
5. 程序语句的分号
C 语言的每个语句后面必须加上分号 ;
。这在语法上是必需的,因为分号告诉编译器某个语句的结束。
例如:
a = b + c; // 必须有分号
6. 注释
良好的注释可以提高程序的可读性和可维护性。C 语言的注释有两种方式:
- 单行注释:
// 注释内容
- 多行注释:
/* 注释内容 */
// 这是一个单行注释
/* 这是一个多行注释
可以写多行内容 */
C 语言程序的基本结构包括源程序文件、预处理指令、全局变量、函数定义等。程序由 main
函数开始执行,可以包含多个其他自定义函数来实现不同功能。通过将程序拆分为多个源程序文件,C 语言支持模块化编程,方便管理和调试。程序中需要合理使用局部变量和全局变量,并通过注释提高代码可读性。在输入输出操作方面,C 语言通过标准库函数 printf
和 scanf
提供了灵活的处理方式。
四、运行C 程序的步骤与方法
用C 语言编写的程序是源程序。计算机不能直接识别和执行用高级语言写的指令,必须用编译程序(也称编译器)把C 源程序翻译成二进制形式的目标程序,然后再将该目标程序与系统的函数库以及其他目标程序连接起来,形成可执行的目标程序。
在编写好一个 C 源程序后,进行编译和运行的过程通常包括以下几个步骤:
(1) 上机输入和编辑源程序
- 编写源代码:使用文本编辑器(如 Notepad++、Visual Studio Code、Sublime Text 等)或集成开发环境(IDE,如 Visual Studio、Code::Blocks 等)编写 C 程序。
- 通过键盘输入源程序,如果发现有错误,需要及时修正。
- 将源程序保存为
.c
后缀的文件(如f.c
),并存放在自己指定的文件夹内。如果不特别指定,一般会保存在用户当前的工作目录中。
(2) 对源程序进行编译
编译过程通常包含预处理、编译和语法检查等阶段,具体如下:
-
预处理:使用 C 编译系统提供的“预处理器”(又称“预处理程序”或“预编译器”)对程序中的预处理指令进行处理。例如,处理
#include <stdio.h>
这样的指令,将stdio.h
头文件的内容嵌入到源程序中,取代#include <stdio.h>
这一行。这样程序就变成一个完整的、可以用来进行正式编译的源程序。 -
编译:编译器对源程序进行语法检查,判断是否存在语法错误。如果有错误,编译器会输出错误信息,指示出错的行号,帮助开发者找到并修正错误。修正后重新编译,直到没有错误为止。
- 编译器将源代码转换为二进制形式的目标程序。目标程序通常以
.obj
(如f.obj
)为后缀,保存为目标文件。 - 在 Visual C++ 中,目标文件的后缀通常是
.obj
。如果不特别指定,目标文件会存放在当前目录下,并且源文件不会被删除。
- 编译器将源代码转换为二进制形式的目标程序。目标程序通常以
-
预编译和编译合并:当用编译系统进行编译时,预处理和正式编译通常是合并在一个命令中完成的,用户不需要分别发出预处理和编译的指令。
(3) 进行连接处理
即便编译后的目标文件(例如 .obj
)是有效的,它仍然不能直接执行。因为一个程序通常由多个源程序文件构成,编译只生成了一个目标文件,而实际程序是由多个目标文件和库文件共同组成的。为了使程序可执行,必须经过以下步骤:
-
连接(Linking):将所有编译后的目标文件和需要的函数库文件连接成一个完整的程序。连接过程会将目标文件和函数库链接起来,生成一个可以被计算机直接执行的可执行程序。
-
生成可执行文件:链接过程完成后,会生成一个可执行文件,通常以
.exe
为后缀(如f.exe
)。这是程序最终的输出文件,包含了所有必需的代码和数据,可以被操作系统直接执行。
总结流程
- 输入和编辑源程序:使用文本编辑器或 IDE 编写 C 程序,保存为
.c
文件。 - 编译源程序:
- 使用编译器进行预处理和编译,检查语法错误并生成目标文件(如
.obj
)。
- 使用编译器进行预处理和编译,检查语法错误并生成目标文件(如
- 连接目标文件:将目标文件和库文件进行连接,生成可执行文件(如
.exe
)。 - 执行程序:运行生成的可执行文件,观察程序输出。
在 Visual C++ 中,通常这些步骤都可以通过 IDE 或命令行工具(如 cl
命令)自动完成。如果使用命令行,则一般可以通过以下方式完成:
-
编译并生成目标文件:
cl f.c # 编译源程序并生成目标文件 f.obj
-
链接生成可执行文件:
link f.obj /out:f.exe # 链接生成可执行文件 f.exe
这就是从编写源程序到最终运行程序的整个流程。
五、程序设计的任务
1. 问题分析
- 目标: 确定任务的目标,分析所提供的条件,并找出解决问题的规律。
- 步骤:
- 对问题进行充分的理解。
- 提炼出核心问题,忽略不相关的因素。
- 通过抽象化(如使用数学公式等方式)对问题进行建模,明确应达到的目标。
- 目的: 通过分析问题,明确问题的核心和最终目标,并为后续步骤(设计算法、编程)奠定基础。
2. 设计算法
- 目标: 设计出一个解决问题的具体方法和步骤。
- 步骤:
- 选择适当的算法,根据问题的特性,决定最合适的解题方法(例如:代数解法、数值解法、图算法等)。
- 以清晰无误的方式将解决问题的步骤写出来,常使用流程图或伪代码来表示算法的执行过程。
- 目的: 确定算法是如何在计算机上实现并有效解决问题的,确保方法的可行性与高效性。
3. 编写程序
- 目标: 根据设计的算法,使用一种高级编程语言(如Python、C++、Java等)编写程序。
- 步骤:
- 选择合适的编程语言和开发环境。
- 根据算法设计,将每一个步骤转化为代码实现。
- 编写清晰易读的代码,并遵循编程规范。
- 目的: 实现算法,通过代码将设计方案转化为可以在计算机上运行的程序。
4. 编辑、编译和连接
- 目标: 将源代码转化为可执行程序。
- 步骤:
- 编辑: 通过编程环境或编辑器编写源代码。
- 编译: 使用编译器将源代码编译成机器语言(如中间代码、字节码或二进制代码)。
- 连接: 通过连接器将程序中所有模块、库、资源文件等进行链接,生成最终的可执行文件。
- 目的: 使程序能够在计算机上运行。
5. 运行程序并分析结果
- 目标: 运行程序并分析输出的结果是否符合预期。
- 步骤:
- 执行编译生成的可执行程序。
- 对照预期输出,检查程序的运行结果。
- 如果程序没有按预期工作,进行调试(debug)并定位错误源。
- 调试: 逐步排除程序中的故障,使用调试工具(如断点、日志等)查看程序的执行流程,查找并修复问题。
- 目的: 确保程序能正确解决问题,并且输出结果合理。
6. 编写程序文档
- 目标: 为程序用户提供清晰的使用说明和支持文档。
- 步骤:
- 编写程序说明书,详细描述程序的功能、运行环境、安装和使用方法。
- 包括程序所需的输入、输出、注意事项、错误处理等内容。
- 提供帮助文档(如README文件或内置的帮助功能)。
- 目的: 使用户能够理解并顺利使用程序,提供必要的支持。
每个阶段的目的都非常明确,从问题的抽象和分析,到程序的调试和测试,再到最终的用户文档编写,这一系列步骤是确保软件能够高效、可靠、并且易于使用的关键。这些步骤对于任何开发项目都是不可或缺的,尤其是在大型软件工程和商业软件产品的开发过程中,测试和文档工作往往占据重要地位。
六、结语
后续有时间精力会持续分享更多关于大数据领域方面的优质内容,感谢各位的喜欢与支持!