C++實驗5
阿新 • • 發佈:2018-05-20
代碼 ren size user lines 析構函數 itl get oat
實驗結論
實驗內容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 likes.push_back("book"); likes.push_back("music"); likes.push_back("film"); likes.push_back("paintings"); // 為vector<string>數組對象likes添加元素值 ( favorite book, music, film, paintings,anime,sport,sportsman,etc) // 補足代碼 // 。。。 cout << "-----I like these-----" << endl; output1(likes); // 調用子函數輸出vector<string>數組對象likes的元素值 // 補足代碼 // 。。。 dislikes.push_back("anime"); dislikes.push_back("sport"); dislikes.push_back("sportsman"); // 為vector<string>數組對象dislikes添加元素值 // 補足代碼 // 。。。 cout << "-----I dislike these-----" << endl; output2(dislikes); // 調用子函數輸出vector<string>數組對象dislikes的元素值 // 補足代碼 // 。。。 likes.swap(dislikes); // 交換vector<string>對象likes和dislikes的元素值 // 補足代碼 // 。。。 cout << "-----I likes these-----" << endl; output1(likes); // 調用子函數輸出vector<string>數組對象likes的元素值 // 補足代碼 // 。。。 cout << "-----I dislikes these-----" << endl; output2(dislikes); // 調用子函數輸出vector<string>數組對象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
源碼1
#include <iostream>
using namespace std;
int main()
{
//int a;
//int *p=&a; 可以先定義一個變量a,並將其地址賦給指針p
int *p;//指針再被使用前沒有被賦初值
*p=9;
cout<<"The value at p: "<<*p;
return 0;
}
源碼2
#include <iostream> using namespace std; int fn1(){ int *p=new int(5); return *p;//用new分配的內存沒有用delete釋放,會導致分配的內存無法回收 //delete p; } int main() { int a=fn1(); cout<<"the value of a is: "<<a; return 0; }
實驗內容3
源碼
main.cpp
#include <iostream> #include "matrix.h" using namespace std; int main() { int l,c,i,j,n; cout<<"輸入矩陣行數和列數"<<endl; cin>>l>>c; float a[l*c]; cout<<"輸入矩陣的各行各列的數"<<endl; for(i=0;i<l*c;i++) cin>>a[i]; Matrix A(l,c); A.setMatrix(a); cout<<"顯示矩陣"<<endl; A.printMatrix(); cout<<"輸入i,j 返回第i行第j列的數"<<endl; cin>>i>>j; A.element(i,j); cout<<"重新設置這個數"<<endl; cin>>n; A.setElement (i,j,n); cout<<"重新返回這個數"<<endl; A.element(i,j); cout<<"返回矩陣行數與列數"<<endl; A.getLines() ; A.getCols() ; return 0; }
matrix.cpp
#include <iostream>
#include "matrix.h"
using namespace std;
int i,j;
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(i=0;i<lines*cols;i++)
p[i]=x.p[i];
}
Matrix::~Matrix() {
delete[] p;
}
void Matrix::setMatrix(const float *pvalue) {
for(i=0;i<lines*cols;i++)
p[i]=pvalue[i];
}
void Matrix::printMatrix() const{
for(i=0;i<lines;i++){
for(j=0;j<cols;j++)
cout<<p[i*lines+j]<<" ";
cout<<endl;
}
}
inline float Matrix::element(int i,int j) const{
cout<<p[(i-1)*lines+j-1]<<endl;
}
void Matrix::setElement(int i, int j, int value){
p[(i-1)*lines+j-1]=value;
}
inline int Matrix::getLines() const{
cout<<lines<<endl;
}
inline int Matrix::getCols() const{
cout<<cols<<endl;
}
matrix.h
#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) const;// 返回矩陣第i行第j列元素的值
void setElement(int i, int j, int value); //設置矩陣第i行第j列元素值為value
inline int getLines() const; //返回矩陣行數
inline int getCols() const; //返回矩陣列數
private:
int lines; // 矩陣行數
int cols; // 矩陣列數
float *p; // 指向存放矩陣數據的內存塊的首地址
};
#endif
截圖
實驗內容4
期中考試第二題
源碼
main.cpp
#include <iostream>
#include"user.h"
#include <string>
using namespace std;
int main() {
string n,p;
cout<<"請輸入用戶名和密碼"<<endl;
cin>>n>>p;
User user(n,p);
user.print();
user.change();
cout<<"當前ID:";
user.getCurrentID();
return 0;
}
user.h
class User{
public:
User(string n,string p="111111");
void print();
void change();
void static getCurrentID();
private:
int id;
string name,password;
int static CurrentID;
};
user.cpp
#include<iostream>
#include"user.h"
#include<string>
using namespace std;
int User::CurrentID=999;
User::User(string n,string p="111111"):name(n),password(p){
id=++CurrentID;
}
void User::print(){
cout<<"用戶編號:"<<id<<endl;
cout<<"用戶名:"<<name<<endl;
cout<<"密碼:"<<password<<endl;
}
void User::change(){
string p;
cout<<"請輸入舊密碼"<<endl;
while(true){
cin>>p;
if(p!=password)
cout<<"密碼錯誤!請重新輸入"<<endl;
else break;
}
string newp;
while(true){
cout<<"請輸入新密碼"<<endl;
cin>>p;
if(p==password)
cout<<"新密碼不能與舊密碼相同!"<<endl,continue;
cout<<"請再次輸入新密碼"<<endl;
cin>>newp;
if(newp!=p)
cout<<"兩次密碼不同,請重新輸入"<<endl;
else cout<<"修改成功"<<endl,break;
}
password=newp;
}
void User::getCurrentID(){
cout<<CurrentID<<endl;
}
截圖
期中考試第三題
源碼
main.cpp
#include "book.h"
#include <vector>
#include <iostream>
using namespace std;
int main()
{
cout<<"請輸入出版編號,書名及定價"<<endl;
vector<Book>mybooks;
string isbn, title;
float price;
int s=0;
while(cin>>isbn>>title>>price){
Book book(isbn,title,price);
mybooks.push_back(book);
s++;
}
for(int i=0;i<s;i++){
mybooks[i].print();
}
return 0;
}
book.h
#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
book.cpp
#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<<endl;
cout<<"書名:"<<title<<endl;
cout<<"定價:"<<price<<endl;
}
截圖
實驗總結
再一次看期中考試的題目,感覺沒有做的時候感覺那麽難,可能考試的時候時間比較緊,一時半數不能有清晰簡潔的思路,所以無從下手,另外對於函數返回引用這一方面在實驗時遇到了點問題,查了查函數返回值與返回引用的區別,發現函數返回值時會生成一個臨時變量來間接賦值,而函數返回引用則不會產生臨時變量,而是直接賦值,這樣省了一點內存也提高了一些效率。
C++實驗5