一、函数重载编程练习 编写重载函数add(),实现对int型,double型,Complex型数据的加法。在main()函数中定义不同类型 数据,调用测试。
实验代码
运行截图
二、函数模板编程练习 编写实现快速排序函数模板,并在main()函数中,定义不同类型数据,调用测试。
这是一开始挣扎的错误代码
想利用一个辅助的交换数值的函数来做,还想不用递归
呃,查资料发现不用递归也可以做,但是大量涉及栈等等我不清楚的东西,等我以后再学学然后回头想想吧(确信)
#include<iostream>
using namespace std;
template<class T>
void myswap(T &x,T &y)
{
T temp=x;
x = y;
y = temp;
}
template<class T>
void quicksort(T a[],int n)
{
while(true)
{
int i = 0, j = n – 1;
T key = a[0];
for (i = 1; i < n;i++)
{
if(a[i]<key)
{
i = 0;
break;
}
else
key = a[i + 1];
}
for (j = n – 1; j>i; j–)
{
if(a[j]<key)
{
myswap(a[i], a[j]);
break;
}
}
for (i = 0; i<j; i++)
if (a[i]>key)
{
myswap(a[i], a[j]);
break;
}
quicksort(a, n);
if (i == j)
break;
}
}
template<class T>
void output(T q[],int k)
{
for (int i = 0; i < k;i++)
{
cout << q[i]<<” “;
}
cout << endl;
}
int main()
{
int m[7] = {6, 3, 7, 4, 2, 1,9};
quicksort(m, 7);
output(m, 7);
return 0;
}
下面是学习了之后,一个简洁而标准的快速排序算法(利用递归)
#include<iostream>
using namespace std;
template<class T>
void quicksort(T a[], int l, int r)
{
if (l < r)
{
int i, j;
T key;
i = l; //l为数组最左端
j = r; //r为数组最右端
key = a[i]; //key为基准值
while (i < j)
{
while (i < j && a[j] > key)
j–; // 从右向左找第一个小于x的数
if (i < j)
a[i++] = a[j];
while(i < j && a[i] < key)
i++; // 从左向右找第一个大于x的数
if(i < j)
a[j–] = a[i];
}
a[i] = key;//基准值重置
quicksort(a, l, i-1); //递归使用
quicksort(a, i+1, r);
}
}
template<class T>
void output(T q[],int k)
{
for (int i = 0; i < k;i++)
{
cout << q[i]<<” “;
}
cout << endl;
}
int main()
{
int m[7] = {6, 3, 7, 4, 2, 1,9};
double q[7] = {22.3, 4.5, 56.1, 26.3, 33.2, 891.2, 1.5};
quicksort(m,0, 6);
output(m, 7);
quicksort(q, 0, 6);
output(q, 7);
return 0;
}
成功运行的截图
类的定义、实现和使用编程练习 设计并实现一个用户类User,并在主函数中使用和测试这个类。具体要求如下: 每一个用户有用户名(name), 密码(passwd),联系邮箱(email)三个属性。
支持设置用户信息setInfo()。允许设置信息时密码默认为6个1,联系邮箱默认为空串。 支持打印用户信息printInfo()。打印用户名、密码、联系邮箱。其中,密码以6个*方式显示。
支持修改密码changePasswd(),。在修改密码前,要求先输入旧密码,验证无误后,才允许修改。 如果输入旧密码时,连续三次输入错误,则提示用户稍后再试,暂时退出修改密码程序。
在main()函数中创建User类实例,测试User类的各项操作(设置用户信息,修改密码,打印用户信息)
代码
#include <iostream>
#include <string>
using namespace std;
class User {
public:
void setinfo(string n,string p=”111111″,string e=””);
void changePassword();
void printInfo();
private:
string name;
string password;
string email;
};
void User::setinfo(string n,string p,string e)
{
name = n;
password = p;
email = e;
}
void User::changePassword()
{
string oldpassword;
int i=1;
cout<<“Please input your old password:”;
cin>>oldpassword;
while(oldpassword!=password&&i<3)
{
cout<<“The password is wrong,please input it again:”;
cin>>oldpassword;
i++;
}
if(oldpassword!=password&&i==3)
{
cout<<“please try later”<<endl;
changePassword();
return;
}
if (oldpassword == password)
{
cout<<“please input your new password:”;
cin>>password;
}
}
void User::printInfo(){
cout<<“name: “<<name<<endl;
cout<<“password:****** “<<endl;;
cout<<“email: “<<email<<endl;
cout<<endl;
}
int main() {
cout << “testing 1……” << endl;
User user1;
user1.setinfo(“Leonard”);
user1.printInfo();
user1.changePassword();
user1.printInfo();
cout << endl << “testing 2……” << endl << endl;
User user2;
user2.setinfo(“Jonny”,”92197″,”xyz@hotmail.com”);
user2.printInfo();
return 0;
}
运行截图
总结:
1.关于return使函数退出和exit(0)、exit(1)使程序正常异常退出的方法。
详见https://www.cnblogs.com/cxchanpin/p/6927025.html
2.灵活利用函数重载和函数模板可以有效简化代码,提高效率。
3.快速排序的相关递归调用,有点绕但是需要深入研究。
—-X.Raven