1.函数重载编程练习
实验要求:编写重载函数add(),实现对int型,double型,complex型数据的加法。在main()函数中定义不同类型数据,调用测试。
1 #include<iostream> 2 using namespace std; 3 typedef struct{ 4 double real; 5 double imaginary; 6 }complex; 7 int add(int, int); 8 double add(double, double); 9 complex add(complex, complex); 10 int main() 11 { 12 int a,b; 13 double c,d; 14 complex e,f;// 15 cout<<"请输入两个整数:"; 16 cin>>a>>b; 17 cout<<"这两个整数相加为:"<<add(a,b)<<endl; 18 cout<<"请输入两个小数:"; 19 cin>>c>>d; 20 cout<<"这两个小数相加为:"<<add(c,d)<<endl; 21 cout<<"请分别输入两个复数的实部和虚部:"; 22 cin>>e.real>>e.imaginary>>f.real>>f.imaginary;//输入两个复数的实虚部 23 cout<<"这两个复数相加为:"; 24 cout<<add(e.real,f.real)<<"+"<<add(e.imaginary,f.imaginary)<<"i"<<endl; 25 return 0; 26 } 27 int add(int h, int i)//整数相加函数 28 { 29 return (h+i); 30 } 31 double add(double j,double k)//小数相加函数 32 { 33 return(j+k); 34 } 35 complex add(complex l,complex m)//复数相加函数 36 { 37 complex n;//将两个复数实部与虚部的和赋给新的复数 38 n.real=l.real+m.real; 39 n.imaginary=l.imaginary+m.imaginary; 40 return n; 41 }
实验结果如下:
2.函数模板编程练习
实验要求:编写实现快速排序函数模板,并在main()函数中,定义不同类型数据,调用测试。
1 #include<iostream> 2 using namespace std; 3 void QuickSort(int a[],int left,int right) 4 { 5 if(left<right)//判断能否进行正确排序 6 { 7 int q=left;//将第一个元素下标赋给q 8 int h=right;//最后一个元素下标赋给h 9 int array=a[q];//选中一个值作为中间值来区分整个数组中大于及小于它的部分 10 while(q<h) 11 { 12 while(q<h&&a[h]>array)//从右边开始一个个排除比中间值大的数,将比中间值小的数拉到最左边 13 h--; 14 if(q<h) 15 { 16 a[q]=a[h]; 17 q++; 18 } 19 while(q<h&&a[q]<array)//从左边开始一个个比较大小,同上 20 q++; 21 if(q<h) 22 { 23 a[h]=a[q]; 24 h--; 25 } 26 } 27 a[q]=array; 28 QuickSort(a,left,q-1);//以第一次选中的值为中间值初步排序之后,进行第二次排序 29 QuickSort(a,q+1,right); 30 } 31 } 32 int main() 33 { 34 int n; 35 int a[10]={1,3,4,2,5,6,9,66,43,52}; 36 QuickSort(a,0,9); 37 cout<<"该数组由小到大排序的顺序为:"; 38 for(n=0;n<10;n++) 39 cout<<a[n]<<ends; 40 return 0; 41 }
实验结果如下:
3.类的定义、实现和使用编程练习
实验要求:设计并实现一个用户类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 name,string password="111111",string email="");//定义初始值 7 void changeemail(); 8 void changePassword(); 9 void printInfo(); 10 private: 11 string name; 12 string password; 13 string email; 14 }; 15 void User::setInfo(string name1,string password1,string email1) 16 { 17 string password0="111111"; 18 int time=0;//控制错误密码次数 19 string originalpassword; 20 cout<<"请输入您的个人信息:(初始密码为六个1)"<<endl; 21 cout<<"请输入您的用户名:"; 22 cin>>name1; 23 cout<<"请输入您的密码:"; 24 cin>>originalpassword; 25 while(originalpassword!=password0) 26 { 27 cout<<"初始密码错误,请重新输入:"; 28 cin>>originalpassword; 29 } 30 cout<<"请输入您的邮箱:"; 31 cin>>email1; 32 name=name1; 33 password=password0; 34 email=email1; 35 } 36 void User::changeemail() 37 { 38 int a=0; 39 string email2; 40 while(a==0) 41 { 42 cout<<"更改邮箱信息提示"<<endl; 43 cout<<"若暂不更改邮箱,请输入2;更改邮箱请直接输入新邮箱地址"<<endl; 44 cin>>email2; 45 while(email2=="2") 46 { 47 a=2;break; 48 } 49 if(a!=2) 50 { 51 cout<<"成功更改邮箱."<<endl; 52 email=email2; 53 a=2; 54 } 55 } 56 } 57 void User::changePassword() 58 { 59 string originalpassword; 60 string password2; 61 int time=0;//带动循环,控制输入原始密码错误的次数,使得账户安全性得到一定的保障 62 cout<<"更改密码信息提示"<<endl; 63 cout<<"请输入您的原始密码:"; 64 cin>>originalpassword; 65 while (originalpassword!=password) 66 { 67 time++; 68 if(time<3) 69 { 70 cout<<"第"<<time<<"次输入错误,请重新输入:"; 71 cin>>originalpassword; 72 } 73 else 74 { 75 cout<<"3次输入密码错误,请稍后尝试:"<<endl;//三次输入密码错误后,暂时退出修改密码部分 76 break; 77 } 78 } 79 if(originalpassword==password) 80 { 81 cout<<"请输入你的新密码:"<<endl; 82 cin>>password2; 83 } 84 } 85 void User::printInfo() 86 { 87 cout<<"Your name is :"<<name<<endl; 88 cout<<"Your password is ******"<<endl; 89 cout<<"Your email is :"<<email<<endl; 90 } 91 int main() 92 { 93 User User1; 94 User1.setInfo("name1","password1","email1"); 95 User1.printInfo(); 96 User1.changeemail(); 97 User1.changePassword(); 98 User1.printInfo(); 99 cout<<endl; 100 User User2; 101 User2.setInfo("name2","password2","email2"); 102 User2.printInfo(); 103 return 0; 104 }
实验结果如下:
参考网站:https://blog.csdn.net/yangchuang93/article/details/80849730
实验小结:
对于本次实验中三个程序,第一个程序存在结构体方面知识的缺陷,第二个程序的算法比较复杂,第三个程序不断完整的过程中,通过类这个结构还可以将程序各方面更加完整。
程序一:在complex上纠结了很久,输入实部虚部再进行相加的时候要带上定义的conplex,反复好几次,错误都出现在complex上使得整个函数重载出现了问题,但是之后重新学习了一遍c中的结构体,发现只是在定义上出现了问题,以后可以注意!
程序二:这个程序一开始尝试书写的时候,是先看了冒泡排序,因为快速排序是冒泡排序的升级,但是算法上存在问题,也是由于算法掌握不够,现在这个程序还不算达到了实验要求,这个程序还可以有很多优化,这是我自己的错误和不足,水平有限,希望能得到同学的提点斧正。
程序三:该程序再书写的结构上不存在问题,只是有些语句的位置一开始错了,接着就发现程序不按照自己既定的方向实现,更改多次后,还算完成了要求。之后学习中希望能够有修改的机会!
上一个实验的评价地址:
https://www.cnblogs.com/lyc1103/
https://www.cnblogs.com/sunny0202/
https://www.cnblogs.com/dadadacy/
原文:https://www.cnblogs.com/DADABu-21/p/10583707.html