c++第二次作业

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

 1 #include<iostream>
 2 using namespace std;
 3 struct Complex 
 4 {
 5     double real;
 6     double imag;
 7 };
 8 void add(int x,int y)
 9 {
10     cout<<"和 为:"<<x+y<<endl;
11     cout<<endl;
12 }
13 void add(double x,double y)
14 {
15     cout<<"和 为:"<<x+y<<endl;
16     cout<<endl;
17 }
18 void add(Complex x,Complex y)
19 {
20     Complex h;
21     h.real=x.real+y.real;
22     h.imag=x.imag+y.imag;
23     if(h.imag>=0) cout<<"和 为:"<<h.real<<"+"<<h.imag<<"i"<<endl;
24     else cout<<"和 为:"<<h.real<<h.imag<<"i"<<endl;
25     cout<<endl;
26 }
27 int main()
28 {
29     int x1,y1;
30     double x2,y2,x31,x32,y31,y32;
31     
32     cout<<"请 输入两个int类型的数:";
33     cin>>x1>>y1;
34     add(x1,y1);
35     
36     cout<<"请 输入两个double类型数:";
37     cin>>x2>>y2;
38     add(x2,y2);
39     
40     cout<<"请 输入两个complex类型数: "<<endl;
41     cout<<"请 输入第一个数的实部:";
42     cin>>x31;
43     cout<<"请 输入第一个数的虚部:";
44     cin>>x32;
45     cout<<"请 输入第二个数的实部:";
46     cin>>y31;
47     cout<<"请 输入第二个数的虚部:";
48     cin>>y32;
49     add({x31,x32},{y31,y32});
50     return 0;
51 }

 

 

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

头文件quick.h

 1 #ifndef QUICK_H
 2 #define QUICK_H 
 3 #include<iostream>
 4 using namespace std;
 5 void PaiXu(double a[],int low,int high)
 6 {
 7     int x=low,y=high,i;double t=a[x];
 8     if(low<high)
 9     {
10         while(x<y)
11         {
12             while(a[y]>t&&x<y) 
13                 y--;
14             if(x<y){a[x]=a[y];x++;}
15             while(a[x]<t&&x<y)
16                 x++;
17             if(x<y){a[y]=a[x];y--;}
18         }
19         a[x]=t;
20         PaiXu(a,x+1,high);PaiXu(a,low,x-1);
21     }
22 }
23 void QuickPai(double a[],int n)
24 {
25     int i;
26     PaiXu(a,0,n-1);
27     cout<<"排 序后为:";
28     for(i=0;i<n;i++)
29         cout<<a[i]<<" ";
30 }
31 #endif

主程序

 1 #include<iostream>
 2 #include"quick.h""
 3 using namespace std;
 4 int main()
 5 {
 6     int n=0,n1,i;
 7     double a[100],t;
 8     cout<<"请 输入数组并以 -1 结束:";
 9     while(1)
10     {
11         cin>>t;
12         if(t==-1) break;
13         a[n]=t;
14         n++;
15     }
16     cout<<"请 输入你想要排序的数组长度:";
17     while(1)
18     {
19         cin>>n1;
20         if(n1<=n) break;
21         cout<<"长 度过长,请重新输入:";
22     }
23     QuickPai(a,n1);
24     return 0;
25 }

 

 

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

 1 #include<iostream>
 2 #include<string.h>
 3 using namespace std;
 4 class user
 5 {
 6     public:
 7         void setInfo();
 8         void printInfo();
 9         void changePasswd();
10     private:
11         string name="bot";
12         string passwd="111111";
13         string email="";
14  } ;
15  void user::setInfo()
16  {
17      string x;
18      cout<<"请 输入用户名:";
19      cin>>name;
20      cout<<"请 输入密码:";
21      cin>>passwd;
22      cout<<"请 输入邮箱地址:";
23      cin>>email;
24      cout<<"修 改成功!"<<endl;
25  }
26  void user::printInfo()
27  {
28      cout<<"用 户名:"<<name<<endl;
29      cout<<"密 码:******"<<endl;
30      cout<<"邮 箱地址:"<<email;
31  }
32  void user::changePasswd()
33  {
34      string t;
35      int n=3;
36      do
37      {
38          cout<<"请 输入旧密码,默认密码为111111:";
39         cin>>t;
40         if(t.compare(passwd)==0) break;
41         else{n--;cout<<"请 重新输入,剩余次数为: "<<n<<endl;}    
42      }while(n!=0);
43       
44      if(n!=0) {cout<<"请 输入新密码:";cin>>passwd;cout<<"修 改成功!"<<endl;}
45      else cout<<"请 稍后重试,暂时退出修改密码!"<<endl;
46  }
47  int main()
48  {
49      user us;
50      int x,k=0;
51     cout<<"1 为设置用户信息,2为打印用户信息,3为修改密码,4为退出菜单:"<<endl;
52      while(1)
53      {
54          cout<<endl;
55          cout<<"请 输入指令:";
56         cin>>x;
57          switch(x)
58          {
59              case 1:if(k==0)
60                      {
61                          us.setInfo();
62                         k=1;
63                         break;
64                     }
65                     else
66                     {
67                         cout<<"请 勿重复设置用户信息!"<<endl;
68                         break;
69                     }
70              case 2:us.printInfo();cout<<endl;break;
71              case 3:if(k==1)
72                      {
73                          us.changePasswd();break;
74                         break;
75                     }
76                     else
77                     {
78                         cout<<"尚 未设置用户信息!"<<endl;
79                         break;
80                     }
81              case 4:cout<<"谢 谢使用!"<<endl;return 0;break;
82              default:cout<<"无 效的指令,请重新输入:"<<endl;
83          }
84      }
85      return 0;
86  }

 

 

 

