实验5

Posted zhibifenli

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实验5相关的知识,希望对你有一定的参考价值。

1.补全ex3

 1 #include <iostream>
 2 #include <vector>
 3 #include <string>
 4 using namespace std;
 5 
 6 // 函数声明 
 7 void output1(vector<string> &);
 8 void output2(vector<string> &);
 9 
10 int main()
11 {
12     vector<string>likes, dislikes; // 创建vector<string>对象likes和dislikes
13     likes.push_back("《他改变了中国》");
14     likes.push_back("native faith");
15     likes.push_back("火星救援");
16     likes.push_back("pid:19766212");
17     likes.push_back("幸运☆星");
18     likes.push_back("慢跑");
19     likes.push_back("暂无");
20     // 为vector<string>数组对象likes添加元素值 ( favorite book, music, film, paintings,anime,sport,sportsman,etc) 
21     // 补足代码 
22     // 。。。 
23 
24 
25     cout << "-----I like these-----" << endl;
26     output1(likes);
27     // 调用子函数输出vector<string>数组对象likes的元素值 
28 
29     dislikes.push_back("矫情的");
30     dislikes.push_back("节奏强过头的");
31     dislikes.push_back("强行改编毁原著的");
32     dislikes.push_back("超现实主义");
33     dislikes.push_back("某抗中奇侠");
34     dislikes.push_back("短跑");
35     dislikes.push_back("暂无");
36     // 为vector<string>数组对象dislikes添加元素值 
37 
38     cout << "-----I dislike these-----" << endl;
39     output1(dislikes);
40     // 调用子函数输出vector<string>数组对象dislikes的元素值 
41 
42     likes.swap(dislikes);
43     // 交换vector<string>对象likes和dislikes的元素值 
44 
45 
46     cout << "-----I likes these-----" << endl;
47     output2(likes);
48     // 调用子函数输出vector<string>数组对象likes的元素值 
49 
50     cout << "-----I dislikes these-----" << endl;
51     output2(dislikes);
52     // 调用子函数输出vector<string>数组对象dislikes的元素值 
53 
54 
55     return 0;
56 }
57 
58 
59 // 函数实现 
60 // 以下标方式输出vector<string>数组对象v的元素值  
61 void output1(vector<string> &v) {
62     int i;
63     for (i = 0; i < v.size(); ++i) {
64         cout << v[i] << " ";
65     }
66     cout << endl;
67 }
68 
69 // 函数实现
70 // 以迭代器方式输出vector<string>数组对象v的元素值 
71 void output2(vector<string> &v) {
72     vector<string>::iterator it;
73     cout << "(迭代器)" << "  ";
74     for (it = v.begin(); it != v.end(); ++it) {
75         cout << *it << " ";
76     }cout << endl;
77 }

技术分享图片

6.17

1 #include<iostream>
2 using namespace std;
3 
4 int main() {
5     int *p;
6     *p = 9;
7     cout << "The value at p:" << *p;      //vs错误代码 c4700 指针p没有被初始化,没有指向地址
8     return 0;
9 }

修改

 1 #include<iostream>
 2 using namespace std;
 3 
 4 int main() {
 5     int *p;
 6     int i;
 7     p = &i;
 8     *p = 9;
 9     cout << "The value at p:" << *p; 
10     return 0;
11 }

6.18

 1 include<iostream>
 2 using namespace std;
 3 int fn1() {
 4     int *p = new int(5);    //只有new 没有delete
 5     return *p;
 6 }
 7 int main() {
 8     int a = fn1();
 9     cout << "the value of a is:" << a;
10     return 0;
11 }

修改

 1 #include<iostream>
 2 using namespace std;
 3 int fn1() {
 4     int *p = new int(5);
 5     return *p;
 6     delete p;
 7 }
 8 int main() {
 9     int a = fn1();
10     cout << "the value of a is:" << a;
11     return 0;
12 }

3. 实现一个动态矩阵类 Matrix

