1. 用掷骰子方式,模拟班级每个学号被随机抽点的概率。 (12分) 具体要求如下: (1)设计并实现一个骰子类Dice。 ① 数据成员sides表示骰子面数。构造时,指定骰子是6面,8面,还是其它数值。 ② 成员函数int cast()是掷骰子操作的抽象,返回一个位于1~sides之间的随机数。 例如,如果骰子是6面,返回1~6之间的随机数;如果骰子是40面,返回1~40之间的随机数。

图1 UML类图 Dice类

(2)在main中,定义一个骰子对象,以班级人数作为骰子的面数构造。 比如,软嵌(计嵌)班级 40人,输入40后,以40作为骰子面数构造一个骰子对象。 使用骰子对象,掷骰子500次,统计并输出自己学号(取学号最后两位)被抽点中的概率。

附:相关函数原型: ① int rand(void) 返回一个0~RAND_MAX之间的伪随机数; 头文件<cstdlib>(也有的在<cmath>) http://www.cplusplus.com/reference/cstdlib/rand/ ② void srand (unsigned int seed); 为rand()设置随机种子。通常以时间作为随机种子,即srand(time(NULL)) 头文件<cstdlib>(也有的在<cmath>), <ctime> http://www.cplusplus.com/reference/cstdlib/srand/

 #include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
class Dice{
public:
Dice(int n);
~Dice();
int cast();
private:
int sides;
};
Dice::Dice(int n){
sides=n;
}
Dice::~Dice(){ }
int Dice::cast(){ int a;
a=rand()%sides;
return a;
}
int main(){
int num,i;
cin>>num;
Dice d(num);
int b[num];
for(i=;i<num;i++)
b[i]=; int times,t;
cin>>times;
t=times;
while(times--){
srand(times) ;
i=d.cast();
b[i]++;
} for(i=;i<num;i++){
cout<<i+<<" 被点中的概率 "<<(double)b[i]/t<<endl;
}
return ;
}

Dice随机数

截图:

2. 用户管理(新用户添加、密码修改) (18 分) 具体要求如下: (1)基于以下场景表述设计并实现用户类User ① 每一个用户有用户编号(id), 用户名(name), 密码(password)三个属性。其中,用户编号(id)由系统自动 顺序编号,用户名和密码都是字母、数字、符号的组合,新用户密码,默认”111111”。Use 类所有对象还 有一个共有属性CurrentID,用来记录当前已经被使用的最大id号(初始值999)。 每当新增一个新用户时,CurrentID的值加1,同时将这个值作为新用户的id号。 例如: 新增第1个用户user1时,CurrentID为1000,同时,user1的id自动编号为1000 新增第2个用户user2时,CurrentID为1001,同时,user2的id自动编号为1001

② 除了构造函数外,还要求User类能实现以下要求: a) 打印用户信息,包括用户编号(id), 用户名(name), 密码(password) b) 修改密码。在修改密码前,要求先输入旧密码,验证无误后,才允许修改。如果输入旧密码时,连续三 次输入错误,则提示用户稍后再试,暂时退出修改密码程序。 c) 打印 User类所有对象共有属性CurrentID,在打印该属性同时,打印最后一个新增用户的信息。

(2)在 main中创建 User类实例,测试User类的各项操作(新用户添加、密码修改、共有属性及最后一 个新增用户信息打印)

User.h

 #ifndef User_H
#define User_H
#include <string>
using std::string;
class User{
public:
User(string y,string z="");
void printmessage();
void newpassword();
~User();
void static show();
int static UserID;
private:
int id;
string name;
string password; }; #endif

User.cpp

 #include "User.h"
