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

 #include<iostream>
using namespace std;
struct Complex
{
double real;
double imag;
};
void add(int x,int y)
{
cout<<"和 为:"<<x+y<<endl;
cout<<endl;
}
void add(double x,double y)
{
cout<<"和 为:"<<x+y<<endl;
cout<<endl;
}
void add(Complex x,Complex y)
{
Complex h;
h.real=x.real+y.real;
h.imag=x.imag+y.imag;
if(h.imag>=) cout<<"和 为:"<<h.real<<"+"<<h.imag<<"i"<<endl;
else cout<<"和 为:"<<h.real<<h.imag<<"i"<<endl;
cout<<endl;
}
int main()
{
int x1,y1;
double x2,y2,x31,x32,y31,y32; cout<<"请 输入两个int类型的数:";
cin>>x1>>y1;
add(x1,y1); cout<<"请 输入两个double类型数:";
cin>>x2>>y2;
add(x2,y2); cout<<"请 输入两个complex类型数: "<<endl;
cout<<"请 输入第一个数的实部:";
cin>>x31;
cout<<"请 输入第一个数的虚部:";
cin>>x32;
cout<<"请 输入第二个数的实部:";
cin>>y31;
cout<<"请 输入第二个数的虚部:";
cin>>y32;
add({x31,x32},{y31,y32});
return ;
}

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

头文件quick.h

 #ifndef QUICK_H
#define QUICK_H
#include<iostream>
using namespace std;
void PaiXu(double a[],int low,int high)
{
int x=low,y=high,i;double t=a[x];
if(low<high)
{
while(x<y)
{
while(a[y]>t&&x<y)
y--;
if(x<y){a[x]=a[y];x++;}
while(a[x]<t&&x<y)
x++;
if(x<y){a[y]=a[x];y--;}
}
a[x]=t;
PaiXu(a,x+,high);PaiXu(a,low,x-);
}
}
void QuickPai(double a[],int n)
{
int i;
PaiXu(a,,n-);
cout<<"排 序后为:";
for(i=;i<n;i++)
cout<<a[i]<<" ";
}
#endif

主程序

 #include<iostream>
#include"quick.h""
using namespace std;
int main()
{
int n=,n1,i;
double a[],t;
cout<<"请 输入数组并以 -1 结束:";
while()
{
cin>>t;
if(t==-) break;
a[n]=t;
n++;
}
cout<<"请 输入你想要排序的数组长度:";
while()
{
cin>>n1;
if(n1<=n) break;
cout<<"长 度过长,请重新输入:";
}
QuickPai(a,n1);
return ;
}

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

 #include<iostream>
#include<string.h>
using namespace std;
class user
{
public:
void setInfo();
void printInfo();
void changePasswd();
private:
string name="bot";
string passwd="";
string email="";
} ;
void user::setInfo()
{
string x;
cout<<"请 输入用户名:";
cin>>name;
cout<<"请 输入密码:";
cin>>passwd;
cout<<"请 输入邮箱地址:";
cin>>email;
cout<<"修 改成功!"<<endl;
}
void user::printInfo()
{
cout<<"用 户名:"<<name<<endl;
cout<<"密 码:******"<<endl;
cout<<"邮 箱地址:"<<email;
}
void user::changePasswd()
{
string t;
int n=;
do
{
cout<<"请 输入旧密码,默认密码为111111:";
cin>>t;
if(t.compare(passwd)==) break;
else{n--;cout<<"请 重新输入,剩余次数为: "<<n<<endl;}
}while(n!=); if(n!=) {cout<<"请 输入新密码:";cin>>passwd;cout<<"修 改成功!"<<endl;}
else cout<<"请 稍后重试,暂时退出修改密码!"<<endl;
}
int main()
{
user us;
int x,k=;
cout<<"1 为设置用户信息,2为打印用户信息,3为修改密码,4为退出菜单:"<<endl;
while()
{
cout<<endl;
cout<<"请 输入指令:";
cin>>x;
switch(x)
{
case :if(k==)
{
us.setInfo();
k=;
break;
}
else
{
cout<<"请 勿重复设置用户信息!"<<endl;
break;
}
case :us.printInfo();cout<<endl;break;
case :if(k==)
{
us.changePasswd();break;
break;
}
else
{
cout<<"尚 未设置用户信息!"<<endl;
break;
}
case :cout<<"谢 谢使用!"<<endl;return ;break;
default:cout<<"无 效的指令,请重新输入:"<<endl;
}
}
return ;
}