matrix.h

 1 class Matrix {
 2 public:
 3     Matrix(int n); // 构造函数,构造一个n*n的矩阵 
 4     Matrix(int n, int m); // 构造函数,构造一个n*m的矩阵 
 5     Matrix(const Matrix &X); // 复制构造函数,使用已有的矩阵X构造 
 6     ~Matrix(); //析构函数 
 7     void setMatrix(const float *pvalue); // 矩阵赋初值,用pvalue指向的内存块数据为矩阵赋值 
 8     void printMatrix() const; // 显示矩阵
 9     inline float &element(int i, int j); //返回矩阵第i行第j列元素的引用
10     inline float element(int i, int j) const;// 返回矩阵第i行第j列元素的值 
11     void setElement(int i, int j, int value); //设置矩阵第i行第j列元素值为value
12     inline int getLines() const; //返回矩阵行数 
13     inline int  getCols() const; //返回矩阵列数 
14 private:
15     int lines;    // 矩阵行数
16     int cols;      // 矩阵列数 
17     float *p;   // 指向存放矩阵数据的内存块的首地址 
18 };

 

matrix.cpp

 1 #include <iostream>
 2 #include "matrix.h"
 3 using namespace std;
 4 Matrix::Matrix(int n) :lines(n), cols(n) {    //构造函数的实现
 5     p = new float[lines*cols];
 6 }
 7 Matrix::Matrix(int n,int m) : lines(n), cols(m) {    //重载
 8     p = new float[lines*cols];
 9 }
10 Matrix::~Matrix() {        //析构函数
11     delete p;
12 }
13 Matrix::Matrix(const Matrix &X) :lines(X.lines),cols(X.cols){  //复制构造函数的实现
14     p = new float[lines*cols];
15     for (int i= 0;i < lines*cols; i++)
16         p[i] = X.p[i];
17 }
18 void Matrix::setMatrix(const float *pvalue) {    //给矩阵赋值
19     for (int i = 0; i < lines*cols; i++)
20         p[i] = pvalue[i];
21 }
22 void Matrix::printMatrix() const {         //输出矩阵
23     for (int i = 0; i < lines; i++) {
24         for (int j = 0; j < cols; j++)
25             cout << p[i*cols + j] << " ";
26         cout << endl;
27     }
28 }
29 inline int Matrix::getLines() const {return lines;}//行数
30 inline int Matrix::getCols() const {return cols;}  //列数
31 
32 inline float &Matrix::element(int i, int j) {        //以下三个不知道对不对
33     return p[(i - 1)*cols + j - 1];
34 }
35 inline float Matrix::element(int i, int j) const { return p[(i-1)*cols + j-1]; }
36 void Matrix::setElement(int i, int j, int value) { element(i,j) = (float)value;}

 

main.cpp

 1 #include<iostream>
 2 #include"matrix.h"
 3 using namespace std;
 4 int main()
 5 {
 6     Matrix M1(3); Matrix M2(3, 4); 
 7     const float a[9] = { 1,2,3,4,5,6,7,8,9 };
 8     const float b[12] = { 1,2,3,4,5,6,7,8,9,10,11,12 };
 9     M1.setMatrix(a);
10     M2.setMatrix(b);
11     Matrix M3 = M2;
12     cout << "M1为:" << endl;
13     M1.printMatrix();
14     cout << "M2为:" << endl;
15     M2.printMatrix();
16     cout << "M3为:" << endl;
17     M3.printMatrix();
18     cout << "将M1矩阵第2行第2列换为100" << endl; 
19     //system("pause");
20     M1.setElement(2, 2, 100);
21     cout << "M1为:" << endl;
22     M1.printMatrix();
23     cout << "M2矩阵第2行第2列值为:" << M2.element(2, 2) << endl;
24     return 0;
25 }

技术分享图片

 

 

期中考试

1.已提交

2.用户管理

User.h

 

 1 #include<iostream>
 2 #include<string>
 3 using namespace std;
 4 class User {
 5 public:
 6     User(string s1);
 7     User(string s1, string s2);
 8     User(User &X);
 9     void show();
10     static void showCID();
11     void changepassword();
12 private:
13     string name;
14     int id;
15     static int CurrentID;
16     string password;
17 };

 