#include <iostream>
#include <string>
using std::string;
using namespace std;
int User::UserID=;
User::User(string y,string z){
UserID++;
id=UserID;
name=y;
password=z;
}
void User::show(){
cout<<UserID<<endl;
}
User::~User(){
UserID--;
}
void User::printmessage(){ cout<<"编号: "<<id<<" 姓名: "<<name<<" 密码: "<<password<<endl;
} void User::newpassword(){
string s,s2;
int n=,j=; while(n--){
cout<<"请输入现有密码:";
cin>>s;
cout<<endl;
if(s==password){
cout<<"请输入新密码:";
cin>> s2;
password=s2;
cout<<endl;
cout<<"修改成功!"<<endl;
cout<<endl;
break;
}
else
{
cout<<"您的密码有误,请重新输入密码!";
cout<<endl;
j++;
}
} if(j==){
cout<<"请稍后再进行修改!"<<endl;
} }

main.cpp

 #include "User.h"
#include <string>
#include <iostream>
using std::string;
using namespace std;
int main(){
int *p1;
User *u,*v;
p1=&User::UserID;
cout<<*p1+<<endl;
cout<<*p1+<<endl;
cout<<*p1+<<endl;
string h="xiao",l="";
User a(h,l),b("guaiguai"),c("lily");
u=&c; cout<<u<<endl;
a.printmessage();
b.printmessage();
c.printmessage(); b.newpassword();
c.newpassword(); u->printmessage(); return ;
}

运行截图:

3. 图书入库

main.cpp

 #include "book.h"
#include <vector>
#include<string>
#include <iostream>
using namespace std;
using std::string;
int main()
{ vector<Book>books;// 定义一个vector<Book>类对象 string isbn, title;
float price;
int j=; while(cin>>isbn>>title>>price){
Book book(isbn,title,price);
j++;
books.push_back(book);
}
// 录入图书信息,构造图书对象,并添加到前面定义的vector<Book>类对象中
// 循环录入,直到按下Ctrl+Z时为止 (也可以自行定义录入结束方式) for(int i=;i<j;i++)
{
books[i].print();
} // 输出入库所有图书信息
// 补足程序
// ... return ;
}

book.h

 #ifndef BOOK_H
#define BOOK_H #include <string>
using std::string; class Book {
public:
Book(string isbnX, string titleX, float priceX); //构造函数
void print(); // 打印图书信息
private:
string isbn;
string title;
float price;
};
#endif

book.cpp

#include "book.h"
#include <iostream>
#include <string>
using namespace std;
Book::Book(string isbnX, string titleX, float priceX){
isbn=isbnX;
title=titleX;
price=priceX;
}
void Book::print(){
cout<<"编号 "<<isbn<<" 标题 "<<title<<" 价格 "<<price<<endl;
}

问题:在使用编译器devc++5.10,修改类和函数任何一处,然后程序就别想编译了。但是函数是对的呀,不明白为啥。

比如程序2中,我添加了一个测试函数之后,编译报错。可是语法我并没有检查出什么错误。

