一、函数重载编程练习 编写重载函数add(),实现对int型,double型,Complex型数据的加法。在main()函数中定义不同类型 数据,调用测试。
实验代码
1 #include<iostream> 2 using namespace std; 3 struct Complex 4 { 5 double real; 6 double imaginary; 7 }; 8 9 int add(int, int); 10 double add(double,double); 11 Complex add(Complex, Complex); 12 int main() { 13 int x, y; 14 cout << "Please input two numbers:"; 15 cin >> x >> y; 16 cout << "The sum is:" << add(x, y) << endl; 17 double m, n; 18 cout << "Please input two double numbers:"; 19 cin >> m >> n; 20 cout << "The sum is:" << add(m, n) << endl; 21 struct Complex e,f; 22 cout << "Please input the first r and i numbers:"; 23 cin >> e.real >> e.imaginary; 24 cout << "Please input the second r and i numbers:"; 25 cin >> f.real >> f.imaginary; 26 cout<<"The sum is:"; 27 add(e,f); 28 29 30 return 0; 31 } 32 int add(int a,int b) 33 { 34 return a + b; 35 } 36 double add(double a,double b) 37 { 38 return a + b; 39 } 40 Complex add(Complex e,Complex f) 41 { 42 cout<<e.real+f.real<<"+"<<e.imaginary+f.imaginary<<"i"; 43 44 }
运行截图
二、函数模板编程练习 编写实现快速排序函数模板,并在main()函数中,定义不同类型数据,调用测试。
这是一开始挣扎的错误代码
1 #include<iostream> 2 using namespace std; 3 template<class T> 4 void myswap(T &x,T &y) 5 { 6 T temp=x; 7 x = y; 8 y = temp; 9 } 10 template<class T> 11 void quicksort(T a[],int n) 12 { 13 while(true) 14 { 15 int i = 0, j = n - 1; 16 T key = a[0]; 17 for (i = 1; i < n;i++) 18 { 19 if(a[i]<key) 20 { 21 i = 0; 22 break; 23 } 24 else 25 key = a[i + 1]; 26 } 27 for (j = n - 1; j>i; j--) 28 { 29 if(a[j]<key) 30 { 31 myswap(a[i], a[j]); 32 break; 33 } 34 } 35 for (i = 0; i<j; i++) 36 if (a[i]>key) 37 { 38 myswap(a[i], a[j]); 39 break; 40 } 41 quicksort(a, n); 42 if (i == j) 43 break; 44 } 45 } 46 template<class T> 47 void output(T q[],int k) 48 { 49 for (int i = 0; i < k;i++) 50 { 51 cout << q[i]<<" "; 52 } 53 cout << endl; 54 } 55 int main() 56 { 57 int m[7] = {6, 3, 7, 4, 2, 1,9}; 58 quicksort(m, 7); 59 output(m, 7); 60 return 0; 61 }
想利用一个辅助的交换数值的函数来做,还想不用递归
呃,查资料发现不用递归也可以做,但是大量涉及栈等等我不清楚的东西,等我以后再学学然后回头想想吧(确信)
1 #include<iostream> 2 using namespace std; 3 template<class T> 4 void quicksort(T a[], int l, int r) 5 { 6 if (l < r) 7 { 8 int i, j; 9 T key; 10 11 i = l; //l为数组最左端 12 j = r; //r为数组最右端 13 key = a[i]; //key为基准值 14 while (i < j) 15 { 16 while (i < j && a[j] > key) 17 j--; // 从右向左找第一个小于x的数 18 if (i < j) 19 a[i++] = a[j]; 20 while(i < j && a[i] < key) 21 i++; // 从左向右找第一个大于x的数 22 if(i < j) 23 a[j--] = a[i]; 24 } 25 a[i] = key;//基准值重置 26 quicksort(a, l, i-1); //递归使用 27 quicksort(a, i+1, r); 28 } 29 } 30 template<class T> 31 void output(T q[],int k) 32 { 33 for (int i = 0; i < k;i++) 34 { 35 cout << q[i]<<" "; 36 } 37 cout << endl; 38 } 39 int main() 40 { 41 int m[7] = {6, 3, 7, 4, 2, 1,9}; 42 double q[7] = {22.3, 4.5, 56.1, 26.3, 33.2, 891.2, 1.5}; 43 quicksort(m,0, 6); 44 output(m, 7); 45 quicksort(q, 0, 6); 46 output(q, 7); 47 return 0; 48 }
类的定义、实现和使用编程练习 设计并实现一个用户类User,并在主函数中使用和测试这个类。具体要求如下: 每一个用户有用户名(name), 密码(passwd),联系邮箱(email)三个属性。
支持设置用户信息setInfo()。允许设置信息时密码默认为6个1,联系邮箱默认为空串。 支持打印用户信息printInfo()。打印用户名、密码、联系邮箱。其中,密码以6个*方式显示。
支持修改密码changePasswd(),。在修改密码前,要求先输入旧密码,验证无误后,才允许修改。 如果输入旧密码时,连续三次输入错误,则提示用户稍后再试,暂时退出修改密码程序。
在main()函数中创建User类实例,测试User类的各项操作(设置用户信息,修改密码,打印用户信息)
代码
1 #include <iostream> 2 #include <string> 3 using namespace std; 4 class User { 5 public: 6 void setinfo(string n,string p="111111",string e=""); 7 void changePassword(); 8 void printInfo(); 9 private: 10 string name; 11 string password; 12 string email; 13 }; 14 void User::setinfo(string n,string p,string e) 15 { 16 name = n; 17 password = p; 18 email = e; 19 } 20 void User::changePassword() 21 { 22 string oldpassword; 23 int i=1; 24 cout<<"Please input your old password:"; 25 cin>>oldpassword; 26 while(oldpassword!=password&&i<3) 27 { 28 cout<<"The password is wrong,please input it again:"; 29 cin>>oldpassword; 30 i++; 31 } 32 if(oldpassword!=password&&i==3) 33 { 34 cout<<"please try later"<<endl; 35 changePassword(); 36 return; 37 } 38 if (oldpassword == password) 39 { 40 41 42 cout<<"please input your new password:"; 43 cin>>password; 44 } 45 } 46 void User::printInfo(){ 47 cout<<"name: "<<name<<endl; 48 cout<<"password: "<<password<<endl;; 49 cout<<"email: "<<email<<endl; 50 cout<<endl; 51 } 52 int main() { 53 cout << "testing 1......" << endl; 54 User user1; 55 user1.setinfo("Leonard"); 56 user1.printInfo(); 57 user1.changePassword(); 58 user1.printInfo(); 59 cout << endl << "testing 2......" << endl << endl; 60 User user2; 61 user2.setinfo("Jonny","92197","xyz@hotmail.com"); 62 user2.printInfo(); 63 return 0; 64 }
总结:
1.关于return使函数退出和exit(0)、exit(1)使程序正常异常退出的方法。
利用return来使输入三次错误密码后退出函数,再用递归实现re-input(但是想实现一下暂时无法输入的功能的,发现和时间相关的东西不会写Σ(っ°Д°;)っ)
详见https://www.cnblogs.com/cxchanpin/p/6927025.html
2.灵活利用函数重载和函数模板可以有效简化代码,提高效率。
3.快速排序的相关递归调用,有点绕但是需要深入研究。
评论地址
https://www.cnblogs.com/wmy0621/p/10590291.html
https://www.cnblogs.com/zcq1224/p/10589618.html
https://www.cnblogs.com/charlotte00/p/10585906.html
----X.Raven