实验五
期中考试第一题
#include<iostream>
#include<cstdlib>
#include<time.h>
using namespace std;
class Dice{
public:
Dice(int n);
int cast()
{
int number=rand()%sides+1;
return number;
}
private:
int sides;
};
Dice::Dice(int n)
{
sides=n;
}
int main()
{
int x;
float count=0;
cin>>x;
Dice a(40);
for(int times=0;times<=500;times++)
{
srand(times);
int s=a.cast();
if(s==x)
count++;
}
float c=count/500;
cout<<c<<endl;
return 0;
}
根据大神的建议,改成如下程序
#include<iostream>
#include<cstdlib>
#include<time.h>
using namespace std;
class Dice{
public:
Dice(int n);
int cast()
{
int number=rand()%sides+1;
return number;
}
private:
int sides;
};
Dice::Dice(int n)
{
sides=n;
}
int main()
{
int x;
float count=0;
cin>>x;
Dice a(40);
srand((unsigned)time(nullptr));//放在外边就可以了,因为放在循环里面的话,系统运行的太快了,时间都差不多
for(int times=0;times<=500;times++)
{
// srand((unsigned)time(nullptr));
//srand(times);这是我原来写的,这个其实也相当于一个伪随机数
int s=a.cast();
if(s==x)
count++;
}
float c=count/500;
cout<<c<<endl;
return 0;
}
期中考试第二题(弄多文件的时候dev和电脑居然都崩掉了,所以先暂时不用多文件)
#include<iostream>
#include<string>
using namespace std;
class User{
public:
User(string n,string p="111111");
void printmessage();
void newpassword();
void static show();
private:
int id;
string name;
string password;
int static CurrentID;
};
int User::CurrentID=999;
User::User(string n,string p)
{
CurrentID++;
id=CurrentID;
name=n;
password=p;
}
void User::printmessage()
{
cout<<"用户编号:"<<id<<"用户名:"<<name<<"密码:"<<password<<endl;
}
void User::show()
{
cout<<CurrentID<<endl;
}
void User:: newpassword()
{
string s1,s2;
int n=3,count=0;
while(n--)
{
cout<<"请输入原密码:";
cin>>s1;
cout<<endl;
if(s1==password)
{
cout<<"请输入新密码:";
cin>>s2;
cout<<endl;
cout<<"密码修改成功!"<<endl;
break;
}
else
{
cout<<"密码有误,请重新输入密码";
cout<<endl;
count++;
}
}
if(count==3)
cout<<"请稍后再试"<<endl;
}
int main()
{
string n="Tom";
string p="123456";
User a(n,p);
User b("xiaoming");
User c("xiaohong");
a.printmessage();
b.printmessage();
c.printmessage();
b.newpassword();
c.newpassword();
return 0;
}
其实刚开始写这个程序的时候,出了一些问题
后来我查了一些网上的资料,得知c++可以在类的声明中,也可以在函数定义中声明缺省参数,但不能既在类声明中又在函数定义中同时声明缺省参数。
因此,将定义或声明中的任一个缺省参数删除即可。(学到了学到了)
期中考试第三题
这题当时认为还蛮简单的,已经写了大部分,结果被那个定义Ctrlz停止输出给弄懵掉了,回来查了查资料,才知道这个问题真的是很简单,用一个while控制输入就行了,还是自己掌握的不太好吧
#include<iostream>
#include<string>
#include<vector>
using namespace std;
class Book {
public:
Book(string isbnX, string titleX, float priceX);
void print();
private:
string isbn;
string title;
float price;
};
Book::Book(string isbnX, string titleX, float priceX){
isbn=isbnX;
title=titleX;
price=priceX;
}
void Book::print(){
cout<<"出版编号:"<<isbn<<"书名:"<<title<<"定价:"<<price<<endl;
}
int main()
{
vector<Book>books;
string isbn, title;
float price;
int i=0;
while(cin>>isbn>>title>>price){
Book book(isbn,title,price);
i++;
books.push_back(book);
}
for(int k=0;k<i;k++)
{
books[k].print();
}
return 0;
}
ex3.cpp
#include <iostream>
#include <vector>
#include <string>
using namespace std;
// 函数声明
void output1(vector<string> &);
void output2(vector<string> &);
int main()
{
vector<string>likes, dislikes; // 创建vector<string>对象likes和dislikes
likes.push_back("favorite");
likes.push_back("book");
likes.push_back("music");
likes.push_back("film");
likes.push_back("paintings"); // 为vector<string>数组对象likes添加元素值
cout << "-----I likes these-----" << endl;
output1(likes); // 调用子函数输出vector<string>数组对象likes的元素值
dislikes.push_back("anime");
dislikes.push_back("sport");
dislikes.push_back("sportsman"); // 为vector<string>数组对象dislikes添加元素值
cout << "-----I dislike these-----" << endl;
output2(dislikes);// 调用子函数输出vector<string>数组对象dislikes的元素值
likes.swap(dislikes); // 交换vector<string>对象likes和dislikes的元素值
cout << "-----I likes these-----" << endl;
output1(likes);// 调用子函数输出vector<string>数组对象likes的元素值
cout << "-----I dislikes these-----" << endl;
output2(dislikes);// 调用子函数输出vector<string>数组对象dislikes的元素值
return 0;
}
// 函数实现
// 以下标方式输出vector<string>数组对象v的元素值
void output1(vector<string> &v) {
for(unsigned i=0;i!=v.size();i++)
cout<<v[i]<<" "<<endl;
// 补足程序
// 。。。
}
// 函数实现
// 以迭代器方式输出vector<string>数组对象v的元素值
void output2(vector<string> &v) {
vector<string>::iterator it;
for(it=v.begin();it!=v.end();it++)
cout<<*it<<" "<<endl;
// 补足程序
// 。。。
}
#include<iostream>
using namespace std;
class Matrix {
public:
Matrix(int n); // 构造函数,构造一个n*n的矩阵
Matrix(int n, int m); // 构造函数,构造一个n*m的矩阵
Matrix(const Matrix &X); // 复制构造函数,使用已有的矩阵X构造
~Matrix(); //析构函数
void setMatrix(const float *pvalue); // 矩阵赋初值,用pvalue指向的内存块数据为矩阵赋值
void printMatrix() const; // 显示矩阵
inline float &element(int i, int j) //返回矩阵第i行第j列元素的引用
{
float &r=p[(i-1)*cols+j-1];
return r;
}
inline float element(int i, int j) const// 返回矩阵第i行第j列元素的值
{
float r=p[(i-1)*cols+j-1];
return r;
}
void setElement(int i, int j, int value); //设置矩阵第i行第j列元素值为value
inline int getLines() const //返回矩阵行数
{
return lines;
}
inline int getCols() const //返回矩阵列数
{
return cols;
}
private:
int lines; // 矩阵行数
int cols; // 矩阵列数
float *p; // 指向存放矩阵数据的内存块的首地址
};
Matrix::Matrix(int n)
{
lines = n;
cols = n;
}
Matrix::Matrix(int n, int m)
{
lines = n;
cols = m;
}
Matrix::Matrix(const Matrix &X)
{
lines = X.lines;
cols = X.cols;
p = X.p;
}
Matrix::~Matrix()
{
delete[] p;
}
void Matrix::setMatrix(const float *pvalue)
{
for (int i = 0; i < lines*cols; i++)
p[i] = pvalue[i];
}
void Matrix::printMatrix() const
{
for (int i = 0; i < lines; i++)
{
for (int j = 0; j < cols; j++)
cout << p[i*lines+j] << " ";
cout << endl;
}
}
void Matrix::setElement(int i, int j, int value)
{
element(i, j) = value;
}
int main()
{
Matrix a(5);
float const p[25]={0};
a.setMatrix(p);
a.setElement(5,5,2);
a.printMatrix();
cout<<a.element(3,5)<<endl;
return 0;
}
这个程序没有报错,不过运行不出结果……我也不造哪里错了
好吧,经大神指导才发现自己没有给p分配内存(自己居然没发现)
改后程序
#include<iostream>
using namespace std;
class Matrix {
public:
Matrix(int n); // 构造函数,构造一个n*n的矩阵
Matrix(int n, int m); // 构造函数,构造一个n*m的矩阵
Matrix(const Matrix &X); // 复制构造函数,使用已有的矩阵X构造
~Matrix(); //析构函数
void setMatrix(const float *pvalue); // 矩阵赋初值,用pvalue指向的内存块数据为矩阵赋值
void printMatrix() const; // 显示矩阵
inline float &element(int i, int j) //返回矩阵第i行第j列元素的引用
{
float &r=p[(i-1)*cols+j-1];
return r;
}
inline float element(int i, int j) const// 返回矩阵第i行第j列元素的值
{
float r=p[(i-1)*cols+j-1];
return r;
}
void setElement(int i, int j, int value); //设置矩阵第i行第j列元素值为value
inline int getLines() const //返回矩阵行数
{
return lines;
}
inline int getCols() const //返回矩阵列数
{
return cols;
}
private:
int lines; // 矩阵行数
int cols; // 矩阵列数
float *p; // 指向存放矩阵数据的内存块的首地址
};
Matrix::Matrix(int n)
{
lines = n;
cols = n;
p=new float[lines*cols];
}
Matrix::Matrix(int n, int m)
{
lines = n;
cols = m;
p=new float[lines*cols];
}
Matrix::Matrix(const Matrix &X)
{
lines = X.lines;
cols = X.cols;
p = X.p;
}
Matrix::~Matrix()
{
delete[] p;
}
void Matrix::setMatrix(const float *pvalue)
{
for (int i = 0; i < lines*cols; i++)
p[i] = pvalue[i];
}
void Matrix::printMatrix() const
{
for (int i = 0; i < lines; i++)
{
for (int j = 0; j < cols; j++)
cout << p[i*lines+j] << " ";
cout << endl;
}
}
void Matrix::setElement(int i, int j, int value)
{
element(i, j) = value;
}
int main()
{
Matrix a(5);
float const p[25]={0};
a.setMatrix(p);
a.setElement(5,5,2);
a.printMatrix();
cout<<a.element(3,5)<<endl;
return 0;
}