ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

c++第三次实验

2019-04-20 15:01:54  阅读:238  来源: 互联网

标签:第三次 int void system c++ 实验 Fraction include string


Part 1 画布小球试验

一、了解相关函数用法

1、system()

      system("pause")就是从程序里调用"pause"命令;pause命令的功能:在命令行上输出"按任意键继续······",等待用户按一个键,然后返回。

      system("color xx").第一个为背景色:黑色0  蓝色1  红色4  紫色5  灰色8  淡蓝色9  淡紫色D  淡黄色E。第二个为前景色:绿色2  湖蓝色3  黄色6  白色7  浅绿色A  淡红色C  亮白色F 

       system函数用法:包含头文件<cstdlib>。

                  1、使用system函数调用DOS命令。常见的还有清屏操作:system("cls")

                  2、使用system函数运行可执行文件。例:system("\"C:\\windows······"")

                  3、使用system函数运行批处理文件:例:system("\"c:a.bat\"");

2、string类中成员函数c_str()

        const char *c_str();

        c_str()函数返回一个指向正规c字符串的指针常量,内容与string串相同。为了与c语言兼容,在c中没有string类型,所以必须通过string类对象的成员函数c_str()把string 对象转换成c中字符串的样式。

        例如:char c[20];string s="1234";strcpy(c , s.c_str());

        (参考博客https://blog.csdn.net/Makefilehoon/article/details/80687087)

 

二、选做部分

1、优化简洁代码

       修改部分如下:

       在ball类的声明中添加一行函数声明:void recover(int x0 = 0, int y0 = 0);

Ball::Ball(int x0, int y0):x(x0), y(y0) {
    // 打印y0-1行空行
    for(int line=1; line <= y0-1; line++)
        cout << endl;
    
    // 打印x0-1个空格
    for(int col=1; col <= x0-1; col++) 
        cout << " ";
    
    // 打印小球
    cout << "O" << endl; 
    
}
void Ball::recover(int x0, int y0){
   system("cls");//清屏
    
    Ball(x0, y0);
}

void Ball::left(int step) {
    x = x-step;
    if(x <= 0)
        x=0;
    
    recover(x, y);
}
ball类实现部分的更改
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; // 更新画布背景色 
    
    Canvas(bg,fg);
    
}
Canvas的函数实现部分修改

2、简单增加了换画布的操作

       在canvas类中添加相应函数声明,同时可以利用到gragh中,效果差不多。

void Canvas::inputfg()
{
    cin >> fg;
    changeCanvasFg(fg);
}

void Canvas::inputbg()
{
    cin >> bg;
    changeCanvasBg(bg);
}
Canvas类实现中增添代码

      

(编写通过“a”“s”“d”“w”来操作小球移动没成功)

Part 2 GRAGH

基本draw函数实现

#ifndef GRAPH_H
#define GRAPH_H

// 类Graph的声明 
class Graph {
    public:
        Graph(char ch, int n);   // 带有参数的构造函数 
        void draw();     // 绘制图形 
    private:
        char symbol;
        int size;
};


#endif
graph.h
// 类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, m;
    for (i = 1; i <= size ; i++)
    {
        for (j = 1; j <= size - i; j++)
            cout << " ";
        for (m = 1; m <= (2*i - 1); m++)
            cout << symbol;
        for (j = 1; j <= size - i; j++)
            cout << " ";
        cout << endl;
    }

}
gragh.cpp
#include <iostream>
#include "graph.h"
using namespace std;

int main() {
    Graph graph1('*',5);
    graph1.draw();
    
    system("pause");
    system("cls");
    
    Graph graph2('$',7);
    graph2.draw();
    
    return 0; 
} 
main.cpp

 

 

 

Part 3 Fraction 类

#pragma once
class Fraction
{
public:
    Fraction(int num=0,int den=1);
    Fraction(Fraction &p);
    ~Fraction();
    void input();
    void reduction();
    int Gcd(int m,int n);
    void add(Fraction p);
    void substraction(Fraction p);
    void multiply(Fraction p);
    void division(Fraction p);
    void compare(Fraction p);
    void show();
private :
    int numer;//numer是分子
    int denom;//denom是分母
};
Fraction.h
#include "Fraction.h"
#include<iostream> 
#include<stdlib.h>
using namespace std;

