为什么需要程序?
- 小任务量下的项目无法发挥程序的优势,凭借人力可以很迅速的完成,如:将3,1,2按照由低到高的顺序排列。
- 当任务量较大时,人力往往完成速度较慢,且很难保证准确性,此时需要借助计算机的算力辅助,如:将11,92,14,56,76,29,55,39,40,65按照由低到高的顺序排列(既然10个数已经很“费力”了,那100,1000,…呢?)
#include
using namespace std;
int main() {
// 定义数组
int numbers[] = {11, 92, 14, 56, 76, 29, 55, 39, 40, 65};
int n = sizeof(numbers) / sizeof(numbers[0]);
// 冒泡排序
for (int i = 0; i < n - 1; ++i) {
for (int j = 0; j < n - i - 1; ++j) {
if (numbers[j] > numbers[j + 1]) {
// 交换元素
int temp = numbers[j];
numbers[j] = numbers[j + 1];
numbers[j + 1] = temp;
}
}
}
// 打印排序后的结果
cout << "排序后的数字:";
for (int i = 0; i < n; ++i) {
cout << numbers[i] << " ";
}
return 0;
}
编程语言是一种人类和计算机之间进行通信工具,它为程序员提供了一种结构化的方式来描述计算机执行的任务。当编写程序时,程序员使用编程语言编写代码,然后通过编译器或解释器将其转换为计算机能够执行的机器代码。下面是编程语言操作计算机的基本原理:
高级语言与低级语言: 编程语言可以分为高级语言和低级语言。高级语言(如Python、Java)更接近自然语言,提供了更丰富的抽象和易用性,而低级语言(如汇编语言、机器语言)更接近计算机硬件,直接操作计算机资源。
编写源代码(学习重点): 程序员使用编程语言编写源代码,描述所需的算法、逻辑和数据处理。源代码是人类可读的文本形式。
编译或解释: 编程语言通常需要通过编译器或解释器将源代码转换为计算机能够执行的形式。编译器将整个源代码一次性转换为机器代码,而解释器逐行地解释执行源代码。
生成可执行文件: 在编译过程中,生成的目标代码可以打包成可执行文件。这个文件包含了计算机硬件可以直接执行的二进制指令。
计算机执行: 生成的可执行文件可以在计算机上运行。计算机的中央处理单元(CPU)执行这些指令,按照程序中描述的算法和逻辑进行计算和操作。
JavaScript: 用于前端开发的主流语言,也可用于服务器端(Node.js)。支持异步编程,广泛用于构建交互式的Web界面。
Python: 以简洁易读的语法著称,广泛应用于数据科学、机器学习、Web开发、自动化脚本等领域。
Java: 一种面向对象的编程语言,用于构建大型企业级应用、Android应用以及分布式系统。
C++(学习内容): 一种通用目的的编程语言,广泛用于系统开发、游戏开发、嵌入式系统等领域。
C#(学习内容): 由Microsoft开发,主要用于Windows生态系统中的应用程序开发,尤其是桌面和游戏开发(Unity引擎)。
软件开发: C++常用于开发桌面应用程序、服务器端软件以及性能敏感的应用,比如数据库软件、商业产品等。
游戏开发(跳一跳): C++是游戏开发行业的主流语言之一,尤其是在大型游戏引擎(如Unreal Engine)和游戏开发中,由于其高性能特性,适合开发要求高性能渲染、物理模拟的游戏。
操作系统开发: 虽然操作系统核心通常用C语言编写,但C++也被用于开发操作系统的某些部件和应用程序。
机器学习和数据分析: 尽管Python在这一领域更受欢迎,但C++也被用于开发性能敏感的机器学习库和框架,如TensorFlow的一些底层实现就使用了C++。
网络和通信: C++用于开发高性能的服务器和网络应用程序,包括Web服务器、邮件服务器以及基于TCP/IP的通信应用。
课程大致安排:
- C++基础知识*0.6
- C++项目实战(跳一跳游戏开发)*0.3
- 答疑+扩展性内容*0.1
编写一个C++程序需要四个步骤
VS2022
main.cpp
注意:编写时键盘必须调整成英文
#include
using namespace std;
int main() {
system("pause");
return 0;
}
cout << "hello world" << endl;"
cout << "hello c++" << endl;"
// 描述信息(一行)
/* 描述信息(多行) */
int main1() {}
#include
using namespace std;
// 1.单行注释
/*
2.多行注释
多行注释
多行注释
*/
/*
main是一个程序的入口
每个程序必须有main函数
有且仅有一个
*/
int main() {
// 向控制台输出hello world
cout << "hello world" << endl;
system("pause");
return 0;
}
数据类型 变量名 = 初始值;
内存是计算机中用于存储数据和程序的临时存储器件。它在计算机工作过程存储正在运行的程序和数据,以便CPU能够快速地访问和处理这些信息。
数据类型 变量名 = 初始值;
int a = 10;
#include
using namespace std;
int main() {
// 创建变量a
int a = 10;
cout << "a=" << a << endl;
system("pause");
return 0;
}
简化表示: 十六进制数可以更简洁地表示二进制数。由于计算机的基础是二进制系统,而每四位二进制数(比特)刚好可以用一个十六进制数字来表示,这种对应关系简化了长二进制数串的表示。例如,二进制的1101 1010 1111 0001
可以用十六进制的DAF1
来表示,大大减少了表示的长度。
易于转换: 二进制与十六进制之间的转换非常直接,不需要复杂的计算。
节省空间: 在文档、代码和界面中使用十六进制可以节省空间。例如,用十六进制表示内存地址时,相比二进制需要的空间少得多,这在编程、系统设计文档和教程中尤其有用。
数制转换是在不同的进制之间转换数值的过程,常见的进制包括二进制(基数为2)、十进制(基数为10)和十六进制(基数为16)。下面将介绍这三种数制之间的转换方法。
二进制转十进制:将每个二进制位乘以其对应的2的幂次方值,然后将这些值相加得到十进制数。
例如,二进制1011
转换为十进制:
1 × 2 3 + 0 × 2 2 + 1 × 2 1 + 1 × 2 0 = 8 + 0 + 2 + 1 = 11 1 \times 2^3 + 0 \times 2^2 + 1 \times 2^1 + 1 \times 2^0 = 8 + 0 + 2 + 1 = 11 1×23+0×22+1×21+1×20=8+0+2+1=11
十进制转二进制:将十进制数不断除以2,记录每次的余数,直到商为0。然后将余数逆序排列得到二进制数。
例如,十进制13
转换为二进制:
所以,13的二进制为1101
。
二进制转十六进制:将二进制数每四位一组(从右向左)转换成对应的十六进制数。如果最左边的组不足四位,则在前面补零。
例如,二进制11010111
转换为十六进制:
1101
和0111
1101
对应十六进制的D
,0111
对应十六进制的7
所以,二进制的11010111
等于十六进制的D7
。
十六进制转二进制:将每个十六进制位转换成对应的四位二进制数。
例如,十六进制1A3
转换为二进制:
1
对应二进制的0001
A
(即十进制的10)对应二进制的1010
3
对应二进制的0011
所以,十六进制的1A3
等于二进制的000110100011
。
#define
预处理器指令和const
关键字。这两种方式各有特点和用#define
是一种预处理器指令,用于在编译之前替换文本。它不分配存储空间,仅仅在预处理阶段将所有的标识符替换为定义的值。其语法如下:`#define identifier value
identifier
是要定义的常量名,value
是与之关联的值。例如:#define PI 3.14159
这行代码定义了一个常量PI
,其值为3.14159。在程序中,每次使用PI
时,预处理器都会将其替换为3.14159。
使用#define
定义的常量具有全局作用域,且没有类型,它们仅仅是文本替换,因此不能保证类型安全。
const
关键字用于定义常量变量,即值不能被修改的变量。与#define
不同,使用const
定义的常量具有类型,编译器可以进行类型检查,从而提高程序的安全性。其语法如下:const type identifier = value;
type
是常量的数据类型,identifier
是常量的名称,value
是常量的值。例如:const double Pi = 3.14159;
这行代码定义了一个类型为double
的常量Pi
,其值为3.14159。使用const
定义的常量遵循正常的作用域规则,这意味着它们可以是局部的或全局的,依赖于它们定义的位置。
作用域指的是程序中定义的变量和函数可被访问的区域。根据变量或函数定义的位置,作用域决定了哪些部分的程序可以使用这些变量或函数,以及如何使用它们。作用域有助于限制变量生命周期和可见性,从而提高程序的可读性、可维护性和避免命名冲突。
局部作用域(Local Scope): 局部作用域通常指的是在函数或代码块(如if
语句、循环等)内部定义的变量。这些变量只能在它们被定义的那个函数或代码块中被访问和修改,对外部是不可见的。
全局作用域(Global Scope): 在所有函数之外定义的变量拥有全局作用域,这意味着它们可以在程序的任何地方被访问和修改。全局变量的生命周期从它们被定义开始,直到程序结束。
#include
using namespace std;
// 使用#define定义常量
#define MAX_SIZE 100
int main() {
// 使用const定义常量
const float PI = 3.14159f;
cout << "The maximum size is: " << MAX_SIZE << endl;
cout << "The value of Pi is: " << PI << endl;
system("pause");
return 0;
}
注意:常量一旦被定义以后便不可以修改,否则报错
const float PI = 3.14159f;
PI = 1;
关键字 | 描述 |
---|---|
int |
定义整数类型 |
float |
定义单精度浮点数类型 |
double |
定义双精度浮点数类型 |
char |
定义字符类型 |
void |
表示无返回值或空类型 |
bool |
定义布尔类型 |
关键字 | 描述 |
---|---|
if |
条件语句,用于执行条件为真的代码块 |
else |
在if 语句条件为假时执行的代码块 |
switch |
多分支选择语句 |
case |
在switch 语句中标识不同的分支 |
default |
switch 语句中的默认分支 |
while |
循环语句,当条件为真时执行代码块 |
do |
循环语句,先执行一次代码块,然后检查条件 |
for |
循环语句,用于迭代指定次数的代码块 |
break |
中断当前循环或switch 语句 |
continue |
终止当前循环的迭代并开始下一次迭代 |
return |
从函数中返回值 |
关键字 | 描述 |
---|---|
struct |
定义结构体,可以包含不同类型的成员 |
class |
定义类,用于面向对象编程 |
enum |
定义枚举类型 |
union |
定义联合体,所有成员共享相同的内存空间 |
typedef |
为数据类型定义新的名称 |
auto |
自动推断变量类型 |
decltype |
返回表达式的类型 |
关键字 | 描述 |
---|---|
static |
使局部变量在多次函数调用之间保持其值 |
extern |
声明变量或函数是在其他文件或模块中定义的 |
const |
定义只读变量,值不能被修改 |
volatile |
声明变量可能在程序的执行中被意外修改 |
register |
提示编译器将变量存储在寄存器中 |
mutable |
在类中声明的成员可以被const 成员函数修改 |
关键字 | 描述 |
---|---|
const |
声明常量,值不能被修改 |
volatile |
声明变量可能在程序的执行中被意外修改 |
mutable |
在类中声明的成员可以被const 成员函数修改 |
关键字 | 描述 |
---|---|
static_cast |
执行静态类型转换 |
dynamic_cast |
执行动态类型转换,用于运行时检查 |
const_cast |
从常量类型转换掉const 或volatile |
reinterpret_cast |
执行底层类型的转换 |
#include
using namespace std;
int main() {
// 不要用关键字给变量起名
int double a = 10;
system("pause");
return 0;
}
在C++中,标识符是用来标识变量、函数、类、对象等程序实体的名称。标识符的命名规则是一套约定俗成的规定,以确保程序的可读性、可维护性和一致性。以下是C++中标识符的命名规则:
保留字:
int
、class
、if
等用作标识符。字符集规则:
大小写敏感:
myVariable
和MyVariable
被视为两个不同的标识符。规范命名风格:
myVariableName
, calculateTotalAmount()
my_variable_name
, calculate_total_amount()
保留字:
// 不要使用关键字作为标识符
int int = 10; // 错误,使用了关键字 int
double class = 3.14; // 错误,使用了关键字 class
字符集规则:
// 合法的标识符
int myVariable;
float my_float_variable;
char _firstChar;
// 非法的标识符
int 123number; // 错误,数字不能作为首字符
double total@mount; // 错误,含有特殊字符 @
大小写敏感:
// 大小写敏感
int myVariable;
int MyVariable; // 这两个是不同的变量
规范命名风格:
驼峰命名法:
int numberOfStudents;
float averageGrade;
void calculateTotalAmount();
下划线命名法:
int number_of_students;
float average_grade;
void calculate_total_amount();