【C++ mid-term exerises】的更多相关文章

  1. 最全的MySQL基础【燕十八传世】

    1.课前准备! 开启mysql服务:1).配置环境变量;2).net start mysql 将该sql文件导入到你的数据库中,以下所有操作都是基于该数据库表操作的!!! [此笔记是本人看着视频加上自 ...

  2. 【Reporting Services 报表开发】— 表达式

    一.常用的SSRS原始函数可以打开文本框的表达式中看到,如图1 图1 如下为SSRS中设计报表时常用的运算函数: 运算符/函数 说明 + 前后位数字则为加法,前后为字符串则为链接符号 - 数值减法 * ...

  3. 【Open Search产品评测】- 来往,7天轻松定制属于自己的搜索引擎

    [Open Search产品评测]--   来往,7天轻松定制属于自己的搜索引擎   [使用背景] 相信很多人都遇到过要给网站或者app做一个搜索功能的需求,很久之前自己折腾过lucene,搞了很久, ...

  4. 【NOIP 2012 疫情控制】***

    题目描述 H 国有 n 个城市,这 n 个城市用 n-1 条双向道路相互连通构成一棵树,1 号城市是首都, 也是树中的根节点. H 国的首都爆发了一种危害性极高的传染病.当局为了控制疫情,不让疫情扩散 ...

  5. 【二分】【最长上升子序列】HDU 5489 Removed Interval (2015 ACM/ICPC Asia Regional Hefei Online)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5489 题目大意: 一个N(N<=100000)个数的序列,要从中去掉相邻的L个数(去掉整个区间 ...

  6. 【动态规划】【二分】【最长上升子序列】Vijos P1028 魔族密码

    题目链接: https://vijos.org/p/1028 题目大意: 给N个字符串(N<=2000),求能组成词链的单词最多有几个. 如果在一个由一个词或多个词组成的表中,除了最后一个以外, ...

  7. 【动态规划】【二分】【最长上升子序列】HDU 5773 The All-purpose Zero

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5773 题目大意: T组数据,n个数(n<=100000),求最长上升子序列长度(0可以替代任何 ...

  8. 【最长下降子序列】【动态规划】【二分】XMU 1041 Sequence

    题目链接: http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1041 题目大意: 一个二维平面,上面n(n<=1 000 000)个点.问至少选 ...

  9. 【Lucene4.8教程之三】搜索

    1.关键类 Lucene的搜索过程中涉及的主要类有以下几个: (1)IndexSearcher:执行search()方法的类 (2)IndexReader:对索引文件进行读操作,并为IndexSear ...

  10. 【LeetCode题意分析&解答】35. Search Insert Position

    Given a sorted array and a target value, return the index if the target is found. If not, return the ...

随机推荐

  1. python3 HTTP Error 403:Forbidden

    问题描述初学python,在用python中的urllib.request.urlopen()和urllib.request.urlretrieve方法打开网页时,有些网站会抛出异常: HTTP Er ...

  2. 第六周周赛——AK机会不易得,好好把握题解(出自HDU5650,codeforces 616A,624A,659A,655A,658A)

    A题: A题题目链接 题目描写叙述: 位运算 TimeLimit:1000MS  MemoryLimit:65536KB 64-bit integer IO format:%I64d Problem ...

  3. 每天一个linux命令(9):touch

    1.命令简介 touch命令将每个文件的访问时间和修改时间改为当前时间. 2.用法 touch [选项]... 文件... 3.选项 -a 只更改访问时间 -c, --no-create 不创建任何文 ...

  4. [转]rsync命令中文文档

    原文链接 rsync是一个快速.多功能的远程(和本地)文件拷贝工具. 摘要 Local: rsync [OPTION...] SRC... [DEST] Access via remote shell ...

  5. APP开发的基本流程

    一个独立App开发人的自白:做APP就是一场赌局,你要会押注 下面我们就直接来看下APP从业者必知的整个APP开发标准流程. 一般的APP开发及上线流程 步骤如下: 首先,制作一款APP,必须要有相关 ...

  6. Linux下逻辑地址、线性地址、物理地址详细总结

    Linux下逻辑地址.线性地址.物理地址详细总结 一.逻辑地址转线性地址      机器语言指令中出现的内存地址,都是逻辑地址,需要转换成线性地址,再经过MMU(CPU中的内存管理单元)转换成物理地址 ...

  7. Windows上使用Vagrant打造Laravel Homestead可协同跨平台开发环境

    1.简介 Laravel 致力于让整个 PHP 开发过程变得让人愉悦,包括本地开发环境,为此官方为我们提供了一整套本地开发环境 —— Laravel Homestead. Laravel Homest ...

  8. [HDFS Manual] CH4 HDFS High Availability Using the Quorum Journal Manager

    HDFS High Availability Using the Quorum Journal Manager HDFS High Availability Using the Quorum Jour ...

  9. iOS 实现单个页面支持横竖屏,其他页面只能竖屏

    最近在自己的项目里面 有需要做一个需求 : app中某一个页面支持横竖屏, 而其他页面只能竖屏. 1 2 实现方法如下: 1 首先需要Xcode中选中支持的屏幕方向  2 Appdelegate中 . ...

  10. 【经验总结】- IDEA无法显示Project目录怎么办

    1. 关闭IDEA 2.然后删除项目文件夹下的.idea文件夹 3.重新用IDEA工具打开项目 4.再次点击如下图即可搞定