课件
思维导图
1.1 前言
简单介绍了一下本教程的知识点分布
1.2 软件与程序
软件与程序
程序设计语言简介
机器语言:计算机可以看懂;
汇编语言和高级语言,计算机看不懂;
注意箭头方向,越靠左越底层
高级语言需要经过解释过程或编译过程,转换为计算机的可执行程序。
程序设计语言历史
notes
简述
面向对象是一种开发思想,这个名词在课件的 7.1.1 中,介绍 C++ 和 C 的差异时有出现。学习 C++ 时,可以回头来看 1.2 中记录的面向过程和面向对象之间的差异。
计算机软件 software
- 软件是计算机系统中的程序和数据
- 软件是一系列按照 特定顺序组织的 计算机数据和指令的集合
- 软件是可以被操作、修改、复制等的一组指令和数据的集合
- 软件是通过编程实现的功能模块,如操作系统、应用程序等
- 软件依赖于硬件的基础上进行工作
- 软件的更新可以通过升级程序在线更新实现
- 软件的更新和升级相较于硬件的更新升级而言,也更为方便和快捷
- 软件需要进行 逻辑层面 的设计、编写、测试等
- 简单的说软件就是 程序加文档的集合体
- 软件并不只是包括可以在计算机(这里的计算机是指广义的计算机)上运行的电脑程序
- 与这些电脑程序相关的文档一般也被认为是软件的一部分
- 一般来讲软件被划分为
- 编程语言
- 系统软件
- 应用软件
- 中间件(介于系统软件和应用软件之间)
计算机硬件 hardware
- 硬件是计算机系统中的实体部分,包括了计算机的物理设备和组成部分
- 硬件是实现计算机功能的物理设备,如 CPU、内存、硬盘等、显示器等
- 硬件需要进行 物理层面 的设计、制造、测试等
- 硬件的更新需要进行物理更换和升级
计算机程序 program
- 计算机程序是为实现特定目标或解决特定问题而用计算机语言编写的命令序列的集合。
- 计算机程序是为实现预期目的而进行操作的一系列语句和指令。
- 计算机程序一般分为两大类:
- 系统程序
- 应用程序
程序设计 programming
- 程序设计是给出解决特定问题程序的方法和过程
- 程序设计是软件构造活动的重要组成部分
- 程序设计过程应当包括:
需求分析-> 设计-> 编码-> 测试-> 维护
五个阶段,并生成各种文档资料。- 需求分析 analysis
- what to do?
- 设计 design
- how to do?
- 编码 code
- 扩展名为
.c
或.cpp
的文件(对 C/C++ 语言而言)
- 扩展名为
- 测试 test
- 扩展名为
.exe
的文件(对 C/C++ 语言而言)
- 扩展名为
- 维护 maintain
- 需求分析 analysis
- 程序设计最终需要以某种 程序设计语言 为工具:编写出该 程序 的 语言
韩信点兵
韩信有一队兵,他想知道有多少人,便让士兵排队报数。
- 按从 1 至 5 报数,最末一个士兵报的数为 1
- 按从 1 至 6 报数,最末一个士兵报的数为 5
- 按从 1 至 7 报数,最末一个士兵报的数为 4
- 最后再按从 1 至 11 报数,最末一个士兵报的数为 10
问:你知道韩信至少有多少兵吗?
#include <stdio.h>
#include <stdbool.h>
int main() {
int soldiers = 1;
bool found = false;
while (!found) {
if ((soldiers % 5 == 1) && (soldiers % 6 == 5) && (soldiers % 7 == 4) && (soldiers % 11 == 10)) {
found = true;
} else {
++soldiers;
}
}
printf("韩信至少有 %d 名士兵。\n", soldiers); // => 韩信至少有 2111 名士兵。
return 0;
}
奖金
#include <stdio.h>
double calculate_bonus(double profit) {
double bonus = 0;
if (profit <= 100000) {
bonus = profit * 0.1;
} else if (profit <= 200000) {
bonus = 100000 * 0.1 + (profit - 100000) * 0.075;
} else if (profit <= 400000) {
bonus = 100000 * 0.1 + 100000 * 0.075 + (profit - 200000) * 0.05;
} else if (profit <= 600000) {
bonus = 100000 * 0.1 + 100000 * 0.075 + 200000 * 0.05 + (profit - 400000) * 0.03;
} else if (profit <= 1000000) {
bonus = 100000 * 0.1 + 100000 * 0.075 + 200000 * 0.05 + 200000 * 0.03 + (profit - 600000) * 0.015;
} else {
bonus = 100000 * 0.1 + 100000 * 0.075 + 200000 * 0.05 + 200000 * 0.03 + 400000 * 0.015 + (profit - 1000000) * 0.01;
}
return bonus;
}
int main() {
double profit;
printf("请输入当月利润(万元):");
scanf("%lf", &profit);
double bonus = calculate_bonus(profit);
printf("应发放奖金总数为(万元):%lf\n", bonus);
return 0;
}
#include <stdio.h>
double calculate_bonus(double profit) {
double bonus = 0;
double profit_levels[] = {100, 60, 40, 20, 10, 0};
double rates[] = {0.01, 0.015, 0.03, 0.05, 0.075, 0.1};
for (int i = 0; i < 6; ++i) {
if (profit > profit_levels[i]) {
bonus += (profit - profit_levels[i]) * rates[i];
profit = profit_levels[i];
}
}
return bonus;
}
int main() {
double profit;
printf("请输入当月利润(万元):");
scanf("%lf", &profit);
double bonus = calculate_bonus(profit);
printf("应发放奖金总数为(万元):%.2lf\n", bonus);
return 0;
}
请输入当月利润(万元):10
应发放奖金总数为(万元):1.00
请输入当月利润(万元):20
应发放奖金总数为(万元):1.75
Hanoi 塔游戏
#include <stdio.h>
#include <math.h>
void hanoi(int n, char A, char B, char C) {
if (n == 1) {
printf("将金片 1 从 %c 移动到 %c\n", A, C);
} else {
hanoi(n - 1, A, C, B);
printf("将金片 %d 从 %c 移动到 %c\n", n, A, C);
hanoi(n - 1, B, A, C);
}
}
int main() {
int n;
printf("请输入金片数量:");
scanf("%d", &n);
printf("移动的最小步骤数为:%d\n", (int)pow(2, n) - 1);
printf("移动步骤如下:\n");
hanoi(n, 'A', 'B', 'C');
return 0;
}
请输入金片数量:3
移动的最小步骤数为:7
移动步骤如下:
将金片 1 从 A 移动到 C
将金片 2 从 A 移动到 B
将金片 1 从 C 移动到 B
将金片 3 从 A 移动到 C
将金片 1 从 B 移动到 A
将金片 2 从 B 移动到 C
将金片 1 从 A 移动到 C
请输入金片数量:4
移动的最小步骤数为:15
移动步骤如下:
将金片 1 从 A 移动到 B
将金片 2 从 A 移动到 C
将金片 1 从 B 移动到 C
将金片 3 从 A 移动到 B
将金片 1 从 C 移动到 A
将金片 2 从 C 移动到 B
将金片 1 从 A 移动到 B
将金片 4 从 A 移动到 C
将金片 1 从 B 移动到 C
将金片 2 从 B 移动到 A
将金片 1 从 C 移动到 A
将金片 3 从 B 移动到 C
将金片 1 从 A 移动到 B
将金片 2 从 A 移动到 C
将金片 1 从 B 移动到 C
在线小游戏 👉🏻 https://zhangxiaoleiwk.gitee.io/h.html 可以根据上述程序中打印的步骤,到这个小游戏中自行测试一下。
机器语言 > 汇编语言 > 高级语言
机器语言
- 机器语言是一种二进制代码
- 机器语言是计算机可以理解和执行的唯一语言,它直接由 CPU 执行
- 优点:执行速度非常快
- 缺点:不易于编写和理解
汇编语言
- 汇编语言是一种基于机器语言的低级语言
- 汇编语言使用助记符来表示机器指令,使得编写和阅读代码更容易
- 汇编语言可以更方便地进行底层编程,但也仍需要了解计算机硬件结构。
高级语言
- 高级语言是一种比机器语言和汇编语言更接近人类语言的计算机语言,如 C、C++、Java、JavaScript、Python 等
- 高级语言的程序主要是描述计算机的解题过程,即描述复杂的加工处理过程,所以也称高级语言为面向过程语言。
- 补充:这里所说的“面向过程”,和我们平时说的“面向对象”、“面向过程”不是一个概念。这里提到的“面向过程”是指我们编写的高级语言,描述的都是解决问题的过程。我们平时说的“面向对象”、“面向过程”是我们在使用高级语言来描述解决问题的过程的方式 👉🏻 链接
- 计算机不能直接执行高级语言的程序(源程序)
- 通常有解释方式和编译方式两种方法在计算机上执行程序(目标程序)
- 优点:让开发者能够更快速、高效地进行软件开发
- 语言结构简单
- 易于学习
- 可移植性好
- 可维护性高
- ……
- 缺点:慢、且需翻译
- 执行速度相比机器语言和汇编语言较 慢
- 需要 编译器 将高级语言代码翻译成机器语言
小结:
- 机器语言和汇编语言更接近硬件,执行效率高,但编写困难
- 高级语言编写简单、易于理解,但执行效率相对较低
面向对象、面向过程
我们平时说的“面向对象”、“面向过程”是我们在使用高级语言来描述解决问题的过程的方式。
比如我们可能会这么说:“C 是面向过程的,C++ 是面向对象的”、“JavaScript 是面向过程的,TypeScript 是面向对象的”
- 如果是以“对象”的方式作为 思考解决问题的切入点,那么就叫面向对象开发;
- 如果是以“过程”的方式作为 思考解决问题的切入点,那么就叫面向过程开发;
- 区分这种描述的侧重点在于:思考解决问题过程的方式
- “面向对象”的思维方式:会优先想到封装成一个个对象来解决问题
- “面向过程”的思维方式:会优先思考解决问题的步骤
- 不同的高级语言有不同的特性,会潜移默化地影响我们思考解决问题的方式
“C 是面向过程的,C++ 是面向对象的” 👈🏻 以这句话为例,它描述的是什么意思呢?
- 如果你在使用 C 语言开发,那么你在思考问题的解决方案时,很可能会优先想到解决问题的步骤,先做什么,后做什么。这是由 C 语言的特性决定的。
- 如果你在使用 C++ 语言开发,那么你在思考问题的解决方案时,很可能会优先想到为了解决这个问题,我应该需要封装一个什么样的“对象”呢,然后再去思考这个对象里面应该需要具备的功能,这个功能也就是解决问题的步骤。
- 注意:
- C 语言虽然没有提供面向对象的语言特性,但它并不是只能用于面向过程的编程,同样也可以用于实现面向对象的编程方式。
- C++ 语言不仅提供了面向对象的语言特性,也兼容了 C 语言,可以用于面向过程的编程。
- C 和 C++ 都是多范式语言(支持面向过程、面向对象、泛型编程等多种编程范式)。
- 小结:“C 是面向过程的,C++ 是面向对象的” 这种说法并不完全准确,可以这么说 “使用 C 开发,可能更倾向于面向过程;使用 C++ 开发,可能更倾向于面向对象”
解释过程、编译过程
解释过程和编译过程都是将高级语言翻译成计算机可以执行的指令的过程,不同之处在于执行的时间点和方式。
解释过程的流程大致如下:
- 编写源代码,保存为一个文本文件。
- 运行解释器,将源代码文件作为输入。
- 解释器 逐行 读取源代码,并将其翻译成计算机可以执行的指令。
- 解释器直接执行翻译后的指令,产生程序的输出。
解释过程是动态地将源代码翻译成可执行的指令
- 优点:灵活,可以动态地修改和调试程序
- 缺点:执行速度相对较慢
编译过程的流程大致如下:
- 编写源代码,保存为一个文本文件。
- 运行编译器,将源代码文件作为输入。
- 编译器进行 词法分析、语法分析和语义分析,将源代码翻译成 目标代码(通常是汇编语言)。
- 编译器进行优化,对目标代码进行精简和改进,以提高程序的性能和效率。
- 编译器将目标代码转换成 机器码,并生成 可执行文件。
- 用户运行可执行文件,计算机执行其中的指令,产生程序的输出。
编译过程是将源代码静态地翻译成可执行的指令
- 优点:生成的可执行文件执行速度快
- 缺点:修改和调试程序相对困难
C 语言的历史
- 1969 年:肯·汤普逊(Ken Thompson)在贝尔实验室的 PDP-7 上发明了第一个 Unix 操作系统,并在其中创建了 B 语言。
- 1970 年:丹尼斯·里奇(Dennis Ritchie)改进了 B 语言,创建了 C 语言。
- 1972 年:丹尼斯·里奇在贝尔实验室的 PDP-11 计算机上,用 C 语言重写了 Unix 操作系统。
- 1978 年:布赖恩·柯林汉(Brian Kernighan)和丹尼斯·里奇合著了《The C Programming Language》一书,该书成为 C 语言的经典教材。
- 1983 年:美国国家标准局(ANSI)成立了一个委员会,开始制定 C 语言的标准,即 ANSI C。
- 1989 年:国际标准化组织(ISO)接手 ANSI C 标准,开始制定 ISO C 标准。
- 1990 年:ISO C90 标准正式发布,即 C 语言的第一个国际标准。
- 1999 年:ISO C99 标准发布,引入了很多新的特性,如长长整型、可变长度数组等。
- 2011 年:ISO C11 标准发布,新增了一些新特性,如泛型选择、多线程支持等。
- 2017 年:ISO C17 标准发布,主要是对 C11 标准的一些修改和扩展。
C 语言的特点
PPT:
- C 语言自诞生以来,经历了数十年的发展和演变,在计算机编程领域拥有着重要的地位和作用。
- C 语言的发明是计算机史上的一个重要里程碑,它被广泛应用于系统编程、操作系统、网络编程、嵌入式系统、游戏开发、数据库开发等领域,成为了计算机编程的经典语言之一。
- C 语言也是很多其他编程语言的基础,例如 C++、Java、Python 等。
- ……
小结:对于 C 语言的特点,如果说得简单些,用一句话来描述的话,可以这么描述:C 语言的年龄比较大。
C 语言其实很早就出现了,所以后继出现的很多语言,其实都是模仿 C 的一些特点来实现的,同时由于它出现的很早,所以很多老问题,很底层的问题,都可以使用 C 来解决,可以说它能做的事儿巨多,几乎任何领域都有它的身影。
通过网站 TIOBE 了解编程语言受欢迎程度的排名信息
https://www.tiobe.com/tiobe-index/
截图时间:
23.04.03
1.3 软件开发环境与编程实战
软件开发环境简介
补充:visualstudio2017的安装
补充:visualstudio2019的安装
补充:visualstudio2019建立空项目
编程实战1:屏幕上输出
00:07:11 | .c/cpp 后缀
在文件后缀名上,即便我们现在写的是 c 程序,后缀名依旧可以是 cpp 结尾。这是因为 c++ 是完全兼容 c 的
00:14:38 | 快速定位错误
当我们点击生成按钮后,如果结果中出现了错误,我们可以双击这条错误信息,Visual Studio 将非常智能地告诉我们是哪一行出错了。
00:17:45 | stdlib.h 头文件 | system 函数
stdlib.h 头文件中,包含 system 函数。如果要使用 system 函数的话,需要将 stdlib.h 这个头文件给引入。
00:18:00 | 找错误
定位错误的时候,优先看第一个错误。双击第一行错误信息,visualstudio 会快速帮我们定位到错误的行。
编程实战2:求整数的绝对值
在 Visual Studio 中,如果直接使用 scanf 会报错,提示我们加上 _s 改为 scanf_s 解决用户输入行为的安全问题。
编程实战3:求长方体的体积
算法与流程图
Niklaus Wirth
More info 👉🏻 链接
现在正在整理这篇笔记的时间是: 上个月的今天,正巧就是这位大佬生日……
补充 mac 的 xcode 使用说明
notes
简述
本节主要介绍能用来写 C语言 的集成开发环境都有哪些,它们各自都有什么特点。由于已经找到了一个在线的云 IDE,也就是说学习 C语言 的开发环境已经具备了。所以 1.3.1
、1.3.2
、1.3.3
、1.3.4
、1.3.9
这几节暂时都先直接跳过,后续如果要搭建工作需要的开发环境,到时候再来回看视频。
- IDE 开发环境,根据具体需要来看就好
- 工作中需要用哪个 IDE 就转哪个 IDE,没必要把所有安装 IDE 的教程视频都看一遍
- UP 目前
23.03.09
在 mac 上使用的 IDE 环境是 Lightly 安装非常简单,直接傻瓜式下一步即可,用来在线学习 C 的语法啥的,应该是够了。之后写项目,再到 windows 上搭建 IDE 环境即可 - 1.3.7:写一个 求长方体的体积 的 demo。求解长方体体积的算法非常简单,本节我们需要注意的是:如何在终端键入数据,让 scanf 函数能够拿到这些数据,并给对应的变量完成赋值。
- 1.4.1:这一部分,主要是老师给我们提供一些学习上的建议,在学习的过程中,老师会带着我们去完成一些具有一定功能、具备一定实用性的小 demo。比如“图书管理程序”、“电话本”……
- 1.4.2:完成俩特别简单的打印作业。
参考资料:
- cloudIDE lightly 👉🏻 链接
- C 语言中 scanf_s 和 scanf 区别是什么 👉🏻 链接
- C 库函数 – scanf() | 菜鸟教程 👉🏻 链接
- linux下运行程序出现“sh: 1: pause: not found” 👉🏻 链接
Visual C++、Visual studio 2015、DevC++、Cfree
- Visual C++ 是微软公司推出的 C++ 集成开发环境
- Visual C++ 是 Microsoft Visual Studio 系列开发工具的一部分
- Visual C++ 主要用于开发 Windows 平台下的应用程序,包括桌面应用程序、控制台应用程序、Windows 服务等
- Visual C++ 提供了一整套丰富的工具和库,开发人员可以利用这些工具和库来进行程序设计、编译、调试和部署,从而提高开发效率和代码质量
- Visual Studio 是一款集成开发环境(Integrated Development Environment,IDE)
- Visual Studio 是由微软公司开发的
- Visual Studio 支持多种编程语言,包括 C++、C#、Visual Basic 等,并提供了丰富的工具和功能,例如代码编辑器、调试器、编译器、版本控制系统等
- Visual Studio 可以帮助开发人员在一个集成的环境中进行开发、测试和部署应用程序
- Visual Studio 是 Windows 平台上最流行的开发工具之一
- Dev-C++ 是一个免费的 C++ 集成开发环境(IDE),可以在 Windows 平台上使用
- Dev-C++ 包括一个基于 Mingw 的编译器和一个简单的界面
- Dev-C++ 具有类似 Visual Studio 的外观和感觉,但更轻量级,适用于学习和小型项目
- C-Free 是一个免费的集成开发环境(IDE)
- C-Free 主要用于 C 和 C++ 程序的编写和调试
- C-Free 提供了编辑器、编译器、调试器、项目管理工具等功能,并且具有易用性、轻量级、快速编译、代码提示等特点,是初学者和小型项目开发者的一款较为适合的 IDE
安装 cloudIDE lightly 搭建开发环境
- lightly 是一个轻量且功能强大的集成开发工具
- 特点:
- 免费
- 免费版的功能,用来学习 C/C++ 的基本语法,完全够用了
- 安装简单
- 使用简单
- 跨平台:有 windows 版、mac 版
- 免费
- lightly 链接 👉🏻 https://lightly.teamcode.com/
- visual studio
- 若懒得装 visual studio 的话,在学习阶段可以直接使用 lightly 来写 demo;
- 当然,如果已经装好了 visual studio 的话,也许使用 visual studio 来写代码会更好;
打印 Hello World
#include <stdio.h> // => 引入头文件
#include <stdlib.h>
int main() { // => int 定义的是函数的返回值类型;main
函数是整个程序的入口,main 函数有且必须且只能有一个
printf("Hello World\n"); // => 每一条语句必须以分号结尾
// getchar(); // => 获取用户输入,用户输入内容后,程序才会继续往下执行
system("pause");
return 0; // => 返回的 0 就是 int 类型,是满足要求的
}
#include <stdio.h>
引入 stdio.h 头文件
std
是标准 standard 的缩写io
是输入 input 输出 output 的缩写h
是头 head 的缩写stdio.h
表示 标准输入输出头文件#include
C语言中,#include 是一个编译预处理指令,它的含义是让编译程序在头文件目录中搜索指定名称的头文件并将其插入到指令所在的位置
system("pause");
一般 在 windows 平台写代码为了在终端看到运行结果,所以加入了 system("pause");
语句。但是 在 linux 下 shell 里 pause 不再是一条命令,因此会出现 sh: 1: pause: not found
的提示。
补充:如果使用的是最新的工具,
system("pause");
这一行其实没有写的必要
- lightly:实际上,在 lightly 里边写 c 程序,
system("pause");
这一行也没必要加,因为默认情况下,我们运行程序之后,底部的终端会一直开在那边,想看运行结果随时都可以看,并不会像 windows 那样,终端窗口弹出一瞬,随后立刻关闭。- Visual Studio 2022:也没必要加
system("pause");
这一行,测试时发现最新版的 Visual Studio 会新开一种终端窗口,并且在程序执行完毕后不会自动关闭,所以就没必要 pause 了。
getchar();
- 获取用户输入,用户输入内容后,程序才会继续往下执行。
- 使用这条语句,也可以起到类似
system("pause");
的效果。
使用 lightly 创建 C 项目选择的 C 语言标准
公司的 C++ 使用的是 C++11 的标准,学习的时候直接使用 C11 标准即可。
cpp 完全兼容 c
C++ 是完全兼容 C 的
- 我们在学习 C 语言部分的时候,直接新建 C++ 工程也是完全 OK 的。
- 在文件后缀名上,即便我们现在写的是 C 程序,后缀名依旧可以是 cpp 结尾。
输入一个整数,打印该整数的绝对值
#include <stdio.h>
int main() {
int numb, abs, r;
printf("请输入一个整数:");
r = scanf("%d", &numb);
if (r == 1) {
if (numb > 0) {
abs = numb;
} else {
abs = -numb;
}
printf("%d 的绝对值是:%d\n", numb, abs);
} else {
printf("输入错误!\n");
}
return 0;
}
r = scanf("%d", &numb);
&
取地址符- 我们可以通过 scanf 函数的返回值,判断用户输入的数是否满足要求
- 如果 scanf 返回结果是 1 意味着用户输入的是合法的整数值
- 有关输入输出的内容,后续会详细介绍
求长方体的体积
#include <stdio.h>
int volume(int x, int y, int z) { return x * y * z; } // 有关函数的更多内容,会在后续章节详细介绍
int main() {
int a, b, c, v, r;
printf("请输入立方体 3 边长度的整数:");
r = scanf("%d%d%d", &a, &b, &c);
if (r == 3 && a > 0 && b > 0 && c > 0) {
v = volume(a, b, c);
printf("体积是:%d\n", v);
} else {
printf("error\n");
}
return 0;
}
scanf("%d%d%d", &a, &b, &c);
&a
、&b
、&c
中的&
是地址运算符,分别获得这三个变量的内存地址。%d%d%d
是按十进值格式输入三个数值。此时没有指定分隔符,输入时,在两个数据之间可以用以下这些字符进行分隔- 一个或多个空格
- tab 键
- 回车键
system 函数位于 头文件中
stdlib.h 头文件中,包含 system 函数。
如果要使用 system 函数的话,需要将 stdlib.h 这个头文件给引入。
程序的基本组成要素
说法 1:程序 = 数据结构 + 算法
- 数据结构:程序中用来存储和组织数据的方式,包括数组、链表、栈、队列、树、图等等。
- 算法:程序中解决问题的方法,是一系列有序的操作步骤。
- “程序 = 数据结构 + 算法” 这个说法强调了程序设计中数据结构和算法的重要性,合理选择数据结构和算法可以使程序更加高效、易于维护和扩展。
说法 2:程序 = 算法 + 数据结构 + 程序设计方法 + 语言工具和环境
- 算法:解决问题的方法
- 数据结构:组织和存储数据的方式
- 程序设计方法:解决问题的具体步骤和方法
- 语言工具和环境:提供了实现算法和数据结构的具体技术和工具
- “程序 = 算法 + 数据结构 + 程序设计方法 + 语言工具和环境” 这个说法是一种更全面的观点,其中算法和数据结构是构建程序的核心,而程序设计方法和语言工具和环境则提供了实现算法和数据结构的具体方式。
算法的五大特点
- 有输入:算法必须有输入,且输入必须合法。
- 有输出:算法必须有输出,且输出必须与问题的要求一致。
- 有穷性:算法必须在有限的步骤内结束,不能无限循环或者死循环,否则无法得到正确的结果。
- 确定性:对于相同的输入,算法应该得到相同的输出,不能出现随机性。
- 可行性(高效性):算法的每一步都必须是可行的,即能够实际执行,每一步都能在有限的时间内完成。
算法的多种描述方式
算法可以通过多种方式进行描述,其中常见的几种方式包括:
- 自然语言描述:
- 使用自然语言描述算法的步骤和实现方法,如中文、英文等。
- 易理解和交流,但易产生二义性。
- 伪代码描述:
- 使用类似编程语言的语法,但不涉及具体语言的细节,只描述算法的执行过程,方便人类理解。
- 伪代码使用介于自然语言和计算机语言之间的文字和符号来描述算法
- 流程图描述:使用图形化的方式,展示算法的执行流程和决策过程,便于理解和讲解。
- 程序流程图:用图形符号和文字说明来表示数据处理的过程和步骤。
- N-S流程图:也称方框图;适于结构化程序设计的算法描述工具。
- 程序代码实现:使用特定编程语言编写代码,实现算法的具体逻辑。
不同的描述方式适用于不同的场景和人群
- 对于初学者而言,自然语言和流程图描述更易于理解
- 对于有编程基础的人群而言,伪代码和程序代码实现更为方便
scanf 函数的返回值
- 如果读取格式化输入成功,scanf 函数将 返回成功匹配和赋值的个数。
- 如果到达文件末尾或发生读错误,则返回 EOF。
使用 scanf 读取用户录入多个的数据时,数据之间应该使用什么分隔符
#include <stdio.h>
int main(void) {
int a, b, c;
printf("请输入三个数字:");
scanf("%d%d%d", &a, &b, &c);
printf("%d, %d, %d\n", a, b, c);
return 0;
}
"%d%d%d"
未指定分隔符的情况,分隔符可以是:
- 一个或多个空格
- 回车
- tab 键
#include <stdio.h>
int main(void) {
int a, b, c;
printf("请输入三个数字:");
scanf("%d,%d,%d", &a, &b, &c);
printf("%d, %d, %d\n", a, b, c);
return 0;
}
"%d,%d,%d"
如果使用 ,
来分隔输入的 %d
,相应的输入时也需要添加 ,
- 必须按照指定的分隔符来传递数据:
- 否则会导出数据读入失败:
结论:
如果指定了分隔符,那么用户在输入数据的时候必须按照分隔符的要求来录入数据,否则会导致数据读入异常。
1.4 程序设计学习方法介绍
程序设计方法介绍
本章作业说明
notes
简述
先打鸡血……
然后完成俩简单的作业……
在屏幕上输出“您好!欢迎来到程序设计世界”
#include <stdio.h>
int main () {
printf("您好!欢迎来到程序设计世界\n");
return 0;
}
打印图案
#include <stdio.h>
int main() {
printf(" *\n"); // 1
printf(" * * *\n"); // 3
printf("* * * * *\n"); // 5
printf(" * * *\n"); // 3
printf(" *\n"); // 1
return 0;
}
1.5 华为相关技术简介
几乎没有干货知识点,这部分先直接跳过……
华为鲲鹏体系介绍
1.5 这部分的内容和 C 没有直接关系,主要是介绍华为的一些玩意儿……
先跳过了,等学完后续所有内容后再来看,可能更加合适……
华为跨平台应用开发
听不懂,感觉视频中讲解的东西特别底层…… 和上一个视频一样,几乎没有和 C/C++ 相关的干货
华为云端开发-cloudIDE简介
介绍了华为云开发工具 IDE 的基本使用。
华为C语言编程规范
- 介绍华为 C 语言的编程规范,这部分暂时跳过即可,先学后续课程,把 C 语言的内容给学完,手写过一些 demo 之后,再来看本节的内容即可。
- 课件中记录的已经非常详细了,可以尝试先看课件,不理解的再看视频讲解。