目录
前言
鉴于最近身边有的b在复健,有的b为了学数据结构在自学c++,(因某些特殊的原因删去这句话)而有的b被icpc网络赛气到头疼,就顺势写一个简单的教程,不对,我这应该是c+stl教程哈哈哈哈哈哈
此教程旨在快速上手,我也觉得某些专业的c++考试挺离谱,搁着抠字眼呢,并且有时候用着远古ide然后运行不了,我学个c++还得给你考古是吧
声明:我没学过类,或许等我学了我也可以更新上来
声明2:本教程部分借鉴谭浩强的c++程序设计(第三版),问就是手头没别的书了,勉强用用
声明3:考完数据结构的我表示我与链表不共戴天(谁打算法用链表啊)
软件
c++的ide还是蛮多的,但是我都没用过嗯,只用过devc++,vsc下载了愣是不会配置,太菜了我。
主要是算法竞赛基本可以说是只允许用devc++,vsc有自动提醒能作弊()
反正学基本语句devc++也能运行
就这样吧
那就开始教学
基本组成
先来个简单代码,提醒一下,代码是全英的,包括符号,在无数次有人找我问哪里出错后,本人已经学会了在别人问我为啥运行不了的时候先看一眼分号。
#include<iostream>
using namespace std
int main()
{
cout<<"hello world";
return 0;
}
在分析前请将这串代码复制到你的ide中并运行,看看会发生什么
从上到下分析这串代码
#include<iostream> 预处理名为iostream的头文件
在c++中有很多的头文件,每个头文件都有不同的功能
只有预处理完才能在主代码中使用这些功能
iostream的意思是输入输出流
鉴于程序的交互性,输入和输出对于一串代码而言非常的重要,因此iostream属于最基础的库了
using namespace std 使用一个名为std的命名空间
namespace是指标识符的各种可见范围。命名空间用关键字namespace 来定义。命名空间是C++的一种机制,用来把单个标识符下的大量有逻辑联系的程序实体组合到一起。此标识符作为此组群的名字。
我看不懂但我大受震撼
int main() 告诉程序:看这,从这开始运行
每个c++程序都要有个main()函数
函数的主体则用大括号{}括起来
c++用大括号{}来表示同一层的代码,相当于框起来收保护费
需要运行的代码要写在大括号里面
cout<<"hello world";
cout是输出
对应的cin是输入
"hello world" 两个引号范围内的是字符串(一串的字符),就算引号里面是"123"也是当成字符不当数字的
后面会再次介绍
重点来了
c++每个语句是按照 ; 分开的,一个分号是一个语句
return 0;
结束标志,u1s1我都懒得写哈哈哈哈哈哈。
来个大的
#include<iostream>
using namespace std;
int main()
{
int a,b,sum;
cin>>a>>b;
sum=a+b;
cout<<sum<<endl;
return 0;
}
运行之后你会看到一个黑框框,输入俩数字
无奖竞猜,这玩意是干啥用的
好吧就是有限制的数字相加
int a,b,sum; 定义一个叫a,一个叫b,一个叫sum的整形变量,看不懂不着急
cin>>a>>b;输入a,b的值
sum=a+b;c++中的=代表着赋值,即后面的值给前面,而==表示判断
cout<<sum<<endl;表示输出sum的值,之后输出endl,endl在c++中表示换行
小总结:此篇只是为了让大家认识下c++的代码长啥样,如果不是很好奇为啥能运行的直接拿着下面的模板给里面填代码就行了
也可以拿着上面的代码自行实践
#include<iostream>
using namespace std
int main()
{
return 0;
}
基础知识
常量与变量
c++的数据分为常量和变量,而了解这些数据的背后是数据类型
基础的数据类型大致分为整型,字符型,浮点型,布尔型(bool)
整型,表示整数的数据类型,按照数据范围分为整型int(-2^31~2^31),短整型short int(-2^15~2^15),long long(-2^64~2^64)等,按照符号还有无符号整型等。
字符型,顾名思义就是表示字符的数据类型。众所周知,计算机是由0和1组成,因此字符存进计算机需要转化为数字,这时候ascll码派上了用场(ASCII_百度百科 (baidu.com))。又众所周知,c++是英文编译语言,能被存入的字符只有英文字符+特殊字符+数字,值得一提的是,一个字符型的变量或常量只能存一个字符,‘ab’是不合法的,更值得一提的是字符1的ascll码为49,所以1和1是不一样的(),如‘1’-1=48也就是字符0。如果存入很多的字符可以用字符串。
浮点型:表示实数的数据类型,顾名思义,浮点型就是用小数点的浮动来表达实数的数据结构,根据位数的差别分为flout和double
布尔型:表示是否的数据类型,只有true和false两种结果
每个数据类型都有常量和变量,常量在定义了之后不能改变,代码如下
const int a=100;
const char b='z';
const float c=1.01;
const bool d=true;
以此类推
而变量就是在程序运行过程中会变的数据
定义变量的形式是
数据类型 变量名,……,变量名;
int a;
a=100;
a=200;
char b;
b='z';
b='f';
float c;
c=1.01;
c=10.2
bool d;
d=true;
d=false;
注意,变量名只能由字母(A和a不同,以此类推),数字,下划线组成,并且以字母和下划线开始
数组
存储一个固定大小的相同类型元素的顺序集合
int a[100];
支持多种数据结构,需要提前确定好有多少个,比如此处是100个
调用的时候a[1],a[2]就行
注意第一个应该是a[0],此处最后一个是a[99]
运算符
+ - * /(如果整数相除四舍五入) %(取余) ++(+1) --(-1)
> < >= <= == !=(判断)
&&(与) ||(或) !(非)
=(赋值)
等等
输入输出
最简单的输入输出就是cin和cout
使用方法:cin>>变量名>>变量名;
变量名之间用空格或者回车分开。
cout<<变量名<<"ahhhhhh"<<endl;
cout遇到"xxx"会直接输出xxx
endl指换行
printf("规定符",变量名)
变量名之间用空格或者回车分开。
scanf("规定符",&变量名)
字符串的输入还有一些其他方法,大家可以自行研究
判断语句
if(条件)
{
执行语句;
}
else
{
执行语句;
}
> < >= <= == != && || ! 结合可以构成条件
if(a>b&&c<d)
{
cout<<"yes";
}
else
{
cout<<"no";
}
选择语句
switch(expression)
{
case constant-expression :
statement(s);
break; // 可选的
case constant-expression :
statement(s);
break; // 可选的
// 您可以有任意数量的 case 语句
default : // 可选的
statement(s);
}
switch 语句必须遵循下面的规则:
- switch 语句中的 expression 必须是一个整型或枚举类型,或者是一个 class 类型,其中 class 有一个单一的转换函数将其转换为整型或枚举类型。
- 在一个 switch 中可以有任意数量的 case 语句。每个 case 后跟一个要比较的值和一个冒号。
- case 的 constant-expression 必须与 switch 中的变量具有相同的数据类型,且必须是一个常量或字面量。
- 当被测试的变量等于 case 中的常量时,case 后跟的语句将被执行,直到遇到 break 语句为止。
- 当遇到 break 语句时,switch 终止,控制流将跳转到 switch 语句后的下一行。
- 不是每一个 case 都需要包含 break。如果 case 语句不包含 break,控制流将会 继续 后续的 case,直到遇到 break 为止。
- 一个 switch 语句可以有一个可选的 default case,出现在 switch 的结尾。default case 可用于在上面所有 case 都不为真时执行一个任务。default case 中的 break 语句不是必需的。
switch(grade)
{
case 'A' :
cout << "很棒!" << endl;
break;
case 'B' :
case 'C' :
cout << "做得好" << endl;
break;
case 'D' :
cout << "您通过了" << endl;
break;
case 'F' :
cout << "最好再试一下" << endl;
break;
default :
cout << "无效的成绩" << endl;
}
循环语句
for(条件1;条件2;条件3)
下面是 for 循环的控制流:
- 条件1会首先被执行,且只会执行一次。这一步允许您声明并初始化任何循环控制变量。您也可以不在这里写任何语句,只要有一个分号出现即可。
- 接下来,会判断 条件2。如果为真,则执行循环主体。如果为假,则不执行循环主体,且控制流会跳转到紧接着 for 循环的下一条语句。
- 在执行完 for 循环主体后,控制流会跳回上面的条件3语句。该语句允许您更新循环控制变量。该语句可以留空,只要在条件后有一个分号出现即可。
- 条件再次被判断。如果为真,则执行循环,这个过程会不断重复(循环主体,然后增加步值,再然后重新判断条件)。在条件变为假时,for 循环终止for(int i=1;i<=n;i++) { sum+=i; } cout<<sum;
for(int i=1;i<=n;i++)
{
sum+=i;
}
cout<<sum;
while(条件) { 执行; }
先判断条件真假,真的话执行,假的话跳出
do { 执行; }while(条件);
先执行一次,后判断
在循环过程中可以用 break;来跳出循环
也可以用continue;来跳过当前循环进入下一循环
函数
通常写在int main前 命名空间后
int XD(int a,int b)
{
if(a>b) return a;
return b;
}
很明显这是一个返回较大值的函数
int 函数名 表示这个函数是要返回一些值的
void 函数名 表示这个函数不用返回值
调用的时候直接 da=xd(a,b);就行
指针
每个变量都有个地址,指针就是指向这个地址的变量
&可以返回变量的地址
int a;
cout<<"a的地址在"<<&a<<"\n";
int k[10];
cout<<"k的第一个元素的地址在"<<&k
在声明变量的时候通常使用*
int *p;
cout<<"p的地址"<<p;
cout<<"p的值"<<*p;
注意的是指针的修改是直接修改地址,最后调用的时候应该直接看该地址的值,有后滞性
声明变量的时候一般都会进行初始化,指针的初始化是Null
通过if来判断指针是否为Null
if(ptr) /* 如果 ptr 非空,则完成 */
if(!ptr) /* 如果 ptr 为空,则完成 */
变量的运算通常发生在数组中,+n表示指向下n位。如在一个int型的数组中,因为每个整数的占4个字节,因此++数值上+4。