预备知识
首先先来了解一下最简单的C++代码。
本文的所有代码操作均在AcWing的AC Editor中
#include <iostream>
using namespace std;
int main(){
cout << "Hello World" << endl;
return 0;
}
然后使用编译(点击调试,再点击运行代码,最后点击运行按钮)
代码主要分成几个部分
- 头文件区(#include<**********>)例如:
#include<cstdio>
#include<iostream>
- 声明一个命名空间
using namespace std;
命名空间是为了解决大型项目中变量名冲突的问题,不同命名空间内的变量名可以相同。
- 程序的执行入口
int main(){
return 0;
}
以上的三部分是C++通用的基本结构,必须具备的结构
语法基础知识
1. 变量的定义
变量类似于数学中方程的未知数。
在定义变量的时候,要赋予变量类型。
C++中,变量有以下几种类型:
同时还要考虑字节的问题:
bit(位,又名“比特”):bit的缩写是b,是计算机中的最小数据单位(属于二进制的范畴,其实就是0或者1)
Byte(字节):Byte的缩写是B,是计算机文件大小的基本计算单位。比如一个字符就是1Byte,如果是汉字,则是2 Byte。
在计算机存储中,B 和 b 是具有不同含义的。
B:Byte(字节)
b:bit(比特)
1 Byte = 8 bit(一字节就是八位)
1 KB(Kilobyte) = 1024 B
1 MB (Megabyte)= 1024 KB
1 GB (Gigabyte)= 1024 MB
1TB (Terabyte)= 1024GB
不同变量所占的内存大小是不一样的,根据不同的变量类型,会占用不同的内存空间。
分为整型、浮点型、字符型、字符串型、布尔型和转义字符
整型(整型变量表示整数类型的数据。)
数据类型 | 占用空间 | 取值范围 |
---|---|---|
short(短整型) | 2字节 | (-2^15 ~ 2^15) |
int(整形) | 4字节 | (-2^31 ~ 2^31) |
long(长整型) | 4字节(Windows系统) | (-2^31 ~ 2^31) |
long long | 8字节 | (-2^63~ 2^63) |
浮点型(浮点型变量表示小数类型的数据)
数据类型 | 占用空间 |
---|---|
float | 4字节 |
double | 8字节 |
C++输出多位小数时默认会显示6位有效数字。
.2f表示输出两位小数,.5f表示输出五位小数。
字符型(字符型变量可表示单个字符)
数据类型 | 占用空间 |
---|---|
char | 1字节 |
字符型变量是将对应的ASCII编码存放至内存,而不是字符本身。
ASCII码表
字符串型
(1)C语言: char 变量名[] = “字符串值”;
(2)C++语言: string 变量名 = “字符串值”;
#include <iostream>
#include <string>
using namespace std;
int main() {
//C
char c[] = "hello c!";
cout << c << endl;
//C++
string cpp = "hello cpp!";
cout << cpp << endl;
return 0;
}
布尔类型 (布尔数据类型表示真或假的值)
数据类型 | 占用空间 |
---|---|
bool | 1字节 |
(1)true: 真(本质是1)
(2)false:假(本质是0)
注:C++的bool类型中,true 或 任意非0值 均代表真; false 或 0值 代表假。
转义字符(表示一些特殊的无法直接显示的ASCII字符)
用反斜杠开头(\n,\t,\r 等)
C语言中使用转义字符 \n 换行,C++中使用 endl 换行。
声明变量
那么如何定义变量呢?
变量定义的方式:
声明变量类型+变量名
int a;
char b='a';
float c = 1.5, s=1.235e2;
double d;
int q, w = 2;
bool i = true;
变量必须先定义,才可以使用。不能重名。
一段完整的定义变量程序如下:
#include <iostream>
using namespace std;
int main()
{
int a = 5;
int b, c = a, d = 10 / 2;
return 0;
}
2. 变量的输入输出
在程序中,输入输出是非常重要的,针对不同的变量类型,往往会有不同的输入输出方式。
下面,我们通过一些简单的程序来学习。
整数的输入输出:
#include <iostream>
using namespace std;
int main()
{
int a, b;
cin >> a >> b;
cout << a + b << endl;//endl表示回车
cout << a * b << endl;
return 0;
}
字符串的输入输出:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string str;
cin >> str;
cout << str;
return 0;
}
输入输出多个不同类型的变量:
#include <iostream>
#include <string>
using namespace std;
int main()
{
int a, b;
string str;
cin >> a;
cin >> b >> str;
cout << str << " !!! " << a + b << endl;
return 0;
}
箭头的方向可以这样理解:
键盘向cin函数传值,cin再向变量传值,故输入的箭头方向从cin指向变量,即>>
从变量向cout函数传值,cout再输出到显示器,故输出的箭头放行从变量指向cout,即<<
cin和cout会过滤空格(a______b和a_b从cin输入,结果是一样的)
%c会读取空格,需要注意。
同时,在C++语言中同样可以使用C语言中的 scanf 和 printf 。
这两个函数的使用方法如下:
scanf("%d%d",&a,&b);
printf("%d%d",a,b);
%d为类型控制符。
给两个整型变量赋值就写两个 %d,然后“输入参数”中对应写上两个 “取地址变量” ;给三个整型变量赋值就写三个 %d,然后“输入参数”中对应写上三个 “取地址变量”,要在数量上保持对应。
scanf在输入时,从键盘输入数据时,给 多个变量赋的值之间一定要用空格、回车或者 Tab 键隔开,用以区分给不同变量赋的值。而且空格、回车或 Tab 键的数量不限,只要有就行。 一般都使用一个空格。
完整的简单程序参考如下:
#include<cstdio>
#include<iostream>
using namespace std;
int main(){
int a;
int b;
scanf("%d%d",&a,&b);
printf("%d%d", a, b);
return 0;
}
3. 常见的运算表达式
加减乘除
#include <iostream>
#include <string>
using namespace std;
int main()
{
int a = 6 + 3 * 4 / 2 - 2;
cout << a << endl;
int b = a * 10 + 5 / 2;
cout << b << endl;
cout << 23 * 56 - 78 / 3 << endl;
return 0;
}
C++的取余运算中,结果的正负取决于第一个数,即:
5 % 2 = 1
5 %(-2)= 1
-5 % (-2)= -1
-5 % 2 = -1
注意,取余操作只针对整数运算。
整数的自增自减运算:
#include <iostream>
using namespace std;
int main()
{
int a = 1;
int b = a ++ ;
cout << a << ' ' << b << endl;
int c = ++ a;
cout << a << ' ' << c << endl;
return 0;
}
a++:先赋值,再自增
++a:先自增,再赋值
加号在前就先自增,加号再后,就后自增
a–和–a道理相同
变量的类型转换:
#include <iostream>
#include <string>
using namespace std;
int main()
{
float x = 123.12;
int y = (int)x;
cout << x << ' ' << y << endl;
return 0;
}