c++第二次作业
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++第二次作业的更多相关文章
- 耿丹CS16-2班第二次作业汇总
-- Deadline: 2016-09-28 12:00 -- 作业内容:http://www.cnblogs.com/huangjunlian/p/5891726.html -- 第二次作业总结: ...
- JAVA第二次作业展示与学习心得
JAVA第二次作业展示与学习心得 在这一次作业中,我学习了复选框,密码框两种新的组件,并通过一个邮箱登录界面将两种组件运用了起来.具体的使用方法和其他得组件并没有什么大的不同. 另外我通过查阅资料使用 ...
- 20169212《Linux内核原理与分析》第二周作业
<Linux内核原理与分析>第二周作业 这一周学习了MOOCLinux内核分析的第一讲,计算机是如何工作的?由于本科对相关知识的不熟悉,所以感觉有的知识理解起来了有一定的难度,不过多查查资 ...
- 软件工程(QLGY2015)第二次作业点评(随机挑选20组点评)
相关博文目录: 第一次作业点评 第二次作业点评 第三次作业点评 说明:随机挑选20组点评,大家可以看看blog名字,github项目名字,看看那种是更好的,可以学习,每个小组都会反应出一些问题,希望能 ...
- 程序设计第二次作业<1>
面向对象程序设计第二次作业<1> Github 链接:https://github.com/Wasdns/object-oriented 题目: <1>第一次尝试 我立马认识到 ...
- homework-02,第二次作业——寻找矩阵最大子序列和
经过漫漫漫~~~~~~~~~~~~~~长的编译和调试,第二次作业终于告一段落了 先放出源码,思路后面慢慢道来 #include<stdio.h> #include<stdlib.h& ...
- 20169210《Linux内核原理与分析》第二周作业
<Linux内核原理与分析>第二周作业 本周作业分为两部分:第一部分为观看学习视频并完成实验楼实验一:第二部分为看<Linux内核设计与实现>1.2.18章并安装配置内核. 第 ...
- SQL 第二章 作业
/*第二章 作业*/ create table S ( sno char(2) NOT NULL UNIQUE, sname char(3), city char(2) ); alter table ...
- 软件工程(GZSD2015)第二次作业小结
第二次作业,从4月7号开始,陆续开始提交作业.根据同学们提交的作业报告,相比第一次作业,已经有了巨大改变,大家开始有了完整的实践,对那些抽象的名词也开始有了直观的感受,这很好.然后有一些普遍存在的问题 ...
- 软件工程(GZSD2015)第二次作业进度
贵州师范大学软件工程第二次作业 徐 镇 王铭霞 张 英 涂江枫 张 燕 安 坤 周 娟 杨明颢 杨家堂 罗文豪 娄秀盛 周 娟 李盼 岳庆 张颖 李丽思 邓婷 唐洁 郑倩 尚清丽 陈小丽 毛茸 宋光能 ...
随机推荐
- C# 四舍五入的理解
Math.Round(45.367,2) //Returns 45.37 Math.Round(45.365,2) //Returns 45.36 C#中的Round()不是我 ...
- 编写高质量代码改善C#程序的157个建议——建议130:以复数命名枚举类型,以单数命名枚举元素
建议130:以复数命名枚举类型,以单数命名枚举元素 枚举类型应该具有负数形式,它表达的是将一组相关元素组合起来的语义.比如: enum Week { Monday, Tuesday, Wednesda ...
- NIOS II下基于中断的UART接收和发送设计示例代码
#include "sys/alt_stdio.h" #include "altera_avalon_uart_regs.h" #include "s ...
- 解决NIOS II工程移动在磁盘上位置后project无法编译问题
说明:本文档于2017年3月4日由小梅哥更新部分内容,主要是增加了讲解以Quartus II13.0为代表的经典版本和以15.1为代表的更新版本之间,解决问题的一些小的差异. 如果用户只是想快速解决问 ...
- iOS AppStore个人开发者账号申请
一.申请Apple Developer账号 1.注册App ID 1.打开苹果开发者网页,选择Account,注册Apple ID. 2.填写注册信息 3.地区选择China,填写好验证码,点击C ...
- Update语句到底是如何操作记录的?
经常会听到一些开发的朋友说,Update语句的操作原理是:先删后加!今天偶然想起这句话,索性验证一下.参考下面示例: USE CSDN go --新添加一个文件组和文件 ALTER DATABASE ...
- asp.net——Ajax与ashx异步请求的简单案例
Ajax与ashx异步请求的简单案例: 前台页面(aspx): <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//E ...
- Consul .netcore
0)基本概念 consul常用于服务发现 [微服务] web_Api \ \ ->注册服务 raft选举le ...
- commons工具类
转自:https://blog.csdn.net/leaderway/article/details/52387925 1.1. 开篇 在Java的世界,有很多(成千上万)开源的框架,有成功的,也有不 ...
- MySQL不带where条件的UPDATE和DELETE 限制操作说明
本文来自 网易云社区 . 数据安全是业务的基石,但是DBA 总会遇到救火情况,业务误删除全表或者误更新错全表业务数据,导致服务不可用 sql_safe_updates参数可以限制不带where条件的u ...