实验内容:

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

 #include <iostream>
using namespace std;
struct Complex
{
double real;
double imaginary;
};
int add(int ,int);
double add(double,double);
Complex add(Complex,Complex);
int main ()
{
int a,b;
double c,d;
struct Complex e,f,g;
//整型数据
cin>>a>>b;
cout<<add(a,b)<<endl;
//浮点型数据
cin>>c>>d;
cout<<add(c,d)<<endl;
//复数
cin>>e.real>>e.imaginary;
cin>>f.real>>f.imaginary;
g=add(e,f);
cout<<g.real<<"+"<<g.imaginary<<"i"<<endl;
return ;
}
int add(int x,int y)
{
return x+y;
}
double add(double x,double y)
{
return x+y;
}
Complex add(Complex x,Complex y)
{
Complex i;
i.real=x.real+y.real;
i.imaginary=x.imaginary+y.imaginary;
return i;
}

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

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

 #include <iostream>
using namespace std;
int A[]={,,,,,,,};
int part(int A[],int left,int right);
void myswap(int a,int b);
void quicksort(int A[],int left,int right)
{
int p;
if(left<right)
{
p=part(A,left,right);
quicksort(A,left,p-);
quicksort(A,p+,right);
}
}
int part(int A[],int left,int right)
{
int i,j,pivot;
pivot=A[right];
i=left;
for(j=left;j<=right-;j++)
{
if(A[j]<pivot)
{
myswap(j,i);
i++;
}
}
myswap(i,right);
return i;
}
void myswap(int a,int b)
{
int t;
t=A[a];
A[a]=A[b];
A[b]=t;
}
int main ()
{
int n=;
cout<<"the original array is:";
for(int i=;i<n;i++)
{
cout<<A[i]<<" ";
}
cout<<endl;
quicksort(A,,n-);
cout<<"the sorted array is:";
for(int i=;i<n;i++)
{
cout<<A[i]<<" ";
}
cout<<endl;
return ;
}

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

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

 #include <iostream>
#include <string>
#include <conio.h>
using namespace std;
class User
{ public:
User ();
void setInfo();
void changePasswd();
void printInfo();
string xinghao();
private:
string name;
string passwd;
string email;
};
User::User()
{
passwd="";
}
//User类的实现
//成员函数setInfo()的实现
//功能:设置用户名,密码,邮箱
void User::setInfo()
{
cout<<"请输入用户名:";
cin>>name;
cout<<"请输入邮箱地址:";
cin>>email;
}
//成员函数changepasswd()的实现
//功能:修改密码
void User::changePasswd()
{
int count=;
string oldpasswd,newpasswd; while(oldpasswd!=passwd)
{
cout<<"请输入旧密码:";
oldpasswd=xinghao();
if(oldpasswd==passwd)
break;
if(count==)
{
break;
}
cout<<"输入的旧密码不正确!"<<endl;
cout<<"你还有"<<-count<<"次机会!"<<endl;
count++;
}
if(count==)
{
cout<<"请稍后尝试修改。"<<endl;
}
else
{
while()
{
cout<<"请输入新密码:";
newpasswd=xinghao();
if(newpasswd.size()!=)
{
cout<<"密码长度不正确!"<<endl;
continue;
}
cout<<"修改密码成功!"<<endl;
break;
}
}
} //成员函数printInfo()的实现
//功能:打印用户信息
void User::printInfo()
{
cout<<"用户名:"<<name<<endl;
cout<<"密码:"<<"******"<<endl;
cout<<"邮箱地址:"<<email<<endl;
}
//成员函数xinghao()的实现
string User::xinghao()
{
string passwd;
string p;
int i=;
while(i<)
{
p=getch();
cout<<"*";
passwd+=p;
i++;
}
cout<<endl;
return passwd;
}
int main ()
{
int number=;
string flag;
User user;
while()
{
number++;
cout << "测试" <<number<<"......." <<endl;
user.setInfo();
user.printInfo();
user.changePasswd();
user.printInfo();
cout<<"是否想要退出测试?是或否"<<endl;
cin>>flag;
if(flag=="是")break;
}
return ;
}

bug有点多,尝试了多次。

实验总结:

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

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

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

评价地址:

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

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

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