User.cpp

 1 #include<iostream>
 2 #include"user.h" 
 3 #include<string>
 4 using namespace std;
 5 int User::CurrentID = 999;    
 6 User::User(string s1){
 7     name = s1;
 8     password = "111111";
 9     CurrentID++;
10     id = CurrentID;
11 }
12 User::User(string s1, string s2) :name(s1), password(s2) {
13     CurrentID++;
14     id = CurrentID;
15 }
16 User::User(User &X) : name(X.name), password(X.password) {
17     CurrentID++;
18     id = CurrentID;
19 }
20 void User::show() {
21     cout << "id:" << id << endl;
22     cout << "用户名:" << name << endl;
23     cout << "密码:" << password << endl;
24 }
25 void User::showCID() {
26     cout << "CurrentID:" << CurrentID << endl;
27 }
28 void User::changepassword() {
29     string p, np; 
30     int j= 0;
31     while (1) {
32         cout << "请输入原有密码:"<<endl; 
33         cin >> p;
34         if (p == password) {
35             cout << "请输入新密码:"; cin >> np;
36             password = np; break;
37         }
38         if (p != password) {
39             j++; cout << "输入原密码错误!" << endl;
40         }
41         if (j == 3) {
42         cout << "错误次数过多,请稍后再试" << endl;
43         break;
44         }
45     
46             }
47 }

main.cpp

 1 #include<iostream>
 2 #include"user.h" 
 3 #include<string>
 4 using namespace std;
 5 
 6 int main() {
 7     User u1("user1", "123456");
 8     User u2("user2");
 9     User u3("user3", "234567");
10     u1.show(); u2.show(); u3.show(); User u(u3); u3.showCID();
11     cout << "用户1换密码" << endl;
12     u1.changepassword(); 
13     u1.show();
14     cout << "用户2换密码" << endl;
15     u2.changepassword();
16     return 0;
17 }

技术分享图片

 

3.图书入库

book.h

 

 1 #include <string>
 2 using std::string;
 3 
 4 class Book {
 5     public:
 6         Book(string isbnX, string titleX, float priceX);  //构造函数  
 7         void print(); // 打印图书信息 
 8     private:
 9         string isbn;
10         string title;
11         float price;
12 };

 

book.cpp

 1 #include "book.h"
 2 #include <iostream> 
 3 #include <string>
 4 using namespace std;
 5 
 6 // 构造函数
 7 Book::Book(string isbnX, string titleX, float priceX) :isbn(isbnX), title(titleX), price(priceX) {
 8 }
 9 
10 
11 // 打印图书信息
12 void Book::print() {
13     cout << "出版编号:" << isbn << endl;
14     cout << "书名:" << title << endl;
15     cout << "价格:" << price << endl;
16 }

main.cpp

 1 #include "book.h"
 2 #include <vector>
 3 #include <iostream>
 4 using namespace std;
 5 
 6 int main()
 7 {
 8     // 定义一个vector<Book>类对象
 9     vector<Book> b1;
10      
11     string isbn, title;
12     float price;
13     char quit;
14     // 录入图书信息,构造图书对象,并添加到前面定义的vector<Book>类对象中
15     while (1) {
16         cout << "输入信息:" << endl;
17         cin >> isbn >> title >> price;
18         Book a(isbn, title, price);
19         b1.push_back(a);
20         cout << "是否退出,退出输入“Z”" << endl;
21         cin >> quit;
22         if (quit == Z)
23         { 
24             int i;
25             for (i = 0; i < b1.size(); i++)
26             {
27                 b1[i].print();
28             }
29             return 0;
30         }
31     }
32     
33     
34     // 输出入库所有图书信息
35     
36 }

技术分享图片

体会

会的太少,太丢人了

 

以上是关于实验5的主要内容,如果未能解决你的问题,请参考以下文章

[NTUSTISC pwn LAB 7]Return to libc实验(puts泄露libc中gadget片段定位)

VSCode自定义代码片段5——HTML元素结构

VSCode自定义代码片段5——HTML元素结构

VSCode自定义代码片段5——HTML元素结构

使用 React 实验性中继片段:缺少属性 '"$fragmentRefs"'

[NTUSTISC pwn LAB 5]rop入门实验