栖枝Fairy

导航

实验二

函数重载编程练习

编写重载函数add(),实现对int型,double型,Complex型数据的加法。在main()函数中定义不同类型
数据,调用测试。

#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(){
    int a,b,c;
    cin>>a>>b;
    c=add(a,b);
    cout<<"the sum is"<<c<<endl;
    
    double m,n,s;
    cin>>m>>n;
    s=add(m,n);
    cout<<"the sum is"<<s<<endl;
    
    Complex j,k,l;
    cin>>j.real>>j.imaginary>>k.real>>k.imaginary;
    l=add(j,k);
    cout<<"the sum is"<<l.real<<"+"<<l.imaginary<<"i"<<endl;
    
    return 0;
}//两个以上的函数,具有相同的函数名,但是形参的个数或者类型不同,编译器根据实参和形参的类型及个数的最佳匹配,自动确定调用哪一个函数,这就是函数的重载。 
int add(int x,int y)
{
    return x+y;
}
double add(double x,double y)
{
    return x+y;
}
Complex add(Complex a,Complex b)
{   Complex c;
    c.real=a.real+b.real;
    c.imaginary=a.imaginary+b.imaginary;
    return c;
}

结果

函数模板编程练习

编写实现快速排序函数模板,并在main()函数中,定义不同类型数据,调用测试。

#include<iostream>
using namespace std;

void swap(int *a,int *b){
    int temp=*a;
    *a=*b;
    *b=temp;
}

void swap(double *a,double *b){
    double temp=*a;
    *a=*b;
    *b=temp;
}

int part(int a[],int start,int end,int mid){
    while(start!=end){
        while(a[end]>=mid&&start!=end) end--;
        if(start!=end){
            swap(&a[start],&a[end]);
            start++;
            while(a[start]<=mid&&start!=end) start++;
            if(start!=end) {
                swap(&a[start],&a[end]);
                end--;
            }
        }
    }
    return start;
}

int part(double b[],int start,int  end,double mid){
    while(start!=end){
        while(b[end]>=mid&&start!=end) end--;
        if(start!=end){
            swap(&b[start],&b[end]);
            start++;
            while(b[start]<=mid&&start!=end) start++;
            if(start!=end) {
                swap(&b[start],&b[end]);
                end--;
            }
        }
    }
    return start;
}

int quicksort(int a[],int start,int end){
    int i;
    if(start<end){
        i=part(a,start,end,a[start]);
        quicksort(a,start,i-1);
        quicksort(a,i+1,end);
    }
}

int quicksort(double b[],int start,int end){
    int i;
    if(start<end){
        i=part(b,start,end,b[start]);
        quicksort(b,start,i-1);
        quicksort(b,i+1,end);
    }
}

int main(){
    int array[7]={1,4,2,5,7,8,9};
       int j=7,i;
       cout<<"Befor: "<<endl;
       for(i=0;i<j;i++)
         cout<<array[i]<<"  ";

    quicksort(array,0,j-1);
    cout<<"\n"<<"After: "<<endl;
    for(i=0;i<j;i++){
        cout<<array[i]<<"  ";

    }
    cout<<"\n";
    double b[7]={2.5,8.1,9.3,4.9,5.2,3.2,7.7};
    int k=7,l;
    cout<<"Befor: "<<endl;
    for(l=0;l<k;l++)
         cout<<b[l]<<"  ";
    quicksort(b,0,k-1);
    cout<<"\n"<<"After: "<<endl;
    for(l=0;l<k;l++)
         cout<<b[l]<<"  ";

    return 0;
}

结果

类的定义、实现和使用编程练习

设计并实现一个用户类User,并在主函数中使用和测试这个类。具体要求如下:
每一个用户有用户名(name), 密码(passwd),联系邮箱(email)三个属性。
支持设置用户信息setInfo()。允许设置信息时密码默认为6个1,联系邮箱默认为空串。
支持打印用户信息printInfo()。打印用户名、密码、联系邮箱。其中,密码以6个*方式显示。
支持修改密码changePasswd(),。在修改密码前,要求先输入旧密码,验证无误后,才允许修改。
如果输入旧密码时,连续三次输入错误,则提示用户稍后再试,暂时退出修改密码程序。
在main()函数中创建User类实例,测试User类的各项操作(设置用户信息,修改密码,打印用户信
息)

#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;
};

void User::setInfo(string name1,string passwd1,string email1){
    name=name1;
    passwd=passwd1;
    email=email1;
}

void User::changePasswd(){
    string oldpasswd;
    cout<<"Plesae enter your old password:";
    cin>>oldpasswd;
    int i=1;
    while(oldpasswd!=passwd&&i<3){
        cout<<"Wrong! Please enter your oldpassword again:";
        cin>>oldpasswd;
        i++;
    }
    if(i>=3)
        cout<<"Please try later!"<<endl;
    if(oldpasswd==passwd){
        string newpasswd;
        cout<<"Please enter your new password:";
        cin>>newpasswd;
        passwd=newpasswd;
    }
}

void User::printInfo(){
    cout<<"name: "<<name<<endl;
    cout<<"password: "<<"******"<<endl;
    cout<<"email: "<<email<<endl;
}

//在主函数中测试User类
//用User类创建对象,测试类的功能 
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","Fairy@hotmain.com");
    user2.printInfo();
    
    return 0;
}

结果

 

实验总结与体会

总体来说,第一题和第三题给了模块和提示,感觉比较简单,做的也比较快。第二题,我琢磨了一个晚上,对快速排序算是有了一个大概的了解。还是觉得练的程序不够多,需要多多的练习。

互评

 https://www.cnblogs.com/sqcmxg/p/10574927.html

 https://www.cnblogs.com/DADABu-21/p/10583707.html

 https://www.cnblogs.com/csc13813017371/p/10584971.html

posted on 2019-03-24 13:08  栖枝Fairy  阅读(151)  评论(1编辑  收藏  举报