C++ 第二次实验的更多相关文章

  1. 20145330《Java程序设计》第二次实验报告

    20145330<Java程序设计>第二次实验报告 实验二 Java面向对象程序设计 实验内容 1.初步掌握单元测试和TDD 2.理解并掌握面向对象三要素:封装.继承多态 3.初步掌握UM ...

  2. 20145320《Java程序设计》第二次实验报告

    20145320<Java程序设计>第二次实验报告 北京电子科技学院(BESTI)实验报告 课程:Java程序设计 班级:1453 指导教师:娄嘉鹏 实验日期:2016.04.12 15: ...

  3. 20145224&20145238 《信息安全系统设计基础》第二次实验

    20145224&20145238 <信息安全系统设计基础>第二次实验 课程:信息安全系统设计基础 班级:1452 姓名:陈颢文 荆玉茗 学号:20145224 20145238 ...

  4. 《Java程序设计》第二次实验报告

    20145220 <Java程序设计>第二次实验报告 课程:Java程序设计 指导教师:娄嘉鹏 实验日期:2016.04.12 实验名称:Java面向对象程序设计 实验内容 初步掌握单元测 ...

  5. 20155205 信息安全技术第二次实验 Windows口令破解

    20155205 信息安全技术第二次实验 Windows口令破解 实验原理 一.口令破解方法 口令破解主要有两种方法:字典破解和暴力破解. 字典破解是指通过破解者对管理员的了解,猜测其可能使用某些信息 ...

  6. java的第二个实验——JAVA面向对象程序设计

    java的第二个实验——JAVA面向对象程序设计 北京电子科技学院 实     验    报     告 课程:Java程序设计 班级:1352 姓名:林涵锦 学号:20135213 成绩:      ...

  7. 20155323刘威良第二次实验 Java面向对象程序设计

    20155323刘威良第二次实验 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 ...

  8. 20145333 《Java程序设计》第二次实验报告

    2014333 <Java程序设计>第二次实验报告 课程:Java程序设计 指导教师:娄嘉鹏 实验日期:2016.04.12 实验名称:Java面向对象程序设计 实验内容 初步掌握单元测试 ...

  9. 20144303 《Java程序设计》第二次实验实验报告

    20144303 <Java程序设计>第二次实验实验报告 北京电子科技学院(besti)实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握U ...

  10. 20145240 《Java程序设计》第二次实验报告

    20145240 <Java程序设计>第二次实验报告 北京电子科技学院(BESTI)实验报告 课程:Java程序设计 班级:1452 指导教师:娄嘉鹏 实验日期:2016.04.12 实验 ...

随机推荐

  1. 【转】利用apktool反编译apk,并且重新签名打包

    网站:https://ibotpeaches.github.io/Apktool,下载安装好apktool. 我的安装在 C:\Users\Administrator\Downloads\apktoo ...

  2. PowerDesigner的Table视图同时显示Code和Name的方法[转发]

    PowerDesigner中Table视图同时显示Code和Name,像下图这样的效果: 实现方法:Tools-Display Preference

  3. $Django 路飞之显示视频,Redis存购物车数据,优惠卷生成表,优惠卷的一个领取表。(知识小回顾)

    知识小回顾之json序列化问题 精髓:支持python的几种数据类型(注意不是对象,不能放对象),其次是tuple变list. ensure_ascii:默认值True,如果dict内含有non-AS ...

  4. 浅析nodejs的buffer类(转)

    最近翻阅了node v0.10.4的buffer类的源代码,收获不少,也很久没有在cnode上发表文章了,想把一些收获分享给大家,有什么错误的地方希望大牛们指正啊. 前阵子有位rrestjs框架的使用 ...

  5. Python-Django 视图层

    1 request对象 method:请求方式 GET:get请求的参数(post请求,也可以携带参数) POST:post请求的参数(本质是从bdoy中取出来,放到里面了) COOKIES---&g ...

  6. 今天聊一聊Java引用类型的强制类型转换

    实际上基本类型也是存在强制类型转换的,这里简单提一下.概括来讲分为两种: 1.自动类型转换,也叫隐式类型转换,即数据范围小的转换为数据范围大的,此时编译器自动完成类型转换,无需我们写代码 2.强制类型 ...

  7. ESP8266代码中的存储标记

    const uint8 MyArr[1024] ICACHE_RODATA_ATTR = {0}; void MyFun() ICACHE_FLASH_ATTR { } 这种 ICACHE 开头的宏作 ...

  8. 如何把PDF文件拆分为多个文件

    一个PDF文件有很多个PDF页面组成,有时候我们只需要单个页面的时候应该怎么做呢,这个时候就需要拆分PDF文件了,那么如何把 PDF文件拆分为多个文件呢,应该有很多的小伙伴都想知道吧,那就让我们一起来 ...

  9. pl/sql学习(4): 包package

    本文简单介绍包, 目前来看我用的不多, 除了之前 为了实现 一个procedure 的输出参数是结果集的时候用到过 package. 概念: 包是一组相关过程.函数.变量.常量和游标等PL/SQL程序 ...

  10. 微信小程序语音与讯飞语音识别接口(Java),Kronopath/SILKCodec,ffmpeg处理silk,pcm,wav转换

    项目需求,需要使用讯飞的语音识别接口,将微信小程序上传的录音文件识别成文字返回 首先去讯飞开放平台中申请开通语音识别功能 在这里面下载sdk,然后解压,注意appid与sdk是关联的,appid在初始 ...