c++实验五

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("favorite book");
 likes.push_back("music");
 likes.push_back("film");
 likes.push_back("paintings");
 cout << "-----I like these-----" << endl;
 // 调用子函数输出vector<string>数组对象likes的元素值
 output1(likes);
 // 为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的元素值
 output2(likes);
 cout << "-----I dislikes these-----" << endl;
 // 调用子函数输出vector<string>数组对象dislikes的元素值
 output1(dislikes);       
 return 0;
}
// 函数实现
// 以下标方式输出vector<string>数组对象v的元素值 
void output1(vector<string> &v) {
 int i;
 for(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;
}

2(1)

#include<iostream>
using namespace std;
int main(){
 int * p;
 *p=9;//指针型变量p没有初始化,而是指向随机地址,不能直接赋值,可通过在创建一变量b,让p指向b完成赋值。
 //int b=9;
 //p=&b;
 cout<<"The value at p:"<<*p;
 return 0; 
}

2.(2)

#include<iostream>
using namespace std;
int *fn1(){
 int *p=new int(5);
 return p;
}
int main(){
 int *a=fn1();
 cout<<"the value of a is:"<<*a;
 delete a;
 //用new创建的动态空间,最后给*p分配的内存没被释放 ,可将a设为指针变量,fn1()为int*型,在创建完*a之后将其用delete释放
 return 0;
}

3,#ifndef MATRIX_H
#define MATRIX_H
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){return *(p+i*cols+j);} //返回矩阵第i行第j列元素的引用
  inline float element(int i, int j) const{return *(p+i*cols+j);}// 返回矩阵第i行第j列元素的值
  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;   // 指向存放矩阵数据的内存块的首地址
};
#endif

#include"matrix.h"
#include<iostream>
using namespace std;
 Matrix::Matrix(int n):lines(n),cols(n){}
 Matrix::Matrix(int n, int m):lines(n),cols(m){}
 Matrix::~Matrix(){
 }
 Matrix::Matrix(const Matrix &X){
  lines=X.lines;
  cols=X.cols;
  p=X.p;
 }
  void Matrix::setMatrix(const float *pvalue){
  p=(float*)pvalue;
 } 
 void Matrix::printMatrix() const{
  for(int i=0;i<lines;i++){
   for(int j=0;j<cols;j++)
     cout<<element(i,j)<<" ";
     cout<<endl;}
 }

 void Matrix::setElement(int i, int j, int value){
  p[i*lines+j]=value;
 }

 

#include"matrix.h"
#include<iostream>
using namespace std;
int main ()
{
 Matrix a(3);
 Matrix b(2,3);
 float e[]={1,2,3,4,5,6,7,8,9};
 float *d=e;
 a.setMatrix(d);
 Matrix c(a);
 a.printMatrix();
 c.printMatrix();
 cout<<a.element(2,2)<<endl;
 a.setElement(2,2,1);
 cout<<a.element(2,2)<<endl;
 cout<<c.getLines()<<c.getCols()<<endl;
 return 0;
}

 

4,

//#ifndef USER_H
//#define USER_H
#include <string>
using std::string;
class User{
 private:
  int id;
  string name;
  string password;
  static int CurrentID;
 public:
  User(string name1,string password1="111111");
   void usershow();
   void userchange();
    void showCurrentID();
};

 

#include"user.h"
#include<iostream>
#include<string>
using namespace std;
int User::CurrentID=999;
User::User(string name1,string password1){
  id=CurrentID;
  name=name1;
  password=password1;
  CurrentID++;
}
void User::usershow(){
cout<<id<<" "<<name<<" "<<password<<endl;
}
void User::userchange(){
 int i=2,flag=0;
 string j,k;
    cin>>j;
    while(j!=password)
 {
  i--;
  cout<<"密码错误"<<endl;
  cin>>j;
  if (i<0)
  {
   flag=1;
   cout<<"wait some time to try again"<<endl;
   break;
  }
 }
 if(!flag)
 {cout<<"输入新密码"<<endl;
 cin>>k;
 password=k;
 }
}
void User::showCurrentID(){
 cout<<id<<endl;
 cout<<id<<" "<<name<<" "<<password<<endl; 
}

 

#include"user.h"
#include <iostream>
#include<string>
using namespace std;
int main() {
 User a("user1");
 a.usershow();
 User b("user2");
 b.usershow();
 a.userchange();
 a.usershow();
 b.showCurrentID();
 return 0;
}

 

 

5,

#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

 

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

 

#include "book.h"
#include <vector>
#include <iostream>
using namespace std;

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

 

本次实验中途发现了许多问题包括一些基础错误,通过查阅书籍及上网了解。其中实验1不能通过VECTOR<STRING>LIKES={“a”,“b”,“c”}来赋值,要使用push_back;

而在实验二中new与delete使用需以指针变量为对象。多文件创建项目还需多多练习,不熟练

 

posted @ 2018-05-22 20:08  童梦奇缘  阅读(259)  评论(0)    收藏  举报