Fraction::Fraction(Fraction &p)//复制构造函数
{
    numer = p.numer;
    denom = p.denom;
}

void Fraction::input()
{
    cin >> numer;
    cin >> denom;
    if (denom == 0)
    {
        cout << "Input illdegal.Please input again."<<endl;
        input();
    }
}


int Fraction::Gcd(int m,int n)
{
    int t, r,gcd;
    if (m < n)
    {
        t = m; m = n; n = t;
    }
    while ((m%n) != 0)
    {
        r = m % n;
        m = n;
        n = r;
    }
    gcd = n;
    return gcd;
}

void Fraction::reduction()
{
    int g;
    int a,b;
    a =abs( numer); b =abs( denom);
    g = Gcd(a,b);
    numer = numer / g;
    denom = denom / g;
}

Fraction::Fraction(int num,int den):numer(num),denom(den)//构造函数
{
}

void Fraction::add(Fraction p)//加法
{
    int mc;//gcd为分母的最大公约数,a=gcd/第一个分母,b=gcd/第二个分母
    int c, d,g;//c,d分别表示第一,第二个分数通分后的分子
    int m, n;
    m = abs(denom); n = abs(p.denom);
    g=Gcd(m,n);//操作只改变m,n的值,不改变denom和p.denom的值
    mc = abs(denom)*abs(p.denom) / g;//mc最大公倍数
    c = numer * (mc/abs(denom)); d = p.numer*(mc/abs(p.denom));//p.numer为正则为加法,为负则为减法
    p.numer = c + d;//此时改变了p的分子分母的值
    p.denom = mc;
    p.reduction();
    if (p.numer%p.denom == 0)
        cout << p.numer / p.denom << endl;
    else
        cout << p.numer << "/" << p.denom << endl;
}

void Fraction::substraction(Fraction p)//规定第二个是减数
{
    p.numer = -p.numer;
    add(p);
}

void Fraction::multiply(Fraction p)
{
    p.numer = p.numer*numer;
    p.denom = p.denom*denom;
    p.reduction();
    cout << p.numer << "/" << p.denom << endl;
}

void Fraction::division(Fraction p)
{
    int t;
    t = p.denom;
    p.denom = p.numer;
    p.numer = t;
    multiply(p);
}

void Fraction::compare(Fraction p)
{
    int g,mc;
    int c, d;
    int m, n;
    m = abs(denom); n = abs(p.denom);
    g = Gcd(m,n);
    mc = abs(denom)*abs(p.denom) / g;
    c = numer * (mc / abs(denom)); d = p.numer*(mc / abs(p.denom));
    if (c > d)
        cout << numer << "/" << denom << ">" << p.numer << "/" << p.denom << endl;
    if (c < d)
        cout << numer << "/" << denom << "<" << p.numer << "/" << p.denom << endl;
    if (c == d)
        cout << numer << "/" << denom << "=" << p.numer << "/" << p.denom << endl;
}

void Fraction::show()
{
    cout << numer << "/" << denom << endl;
}

Fraction::~Fraction()
{
}
Fraction.cpp
#include<iostream>
#include<cstdlib>
#include"Fraction.h"
using namespace std;
int main()
{
    Fraction a(1,2),d(5, 6),e(-1,3),f(3,7),g(4,13);
    Fraction b;
    Fraction h(5);
    Fraction c=3;
    b.input();
    b.reduction();
    cout << "b is ";
    b.show();
    cout << "Compare a and b.The result is";
    a.compare(b);//比较
    cout << "a+b=";
    a.add(b);//加法
    cout << "d-c=";
    d.substraction(c);//减法
    cout << "e×f=";
    e.multiply(f);//乘法
    cout << "g÷h=";
    g.division(h);
    system("pause");//程序调试窗口闪退
    return 0;
}
main.cpp

 

1、增加判断分数是否有意义(分母为零)。在input输入函数中的两行代码。

2、约分。见函数reduction。

3、后期评论他人代码时注意到,自己利用公倍数的方法着实不简便。

 

实验总结

1、学习实验了分文件,注意各分文件中所需头文件仍然需要在开头注明。

2、学习了清屏,换颜色等system的用法。

3、本次实验做起来相对是比较通畅的,主要卡壳在按键移动小球

标签:第三次,int,void,system,c++,实验,Fraction,include,string
来源: https://www.cnblogs.com/lovecpp/p/10733377.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有