计算机基础知识
1946 年 2 月 14世界上第一台可编程的电子计算机—ENIAC。
中国第一台通用数字电子计算机于 1958年 8 月研制成功
计算机发展历程
三位奠基人
艾伦·图灵(1912年—1954年),英国数学家、逻辑学家,被称为“人工智能之父”。
冯·诺依曼(1903年—1957年),出生于匈牙利的美籍犹太人,是20世纪最著名的数学家之一,理论计算机科学和博弈论的奠基者,常被誉为“计算机之父”。
克劳德·香农(1916年—2001年),美国数学家和密码学家,是“信息论之父”。
重要奖项
图灵奖(Turing Award),全称A.M.图灵奖(ACM A.M Turing Award),是由美国计算机协会(ACM)于1966年设立的计算机奖项,名称取自艾伦·麦席森·图灵(Alan M. Turing),旨在奖励对计算机事业作出重要贡献的个人 。图灵奖对获奖条件要求极高,评奖程序极严,一般每年仅授予一名计算机科学家。图灵奖是计算机领域的国际最高奖项,被誉为“计算机界的诺贝尔奖”。
冯-诺依曼
采用程序存储控制原理思想
计算机系统构成
注:华为鸿蒙为操作系统
计算机存储单位
字节(Byte)是计算机信息中用于描述存储容量和传输容量的一种基本计量单位(不是最小的)。
bit就是位,也叫比特位,是计算机表示数据最小的单位。
通常字节是大B,位是小b。
单位名称 | 换算关系 |
---|---|
字节(Byte) | 1Byte=8bit |
千字节(KB) | 1KB=1024B |
兆字节(MB) | 1MB=1024KB |
吉字节(GB) | 1GB=1024MB |
太字节(TB) | 1TB=1024GB |
变量的定义与使用
变量的声明且赋值
全局变量和局部变量
#include <iostream>
using namespace std;
// 全局变量
int number = 100;
int main()
{
// 局部变量
int number = 1;
// 访问局部变量
cout << "number = " << number << endl;
// 访问全局变量,number前面要加上双冒号::
cout << "number = " << ::number << endl;
}
变量名的规则
【规则1】:变量名包含字母、数字、下划线,但数字不能在变量名首位,也不能使用特殊符号,例如以下变量名:
a(合法)、a123(合法)、_xyz(合法)、2b(不合法,不能以数字开头)、@xyz(不合法,不能使用特殊符号)
【规则2】:具有特殊含义的单词不能作为变量名, 否则会报错,我们把这一类统称为关键字,它们在C++中已经代表了特定的意思,不包括(cin、cout等),例如以下单词:
do, while, for, int, if, char, long, bool , double ,false , true 等等。
注:变量必须定义才能使用,没有定义变量就使用会造成编译错误
输入输出
printf()、scanf()//C
cin>> cout<<//C++
printf和scanf是C语言风格的输入输出函数,分别用于格式化输出和格式化输入。在C++中也适用
基本数据类型
double和float的区别
【重点】:如果在代码中不明确指定浮点数的类型,则默认会被视为double类型。例如:
7 是一个 int 类型的整数常量。
7.0 是一个 double 类型的浮点数常量。
7.0f 是一个 float 类型的浮点数常量
数据类型转换
#include <iostream>
using namespace std;
int main() {
// 1. 整数值赋给bool整型
bool b = 25;
cout<<"b="<<b<<endl;
// 2. bool类型赋值给整型
int s = false;
cout<<"s="<<s<<endl;
// 3. 浮点数赋给整数类型
int i = 3.14;
cout<<"i="<<i<<endl;
// 4. 整数值赋给浮点类型
float f = 10;
cout<<"f="<<f<<endl;
}
**【重点】 **
**横向向左的箭头表示必定的转换,如char,short型数据在运算时必定先自动类型转换为int类型(char,short自动类型转换为int也称为整型提升),float型数据在运算时一律先自动类型转换为double类型以提高运算精度。**
** 纵向的箭头表示当运算对象为不同类型时转换的方向,类型转换方向由低到高,如某类型数据与double型数据进行运算时,该类型数据自动类型转换为double类型,然后在两个double型数据间进行运算,结果为double型。**
注:
- 不要错误地将该图理解为int型先转换成unsigned int型,再转换成long型,再转成double型
- 在算术表达式中进行自动类型转换的时候,原数据类型并无发生变化,实际上是得到一个自动类型转换后的中间变量,表达式运算的过程是对转换后的中间变量进行运算,运算结果为转换后的数据类型
运算符
算术运算符
操作符 | 名称 |
---|---|
+ | 加号 |
- | 减号 |
* | 乘号 |
/ | 除号 |
% | 取模 |
#include <iostream>
using namespace std;
int main()
{
// 加法
int a = 20, b = 6;
cout << " a + b = " << a + b << endl;
//a+b=26
// 减法
cout << " a - b = " << a - b << endl;
//a-b=14
// 乘法
cout << " a * b = " << a * b << endl;
//a*b=120
// 除法:注意 / 只保留整数部分
cout << " a / b = " << a / b << endl;
//a/b=3
// 取模:两个数必须是整数类型
cout << " a % b = " << a % b << endl;
//a%b=
}
注:%只能和整数运算
自增自减运算符
++a; // a自增,相当于 a += 1;
--b; // b自减,相当于 b -= 1;
“前置”和“后置”区别
#include <iostream>
using namespace std;
int main() {
int x = 3;
int y = ++x;//先让x自增1,再将x更新后的结果赋值给y
cout<<"x="<<x<<endl;
cout<<"y="<<y<<endl;
int a = 3;
int b = a++;//先将a赋值给b,再让a自增1
cout<<"a="<<a<<endl;
cout<<"b="<<b<<endl;
}
//输出结果
//x=4
//y=4
//a=4
//b=3
条件运算符
“条件运算符”:由“?”和“:”两个符号组成,需要三个运算表达式,形式如下:
条件判断表达式 ? 表达式1 : 表达式2
条件运算符的含义是:计算条件判断表达式的值,如果为true就执行表达式1,返回求值结果;如果为false则跳过表达式1,执行表达式2,返回求值结果。
#include <iostream>
using namespace std;
int main() {
int i = 0;
cout << ((1 < 2 && ++i) ? "true" : "false") << endl; //结果:true
}
注:条件运算符的优先级比较低,所以输出的时候需要加上括号。事实上,条件运算符等同于流程控制中的分支语句if…else…,只用一条语句就可以实现按条件分支处理,这就让代码更加简洁。
C++运算符及其优先级顺序:
运算符说明 | C++运算符 | 优先级顺序 |
---|---|---|
小括号 | ( ) | 最高 |
逻辑非运算符、自增自减运算符 | ! ++ – | |
算术运算符(乘、除、取模) | * / % | |
算术运算符(加、减) | + - | |
关系运算符(大于、大于等于等) | > >= < <= | |
关系运算符(等于、不等于) | == != | |
逻辑与运算符 | && | |
逻辑或运算符 | ||
赋值运算符 | = += -= *= /= %= | 最低 |
2. 选择结构
选择结构用于根据条件执行不同的代码块。C++提供了以下选择结构:
- if语句:
if (条件) { // 条件为真时执行的代码 }
- if-else语句:
if (条件) { // 条件为真时执行的代码 } else { // 条件为假时执行的代码 }
- if-else if-else语句:
if (条件1) { // 条件1为真时执行的代码 } else if (条件2) { // 条件1为假且条件2为真时执行的代码 } else { // 以上条件都为假时执行的代码 }
- switch语句:
switch (表达式) { case 常量1: // 表达式等于常量1时执行的代码 break; case 常量2: // 表达式等于常量2时执行的代码 break; // ... default: // 表达式不等于任何case中的常量时执行的代码 }
3. 循环结构
循环结构用于重复执行代码块。C++提供了以下循环结构:
- while循环:
while (条件) { // 条件为真时重复执行的代码 }
- do-while循环:
do { // 至少执行一次的代码 } while (条件);
- for循环:
for (初始化; 条件; 更新) { // 条件为真时重复执行的代码 }
- 循环嵌套:
for (初始化; 条件; 更新) { for (初始化; 条件; 更新) { // 嵌套循环的代码 } }
语句跳转
1.break
当代码中遇到break时,会直接中断距离最近的循环,跳转到外部继续执行。
#include <iostream>
using namespace std;
int main() {
int i = 1;
while (true) {
cout << " 这是第" << i << "次输出" << endl;
i++;
if (i > 5) {
break;
}
}
}
2.continue
continue语句表示“继续”执行循环,也就是中断循环中的本次迭代,并开始执行下一次迭代。
//需求:输出1到10之间所有的整数,5不输出
#include <iostream>
using namespace std;
int main() {
for(int i = 1; i<=10; i++) {
if (i == 5) {
continue;
} else {
cout << "这是第" << i << "次输出" << endl;
}
}
}