实验3
第一题:
#include "ball.h" #include <iostream> #include <cstdlib> using std::cout; using std::endl; const int SIZE_X=50; const int SIZE_Y=50; Ball::Ball(int x0, int y0):x(x0), y(y0) { for(int line=1; line <= y0-1; line++) cout << endl; for(int col=1; col <= x0-1; col++) cout << " "; cout << "O" << endl; } void Ball::left(int step) { x = x-step; if(x <= 0) x=0; system("cls"); for(int line=1; line <= y-1; line++) cout << endl; for(int col=1; col <= x-1; col++) cout << " "; cout << "O" << endl; } void Ball::right(int step) { x = x+step; if(x >= SIZE_X) x=SIZE_X; // 锟斤拷锟斤拷 system("cls"); // 锟斤拷印y-1锟叫匡拷锟斤拷 for(int line=1; line <= y-1; line++) cout << endl; // 锟斤拷印x-1锟斤拷锟秸革拷 for(int col=1; col <= x-1; col++) cout << " "; // 锟斤拷印小锟斤拷 cout << "O" << endl; } void Ball::up(int step) { y = y-step; if(y <= 0) y=0; // 锟斤拷锟斤拷 system("cls"); // 锟斤拷印y-1锟叫匡拷锟斤拷 for(int line=1; line <= y-1; line++) cout << endl; // 锟斤拷印x-1锟斤拷锟秸革拷 for(int col=1; col <= x-1; col++) cout << " "; // 锟斤拷印小锟斤拷 cout << "O" << endl; } void Ball::down(int step) { y = y+step; if(y >= SIZE_Y) y = SIZE_Y; // 锟斤拷锟斤拷 system("cls"); // 锟斤拷印y-1锟叫匡拷锟斤拷 for(int line=1; line <= y-1; line++) cout << endl; // 锟斤拷印x-1锟斤拷锟秸革拷 for(int col=1; col <= x-1; col++) cout << " "; // 锟斤拷印小锟斤拷 cout << "O" << endl; }
#ifndef BALL_H #define BALL_H class Ball { public: Ball(int x0=0, int y0=0); // 在坐标(x,y)处构造一个小球(小球用字符O表示) void left(int step=1); // 左移step void right(int step=1); // 右移step void up(int step=1); // 上移step void down(int step=1); // 下移step private: int x; // x坐标 int y; // y坐标 }; #endif
#include "canvas.h" #include <cstdlib> Canvas::Canvas(string bg0, string fg0):bg(bg0), fg(fg0) { string color = "color "; color += bg0; color += fg0; system(color.c_str()); } void Canvas::changeCanvasBg(string bg0) { bg = bg0; // 更新画布背景色 string color = "color "; color += bg; color += fg; system(color.c_str()); } void Canvas::changeCanvasFg(string fg0) { fg = fg0; // 更新画布前景色 string color = "color "; color += bg; color += fg; system(color.c_str()); } void Canvas::changeCanvasColor(string bg0, string fg0){ bg = bg0; // 更新画布背景色 fg = fg0; // 更新画布前景色 string color = "color "; color += bg; color += fg; system(color.c_str()); }
#ifndef CANVAS_H #define CANVAS #include <string> using std::string; class Canvas { public: Canvas(string bg0="0", string fg0="A"); void changeCanvasBg(string bg0); void changeCanvasFg(string fg0); void changeCanvasColor(string bg0, string fg0); private: string bg; // background color string fg; // foreground color }; #endif
#include <iostream> #include "canvas.h" #include "ball.h" int main(){ Canvas canvas; Ball ball(10,10); system("pause"); ball.left(5); system("pause"); ball.up(20); system("pause"); canvas.changeCanvasFg("E"); system("pause"); canvas.changeCanvasBg("D"); system("pause"); return 0; }
第二题:
// 类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() { int i,j,k; for(i=1;i<=size;i++) { for(j=1;j<=size-i;j++) cout<<' '; for(k=1;k<=2*i-1;k++) cout<<symbol; cout<<endl; } }
#ifndef GRAPH_H #define GRAPH_H // 类Graph的声明 class Graph { public: Graph(char ch, int n); // 带有参数的构造函数 void draw(); // 绘制图形 private: char symbol; int size; }; #endif
#include <iostream> #include "graph.h" using namespace std; int main() { Graph graph1('*',5); graph1.draw(); system("pause"); system("cls"); Graph graph2('$',7); graph2.draw(); system("pause"); return 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<<"输入两个分数:"; m.input(); n.input(); cout<<"m="; m.output(); cout<<endl; cout<<"n="; n.output(); cout<<endl; c1=Fraction::add(m,n); cout<<"相加"; c1.output(); cout<<endl; c2=Fraction::sub(m,n); cout<<"相减"; c2.output(); cout<<endl; c3=Fraction::mul(m,n); cout<<"相乘"; c3.output(); cout<<endl; c4=Fraction::div(m,n); cout<<"相除"; c4.output(); cout<<endl; Fraction::compare(m,n); system("pause"); return 0; }
#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"; }
#ifndef FRACTION_H #define FRACTION_H 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
总结:
1: 在课上做的第一题存入U盘回来打开了运行不了,重新导入的才可以。
2:最后一题花了好久好久,一言难尽,自己电脑的DEV运行不出来,让学长检查错误,然后截图是让学长帮忙运行的截图,不知道为啥我的软件不好运行,心态爆炸。