SDUST第6次实验,第7次作业
来源:互联网 发布:室内三维定位算法 编辑:程序博客网 时间:2024/06/10 15:13
new时, [] 和()的区别
不能返回函数的局部变量的引用, 如果真的要返回的话,那就返回值不要返回引用
ProblemA 矩阵的乘法
//一定注意,不能传局部变量的引用,会出问题的,
//返回值就传临时临时变量就可以
#include<iostream>using namespace std;class Matrix{public: int hang_, lie_; int num[50][50]; int flag;public: Matrix():hang_(0), lie_(0), flag(1) {} friend ostream &operator << (ostream &os, Matrix & A); friend istream &operator >> (istream &is, Matrix & A); Matrix operator + (Matrix& m) { Matrix mm; if(hang_ == m.hang_ && lie_ == m.lie_) { mm.hang_ = hang_; mm.lie_ = lie_; for(int i = 0; i < hang_; i++) { for(int j = 0; j < lie_; j++) mm.num[i][j] = num[i][j] + m.num[i][j]; } } else mm.flag = 0; return mm; } Matrix operator * (Matrix & A) { Matrix B; if(lie_ != A.hang_){B.flag = 0; return B;} else{ B.flag = 1; B.hang_ = hang_; B.lie_ = A.lie_; for(int i = 0; i < B.hang_; i++) { for(int j = 0; j < B.lie_; j++) B.num[i][j] = 0; } for(int i = 0; i < hang_; i++) { for(int j = 0 ; j < B.lie_; j++) { for(int k = 0; k < lie_; k++) B.num[i][j] += (num[i][k] * A.num[k][j]); } } return B; } }};ostream & operator << (ostream & os, Matrix & A){ if(A.flag == 1) { for(int i = 0; i < A.hang_; i++) { for(int j = 0; j < A.lie_; j++) if( j == 0) os << A.num[i][j]; else os << " " <<A.num[i][j]; os << endl; }} else os << "Error" <<endl; return os;}istream & operator >> (istream &is, Matrix & A){ is >> A.hang_ >> A.lie_; for(int i = 0; i < A.hang_; i++) { for(int j = 0; j < A.lie_; j++) is >> A.num[i][j]; } return is;}int main(){ int cases, i; cin>>cases; for (i = 0; i < cases; i++) { Matrix A, B, C, D; cin>>A>>B; C = A + B; D = A * B; cout<<"Case "<<i + 1<<":"<<endl; cout<<C<<endl; cout<<D; } return 0;}
ProblemC:模板类
//形参传引用的时候就传常引用或者形参的临时变量吧,除非要进行改东西。
#include<iostream>#include<cstdio>#include<iomanip>using namespace std;template<class T>class Data{public: Data():val_(0) {} Data(T x):val_(x) {} T getVal() {return val_; } T operator +(Data a) { return a.getVal() + val_; } bool operator > (Data a) { if(val_ >a.getVal()) return true; else return false; } bool operator < (Data a) { if(val_ < a.getVal()) return true; else return false; } friend ostream & operator << (ostream & os, Data &a) // 为什么不能传引用 // friend ostream & operator << (ostream & os, Data a) { os << a.val_; return os; } void setValue(T x) { val_ = x; }// friend ostream &operator<<(ostream &os, Data s){// os<<fixed<<setprecision(2)<<s.getVal();// return os;// } private: T val_;};template< class T>class GetResult{public: static Data<T> getSum(Data<T> *arr, int num){ T x = 0; Data<T> sum; for(int i = 0; i < num; i++) x += arr[i].getVal(); sum.setValue(x); return sum; } static Data<T> getMax(Data<T> *arr, int num){ T x = 0; Data<T> maxx; for(int i = 0; i < num; i++) { if(arr[i].getVal() > x) x = arr[i].getVal(); } maxx.setValue(x); return maxx; } static Data<T> getMin(Data<T> *arr, int num){ T x = 2147483647; Data<T> minn; for(int i = 0; i < num; i++) { if(arr[i].getVal() < x) x = arr[i].getVal(); } minn.setValue(x); return minn; }};int main(){ Data<int> iData[1001]; Data<double> dData[1001]; int cases, num; char ch; int u; double v; Data<int> a(10), b(20); Data<double> c(3.14), d(-4.1); cout<<"a + b = "<<(a + b)<<endl; cout<<"max(a, b) = "<<(a > b ? a : b)<<endl; cout<<"min(a, b) = "<<(a < b ? a : b)<<endl; cout<<"c + d = "<<(c + d)<<endl; cout<<"max(c, d) = "<<(c > d ? c : d)<<endl; cout<<"min(c, d) = "<<(c < d ? c : d)<<endl; cin>>cases; for (int i = 0; i < cases; i++) { cin>>ch; cin>>num; for (int j = 0; j < num; j++) { if (ch == 'i') { cin>>u; iData[j].setValue(u); } else if (ch == 'd') { cin>>v; dData[j].setValue(v); } } if (ch == 'i') { cout<<GetResult<int>::getMax(iData, num); cout<<" "<<GetResult<int>::getMin(iData, num); cout<<" "<<GetResult<int>::getSum(iData, num)<<endl; } else if (ch == 'd') { cout<<GetResult<double>::getMax(dData, num); cout<<" "<<GetResult<double>::getMin(dData, num); cout<<" "<<GetResult<double>::getSum(dData, num)<<endl; } } return 0;}
ProblemD: 线性表的应用
#include<iostream>using namespace std;class MyList{public: MyList(int l): len_(l), cur_(0){e = new int(len_ + 1);} void append(int d){ e[cur_] = d; cur_++; } void insert(int p, int d){ for(int i = cur_; i >= p; i--) e[i] = e[i - 1]; e[p] = d; cur_++; } void erase(int p){ for(int i = p; i < cur_ - 1; i++) e[i] = e[i + 1]; cur_--; } void set(int p, int d){e[p] = d;} void show(){ for(int i = 0; i < cur_; i++) { if(i != 0) cout << " "; cout << e[i];} cout << endl; }public: int *e; int len_; int cur_;};int main(){ int cases, len, data, pos; char op; cin>>len; MyList myList(len); cin>>cases; for (int i = 0; i < cases; i++) { cin>>op; switch (op) { case 'A': cin>>data; myList.append(data); break; case 'I': cin>>pos>>data; myList.insert(pos, data); break; case 'E': cin>>pos; myList.erase(pos); break; case 'S': cin>>pos>>data; myList.set(pos, data); } myList.show(); } return 0;}
0 0
- SDUST第6次实验,第7次作业
- SDUST 第8次作业,第7次实验
- SDUST 第八次实验, 第九次作业
- c++第6次实验 作业
- C++第6次实验—作业
- C++第7次实验—作业
- 第6 次作业
- 第6次作业
- 第6次作业
- 第7次作业
- 第7次作业
- SDUST 第四次作业
- SDUST 第四次实验
- 算法第1次实验作业
- c++第2次实验作业
- C++第2次实验作业
- C++第2次实验作业
- c++第3次实验—作业
- 三层架构与MVC架构的区别
- 文章标题
- 使用 ssh -R 建立反向/远程TCP端口转发代理
- 深度学习笔记三-CNN(卷积神经网络)是什么?(续)
- 微信小程序开发常见问题FAQ之六
- SDUST第6次实验,第7次作业
- linux c/c++知识点整理(四)
- 1、JAVA-SE环境配置及测试 -- 终于开始学习Java了,希望可以坚持下去。
- 关于代码家(干货集中营)共享android端知识点综合整理
- Ionic ios端死亡白屏问题
- hbuilder和项目交互
- android发送邮件的方法
- CSU
- Halcon MFC混合编程-图像显示随鼠标滚动放大缩小