實驗三
Part2 基于已有信息,補足并擴充程序。 在graph文件夾里提供有三個文件:
graph.h (類Graph的聲明)
graph.cpp (類Graph的實現)
main.cpp (類Graph的測試: 定義Graph類對象,調用繪圖接口繪制圖形)
要求如下:
新建一個空項目,添加上述三個文件到項目中。
補足graph.h中類的成員函數draw()的實現,使得在main()中對類的測試能夠實現以下效果: 主函數中測
試代碼:
#ifndef GRAPH_H #define GRAPH_H //類Graph的聲明 class Graph{ public: Graph(char ch,int n);//帶有參數的構造函數 void draw();//繪制圖形 private: char symbol; int size; }; #endif
//類graph的實現 #include "graph.h" #include <iostream> using namespace std; //帶有參數的構造函數的實現 Graph::Graph(char ch,int n):symbol(ch),size(n){ } //成員draw()的實現 //功能:繪制size行,顯示字符為symbol的制定圖形樣式 void Graph::draw(){ for(int i=1;i<=size;i++) { for(int j=1;j<=size-i;j++) cout<<" "; for(int j=size-i;j<=size+i-1;j++) cout<<symbol; cout<<endl; } }
#include <iostream> #include "graph.h" using namespace std; int main(){ Graph graph1('*',5); graph1.draw(); system("pause"); Graph graph2('$',7); graph2.draw(); return 0; }
結果:

Part3 基于需求描述設計、定義并實現分數類Fraction,并編寫代碼完成測試。 具體要求如下: 設計一個分數類
Fraction描述分數(兩個整數的比值)
#ifndef FRACTION_H #define FRACTION class Fraction{ public: Fraction(int top0,int bottom0); Fraction(); static Fraction add(Fraction a,Fraction b);//加法運算 static Fraction sub(Fraction a,Fraction b);//減法運算 static Fraction mul(Fraction a,Fraction b);//乘法運算 static Fraction div(Fraction a,Fraction b);//除法運算 static void compare(Fraction a,Fraction b);//比較大小 void sim();//化簡 void input();//輸入 void output();//輸出 private: int top; int bottom; }; #endif
#include "fraction.h" #include <iostream> #include <cmath> using std::cin; using std::cout; using std::endl; Fraction::Fraction(int top0,int bottom0):top(top0),bottom(bottom0){ if(bottom0=0){ cout<<"Wrong!"; exit(0); } } Fraction::Fraction(){} Fraction Fraction::add(Fraction a,Fraction b){ Fraction add1; add1.bottom=a.bottom*b.bottom; add1.top=a.top*b.bottom+b.top*a.bottom; add1.sim(); return add1; }//加法 Fraction Fraction::sub(Fraction a,Fraction b){ Fraction sub1; sub1.bottom=a.bottom*b.bottom; sub1.top=a.top*b.bottom-b.top*a.bottom; sub1.sim(); return sub1; } //減法 Fraction Fraction::mul(Fraction a,Fraction b){ Fraction mul1; mul1.bottom=a.bottom*b.bottom; mul1.top=a.top*b.top; mul1.sim(); return mul1; } //乘法 Fraction Fraction::div(Fraction a,Fraction b){ Fraction div1; div1.bottom=a.bottom*b.top; div1.top=a.top*b.bottom; div1.sim(); return div1; } //除法 void Fraction::compare(Fraction a,Fraction b){ a.sim(); b.sim(); if(a.top*b.bottom>a.bottom*b.top) cout<<a.top<<"/"<<a.bottom<<">"<<b.top<<"/"<<b.bottom<<endl; else if(a.top*b.bottom<a.bottom*b.top) cout<<a.top<<"/"<<a.bottom<<"<"<<b.top<<"/"<<b.bottom<<endl; else cout<<a.top<<"/"<<a.bottom<<"="<<b.top<<"/"<<b.bottom<<endl; } //比較 void Fraction::sim(){ int i; if(top!=0){ for(i=fabs(top);i>=1;i--){ if(top%i==0&&bottom%i==0) break; } top/=i; bottom/=i; } if(bottom*top<0){ top=-fabs(top); bottom=fabs(bottom); } else if(bottom*top>0){ top=fabs(top); bottom=fabs(bottom); } } //化簡 void Fraction::input(){ cin>>top>>bottom; } //輸入 void Fraction::output(){ if(top!=0){ if(bottom!=1) cout<<top<<"/"<<bottom; else if(bottom==1) cout<<top; } else cout<<"0"; } //輸出
#include <iostream> #include<cstdlib> #include "fraction.h" using std::cout; using std::endl; int main(){ Fraction m,n; Fraction c1,c2,c3,c4; cout<<"Enter numbers:"; m.input(); n.input(); cout<<"m="; m.output(); cout<<endl; cout<<"n="; n.output(); cout<<endl; c1=Fraction::add(m,n); cout<<"m+n="; c1.output(); cout<<endl; c2=Fraction::sub(m,n); cout<<"m-n="; c1.output(); cout<<endl; c3=Fraction::mul(m,n); cout<<"m*n="; c3.output(); cout<<endl; c4=Fraction::div(m,n); cout<<"m/n="; c4.output(); cout<<endl; Fraction::compare(m,n); system("pause"); return 0; }
結果:

實驗總結:
分子分母這題做了整整兩個小時,程序總是容易出錯,檢查之后發現竟然是拼寫錯誤。自我反思一下,我還是太粗糙了。還有做的時候對一些語句的不熟悉,還是做的太少。
浙公網安備 33010602011771號