zoukankan      html  css  js  c++  java
  • 实验5

    1,实验内容1

    #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
    
    	// 为vector<string>数组对象likes添加元素值 ( favorite book, music, film, paintings,anime,sport,sportsman,etc)
    	// 补足代码
    	// 。。。
    	 likes.push_back("book");
        likes.push_back("music");
        likes.push_back("film");
        likes.push_back("paintings");
    
    
    	cout << "-----I like these-----" << endl;
    	// 调用子函数输出vector<string>数组对象likes的元素值
    	// 补足代码
    	// 。。。
    
        output1(likes); //..写成likes.output1();是不对的。。
    
    	// 为vector<string>数组对象dislikes添加元素值
    	// 补足代码
    	// 。。。
    	 dislikes.push_back("anime");
         dislikes.push_back("sport");
         dislikes.push_back("sportsman");
    	 cout << "-----I dislike these-----" << endl;
    	// 调用子函数输出vector<string>数组对象dislikes的元素值
    	// 补足代码
    	// 。。。
         output2(dislikes);
    
    	// 交换vector<string>对象likes和dislikes的元素值
    	// 补足代码
    	// 。。。
    	likes.swap(dislikes);
    
    	cout << "-----I likes these-----" << endl;
    	// 调用子函数输出vector<string>数组对象likes的元素值
    	// 补足代码
    	// 。。。
        output1(likes);
    	cout << "-----I dislikes these-----" << endl;
    	// 调用子函数输出vector<string>数组对象dislikes的元素值
    	// 补足代码
    	// 。。。
        output2(dislikes);
    
    	return 0;
    }
    
    
    // 函数实现
    // 以下标方式输出vector<string>数组对象v的元素值
    void output1(vector<string> &v) {
    	// 补足程序
    	// 。。。
    	for(int i=0;i<v.size();i++)
        cout<<v[i]<<" ";
        cout<<endl;
    
    }
    
    // 函数实现
    // 以迭代器方式输出vector<string>数组对象v的元素值
    void output2(vector<string> &v) {
    	// 补足程序
    	// 。。。
    	vector<string>::iterator  it;
        for(it=v.begin() ;it!=v.end() ;it++)
        cout<<*it<<" ";
        cout<<endl;
    
    }
    

    2,实验内容2
    6-17

    #include<iostream> 
    using namespace std;
    int main(){
    	int *p;
    	*p=9;
    	cout<<"The value at p:"<<*p;
    	return 0; 
    }
    这里,运行后显示程序停止工作,
    可见,计算机识别不出指针的值
    指针p没有初始化,即没有指向某个确定的内存单元,指向内存中的随机地址,是不能给随机地址赋值的,危险。。
    
    #include<iostream> 
    using namespace std;
    int main(){
    int *p;
    int b=9;
    p=&b;
    cout<<"The value at p:"<<*p;
    return 0; 
    }
    
    int k;
    int *p;
    p = &k;  //给p赋值
    *p = 7; //给p所指向的内存赋值,即k= 7
    而例6-17中p没有指向任何地址,却要给未知的地址赋值9
    修改后的,是给p赋值--用地址传递的方式。
    

    指针的赋值,“=”的左操作数可以是p,也可以是p。
     
    当“=”的左操作数是
    p时,改变的是p所指向的地址存放的数据;
     
    当“=”的左操作数是p时,改变的是p所指向的地址。
     
    数组的变量名b表示该数组的首地址,因此p=b;也是正确的
    6-18

    #include<iostream> 
    using namespace std;
    int ful(){
    int *p=new int (5);
    return *p;
    }
    int main(){
    int a=ful();
    cout<<"the value of a is:"<<a;
    return 0;
    }
    没有用delete给*p分配的内存释放掉。
    
    #include<iostream> 
    using namespace std;
    int *ful(){ //如果不在fun前加*号,就不能返回指针p的值。 
    int *p=new int (5); //动态分配用于存放int类型数据的内存空间,
            //初始化该空间内的值为9,将首地址赋给指针p 
    return p;
    }
    int main(){
    int *a=ful(); //用指针a指向fun函数的返回值 
    cout<<"the value of a is:"<<*a;
    delete a; //释放指针a所指向的内存空间 
    return 0;
    }
    /*用new分配的内存必须用delete加以释放,否则会导致动态分配的内存无法回收,
     使得程序占据的内存越来越大,这叫做“内存泄漏”
     而且,对于用new建立的对象,只能用delete进行一次删除操作,多次会造成运行错误。 
    

    3,实验内容3.

    #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列元素的引用
    		{
    		    return *(p+((i-1)*cols)+j-1);  
    
    		 } 
    		inline float element(int i, int j) const// 返回矩阵第i行第j列元素的值
    		{
    			return *(p+((i-1)*cols)+j-1);   
    		 } 
    		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=new float[lines*cols];
    	for(int i=0;i<lines*cols;i++)
    	p[i]=X.p[i];
    }
    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{
        cout<<"The Matrix is:"<<endl;
        for(int i=0;i<lines;i++){
        	for(int j=0;j<cols;j++)
            	cout<<p[i*cols + j]<<" ";
        	cout<<endl;
    	}
    }
    void Matrix::setElement(int i,int j,int value){
    	p[(i-1)*cols + j-1]=value;
    
    }
    int main(){
    	int n;
    	cout<<"输入行数:"<<endl; 
        cin>>n;
        Matrix A(n);
        float a[n*n];
        cout<<"输入矩阵A:"<<endl;
        for(int i=0;i<n*n;i++)
        cin>>a[i];
        A.setMatrix(a);
        A.printMatrix();
        int m;
        cout<<"输入行列:"<<endl; 
        cin>>n>>m;
        Matrix B(n,m);
        float b[n*m];
        cout<<"输入矩阵B:"<<endl;
        for(int i=0;i<n*m;i++)
        cin>>b[i];
    	B.setMatrix(b);
    	B.printMatrix();
    	cout<<"返回a矩阵第1行第2列"<<endl; 
    	cout<<A.element(1,2)<<endl;
    	cout<<"改变第一行第二列值"<<endl; 
    	A.setElement(1,2,8);
        
    	cout<<"返回a矩阵第1行第2列"<<endl; 
    	cout<<A.element(1,2)<<endl;
    	cout<<"返回a矩阵的行数:"<<endl; 
    	cout<<A.getLines()<<endl;
    	cout<<"返回b矩阵的行数:"<<endl; 
    	cout<<B.getLines()<<endl;
    	cout<<"返回a矩阵的列数:"<<endl; 
    	cout<<A.getCols()<<endl;
    	cout<<"返回b矩阵的列数:"<<endl;
    	cout<<B.getCols()<<endl;
    }
    

    4,实验内容4--期中
    第一题---掷骰子

    #include<iostream> 
    #include<cstdlib> //包含随机数的头文件 
    using namespace std;
    class Dice{   //定义骰子类 
    public:
    Dice(int n); //构造函数,带参数n--面数 
    int cast();  //成员函数--模拟掷骰子 
    private:
    int sides;  //数据成员,表示骰子面数 
    };
    Dice::Dice(int n):sides(n){} //值传递 
    int Dice::cast(){ 
    int i;   //定义一个变量i来存放随机数 
    i=rand()%sides+1; //该随机数在1到面数sides之间 
    return i;       
    }
    int main(){
    int a,b;   
    float count=0; //计数器 
    cin>>b;     //输入你的学号 
    Dice d(40); //类实例化--对象--(一个40面的骰子=40个学生 ) 
    d.cast();   //该对象访问成员函数--会得到一个1~40随机数 
    for(int times=0;times<=500;times++) //500次的投掷 
        { 
        srand(times);//这一句删掉,值就发生了变化变成2.2%,不知道为啥 
        a=d.cast(); //把随机数--你一次投到的数给a 
        if(a==b) count++;  //和你的学号比较,500次中有多少次随机投掷的数等于你学号的 
        }
       cout<<"概率是:"<<100*(count/500)<<"%"<<endl; 
    return 0;
    }
    

    第二题---用户管理

    #include<iostream> 
    using namespace std;
    class User{
    public:
    User(string n,string p="111111"); //因为id是计算机处理,参数不加 
    void printmessage(); //打印信息 
    void newpassword();  //新密码处理 
    void static show();  //最后一位展示 
    private:
    int id;  
    string name,password;
    int static CurrentID; //静态变量--避免一直被初始值绊脚,占有较长生存期 
    };
    int User::CurrentID=999; //对数据成员赋初值 
    User::User(string n,string p):name(n),password(p) //赋值 
    { CurrentID++;   //有一个对象加一个1 
     id=CurrentID;  //赋值 
    }
    void User::printmessage(){  
    cout<<"编号:"<<id<<"姓名:"<<name<<"密码:"<<password<<endl; 
    }
    void User::newpassword()
    {
    string p1,p2; //p1原密码,p2新密码 
    int n=3,count=0;  
    while(n--) //n从3~1,0的时候停止循环。即针对一个对象最多三次密码输入 
    {
    cout<<"输入旧密码:";
    cin>>p1;
    cout<<endl;
    if(p1==password) //如果旧密码输对了 
    {
    cout<<"输入新密码;";
    cin>>p2; 
    cout<<endl;
    cout<<"密码修改成功"<<endl;
    break; //修改完密码跳出循环,弄下一个对象去 
    }
    else //旧密码输不对的话 
    {
    cout<<"密码输入有误,请重新输入"<<endl;
    count++; //计数直到三次,会跳出去 
    }
    }
    if(count==3) cout<<"请稍后再试"<<endl; 
    }
    void User::show(){
    cout<<CurrentID<<endl; //打印共有属性 
    }
    int main(){
    User a("zhang san","222222");
    User b("li si","333333");
    User c("wang er","444444");
    a.printmessage();
    b.printmessage();
    c.printmessage();
    a.newpassword();
    b.newpassword();
    c.show();
    c.printmessage();
    }
    


    第三题---图书入库

    #include<iostream> 
    #include<vector>
    #include <string>
    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>类对象
    // 补足程序
    // ... 
    vector<Book>books; //定义一个Book类型的数组 
    string isbn, title;
    float price;
    int i=0;
    // 录入图书信息,构造图书对象,并添加到前面定义的vector<Book>类对象中
    // 循环录入,直到按下Ctrl+Z时为止 (也可以自行定义录入结束方式) 
    // 补足程序
    // ... 
    while(cin>>isbn>>title>>price){ //多组输入 
        Book book(isbn,title,price); //多个对象book,一次循环就是一次初始化 
            i++;  //记录组数 
            books.push_back(book); //把一个接一个的对象依次放入books数组最后--会顺序打印出来 
      }
     
    // 输出入库所有图书信息
    // 补足程序
    // ... 
     
    for(int k=0;k<i;k++) //从0~i-1 
        {
            books[k].print();//数组元素依次打印 
        } 
    return 0;
    }
    

  • 相关阅读:
    deb 和 rpm 后缀文件 区别和安装
    20.pipe
    19.Observales
    18.4 运行脚本 sudo ./launcher.sh 必须先给他权限 才能使用
    18.3 redis 的安装
    18.2 不同用户 不同颜色光标 redis
    18.1利用socket .io 实现 editor间代码的同步
    18. socket io
    java 设计模式
    Gson 2.8.jar基础
  • 原文地址:https://www.cnblogs.com/lixiaoyu-Judy/p/9069926.html
Copyright © 2011-2022 走看看