C++入门指北
这篇文档将为您从入门到熟练学习C++
准备工作
C++是一个编译型语言,需要编译器才能运行。
这里我们使用Jetbains CLion,这是最常用的C++编译器。
首先下载Clion安装包,附件里有。打开安装包,选择安装位置,然后点击下一步,把添加到PATH环境变量打开,其他默认,选择安装。
安装完成后,打开Clion,会有一个欢迎界面,点击开始使用,会有一个注册向导,选择免费就行(如果你需要用到code with me,请转移到本网站的项目页下载JetBrains Crack破解)
注册完成后,新建一个项目,语法选择C++20,点击创建
这样我们就可以开始编写C++程序了
后续工作(可选):
由于Clion附带的MinGW版本比较老,我们需要安装一个新版本的MinGW编译器。
首先,下载msys2并安装,附件里有下载链接
打开msys2的MinGW64终端,先输入pacman -Syu更新一下包
更新完成后,再输入pacman -S mingw-w64-x86_64-gcc mingw-w64-x86_64-gdb安装最新版GCC和GDB
安装完成后,打开Clion设置,选择构建、执行、部署,选择工具链,路径选择你安装msys2里的MinGW64路径
这样,我们就可以使用新的GCC和GDB了
附件:
基础语法介绍
1.数据类型:int,float,double,char,bool,string,long long
首先是整数类型,整数类型有int和long long。
int的字节大小为4字节,long long的字节大小为8字节。
所以,int可以存的值范围是-2^31到2^31-1。long long可以存-2^63到2^63-1。
long long存的数字比int大,所以long long可以存更多的数。
float和double都是浮点数类型,double的字节大小为8字节,float的字节大小为4字节。
double可以存更多的数,但是float只能存小数。
char是字符类型,字节大小为1字节。定义要用单引号
如:
char a='a';
bool是布尔类型,字节大小为1字节。用于判断是否,0为否,1为是,或者true和false。
例如:bool n=true;
或者bool n=1
string是字符串类型,字节大小为字符串的长度。
它可以存储任意长度的字符串,但是不能存储emoji,还可以存储中文。
例如:string s="hello"; string s="你好"
2.标识符
标识符是C++中的变量名,函数名,类名等等。
标识符必须以字母开头,后面可以有数字,下划线,不能有特殊字符。
例如:int a;
标识符的大小写敏感,所以a和A是两个不同的变量。
3.运算符
运算符是C++中的符号,用于计算。
运算符有:++ -- + - * / % < > <= >= == != && || & | ^ !
我来解释一下:
++:自增运算符,将变量加1。
--:自减运算符,将变量减1。
+:加法运算符,将两个数相加。
-:减法运算符,将两个数相减。
*:乘法运算符,将两个数相乘。
/:除法运算符,将两个数相除。
%:取余运算符,将两个数相除,并返回余数。
<:小于运算符,判断两个数是否小于。
>:大于运算符,判断两个数是否大于。
<=:小于等于运算符,判断两个数是否小于等于。
>=:大于等于运算符,判断两个数是否大于等于。
==:等于运算符,判断两个数是否相等。
!=:不等于运算符,判断两个数是否不相等。
&&:逻辑与运算符,判断两个条件是否都为真。
||:逻辑或运算符,判断两个条件是否至少有一个为真。
&:按位与运算符,判断两个数位是否都为1。
|:按位或运算符,判断两个数位是否至少有一个为1。
^:按位异或运算符,判断两个数位是否相同。
!:逻辑非运算符,将一个条件取反。
4.二进制换算
二进制换算,将十进制数转换为二进制数。
将十进制数除以2,记录余数;
用商继续除以2,再次记录余数;
重复上述步骤,直到商为0;
将所有余数倒序排列,即为对应的二进制数。
5.循环
C++中的循环有for,while,do while。
先只讲for,while循环,do while循环以后再说
for循环:
for循环的格式为:for(初始化;条件;更新)
简单点讲,初始化就是循环开始前的初始值,可以是你自己定义的,也可以是已经定义的变量。
条件就是循环结束的条件,如果条件为真,则循环继续,否则循环结束。
更新就是你前面初始化的变量,每次循环结束后,都会更新这个变量。可以用++、--、+=、-=、*=、/=来更新变量。
来看个例子:
for(int i=0;i<10;i++)
这个for循环,初始化i为0,条件为i<10,更新i为i+1。
while循环:
while循环的格式为:while(条件)
while循环和for循环一样,也是循环,但是while循环不需要初始化,也不需要更新。(PS:如果需要更新的话你可以直接定义一个变量在while循环里面来更新)
来看个例子:
int i=0;
while(i<10){
i++;
}
这个while循环,条件为i<10,每次循环结束后,都会更新i为i+1。
6.判断
C++中的判断有if,else,switch。
if判断:
if判断的格式为:if(条件)
if判断只有条件,如果条件为真,则执行if后面的代码,否则不执行。
来看个例子:
if(i<10){
cout<<"i小于10"<< endl ;
}
这个if判断,条件为i<10,如果i小于10,则输出"i小于10"。
else判断:
else判断的格式为:if(条件){} else{}
else判断和if判断一样,但是else判断只有else,如果if判断条件为假,则执行else后面的代码,否则不执行。
来看个例子:
if(i<10){
cout<<"i小于10"<< endl;
} else{
cout<<"i大于等于10"<< endl;
}
这个else判断,条件为i<10,如果i小于10,则输出"i小于10",否则输出"i大于等于10"。
switch判断:
switch判断的格式为:switch(表达式)
switch判断和if判断一样,但是switch判断有多个case,case表示一个条件,如果case满足,则执行case后面的代码,否则继续执行下一个case。
来看个例子:
switch(i){
case 1:
cout<<"i等于1"<< endl;
break;
case 2:
cout<<"i等于2"<< endl;
break;
default:
cout<<"
}
这个switch判断,表达式为i,case为1和2,如果i等于1,则输出"i等于1",如果i等于2,则输出"i等于2",否则输出"i不等于1和2"。
数组
C++中的数组有int[]、char[]、float[]、double[]、string[]。<
数组的格式为:数据类型 数组名[数组大小]
来看个例子:
int a[10];
char b[10];
float c[10];
double d[10];
string e[10];
这个例子,定义了10个int、char、float、double、string类型的数组。
数组的访问:
数组的访问格式为:数组名[索引]
还有vector数组,vector数组的格式为:vector<数据类型> 数组名;
来看个例子:
vector<int> a;
vector<char> b;
vector<float> c;
vector<double> d;
vector<string> e;
这个例子,定义了10个int、char、float、double、string类型的vector数组。
vector数组的访问:
vector数组的访问格式为:数组名[索引]
以上就是C++的运算符、数据类型、变量、常量、运算符、二进制换算、循环、判断、数组。
简单程序
现在,我们了解了C++的基础知识,我们可以开始编写简单的程序了。
你好世界
你好世界是一个简单的程序,它是所有编程的第一个程序,它的功能是输出"Hello World!"。
创建一个名为hello.cpp的文件。
来了解一下c++程序的结构:
头文件
引用命名空间
其他函数(可选)
主函数
头文件的格式为:#include <头文件名>
引用命名空间的格式为:using namespace <命名空间名>
主函数的格式为:int main(){}
(PS:补充一下,cin是输入函数,cout是输出函数)
知道这些,我们开始编写程序。
#include <iostream>
using namespace std;
int main(){
cout<<"Hello World!"<< endl;
return 0;
}
(PS:iostream是c++标准库,用于输入输出。std是c++标准库的命名空间。输出标识符直接输入标识符名,其他需要加双引号)
这个程序,输出"Hello World!"。
变量测试
整数的和
题目描述:求3个整数的和
输入a、b、c这3个整数,求它们的和。
交换值
【题目描述】
输入两个正整数a和b,试交换a、b的值(使a的值等于b,b的值等于a)。
【输入】
输入两个正整数a和b。
【输出】
输出a与b交换值后的结果。
买图书
【题目描述】
已知小明有n元,他买了一本书,这本书原价为m元,现在打8折出售。求小明还剩多少钱(保留2位小数)。
【输入】
输入n,m。
【输出】
小明还剩多少钱(保留2位小数)。
【输入样例】
100 100
【输出样例】
20.00
计算(a+b)×c的值
【题目描述】
给定3个整数a、b、c,计算表达式(a+b)×c的值。
【输入】
输入仅一行,包括三个整数a、b、c, 数与数之间以一个空格分开。(-10,000<a,b,c<10,000)
【输出】
输出一行,即表达式的值。
【输入样例】
2 3 5
【输出样例】
25
计算(a+b)/c的值
【题目描述】
给定3个整数a、b、c,计算表达式a+bc的值。
【输入】
输入仅一行,包括三个整数a、b、c, 数与数之间以一个空格分开。(-10,000<a,b,c<10,000, c不等于0)
【输出】
输出一行,即表达式的值。
【输入样例】
1 1 3
【输出样例】
0
函数
函数, 函数是C++的基础,函数的格式为:
返回值类型 函数名(参数列表){
函数体
return 返回值;
}
函数的参数列表为函数的参数,参数列表为空时,参数列表为()。
函数的返回值类型为函数的返回值类型,返回值类型为void时,返回值类型为()。
返回值类型可以为int、char、float、double、string、bool、void等。
我们可以在函数中定义变量,变量的作用域为函数内。这是局部变量
函数的调用格式为:函数名(参数列表)
了解了这些后,我们就可以开始编写函数了。
简单a+b示例:
#include <iostream>
using namespace std;
int add(int a, int b){
return a+b;
}
int main(){
int a, b;
cin>>a>>b;
cout<< add(a, b)<< endl;
return 0;
}
结构体
结构体, 结构体是C++的基础,结构体的格式为:
struct 结构体名{
成员变量1;
成员变量2;
...
}
结构体的成员变量为结构体的成员变量,成员变量为变量。
我们可以在结构体中定义变量,变量的作用域为结构体内。这是局部变量
结构体的调用格式为:结构体名.成员变量名
了解了这些后,我们就可以开始编写结构体了。
简单结构体示例:
#include <iostream>
using namespace std;
struct Person{
string name;
int age;
double height;
}
int main(){
Person person;
cin>>person.name>>person.age>>person.height;
cout<< person.name<< " "<< person.age<< " "<< person.height<< endl;
}
结构体也可以嵌套结构体。
嵌套结构体示例:
#include <iostream>
using namespace std;
struct Person{
string name;
int age;
double height;
}
struct Student{
Person person;
int grade;
}
int main(){
Student student;
cin>>student.person.name>>student.person.age>>student.person.height>>student.grade;
cout<< student.person.name<< " "<< student.person.age<< " "<< student.person.height<< " "<< student.grade<< endl;
}
结构体也可以定义数组。
结构体数组的调用格式为:结构体名[数组索引]
了解了这些后,我们就可以开始编写结构体数组了。
简单结构体数组示例:
#include <iostream>
using namespace std;
struct Person{
string name;
int age;
double height;
}
int main(){
Person person[10];
for(int i=0; i<10; i++){
cin>>person[i].name>>person[i].age>>person[i].height;
}
for(int i=0; i<10; i++){
cout<< person[i].name<< " "<< person[i].age<< " "<< person[i].height<< endl;
}
}
结构体也可以定义指针。
结构体指针的调用格式为:结构体名*指针名
了解了这些后,我们就可以开始编写结构体指针了。
简单结构体指针示例:
#include <iostream>
using namespace std;
struct Person{
string name;
int age;
double height;
}
int main(){
Person *person;
person = new Person;
cin>>person->name>>person->age>>person->height;
cout<< person->name<< " "<< person->age<< " "<< person->height<< endl;
delete person;
}