程序 = 数据结构 + 算法
什么是C++?
C++ 是在C语言基础上开发的一种集面向对象编程、泛型编程和过程化编程于一体的编程语言。
不同于C语言,C++是一种面向对象的语言,在C语言的基础上,C++扩充了一些自己特有的知识,如bool类型、重载函数、模版、STL等。
第一个C++程序
#include<iostream>//输入输出头文件
//i=input 输入
//o=output 输出
//stream 流
using namespace std;//命名空间
//std=standard 标准的
int main()//主函数
{
cout<<"hello world!"<<endl;//输出,换行
return 0; //返回0
}
- 头文件
C++ 中的输入、输出头文件 iostream
i —— input 输入
o —— output 输出
strem —— 流
C语言中的头文件以.h后缀,C++中头文件不加后缀。C语言中的string.h,C++用cstring,C语言中math头文件,C++使用cmath头文件。这不只是形式上的改变,其实现也有所不同。
- 命名空间
C++ 标准库中所有标识符并定义于一个名为std的命名空间中,std称为标准命名空间(standard,标准的)。
引入标准命名空间方法:
using namespace std;
注意:语句末尾的分号不能少
- 主函数
主函数main()是程序的入口,每个程序都需要一个主函数(唯一的)。主函数返回值为int型。
int main()
{
cout<<"hello world!<<endl;
return 0;
}
注意:程序末尾返回0
输入输出、格式
标准输入输出流的对象和操作方法都是由istream和ostream两个类提供的,这两个类继承自ios基类,它们预定义了标准输入输出流对象,并且提供了多种形式的输入输出功能。
C++在进行输入时需要从流中提取数据,在输出时需要向流中插入数据,提取和插入是通过在流类库中重载">>"和"<<"运算符来实现的。
四个预定义的标准流对象
- cin
cin是istream类的对象,用于处理标准输入(即键盘输入);有缓冲,输入完数据按下回车键后,该数据才被送入键盘缓冲区,形成输入流,提取运算符">> "才能从中提取数据。
除了单个变量读取,cin对象也可以一次读入多个变量的值,因为">>"运算符返回的是istream的引用,可连续提取数据。
char c1,c2;
cin>>c1>>c2;
采用cin对象也可以对不同类型的变量读入数据。
int n;
string s;
float f;
cin>>n>>s>>f;
cout<<n<<" "<<s<<" "<<f<<endl;
当从键盘正确输入字符串和float类型的值时,cin将它们分别存储到对应变量中。字符串的读入也可以采用字符串组存储,例如:
char str[10];
cin>>str;
如果用一个字符数组存储字符串,要确保输入的字符串不超过字符数组的大小,否则会发生溢出,破坏内存中的其他数据。
- cout
cout是ostream类的对象,用于处理标准输出(即屏幕输出),但也可以重定向输出到磁盘文件。用户可以通过cout对象调用ostream类的插入运算符和成员函数来输出信息;有缓冲。
利用cout对象可以直接输出常量值,代码如下所示:
cout<<10<<endl;
cout<<'a'<<endl;
cout<<"C++"<<endl;
利用cout对象输出变量的值,代码如下所示:
int a=10;
string s="C++";
float f=1.2;
cout<<a<<end;//输出int类型的变量
cout<<s<<endl;//输出string类型的变量
cout<<f<<endl;//输出float类型的变量
在用cout输出变量值时,不必设置以什么格式输出,"<<"运算符会根据变量的数据类型自动调用相匹配的重载函数,而正确输出。这比C语言中的printf()函数用法更简单。
利用cout对象输出指针、引用类型的数据,代码如下所示:
int a=10,*p;
int &b=a;
p=&a;
string s="C++";
string *ps=&s;
cout<<p<<endl;//输出结果是指针p的值,a变量的地址
cout<<b<<endl;//输出结果是b的值10
cout<<*p<<endl;//输出结果是指针p指向的变量的值,即a的值10
cout<<ps<<endl;//输出结果是指针ps的值,s变量的地址
cout<<*ps<<endl;//输出结果是指针ps指向的变量的值,即s的值“C++”
当输出数据类型为指针或引用时,与printf()函数的用法一致,不加"*"符号时输出指针的值,即变量的地址,带有"*"符号输出的是指针指向的变量的值,它比printf()的简便指出在于不必设置数据的输出格式。
cout对象也可以连续输出数据,代码如下所示:
int a=10;
char c='a';
cout<<a<<","<<c<<endl;
#include<iostream>
using namespace std;
int main()
{
const double pi=3.14159;
double r,c,s;
cout<<"输入圆的半径:";//竞赛时不要输出提示语
cin>>r;
c=2.0*pi*r;
s=pi*r*r;
cout<<"圆的周长为:"<<c<<endl;
cout<<"圆的面积为:"<<s<<endl;
return 0;
}
- cerr
cerr是ostream类的输出,用于处理标准出错信息,并将信息显示到屏幕上;无缓冲
- clog
clog是ostream类的输出,用于处理标准出错信息,并将信息显示到屏幕上;有缓冲
cin与提取运算符">>"结合使用,cout、cerr、clog与插入运算符"<<"使用,完成了C++中所有的输入输出操作。
精度、域宽、填充字符的设置
- 浮点数精度设置
- 域宽设置
- 填充字符设置
#include<iomanip>
操作符 | 功能 |
setfill(char c) | 设置以c表示的填充字符 |
setprecision(int n) | 设置以c表示的填充字符 |
setw(n) | 设置以n表示的域宽 |
#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;
int main()
{
double d=sqrt(2.0);
cout<<"设置精度:"<<endl;
for (int i=0;i<5;i++)
{
cout<<fixed;//定点输出
cout<<setprecision(i)<<d<<endl;//设置不同的精度
}
cout<<"当前精度为:"<<cout.precision()<<endl;
cout<<"当前域宽为:"<<cout.width()<<endl;
cout<<left;//左对齐
cout<<setw(6)<<d<<endl;//默认是右对齐
cout<<setw(16)<<dsetw(16)<<d<<setw(16)<<d<<endl;
cout<<"当前填充字符:"<<endl;
cout<<setfill('*')<<setw(10)<<d<<endl;//setfill()函数可以直接插入流
return 0;
}
操作符 | 功能 |
oct | 以八进制格式输出数据 |
dec | 以十进制格式输出数据 |
hex | 以十六进制格式输出数据 |
Endl | 插入换行符并刷新输出缓冲流 |
unpercase | 十六进制输出时字母大写 |
skipws | 输出时跳过空白 |
flush | 刷新流 |
left | 左对齐 |
right | 右对齐 |
scientific | 科学记数法输出 |
fixed | 定点数方式输出 |
showbase | 输出前缀(八进制0,十六进制0x) |
showpoint | 输出浮点数时带小数点 |
showpos | 输出正整数时加“+” |
基本运算
- +加法
- -减法
- *乘法
- /除法
- %取余
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int n;
int ge,shi,bai;
cin>>n
ge=n%10;
shi=(n/10)%10;
bai=(n/100)%10;
cout<<ge<<setw(2)<<shi<<setw(2)<<bai<<endl;
return 0;
}
算数运算符
运算符 | 运算 | 范例 | 结果 |
+ | 正号 | +3 | 3 |
- | 负号 | b=4;-b; | -4 |
+ | 加 | 5+5 | 10 |
- | 减 | 6-4 | 2 |
* | 乘 | 3*4 | 12 |
/ | 除 | 5/5 | 1 |
% | 取模(余) | 7%5 | 2 |
++ | 自增(前) | a=2;b=++a | a=3,b=3 |
++ | 自增(后) | a=2;b=a++ | a=3;b=2 |
-- | 自减(前) | a=2,b=--a | a=1;b=1 |
-- | 自减(后) | a=2;b=a-- | a=1;b=2 |
= | 赋值 | a=3;b=2 | a=3;b=2 |
+= | 加等于 | a=3;b=2;a+=b | a=5;b=2 |
-= | 减等于 | a=3;b=2;a-=b | a=1;b=2 |
*= | 乘等于 | a=3;b=2;a*=b | a=6;b=2 |
/= | 除等于 | a=3;b=2;a/=b | a=1;b=2 |
%= | 模等于 | a=3;b=2;a%=b | a=1;b=2 |
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int n,a,b,c;
cin>>n>>b>>c;
a=n++;
b*=10;
c/=10;
cout<<a<<setw(5)<<b<<setw(5)<<c<<endl;
return 0;
}