实验总结与体会:

1、感谢大佬的代码给了我思路;

2、递归问题要多加练习;

3、上学期要求做的oj的题目大多没什么思想内涵;

4、写了个好玩的程序,c环境的,可以输出253!的结果。

 1 /*运用列竖式做乘法的方法计算大数位数,
 2   cheng用于大数位乘法,jinwei用于十进制进位,qu将被乘数转化为数组,
 3   a[]存储原本数,b[]用于计算,c[]存储乘数*/
 4 
 5 #include<stdio.h>
 6 #define N 500
 7 int cheng(int [],int [],int,int);
 8 void jinwei(int [],int);
 9 
10 /*做乘法*/
11 int cheng(int a[],int c[],int n,int w)
12 {
13     int b[N][N]={0},i,j,i1,j1;
14     for (i=0;i<w;i++)
15         for (j=0;j<n;j++)
16             b[i][i+j]=a[j];
17     for (i=0;i<w;i++)
18     {
19         for (j=0;j<n;j++)
20             b[i][i+j]*=c[i];
21         jinwei(b[i],i+j);
22     }
23     if (b[i-1][i+j-1]!=0) j++;
24     for (j1=0;j1<i+j-1;j1++)
25     {
26         for (i1=1;i1<w;i1++)
27             b[0][j1]+=b[i1][j1];
28     }
29     jinwei(b[0],j1);
30     if (b[0][j1]!=0) j1++;
31     for (i=0;i<j1;i++)
32         a[i]=b[0][i];
33     return j1;
34 }
35 
36 /*十进制进位*/
37 void jinwei(int b[],int j)
38 {
39     int i1;
40     for (i1=0;i1<=j||b[i1]!=0;i1++)
41         if (b[i1]>9) 
42         {
43             b[i1+1]+=(b[i1]/10);
44             b[i1]%=10;
45         }
46 }
47 
48 /*把数转换为数组*/
49 int qu(int *p,int x)
50 {
51     int n=0;
52     while(x)
53     {
54         *(p+n)=x%10;
55         x/=10;
56         n++;
57     }
58     return n;
59 }
60 
61 /*做阶乘*/
62 int jiecheng(int x)
63 {
64     int a[N]={0},c[N]={0},n=0,w=0,i,j=1;
65     n=qu(a,1);
66     for (i=1;i<=x;i++)
67     {    
68         w=qu(c,i);
69         j=cheng(a,c,j,w);
70     }
71     printf("%d!的结果是:",x);
72     for (i=j-1;i>=0;i--)
73         printf("%d",a[i]);
74     printf("\n");
75     return j;
76 }
77 
78 int main()
79 {
80     int w,n;
81     while (scanf("%ld",&n)!=EOF)
82     {
83         w=jiecheng(n);
84         printf("位数为:%d\n",w);
85     }
86     return 0;
87 }

 

转载于:https://www.cnblogs.com/nnn13579/p/10561474.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值