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; }转载于:https://www.cnblogs.com/lixiaoyu-Judy/p/9069926.html