课堂测试二:四则运算

题目:随机打印30道小学二到四年级的四则运算提。

要求:

 

 

 

 我的代码如下:

#include<iostream>
#include<stdlib.h>
#include <conio.h>
using namespace std;
class Math
{
    int mins,maxs,n,x,t;
    int a[10000],b[10000][10000],c[10000][10000];
    string s[10000];
public:
    Math(int mins=0,int maxs=0,int n=0,int x=0,int t=0):mins(mins),maxs(maxs),n(n),x(x),t(t-1){}
    ~Math(){}
    int PC(int i)
    {
        int p=0,g=0,h=0;
        for(int y=0;y<i;y++)
        {if(a[i]==a[y]){p++;}}
        for(int y=0;y<i;y++)
        for(int k=0;k<t;k++)
        {
            if(b[i][k]==b[y][k]){g++;}
            if(c[i][k]==c[y][k]){h++;}
        }
        if(g==t&&h==t){p++;}
        return p;
    }
    void TM()
    {
        int q=0;
        while(q<n)//输出题目
        {
            a[q]=(rand()%(maxs-mins+1))+mins;
            for(int r=0;r<t;r++)
            {
                b[q][r]=(rand()%(maxs-mins+1))+mins;
                if(x==0){c[q][r]=rand()%2;}//乘除法判断
                else{c[q][r]=rand()%4;}
            }
            if(PC(q)!=2){q++;}
        }
        for(int i=0;i<n;i++)
        for(int j=0;j<t;j++)
        {
            switch(c[i][j])
            {
                case 0:
                cout<<a[i]<<"+"<<b[i][j]<<"="<<endl;
            break;
            case 1:
            if(a[i]<b[i][j])//避免得数出现负数
            {
                t=a[i];
                b[i][j]=t;
                a[i]=b[i][j];
            }
            cout<<a[i]<<"-"<<b[i][j]<<"="<<endl;
            break;
            case 2:
            cout<<a[i]<<"*"<<b[i][j]<<"="<<endl;
            break;
            case 3:
            if(b[i][j]==0)
            {
                while(b[i][j]==0)
                {b[i][j]=(rand()%(maxs-mins+1))+mins;}
            }//防止0为被除数
            cout<<a[i]<<"/"<<b[i][j]<<"="<<endl;
            break;
            }
        }
    }
};
main()
{
    int mins,maxs,n,x,t;
    cout<<"请输入数的范围"<<endl;
    cin>>mins>>maxs;//数的范围
    cout<<"请输入题目总数:";
    cin>>n;//题目个数
    cout<<"是否有乘除法?是请输入1,否请输入0:";//是否有乘除法
    cin>>x;
    cout<<"输入操作数个数:";
    cin>>t;
    Math m(mins,maxs,n,x,t);
    m.TM();
}

此代码实现了:随即打印不重复题目、定制数量、定制是否有乘除法、定制操作数数量、定制数值范围。

但因能力不足一时未实现有:定制是否有括号。且因JAVA甚不熟练,故此程序使用C++写成。

时间甚晚,明日继续。

原文地址:https://www.cnblogs.com/hfy717/p/13752646.html