C++ 第二次实验

实验内容:

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

 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,b;
14     double c,d;
15     struct Complex e,f,g;
16     //整型数据
17     cin>>a>>b;
18     cout<<add(a,b)<<endl;
19     //浮点型数据
20     cin>>c>>d;
21     cout<<add(c,d)<<endl;
22     //复数
23     cin>>e.real>>e.imaginary;
24     cin>>f.real>>f.imaginary;
25     g=add(e,f);
26     cout<<g.real<<"+"<<g.imaginary<<"i"<<endl;
27     return 0;
28 }
29 int add(int x,int y)
30 {
31     return x+y;
32 }
33 double add(double x,double y)
34 {
35     return x+y;
36 }
37  Complex add(Complex x,Complex y)
38 {
39     Complex i;
40     i.real=x.real+y.real;
41     i.imaginary=x.imaginary+y.imaginary;
42     return i;
43 }

原先我直接在复数的相加的函数里输出了结果,但是,既然别的函数都是返回一个值,所以最好也把结构体整体返回比较好。

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

 1 #include <iostream>
 2 using namespace std;
 3 int A[]={3,5,8,7,4,1,2,6};
 4 int part(int A[],int left,int right);
 5 void myswap(int a,int b);
 6 void quicksort(int A[],int left,int right)
 7 {
 8     int p;
 9     if(left<right)
10     {
11         p=part(A,left,right);
12         quicksort(A,left,p-1);
13         quicksort(A,p+1,right);
14     }
15 }
16 int part(int A[],int left,int right)
17 {
18     int i,j,pivot;
19     pivot=A[right];
20     i=left;
21     for(j=left;j<=right-1;j++)
22     {
23         if(A[j]<pivot)
24         {
25             myswap(j,i);
26             i++;
27         }
28     }
29     myswap(i,right);
30     return i;
31 }
32 void myswap(int a,int b)
33 {
34    int t;
35     t=A[a];
36     A[a]=A[b];
37     A[b]=t;
38 }
39 int main ()
40 {
41     int n=8;
42     cout<<"the original array is:";
43     for(int i=0;i<n;i++)
44     {
45         cout<<A[i]<<" ";
46     }
47     cout<<endl;
48     quicksort(A,0,n-1);
49     cout<<"the sorted array is:";
50     for(int i=0;i<n;i++)
51     {
52         cout<<A[i]<<" ";
53     }
54     cout<<endl;
55     return 0;
56 }

这题要有独特的思想才能做的出来,有点难。

3、类的定义、实现和使用编程练习 设计并实现一个用户类User,并在主函数中使用和测试这个类。具体要求如下: 每一个用户有用户名(name), 密码(passwd),联系邮箱(email)三个属性。 支持设置用户信息setInfo()。允许设置信息时密码默认为6个1,联系邮箱默认为空串。 支持打印用户信息printInfo()。打印用户名、密码、联系邮箱。其中,密码以6个*方式显示。 支持修改密码changePasswd(),。在修改密码前,要求先输入旧密码,验证无误后,才允许修改。 如果输入旧密码时,连续三次输入错误,则提示用户稍后再试,暂时退出修改密码程序。 在main()函数中创建User类实例,测试User类的各项操作(设置用户信息,修改密码,打印用户信 息) User类功能的完善及拓展丰富(===选做===) 自行设计。在前述内容的基础上,对代码和功能做完善,使其更符合实际应用场景。比如: 支持修改邮箱;用户设置邮箱时对邮箱地址合法性的检测提示(比如是否包含@) 用户更改密码时,当用户输入旧密码和新密码时,屏幕上均以星号代替,而不会显示用户实际 输入的密码;设置密码时对密码的长度、合法性进行有效性校验,等等

  1 #include <iostream>
  2 #include <string>
  3 #include <conio.h>
  4 using namespace std;
  5 class User
  6 {
  7 
  8     public:
  9         User ();
 10         void setInfo();
 11         void changePasswd();
 12         void printInfo();
 13         string xinghao();
 14     private:
 15         string name;
 16         string passwd;
 17         string email;
 18 };
 19 User::User()
 20 {
 21     passwd="111111";
 22 }
 23 //User类的实现
 24 //成员函数setInfo()的实现
 25 //功能:设置用户名,密码,邮箱
 26 void User::setInfo()
 27 {
 28     cout<<"请输入用户名:";
 29     cin>>name;
 30     cout<<"请输入邮箱地址:";
 31     cin>>email;
 32 }
 33 //成员函数changepasswd()的实现
 34 //功能:修改密码
 35 void User::changePasswd()
 36 {
 37     int count=1;
 38     string oldpasswd,newpasswd;
 39 
 40     while(oldpasswd!=passwd)
 41     {
 42         cout<<"请输入旧密码:";
 43         oldpasswd=xinghao();
 44         if(oldpasswd==passwd)
 45             break;
 46         if(count==3)
 47         {
 48             break;
 49         }
 50         cout<<"输入的旧密码不正确!"<<endl;
 51         cout<<"你还有"<<3-count<<"次机会!"<<endl;
 52         count++;
 53     }
 54     if(count==3)
 55     {
 56         cout<<"请稍后尝试修改。"<<endl;
 57     }
 58     else
 59     {
 60         while(1)
 61         {
 62             cout<<"请输入新密码:";
 63             newpasswd=xinghao();
 64             if(newpasswd.size()!=6)
 65             {
 66                 cout<<"密码长度不正确!"<<endl;
 67                 continue;
 68             }
 69             cout<<"修改密码成功!"<<endl;
 70             break;
 71         }
 72     }
 73 }
 74 
 75 //成员函数printInfo()的实现
 76 //功能:打印用户信息
 77 void User::printInfo()
 78 {
 79     cout<<"用户名:"<<name<<endl;
 80     cout<<"密码:"<<"******"<<endl;
 81     cout<<"邮箱地址:"<<email<<endl;
 82 }
 83 //成员函数xinghao()的实现
 84 string User::xinghao()
 85 {
 86     string passwd;
 87     string p;
 88     int i=0;
 89     while(i<6)
 90     {
 91         p=getch();
 92         cout<<"*";
 93         passwd+=p;
 94         i++;
 95     }
 96     cout<<endl;
 97     return passwd;
 98 }
 99 int main ()
100 {
101     int number=0;
102     string flag;
103     User user;
104     while(1)
105     {
106         number++;
107         cout << "测试" <<number<<"......." <<endl;
108         user.setInfo();
109         user.printInfo();
110         user.changePasswd();
111         user.printInfo();
112         cout<<"是否想要退出测试?是或否"<<endl;
113         cin>>flag;
114         if(flag=="")break;
115     }
116     return 0;
117 }

bug有点多,尝试了多次。

实验总结:

1、重载函数要注意形参列表必须不同,要么是参数个数要么是参数的数据类型,返回值的类型无关。

2、快速排序要理解他的核心思想就是找到一个标准数然后其他数与他比较,如果小于他就交换到左边,大于他则不变,以此循环。

3、类的定义和使用要把规则搞清楚,其他部分的具体实现和以前相似。

评价地址:

https://www.cnblogs.com/xiaobailong123/

https://www.cnblogs.com/pink-fairy/

https://www.cnblogs.com/Tiger-Hu22/

 

转载于:https://www.cnblogs.com/knight04/p/10585506.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值