保留固定位有效小数
1 2 3 4 5 6 7 8
| #include<iostream> #include<iomanip> using namespace std; int main() { cout<<fixed<<setprecision(3)<<1/3.0<<endl; return 0; }
|
这里setprecision的括号里是保留几位有效小数,后面是三分之一,需要注意的是这里必须有一个整数带 .0 否则算出来为0
一般会四舍五入,但有时候也会不执行,具体我也不知道啥原因
1 2 3 4 5 6 7 8 9 10 11
| #include<iostream> #include<iomanip> using namespace std; int main() { cout<<fixed<<setprecision(3)<<4.5535<<endl; cout<<fixed<<setprecision(3)<<4.55350<<endl; cout<<fixed<<setprecision(3)<<4.55351<<endl; return 0; }
|
随机数的生成
1 2 3 4 5 6 7 8 9 10 11 12 13
| #include<iostream> #include<cstdlib> #include<ctime> using namespace std; int main() { srand(time(0)); cout<<rand()<<endl; cout<<rand()%10<<endl; cout<<rand()%11<<endl; cout<<rand()%10+2<<endl; return 0; }
|
这里的头文件可以写cstdlib也可以写stdlib.h二者无太大区别ctime和time.h也是如此
array头文件的使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| #include<iostream> #include<array> using namespace std;
void show(array<int,3> a);
int main() { array<int,3> a; for(int i=0;i<a.size();i++) { a[i]=rand(); } show(a); return 0; }
void show(array<int,3> a) { for(int i=0;i< a.size();i++) { cout<<a[i]<<endl; } }
|
这个函数库再有就是可以整体赋值和交换矩阵以及输出矩阵元素个数
1 2 3 4
| a.fill(3) array<int,4> a={5} a.swap(b) cout<<a.size()
|
vector头文件的使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| #include<iostream> #include<vector> using namespace std;
void showVector(vector<int> v) { for(int i = 0; i < v.size(); i++) { cout << v[i] << " "; } cout << endl; }
int main() { vector<int> a; cout << "At the beginning, a.size() = " << a.size() << endl; for(int i = 1; i <= 10; i++) { a.push_back(i*2); cout << "After i = " << i << " , a.size() = " << a.size() << endl; } showVector(a); for(int i = 1; i <= 5; i++) { a.pop_back(); cout << "After i = " << i << " , a.size() = " << a.size() << endl; } showVector(a); a.resize(10); cout << "After a.resize(10): " << endl; showVector(a); a.resize(3); cout << "After a.resize(3): " << endl; showVector(a); return 0; }
|
C++中的iomanip的使用
I/O流常用控制符:
使用控制符时,在程序开头加投文件#include <iomanip>
C++有两种方法控制格式输出:
1、用格式控制符;
2、用流对象的成员函数 格式控制符:
下面是iomanip的部分用法指令
注:以下指令前面都要加cout<<
指令 |
功能 |
dec |
以十进制形式输出 |
hex |
以十六进制形式输出 |
oct |
以八进制形式输出 |
setfill(‘*’) |
用*填充空余部分 |
setprecision(n) |
设置显示n位小数(四舍五入) |
setw(n) |
设置域宽为n个字符,并默认右对齐 |
fixed |
固定小数显示位,只有超出setprecision显示范围时才使用 |
scientific |
科学计数法显示,默认保留小数点后6位 |
left |
左对齐 |
right |
右对齐 |
skipws |
忽略前导空白 |
uppercase |
16进制数大写输出 |
lowercase |
16进制数小写输出 |
浮点数精度:默认精度为6,可以通过setprecision()来设置新的浮点数精度
非定点数模式:从左侧第一个非零数值开始的连续有效数字个数
定点数模式:小数点后连续有效数字个数
取消设置/回复默认:cout.unsetf(控制符)
setw(): 设置显示宽度 (单次/一次性操作,仅仅对后面的第一个对象有效)
其他的格式控制符:大都是黏性操作(持久性/永久性操作,设置之后持续有效,直到新的设置为止)
递归的简单使用
利用递归算阶乘
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| #include<iostream> using namespace std; int s(int a) { if(a>1) { int b=a*s(a-1); return b; } } int main() { cout<<s(4); return 0; }
|
法2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| #include<iostream> using namespace std; int s(int a) { if(a==1) return a; else { return a*s(a-1); } } int main() { cout<<s(4); return 0; }
|
递归总会有if判断语句
几种常见的排序
冒泡排序
首先通过下图简单了解一下冒泡排序的实现方式

逻辑:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| #include <iostream> using namespace std;
int main() {
int arr[6] = { 0 }; int len = sizeof(arr) / sizeof(int); for (int i = 0; i < len; i++) { cin >> arr[i]; } int m; for(int i=0;i<len;i++) { for(int j=0;j<len-1-i;j++) { if(arr[j]>arr[j+1]) { m=arr[j+1]; arr[j+1]=arr[j]; arr[j]=m; } } } for(int i=0;i<len;i++) { cout<<arr[i]<<" "; }
return 0; }
|
选择排序
实现方式如下图

这个逻辑就比较简单了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| #include <iostream> using namespace std;
int main() {
int arr[6] = { 0 }; int len = sizeof(arr) / sizeof(int); for (int i = 0; i < len; i++) { cin >> arr[i]; } int m; for(int i=0;i<len;i++) { for(int j=i+1;j<len;j++) { if(arr[i]>arr[j]) { m=arr[i]; arr[i]=arr[j]; arr[j]=m; } } } for(int i=0;i<len;i++) { cout<<arr[i]<<" "; }
return 0; }
|
快速排序
每次至少将一个基数复位,逻辑上有点东西,多用多学。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| #include<iostream> using namespace std; int a[101],n; void quicksort(int left,int right) { int i,j,temp,t; if(left>right) { return; } temp=a[left]; i=left; j=right; while(i!=j) { while(a[j]>=temp&&i<j) { j--; } while(a[i]<=temp&&i<j) { i++; } if(i<j) { t=a[i]; a[i]=a[j]; a[j]=t; } } a[left]=a[i]; a[i]=temp; quicksort(left,i-1); quicksort(i+1,right); return; } int main() { cin>>n; for(int i=1;i<=n;i++) { cin>>a[i]; } quicksort(1,n); for(int i=1;i<=n;i++) { cout<<a[i]<<" "; } return 0; }
|
创建动态数组
利用指针(一般仅用于创建一维数组)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| #include <iostream> using namespace std;
int main() {
int n; cin >> n; int *p=new int[n]; for(int i=0;i<n;i++) { p[i]=i+n; cout<<p[i]<<" "; } delete[] p; return 0; }
|
利用vector
vector创建一维数组
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| #include <iostream> #include <vector> using namespace std;
int main() {
int n; cin >> n; vector<int> p(n); vector<vector> for(int i=0;i<n;i++) { cin>>p[i]; cout<<p[i]+n<<" "; } return 0; }
|
vector创建二维数组
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| #include <iostream> #include <vector> using namespace std; int main() { int n,m; cin >> m >>n; vector<int> w(n,1); vector<vector<int>>p(m,w); for(int i=0;i<m;i++) { for(int j=0;j<n;j++) { } } for(int i=0;i<m;i++) { for(int j=0;j<n;j++) { cout<<p[i][j]<<"\t"; } cout<<endl; } return 0; }
|