实验二

 

 编程练习:

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()语句和其对应的头文件,尝试后程序出现不少问题。

posted @ 2019-03-24 12:22  Ternura  阅读(251)  评论(1编辑  收藏  举报