实验五

期中考试第一题

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

posted @ 2018-05-19 14:22  雪卿狂  阅读(177)  评论(3编辑  收藏  举报