https://pan.baidu.com/s/1iCvsx3EGtXrZUgYQk2TPbg?pwd=zffp
一、程序框架
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
cout<<"Hello world!"<<endl;
return 0;
}
1.头文件
include
是英文单词“包含”的意思,<iostream>
是一个用于输入输出流(input and output stream)的库,里面包含一系列可以用于输入、输出的方法。当我们写下这样一条语句就意味着我们可以使用 iostream
中提供的 std::cin
、std::cout
、std::endl
等对象了。
C++ 为了和 C 保持兼容,可以直接使用部分 C 语言中的头文件,例如 cstdio
就是 C 语言中的 stdio.h
。cstdio
允许我们使用 C 语言的标准输入输出scanf
和 printf
等等。
2.命名空间
using
是英文单词“使用”的意思,namespace std
表示我们要用到一个命名空间 std
,表示标准输入输出流。这样我们将 std::cin
替换为 cin
简化代码。
3.main()
可以理解为程序运行时就会执行 main()
中的代码,这是整个程序的入口。
最后的 return 0;
表示程序运行成功。默认情况下,程序结束时返回
0
0
0 表示一切正常,否则返回值表示错误代码如果不写 return
语句的话,程序正常结束默认返回值也是
0
0
0。在 C 或 C++ 中,程序的返回值不为
0
0
0 会导致运行时错误(Runtime Error,简写为 RE)。
二、变量
1.概念
变量可以被看做一个盒子,每个盒子中可以存储一定的值。除了里面存储的值以外,还有三个重要的属性:
- 一个是变量类型,它规定了每个盒子的字节数和存储什么样的内容。
- 一个是变量名,它规定了我们可以如何称呼这个盒子,变量名必须以字母或者
_
开头。 - 一个是作用域,它规定了变量发挥作用的代码块(用一对大括号包裹的若干语句称为一个代码块)。
- 定义在花括号包裹的地方的变量是局部变量,定义时没有初始化值的全局变量会被初始化为 0 0 0。作用域自定义之处起,至文件结束为止。
- 定义在没有花括号包裹的地方的变量是全局变量。局部变量不会自动初始化,需要手动赋初始值,否则可能引起难以发现的 bug。作用域自定义之处起,至代码块结束为止。
定义变量的规则是:
变量类型 变量名;
int a;
double b;
2.变量类型
(1)布尔类型
一个 bool
类型的变量取值只可能为两种:true
和 false
。
一般情况下,一个 bool
类型变量占有
1
1
1 字节(一般情况下
1
1
1 字节 =
8
8
8 位)的空间。
(2)整型变量
整型变量用来存储整数,最基础最常用的数据类型是 int
。对于 int
关键字,可以使用如下修饰关键字进行修饰:
符号性,用来表示正负号:
signed
:表示带符号整数(默认);unsigned
:表示无符号整数。
大小,用来规定字节长度:
short
:表示至少 16 16 16 位整数;long
:表示至少 32 32 32 位整数;long long
:表示至少 64 64 64 位整数。
(3)浮点类型
用于存储实数,包括以下三种:
float
:单精度浮点类型,最大值 3.4 × 1 0 38 3.4\times10^{38} 3.4×1038,精度 6 ∼ 9 6\sim9 6∼9 位。double
:双精度浮点类型,最大值 1.8 × 1 0 308 1.8\times10^{308} 1.8×10308,精度 15 ∼ 17 15\sim17 15∼17 位。long double
:扩展精度浮点类型,最大值 1.2 × 1 0 4932 1.2\times10^{4932} 1.2×104932,精度 33 ∼ 36 33\sim36 33∼36 位。
(4)字符类型
char
类型一般为
8
8
8 位,底层存储的方式依然是整数,一般通过 ASCII 码值表实现字符与数字的一一对应。
3.位宽与表示范围
下表给出在一般情况下,各个整数类型的名称、位宽和表示范围大小:
类型名 | 位宽 | 表示范围 |
---|---|---|
bool | 8 8 8 | true 、false |
short | 16 16 16 | − 2 15 ∼ 2 15 − 1 -2^{15}\sim2^{15}-1 −215∼215−1 |
unsigned short | 16 16 16 | 0 ∼ 2 16 − 1 0\sim2^{16}-1 0∼216−1 |
int 、long | 32 32 32 | − 2 31 ∼ 2 31 − 1 -2^{31}\sim2^{31}-1 −231∼231−1 |
unsigned int 、unsigned long | 32 32 32 | 0 ∼ 2 32 − 1 0\sim2^{32}-1 0∼232−1 |
long long | 64 64 64 | − 2 63 ∼ 2 63 − 1 -2^{63}\sim2^{63}-1 −263∼263−1 |
unsigned long long | 64 64 64 | 0 ∼ 2 64 − 1 0\sim2^{64}-1 0∼264−1 |
float | 32 32 32 | |
double | 64 64 64 | |
long double | 128 128 128 | |
char | 4 4 4 | 0 ∼ 127 0\sim127 0∼127 |
void | 0 0 0 |
4.赋值
=
在 CPP 语言中被我们称作赋值运算符,可以用 =
将右侧的一个值赋值给左侧的一个变量,让变量这个盒子存储这一个值。
变量名=值;
int a=1;
double b;
b=1.0;
5.常量
常量是固定值,在程序执行期间不会改变。常量的值在定义后不能被修改。定义时加一个 const
关键字即可。
const int a=3;
如果修改了常量的值,在编译环节就会报错。
三、输入输出
1.cin
与 cout
无论什么类型的变量都可以通过 cin
和 cout
来直接输入输出,当然输入要符合对应变量的规则。cin
会自动忽略变量之间的空格和回车。
输入输出多个变量的时候,需要用 >>
符号来连接。endl
用来表示回车。
int a,b;
double c;
cin>>a>>b>>c;
cout<<a<<" "<<b<<" "<<c<<endl;
2.scanf
和 printf
scanf
与 printf
其实是 C 语言提供的函数。大多数情况下,它们的速度比 cin
和 cout
更快,并且能够方便地控制输入输出格式。与之对应的,使用起来会更加复杂一些。它们的格式如下:
int a;
scanf("请读入一个整数:%d",&a);
printf("%d\n",a);
double b;
long long c;
scanf("%lf %lld",&b,&c);
print("这个浮点数是:%lf\n这个长整型数是:%lld\n",b,c);
char str[10];
scanf("%s",str);
printf("这个字符串是:%s\n",str);
- 在读入的时候需要在变量名前面添加取地址符
&
,字符串除外;而输出的时候不需要,只需要写出变量名即可。 - 引号中的内容是下面的符号,除了以
%
和\
开头的特殊符号以外,引号内的内容会原样输出。\
是转义字符,如果想打出反斜杠则需要写成\\
。 scanf
读入字符的时候不会自动忽略空格和回车;但是在读入别的数据类型的时候会自动忽略空格和回车。
符号 | 类型 |
---|---|
%s | char [] 类型 |
%c | char 类型 |
%lf | double 类型 |
%d | int 类型 |
%lld | long long 类型 |
除了类型标识符以外,还有一些控制格式的方式。许多都不常用,选取几个常用的列举如下:
%1d
表示长度为 1 1 1 的整型。在读入时,即使没有空格也可以逐位读入数字。在输出时,若指定的长度大于数字的位数,就会在数字前用空格填充。若指定的长度小于数字的位数,就没有效果。%.6lf
,用于输出,保留六位小数。\n
,用于换行一次。\t
,用于打印一个制表符。
四、报错信息
-
AC(Accepted):表示已通过测试点并获得了分数。但需要注意,你的程序只是通过了命题人给出的所有数据,依然有存在潜在错误的可能性。
-
CE(Compile Error):编译错误。可能是自身写法问题,也可能是与测试机环境不同产生的版本问题。
-
PE(Presentation Error):输出格式错误。你的程序输出了与 AC 相同的答案,但格式存在一定的问题(大小写,空格数量,换行数量之类的)。
-
WA(Wrong Answer):答案错误。你的程序输出了与 AC 不相同的答案。
-
TLE(Time Limit Exceed):超出运行时间限制。
-
MLE(Memory Limit Exceed):超出运行内存限制。
-
RE(Runtime Error ):运行时错误。错误可能包括递归爆栈、死循环和数组访问越界等等