实验二报告

Posted 21savage-code

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实验二报告相关的知识,希望对你有一定的参考价值。

第一部分:代码&运行结果

第一题:设置一个重载函数,分别用整数、实数、复数求和

代码如下:

 1 #include<iostream>
 2 using namespace std;
 3 int add(int,int);
 4 double add(double,double);
 5 struct complex{
 6     double real;
 7     double imaginary;
 8 };
 9 complex add(complex,complex);
10 int main()
11 {
12     while(true){
13     int a,b;
14     double c,d;
15     complex e,f;
16     cout<<"请输入两个整数"<<endl; 
17     cin>>a>>b;
18     cout<<"请输入两个实数"<<endl;
19     cin>>c>>d;
20     cout<<"请输入两个复数"<<endl;
21     cin>>e.real>>e.imaginary>>f.real>>f.imaginary;
22     cout<<"整数的和为"<<add(a,b)<<endl;
23     cout<<"实数的和为"<<add(c,d)<<endl;
24     complex t=add(e,f);
25     cout<<"复数的和为"<<t.real<<+<<t.imaginary<<i<<endl;
26     return 0;
27     }        
28 }
29 int add(int a,int b)
30 {
31     int o;
32     o=a+b;
33     return o;
34 }
35  double add(double c,double d)
36 {
37     double p;
38     p=c+d;
39     return p;
40 }
41 complex add(complex m,complex n)
42 {
43 complex g;
44     g.real=m.real+n.real;
45     g.imaginary=m.imaginary+n.imaginary;
46     return g;
47 }

运行结果:

技术图片

 

第二题:写一个快速排序的函数模板

代码如下:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 using namespace std;
 5 template <class T>
 6 T find_mid(T a[],int low,int high)
 7 {
 8     a[0]=a[low];
 9     T mid=a[low];
10     while(low<high)
11     {
12         while(low<high&&a[high]>=mid)
13         high--;
14         a[low]=a[high];
15         while(low<high&&a[low]<=mid)
16         low++;
17         a[high]=a[low];
18     }
19         a[low]=a[0];
20         return low;
21 }
22     template <class T>
23     void very_quick(T a[],int low, int high)
24     {
25         if(low<high)
26         {
27             int mid=find_mid(a,low,high);
28             very_quick(a,low,mid-1);
29             very_quick(a,mid+1,high);
30         }
31     }
32 int main()
33 {
34     int a[50];
35     int m;
36     while (cin>>m) 
37     {
38         cout<<"整数排序前:";
39         for (int j=1;j<=m;j++) 
40             cin>>a[j];
41         very_quick(a,1,m);
42         cout<<"整数排序后:";
43         for (int j=1;j<=m;j++) 
44             cout<<a[j]<< ;
45      
46          double b[50];
47         int n;
48         cout<<endl;
49         cout<<"实数排序前:";
50         for (int i=1;i<=m;i++) 
51         cin>>b[i];
52         very_quick(b,1,m);
53         cout<<"实数排序后:";
54         for (int i=1;i<=m;i++) 
55             cout<<b[i]<< ;
56 }
57     return 0;
58     
59 }

结果如下:

技术图片

第三题:写一个处理用户信息的类,可以打印信息,支持修改密码。

代码如下:

#include<iostream>
#include<string>
 using namespace std;
 class user
 {
     public:
         void setinfo(string name0,string passwd0="111111",string email0=" ");
          void changepasswd();        
        void printinfo(); 
     private:        
        string name;        
        string passwd;        
        string email;  
 };
     void user::setinfo(string name0,string passwd0,string email0)
     {
         name=name0;
         passwd=passwd0;
         email=email0;        
    }
    void user::changepasswd()
    {
        cout<<"请输入旧密码:" <<endl;
        string passwd;
        int i=0;
        for(i=0;i<3;i++)
        {
            cin>>passwd;
            if(passwd=="111111")
            break;
            else
            cout<<"密码错误,请重新输入"<<endl;    
        }
        if(i==3)
        cout<<"请稍后再试"<<endl;
        else
        {
        cout<<"密码正确,输入新密码"<<endl;
        cin>>passwd;
        cout<<"修改密码成功"<<endl; 
        }
    }
    void user::printinfo()
    {
        cout<<"name:"<<name<<endl;
        cout<<"passwd:"<<"******" <<endl;
        cout<<"email:"<<email<<endl;
     } 
     int main() 
     {   
          cout << "testing 1......" << endl; 
          
         user user1; 
        user1.setinfo("Leonard");  
          user1.printinfo();   
           user1.changepasswd();   
        cout << endl << "testing 2......" << endl << endl;
         
         user user2; 
        user2.setinfo("Jonny","92197","[email protected]");  
        user2.printinfo();   
        return 0; 
     }

