计算与软件工程作业二

计算与软件工程作业二

一、作业要求

作业一

1.预习 阅读讲义<https://www.cnblogs.com/xinz/archive/2011/11/27/2265425.html >第二部分内容 2.个人开发技术
2.个人程序(本作业内容来源于网址:https://www.cnblogs.com/xinz/p/7417960.html,与 <https://www.cnblogs.com/jiel/p/4810756.html >)像《构建之法》的 人物阿超那样,写一个能自动生成小学四则运算题目的命令行 “软件”。 可以使用C,C++,或者C#等语言实现。

  • 分别能够实现小学一、二、三、四、五年级的四则运算要求, 逐步实现各个年级的难度
  • 要求能够通过输入来选择不同年级,每个年级还得区分难,中,易三个等级
  • 对于三、四、五年级需要支持括号与多个运算符
  • 程序支持判断对错及累计得分与时间
  • 一次可以出100道题目,而且不能重复(比如2+3 与 3+2 算重复的)
  • 充分发挥想象增加满足小学生数学检测需要的功能
作业二
  1. git学习与码云代码托管平台gitee阅读网址如下关于git的使用https://www.liaoxuefeng.com/wiki/896043488029600https://gitee.com/help/categories/43通过之前已经注册的码云账号,学会简单的使用将作业1所写代码托管到gitee平台上个人仓库

  2. 在博客园给出作业并包括所写的代码,同时给出托管于gitee上的链接

具体链接https://edu.cnblogs.com/campus/jssf/infor_computation17-31/homework/10402

二、代码

#include <iostream>
using namespace std;

class Calcution{
public:
    Calcution();
    char getSignal();
    void addsub(int n);
    void muldiv(int n);
    void decial(int n);
    void fraction(int n);
    void mixed(int n);
    void Gradeone(int n);
    void Gradetwo(int n);
    void Gradethree(int n);
    void Gradefour(int n);
    void Gradefive(int n);
private:
    int n;
};



Calcution::Calcution():n(0){};

//随机获得运算符
char Calcution::getSignal(){
    char signal[]={'+','-','*','/'};
    srand((unsigned)time(NULL));
    return signal[rand()%4];
}

//整数加减
void Calcution::addsub(int n){
    int a,b,c;
    a=rand()%n+1;
    b=rand()%n+1;
    if(a+b>=n){
        a=rand()%n+1;
        b=rand()%n+1;
    }
    c=rand()%2;
    switch(c){
        case(0):
            cout<<a<<"+"<<b<<"="<<endl;break;
        case(1):
            if(a<b){
                int tmp=0;
                tmp=a;
                a=b;
                b=tmp;
                cout<<a<<"-"<<b<<"="<<endl;break;
                }
        }
}

//整数乘除
void Calcution::muldiv(int n){
    int a,b,c;
    a=rand()%n+1;
    b=rand()%n+1;
    if(a*b>=n){
        a=rand()%n+1;
        b=rand()%n+1;
    }
    c=rand()%2;
    switch(c){
        case(0):
            cout<<a<<"*"<<b<<"="<<endl;break;
        case(1):
            if(b==0){
                b=rand()%n;
            }
            cout<<a<<"÷"<<b<<"="<<endl;break;
    }
}

//小数加减乘除
void Calcution::decial(int n){
    double a,b;
    a=(double)(rand()%n+1)/1000;
    b=(double)(rand()%n+1)/1000;
    cout<<a<<getSignal()<<b<<"="<<endl;
}

//分数加减乘除
void Calcution::fraction(int n){
    int mole1,deno1,mole2,deno2;
    mole1=rand()%10;
    deno1=rand()%10+1;
    mole2=rand()%10;
    deno2=rand()%10+1;
    //a=rand()%4;
    while(mole1>deno1 || mole2>deno2){
        mole1=rand()%10;
        deno1=rand()%10;
        mole2=rand()%10;
        deno2=rand()%10;
    }
    cout<<mole1<<"/"<<deno1<<getSignal()<<mole2<<"/"<<deno2<<"="<<endl;
}

void Calcution::mixed(int n){
    int a,b,c,d;
    a=rand()%n+1;
    b=rand()%n+1;
    c=rand()%n+1;
    d=rand()%2;
    if(d==0)
        cout<<"("<<a<<getSignal()<<b<<")"<<getSignal()<<c<<"="<<endl;
    if(d==1)
        cout<<a<<getSignal()<<"("<<b<<getSignal()<<c<<")"<<"="<<endl;
}


//一年级加减法,难中易分别对应100,50,10以内的运算
void Calcution::Gradeone(int n){
    for(int i=0;i<100;i++){
        addsub(n);
    }
}


//二年级在一年级的基础上加入乘除法,难中易分别对应100,50,10以内的运算
void Calcution::Gradetwo(int n){
    for(int i=0;i<100;i++){
        int a=rand()%3;
        if(a==0)
            addsub(n);
        if(a==1 || a==2)
            muldiv(n);
    }
}

//三年级在一二年级的基础上加入分数,难中易分别对应100,50,10以内的运算
void Calcution::Gradethree(int n){
    for(int i=0;i<100;i++){
        int a=rand()%4;
        if(a==0)
            addsub(n);
        if(a==1)
            muldiv(n);
        if(a==2 || a==3)
            fraction(n);
    }
}

//四年级在一二三年级基础上加入分数计算,难中易分别对应100,50,10以内的运算
void Calcution::Gradefour(int n){
    for(int i=0;i<100;i++){
        int a=rand()%5;
        if(a==0)
            addsub(n);
        if(a==1)
            muldiv(n);
        if(a==2)
            fraction(n);
        if(a==3 || a==4)
            decial(n);
    }
}

//五年级在一二三四年级基础上加入混合运算,难中易分别对应100,50,10以内的运算
void Calcution::Gradefive(int n){
    for(int i=0;i<100;i++){
        int a=rand()%6;
        if(a==0)
            addsub(n);
        if(a==1)
            muldiv(n);
        if(a==2)
            decial(n);
        if(a==3)
            fraction(n);
        if(a==4 || a==5)
            mixed(n);
    }
}

int main(){
    Calcution cal;
    int a;
    cout<<"请输入年级:1~5年级 (输入对应的年级数即可)"<<endl;
    cin>>a;
    switch(a){
        case(1):
            int o;
            cout<<"请选择难度: 1、易  2、中  3、难 (输入前面数字)"<<endl;
            cin>>o;
            if(o==1)
                cal.Gradeone(10);
            if(o==2)
                cal.Gradeone(50);
            if(o==3)
                cal.Gradeone(100);
            break;
        case(2):
            int t;
            cout<<"请选择难度: 1、易  2、中  3、难(输入前面数字)"<<endl;
            cin>>t;
            if(t==1)
                cal.Gradetwo(10);
            if(t==2)
                cal.Gradetwo(50);
            if(t==3)
                cal.Gradetwo(100);
            break;
        case(3):
            int h;
            cout<<"请选择难度: 1、易  2、中  3、难(输入前面数字)"<<endl;
            cin>>h;
            if(h==1)
                cal.Gradethree(10);
            if(h==2)
                cal.Gradethree(50);
            if(h==3)
                cal.Gradethree(100);
            break;
        case(4):
            int f;
            cout<<"请选择难度: 1、易  2、中  3、难(输入前面数字)"<<endl;
            cin>>f;
            if(f==1)
                cal.Gradefour(10);
            if(f==2)
                cal.Gradefour(50);
            if(f==3)
                cal.Gradefour(100);
            break;
        case(5):
            int v;
            cout<<"请选择难度: 1、易  2、中  3、难(输入前面数字)"<<endl;
            cin>>v;
            if(v==1)
                cal.Gradefive(10);
            if(v==2)
                cal.Gradefive(50);
            if(v==3)
                cal.Gradefive(100);
            break;
    }
    return 0;
}

总结:程序中括号混合运算等都是简单的直接输出,缺少判重以及答案,数据结构知识正在重新学习中……

gitee链接

https://gitee.com/Vhe_jian/Learning

原文地址:https://www.cnblogs.com/jian-He/p/12388633.html