【C++ mid-term exerises】

时间:2023-03-09 08:44:14
【C++ mid-term exerises】

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随机数

截图:

【C++ mid-term exerises】

【C++ mid-term exerises】

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 ;
}

运行截图:

【C++ mid-term exerises】

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;
}

【C++ mid-term exerises】

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

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

【C++ mid-term exerises】