c++实验二
第一题:
源代码:
#include<iostream> using namespace std; struct Complex { double real; double imaginary; }; int add(int,int); double add(double,double); Complex add(Complex,Complex); int main() { Complex c={3,5}; Complex d={1,2}; Complex sum=add(c,d); cout<<"Their sum:"<<add(1,2)<<endl; cout<<"Their sum:"<<add(1.2,4.0)<<endl; cout<<"他们和的实部和虚部分别为:"<<sum.real<<","<<sum.imaginary<<endl; return 0; } int add(int c,int d) { return c+d; } double add(double c,double d) { return c+d; } Complex add(Complex c,Complex d) { Complex sum; sum.real=c.real+d.real; sum.imaginary=c.imaginary+d.imaginary; return sum; }
运行结果:
第三题:
源代码:
#include <iostream> #include <string> using namespace std; // User类的声明 class User { public: void setInfo(string name1,string passwd1="111111",string email1=""); void changePasswd(); void printInfo(); private: string name; string passwd; string email; }; // User类的实现 // 成员函数setInfo()的实现 // 功能:设置用户名(name), 密码(passwd), 联系邮箱(email) void User::setInfo(string name1,string passwd1,string email1) { name=name1; passwd=passwd1; email=email1; } // 成员函数changePasswd()的实现 // 功能:修改密码 // 要求:在修改密码前,要求先输入旧密码,验证无误后,才允许修改。 // 如果输入旧密码时,连续三次输入错误,则提示用户稍后再试,暂时退出修改密码程序。 void User::changePasswd() { string passwd2; int i; cout<<"请输入您的旧密码"; cin>>passwd2; if(passwd2!="111111") { i++; cout<<"错误,请再次输入"; cin>>passwd2; } if(i=3) { cout<<"请稍后再试"<<endl; } else { cout<<"修改成功!"<<endl; passwd=passwd2; } } // 成员函数printInfo()的实现 // 功能:打印用户信息 // 要求: 密码以6个*显示 void User::printInfo() { cout<<"name is:"<<name<<endl; cout<<"passwd is:"<<"******"<<endl; cout<<"email is:"<<email<<endl; } int main() { cout << "testing 1......" << endl; // 测试1 User user1; user1.setInfo("Leonard"); user1.printInfo(); user1.changePasswd(); user1.printInfo(); cout << endl << "testing 2......" << endl << endl; // 测试2 User user2; user2.setInfo("Jonny","92197","xyz@hotmail.com"); user2.printInfo(); return 0; }
运行结果:
第二题:
源代码:
template<class T> void apple(T a[],int left,int right) { T temp; temp=a[left]; int leftindex=left; int rightindex=right; while(leftindex<rightindex) { while(leftindex<rightindex) { if(temp<=a[rightindex]) { rightindex--; } else { a[leftindex]=a[rightindex]; leftindex++; } } a[leftindex]=temp; apple(a,left,leftindex-1); apple(a,rightindex+1,right); } } int main() { int i; int A[]={3,7,8,12,10}; apple(A,0,4); for(i=0;i<=4;i++) { cout<<A[i]<<" "; } return 0; }
运行结果:
实验结论与体会:
第一题的重载函数int类型和double类型加法无 难点,关键的是虚数的加减法,需要实部和虚部分开来相加;
第二题我认为是最难的一道题,先要定义函数模板,选出一个中间数,将数组分开,然后再将子序列大小排列,并利用循环函数以此类推,直到子序列只有两个数
第三题我认为只要将新旧姓名密码Email单独列出来,然后再利用类的性质定义声明就行了