SDUST第6次实验,第7次作业
2017-04-25 13:43
190 查看
new时, [] 和()的区别
不能返回函数的局部变量的引用, 如果真的要返回的话,那就返回值不要返回引用
ProblemA 矩阵的乘法
//一定注意,不能传局部变量的引用,会出问题的,
//返回值就传临时临时变量就可以
ProblemC:模板类
//形参传引用的时候就传常引用或者形参的临时变量吧,除非要进行改东西。
ProblemD: 线性表的应用
不能返回函数的局部变量的引用, 如果真的要返回的话,那就返回值不要返回引用
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 d6dd ; 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; }
相关文章推荐
- SDUST 第8次作业,第7次实验
- SDUST 第八次实验, 第九次作业
- C++第6次实验—作业
- C++第7次实验—作业
- c++第6次实验——作业
- SDUST 实验+ 作业
- c++第6次实验 作业
- 【实验报告】第6次作业——数组2
- MATLAB实验作业答案
- C++第7次作业
- 2017-2018 第一学期201623班《程序设计与数据结构》-第4周作业(实验一)问题总结
- 2017-2018-1 JAVA实验站 第二周作业
- c++第7次实验——项目3特殊三位数
- 第四章实验作业
- c++实验2作业
- 实验二、作业调度模拟程序
- 作业:计数器仿真实验
- 第五章实验作业
- 0415-操作系统 实验二 作业调度模拟程序
- 实验作业:使gdb跟踪分析一个系统调用内核函数