c++实验2
函数重载编程练习
1 #include<iostream> 2 using namespace std; 3 struct complex 4 { 5 double real; 6 double imaginary; 7 }; 8 int add(int ,int ); 9 double add(double ,double ); 10 complex add(complex ,complex ); 11 int main() 12 { 13 int a=1,b=2; 14 double c=1.32,d=5.98; 15 complex s1,s2; 16 s1.real=1; 17 s1.imaginary=1.3; 18 s2.real=3.32; 19 s2.imaginary=2.31; 20 cout<<add(a,b)<<endl; 21 cout<<add(c,d)<<endl; 22 cout<<add(s1,s2).real<<"+"<<add(s1,s2).imaginary<<"i"<<endl; 23 return 0; 24 } 25 int add(int x,int y) 26 { 27 return x+y; 28 } 29 double add(double x,double y) 30 { 31 return x+y; 32 } 33 complex add(complex x,complex y) 34 { 35 complex s3; 36 s3.real=x.real+y.real; 37 s3.imaginary=(x.imaginary+y.imaginary); 38 return s3; 39 }
函数模板编程练习
头文件quicksort.h
1 #ifndef QUICKSORT 2 #define QUICKSORT 3 #include<iostream> 4 #include<iomanip> 5 using namespace std; 6 template<class T> 7 void quicksort(T a[],int left,int right){ 8 if(left<right){ 9 int i,j; 10 T norm; 11 norm=a[left];//作为基准的数 12 i=left; 13 j=right; 14 //找到两个要交换的数 15 while(i!=j){ 16 while(a[j]>=norm&&i<j) 17 j--; 18 while(a[i]<=norm&&i<j) 19 i++; 20 //交换这两个数 21 if(i<j) { 22 swap(a[i],a[j]); 23 } 24 } 25 //把基准数放到中间 26 a[left] =a[i]; 27 a[i]=norm; 28 //递归 29 quicksort(a,left,i-1); 30 quicksort(a,i+1,right); 31 } 32 } 33 template<class T> 34 void output(T a[],int len){ 35 int i; 36 for(i=0;i<len;i++) 37 cout<<setw(5)<<a[i]; 38 39 } 40 #endif
主函数
#include<iostream> #include"quicksort.h" using namespace std; int main(){ int a[10]={3,4,2,1,6,10,5,9,7,8}; quicksort(a,0,9); output(a,10); cout<<endl; double b[10] ={2.1,3.2,4.5,9.8,7.8,6.5,10.1,3.9,1.2,0.3}; quicksort(b,0,9); output(b,10); return 0; }
类的定义、实现和使用编程练习
1 #include <iostream> 2 #include <string> 3 using namespace std; 4 // User类的声明 5 class User { 6 public: 7 void setInfo(string Nname, string Npasswd = "111111", string Nemail = ""); 8 // 声明带有默认形参值的成员函数setInfo() 9 // 密码默认值为6个1 10 // 邮箱默认值为空串 11 void changePasswd(); 12 void printInfo(); 13 private: 14 string name; 15 string passwd; 16 string email; 17 }; 18 // User类的实现 19 // 成员函数setInfo()的实现 20 // 功能:设置用户名(name), 密码(passwd), 联系邮箱(email) 21 void User::setInfo(string Nname, string Npasswd, string Nemail ) { 22 name = Nname; 23 passwd = Npasswd; 24 email = Nemail; 25 } 26 // 成员函数changePasswd()的实现 27 // 功能:修改密码 28 // 要求:在修改密码前,要求先输入旧密码,验证无误后,才允许修改。 29 // 如果输入旧密码时,连续三次输入错误,则提示用户稍后再试,暂时退出修改密码程序。 30 void User::changePasswd() { 31 int count=0; 32 string oldpasswd; 33 cout << "please enter your old password" << endl; 34 while (true) { 35 cin >> oldpasswd; 36 if (oldpasswd == passwd) { 37 cout << "please enter new password" << endl; 38 cin >> passwd; 39 break; 40 } 41 else { 42 cout << "sorry,wrong password,pls try again" << endl; 43 count++; 44 } 45 if (count == 3) { 46 cout << "pls try later" << endl; 47 break; 48 } 49 } 50 } 51 // 成员函数printInfo()的实现 52 // 功能:打印用户信息 53 // 要求: 密码以6个*显示 54 void User::printInfo() { 55 cout << name << endl; 56 cout << "******" << endl; 57 cout << email << endl; 58 } 59 60 int main() { 61 cout << "testing 1......" << endl; 62 User user1; 63 user1.setInfo("Leonard"); 64 user1.printInfo(); 65 user1.changePasswd(); 66 user1.printInfo(); 67 cout << endl << "testing 2......" << endl; 68 User user2; 69 user2.setInfo("Jonny", "92197", "xyz@hotmail.com"); 70 user2.printInfo(); 71 return 0; 72 }
实验总结体会:
1. 快速排序,上课的时候毫无头绪,课后查阅了一些资料后搞懂了。
2. 快速排序在数据量较多时能有效减少计算机的工作负担。
3. 对于类的定义和使用现在只能刻板的根据书本模仿,还不能随心所欲地应用,还有很大的提升空间。