实验总结与体会:

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

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

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

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

 /*运用列竖式做乘法的方法计算大数位数,
cheng用于大数位乘法,jinwei用于十进制进位,qu将被乘数转化为数组,
a[]存储原本数,b[]用于计算,c[]存储乘数*/ #include<stdio.h>
#define N 500
int cheng(int [],int [],int,int);
void jinwei(int [],int); /*做乘法*/
int cheng(int a[],int c[],int n,int w)
{
int b[N][N]={},i,j,i1,j1;
for (i=;i<w;i++)
for (j=;j<n;j++)
b[i][i+j]=a[j];
for (i=;i<w;i++)
{
for (j=;j<n;j++)
b[i][i+j]*=c[i];
jinwei(b[i],i+j);
}
if (b[i-][i+j-]!=) j++;
for (j1=;j1<i+j-;j1++)
{
for (i1=;i1<w;i1++)
b[][j1]+=b[i1][j1];
}
jinwei(b[],j1);
if (b[][j1]!=) j1++;
for (i=;i<j1;i++)
a[i]=b[][i];
return j1;
} /*十进制进位*/
void jinwei(int b[],int j)
{
int i1;
for (i1=;i1<=j||b[i1]!=;i1++)
if (b[i1]>)
{
b[i1+]+=(b[i1]/);
b[i1]%=;
}
} /*把数转换为数组*/
int qu(int *p,int x)
{
int n=;
while(x)
{
*(p+n)=x%;
x/=;
n++;
}
return n;
} /*做阶乘*/
int jiecheng(int x)
{
int a[N]={},c[N]={},n=,w=,i,j=;
n=qu(a,);
for (i=;i<=x;i++)
{
w=qu(c,i);
j=cheng(a,c,j,w);
}
printf("%d!的结果是:",x);
for (i=j-;i>=;i--)
printf("%d",a[i]);
printf("\n");
return j;
} int main()
{
int w,n;
while (scanf("%ld",&n)!=EOF)
{
w=jiecheng(n);
printf("位数为:%d\n",w);
}
return ;
}

