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)第二次作业进度
贵州师范大学软件工程第二次作业 徐 镇 王铭霞 张 英 涂江枫 张 燕 安 坤 周 娟 杨明颢 杨家堂 罗文豪 娄秀盛 周 娟 李盼 岳庆 张颖 李丽思 邓婷 唐洁 郑倩 尚清丽 陈小丽 毛茸 宋光能 ...
随机推荐
- [GO]字符串的使用
package main import ( "fmt" "strings" ) func main() { //判断字符串1是否包含字符串2,如果包含则返回tr ...
- Redis实现高并发下的抢购、秒杀功能
博主最近在项目中遇到了抢购问题!现在分享下.抢购.秒杀是如今很常见的一个应用场景,主要需要解决的问题有两个:1 高并发对数据库产生的压力2 竞争状态下如何解决库存的正确减少("超卖" ...
- Linux软件包的管理
RPM软件包 RPM软件包一般的安装位置(分散): 管理程序:/sbin/* /usr/sbin/* 普通用户程序:/bin/* /usr/bin/* rpm -q ===> rpm -quer ...
- hdu2579之BFS
Dating with girls(2) Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- Android-Activity临时数据的保存
Activity临时数据的保存是非常重要的,例如:一款小说APP应用,读者使用这款APP看到了223页,用户也没有去记看了多少页: 突然去接了个电话,或者开启的应用程序太多了,可能会导致这款APP应用 ...
- Android-原生对话框
package liudeli.ui.all; import android.app.Activity; import android.app.AlertDialog; import android. ...
- IE8下window.open 二次无法加载页面
我原先的IE是系统默认自带的IE7,升级到IE8之后,就出现了此现象: 打开一个窗口(window.open方式)后,再打开时,新窗口的页面显示空白,无法加载其内容.关闭ie后,重新偿亦是如此,第一次 ...
- c# 跨线程访问窗体UI
定义个结构体用于存储线程中传递的参数信息 struct ImgInfo { public string url; public string path; }; 参数传递到线程中 ImgInfo img ...
- JavaScript作用域详解
作用域在JavaScript中是非常重要的概念,理解了它对更深入地理解闭包等概念都有很大的帮助,这篇文章就来谈谈我对作用域的理解. 一.全局作用域与局部作用域 在JavaScri ...
- poj 3468 A Simple Problem with Integers 线段树区间加,区间查询和(模板)
A Simple Problem with Integers Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://poj.org/problem?i ...