实验二
编程练习:
1、函数重载编程练习
编写重载函数add(),实现对int型,double型,Complex型数据的加法。在main()函数中定义不同类型 数据,调用测试
#include <iostream> using namespace std; struct complex{ double real; double imaginary; }; int add(int x,int y) { return x+y; } double add(double x,double y) {return x+y; } complex add(complex x,complex y) { complex s; s.real=x.real+y.real; s.imaginary=x.imaginary+y.imaginary; return s; } int main(){ int a1=1,b1=2,c1; double a2=1.5,b2=2.1,c2; complex a3={2.1,3},b3={1.5,2},c3; c1=add(a1,b1); c2=add(a2,b2); c3=add(a3,b3); cout<<"1+2="<<c1<<endl; cout<<"1.5+2.1="<<c2<<endl; cout<<"2.1+3i + 1.5+2i="<<c3.real<<"+"<<c3.imaginary<<"i"<<endl; return 0; }
运行截图:
2、函数模板编程练习
编写实现快速排序函数模板,并在main()函数中,定义不同类型数据,调用测试。(算法可参考这里, 内有排序示意图及算法逻辑)
#include<iostream> using namespace std; template<typename T> void QuickSort(T a[],int left,int right) { if(left<right) { int q=left; int h=right; T array=a[q]; while(q<h) {while(q<h&&a[h]>array)h--; if(q<h) { a[q]=a[h]; q++; } while(q<h&&a[q]<array)q++; if(q<h) { a[h]=a[q]; h--; } } a[q]=array; QuickSort(a,left,q-1); QuickSort(a,q+1,right); } } int main() { int i; int a[10]={5,15,4,38,54,69,25,3,6,9}; cout<<"a[10]={5,15,4,38,54,69,25,3,6,9}"<<endl; QuickSort(a,0,9); cout<<"排序后:"<<endl; for(i=0;i<10;i++) cout<<a[i]<<ends; cout<<endl; float b[10]={5.6,8.9,3.4,9.8,8.6,8.4,9.2,1.0,5,12.5}; cout<<"b[10]={5.6,8.9,3.4,9.8,8.6,8.4,9.2,1.0,5,12.5}"<<endl; cout<<"排序后:"<<endl; QuickSort(b,0,9); for(i=0;i<10;i++) cout<<b[i]<<ends; return 0; }
运行截图:
3、类的定义、实现和使用编程练习
设计并实现一个用户类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 name0,string passwd0="111111",string email0=" "); void printinfo(); void changepasswd(); private: string name; string passwd; string email; }; void user::setinfo(string name0,string passwd0,string email0){ name=name0; passwd=passwd0; email=email0; } void user::printinfo(){ cout<<"name: "<<name<<endl; cout<<"passwd:"<<"******"<<endl; cout<<"email: "<<email<<endl; } void user::changepasswd(){ cout<<"please enter the old passward:"; int n=3; string passwd1; while(n--){ cin>>passwd1; if(passwd1==passwd)break; else cout<<"passwd input error,please re-enter again:"; } if(!n)cout<<"please try after a while."; } int main(){ cout<<"testing 1..."<<endl; user user1; user1.setinfo("Leonard"); user1.printinfo(); user1.changepasswd(); user1.printinfo(); cout<<endl; cout<<"testing 2..."<<endl; user user2; user2.setinfo("Jonny","92197","xyz@hotmail.com"); user2.printinfo(); return 0; }
运行截图:
实验总结体会:
快速查找通过学习其他同学的程序和自己的推演,完成自己的代码并做了一点更改,能达到预想效果;类的使用中,写成员函数时总会出现或大或小的问题,在这一部分耗时较多,设置默认值也出现错误,在程序中想要实现输入密码以*显示,经查找需要用到getch()语句和其对应的头文件,尝试后程序出现不少问题。