运行结果如下:

1.三次密码输入错误

技术图片

2.旧密码输入正确

技术图片

第二部分:实验反思

  • 在写第一道题的时候,一开始不清楚复数的实部虚部相加怎么搞,怎么改都是输出四个值的和,后来就想到了再定义一个复数的结构体类,也就是题中的complex类,将两个实部的和赋给complex.real,将两个虚部的和赋给complex.imaginary,然后直接返回整个结构体类的值,这样就能清楚的把实部和与虚部和分开了。就是下面这一小块。

 

 complex add(complex m,complex n)
{
     complex g;
      g.real=m.real+n.real;
       g.imaginary=m.imaginary+n.imaginary;
        return g;
 }

 

  • 第二题快速排序我有好多话想说,这一题花了我相当长的时间,前前后后加起来差不多最少有六七节课,先是查资料,网上对于快排有很多种不同方法,一开始同时看了两三种觉得很懵,就选了最容易懂的一种,花了一节课搞明白了原理,然后一节课写出来int类的快排,然后开始在此基础上写函数模板,最后尝试用Int&double来调试,老师说可以多写一个类,使用后只需要调用的时候参数是数组名以及数组长度,在写出这个类之后,发现排序结果不对,经过修改递归的范围,也就是low&high的值,发现不同值,排序结果不同,就知道是这里错了,然后用了一个蛮笨的方法,让实数和整数数组长度都是5,发现排序结果对了。main函数如下:
    int main()
    33 {
    34     int a[50];
    35     int m;
    36     while (cin>>m) 
    37     {
    38         cout<<"整数排序前:";
    39         for (int j=1;j<=m;j++) 
    40             cin>>a[j];
    41         very_quick(a,1,m);
    42         cout<<"整数排序后:";
    43         for (int j=1;j<=m;j++) 
    44             cout<<a[j]<< ;
    45      
    46          double b[50];
    47         int n;
    48         cout<<endl;
    49         cout<<"实数排序前:";
    50         for (int i=1;i<=m;i++) 
    51         cin>>b[i];
    52         very_quick(b,1,m);
    53         cout<<"实数排序后:";
    54         for (int i=1;i<=m;i++) 
    55             cout<<b[i]<< ;
    56 }
    57     return 0;
    58     
    59 }

    在这个主函数上花的时间反而比在函数模板上多。

  • 第三道题倒是不太难,对着employee照葫芦画瓢,比较容易能写出来,就是那个修改密码的时候要注意一下如何界定三次的范围,我是这样写的
     void user::changepasswd()
        {
            cout<<"请输入旧密码:" <<endl;
            string passwd;
            int i=0;
            for(i=0;i<3;i++)
            {
                cin>>passwd;
                if(passwd=="111111")
                break;
                else
                cout<<"密码错误,请重新输入"<<endl;    
            }
            if(i==3)
            cout<<"请稍后再试"<<endl;
            else
            {
            cout<<"密码正确,输入新密码"<<endl;
            cin>>passwd;
            cout<<"修改密码成功"<<endl; 
            }
        }

    用了一个0到3的for循环,当然也可以用while,但是我觉得这样写比较容易能看懂。

 

以上是关于实验二报告的主要内容,如果未能解决你的问题,请参考以下文章

2018-2019-2 20175308实验二《面向对象程序设计》实验报告

20165229实验二 《Java面向对象程序设计》实验报告

实验二实验报告

实验二报告

实验报告二

LaTex写实验报告