c++第二次作业的更多相关文章

  1. 耿丹CS16-2班第二次作业汇总

    -- Deadline: 2016-09-28 12:00 -- 作业内容:http://www.cnblogs.com/huangjunlian/p/5891726.html -- 第二次作业总结: ...

  2. JAVA第二次作业展示与学习心得

    JAVA第二次作业展示与学习心得 在这一次作业中,我学习了复选框,密码框两种新的组件,并通过一个邮箱登录界面将两种组件运用了起来.具体的使用方法和其他得组件并没有什么大的不同. 另外我通过查阅资料使用 ...

  3. 20169212《Linux内核原理与分析》第二周作业

    <Linux内核原理与分析>第二周作业 这一周学习了MOOCLinux内核分析的第一讲,计算机是如何工作的?由于本科对相关知识的不熟悉,所以感觉有的知识理解起来了有一定的难度,不过多查查资 ...

  4. 软件工程(QLGY2015)第二次作业点评(随机挑选20组点评)

    相关博文目录: 第一次作业点评 第二次作业点评 第三次作业点评 说明:随机挑选20组点评,大家可以看看blog名字,github项目名字,看看那种是更好的,可以学习,每个小组都会反应出一些问题,希望能 ...

  5. 程序设计第二次作业<1>

    面向对象程序设计第二次作业<1> Github 链接:https://github.com/Wasdns/object-oriented 题目: <1>第一次尝试 我立马认识到 ...

  6. homework-02,第二次作业——寻找矩阵最大子序列和

    经过漫漫漫~~~~~~~~~~~~~~长的编译和调试,第二次作业终于告一段落了 先放出源码,思路后面慢慢道来 #include<stdio.h> #include<stdlib.h& ...

  7. 20169210《Linux内核原理与分析》第二周作业

    <Linux内核原理与分析>第二周作业 本周作业分为两部分:第一部分为观看学习视频并完成实验楼实验一:第二部分为看<Linux内核设计与实现>1.2.18章并安装配置内核. 第 ...

  8. SQL 第二章 作业

    /*第二章 作业*/ create table S ( sno char(2) NOT NULL UNIQUE, sname char(3), city char(2) ); alter table ...

  9. 软件工程(GZSD2015)第二次作业小结

    第二次作业,从4月7号开始,陆续开始提交作业.根据同学们提交的作业报告,相比第一次作业,已经有了巨大改变,大家开始有了完整的实践,对那些抽象的名词也开始有了直观的感受,这很好.然后有一些普遍存在的问题 ...

  10. 软件工程(GZSD2015)第二次作业进度

    贵州师范大学软件工程第二次作业 徐 镇 王铭霞 张 英 涂江枫 张 燕 安 坤 周 娟 杨明颢 杨家堂 罗文豪 娄秀盛 周 娟 李盼 岳庆 张颖 李丽思 邓婷 唐洁 郑倩 尚清丽 陈小丽 毛茸 宋光能 ...

随机推荐

  1. [转]修改github已提交的用户名和邮箱

    改变作者信息 为改变已经存在的 commit 的用户名和/或邮箱地址,你必须重写你 Git repo 的整个历史. 警告:这种行为对你的 repo 的历史具有破坏性.如果你的 repo 是与他人协同工 ...

  2. QtCreator下QML翻译

    首先打开.pro工程文件,在文件中添加文本段:TRANSLATIONS = testTranslate_zh.ts 在pro右键,单击再次弹出命令提示,如图 在命令行中,输入lupdate testT ...

  3. Caused by: org.hibernate.HibernateException: Unable to build the default ValidatorFactory

    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'testAction': ...

  4. 编写高质量代码改善C#程序的157个建议——建议105:使用私有构造函数强化单例

    建议105:使用私有构造函数强化单例 单例指一个类型只生成一个实例对象.单例的一个简单实现如下所示: static void Main(string[] args) { Singleton.Insta ...

  5. JavaScript执行顺序

    当JavaScript引擎解析脚本时,它会在预编译期对所有声明的变量和函数进行处理.所以,就会出现当JavaScript解释器执行下面脚本时不会报错: alert(a);                ...

  6. 【转】java中定义二维数组的几种写法

    原文链接 注:以下的 type[][] var 也可以这样申明 type var[][] type为数组的类型,var为变量名 写法一:行列固定的数组 //定义二维数组写法1 class Test { ...

  7. CF869C The Intriguing Obsession(组合数学瞎搞,O(n)莫名过)

    — This is not playing but duty as allies of justice, Nii-chan! — Not allies but justice itself, Onii ...

  8. svn(subversion)代码管理

    想必大家现在都比较喜欢使用svn(subversion)完成代码管理了,因为它的开源,轻巧,易用.但是这样一个宝贝如果不知道其正确的用法,也会让我们百思不得其解,甚至耽误项目进度,浪费程序员的心血和结 ...

  9. .net 委托的简化语法

    1. 不需要构造委托对象 ThreadPool.QueueUserWorkItem:通过线程池 public static void WorkItem() { ThreadPool.QueueUser ...

  10. 快速搭建windows服务器的可视化运维环境

    开发好的程序部署在服务器上,如何对服务器的基本指标进行监控呢?最近对一套工具进行了研究,可以快速搭建服务器监管环境,很是强大,最重要的是它还很酷炫. 原理:数据采集+时序数据库+可视化,下面记录一下搭 ...