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使用需以指针变量为对象。多文件创建项目还需多多练习,不熟练

浙公网安备 33010602011771号