四则运算随机出题

四则运算随机出题

 

代码有一个小问题,就是精度可能会丢失。该代码不包含括号等操作符。

c++代码:

#include<bits/stdc++.h>
using namespace std;
float aa[5],bb[4],cc[10],cpaa[5]; 

void operation_four(int n,int m)
{
    int d;
    float flag = 0,flagn;
    flagn = n;
    d = n;
    srand((unsigned)time(NULL));
    for(int i = 0;i < d;i++)
    {
        float summ = 0;
        memset(aa,0,sizeof(aa));
        memset(bb,0,sizeof(bb));
        memset(cc,0,sizeof(cc));
        memset(cpaa,0,sizeof(cpaa));
        float first = rand() % 101;
        aa[0] = first;
        for(int j = 0;j < m;j++)
        {
            float a = rand() % 4;//符号 
            float b = rand() % 101;//数字 
            aa[j + 1] = b;
            bb[j] = a;
        }
        
        for(int k = 0;k < m + 1;k++)
            cpaa[k] = aa[k];

        //乘除法处理
        for(int k = 0;k < m;k++)
            if(bb[k] == 1)
                aa[k + 1] = -aa[k + 1];
        for(int k = 0;k < m;k++)
        {
            if(bb[k] == 2 || bb[k] == 3)
            {
                if(bb[k] == 2)
                {
                    aa[k + 1] = aa[k] * aa[k + 1];
                    cc[k] = 1;
                }
                if(bb[k] == 3)
                {
                    aa[k + 1] = aa[k] / aa[k + 1];
                    cc[k] = 1;
                }
            }
        }
        
        for(int k = 0;k < m + 1;k++)
        {
            if(cc[k] == 0)
            {
                summ += aa[k];
                summ = ((float)((int)((summ + 0.005) * 100))) / 100;
            }
        }
        if(summ < 0)
        {
            d++;
            continue;
        }
        else//结果不为负就执行输出表达式语句 
        {
            for(int k = 0;k < m + 1;k++)
            {
                cout << cpaa[k];
                if(k < m)
                {
                    if(bb[k] == 0)
                        cout << "+";
                    if(bb[k] == 1)
                        cout << "-";
                    if(bb[k] == 2)
                        cout << "*";
                    if(bb[k] == 3)
                        cout << "/";
                }
            }
            cout << "=";
        }
        
        float in;
        cin >> in;
        if(in == summ)
        {
            cout << "√" << endl;
            flag++;
        }
        else
            cout << "×" << endl; 
        cout << "正确答案为:" << summ << endl;
    }
    printf("正确率为:%.2f%%",flag / flagn * 100);
}

int main()
{
    int n,m;
    cout << "说明:结果为整数直接输入整数,出现小数则保留小数后两位" << endl;
    while(1)
    {
        cout << "请输入题目数(不超过100个)和运算符个数(不超过3个):" ; 
        cin >> n >> m;
        if(n <= 100 && n >= 1 && m >= 1 && m <= 3)
            break;
        else
            cout << "不符合输入要求,请重新输入!" << endl;
    }
    operation_four(n,m);
    return 0;
}

运行结果:

四则运算随机出题

 

 Java代码:

package com.lb.test;

import java.util.Scanner;

public class Operator_four {
    public static void main(String[] args){
        int n,m;
        System.out.println("说明:结果为整数直接输入整数,出现小数则保留小数点后两位");
        while(true){
            System.out.println("请输入题目数(不超过100个)和运算符数(不超过3个):");
            Scanner sc = new Scanner(System.in);
            n = sc.nextInt();
            m = sc.nextInt();
            if(n <= 100 && n >= 1 && m >= 1 && m <= 3)
                break;
            else
                System.out.println("不符合输入要求,请重新输入!");
        }
        four2 f2 = new four2();
        f2.operation_four(n,m);
    }
}
package com.lb.test;

import java.util.Random;
import java.util.Scanner;

public class four2 {
    public void operation_four(int n,int m){
        int d;
        float flag = 0,flagn;
        flagn = n;
        d = n;
        Random rand = new Random();
        for (int i = 0;i < d;i++){
            float[] aa = new float[] {0,0,0,0,0};
            float[] bb = new float[] {0,0,0,0};
            float[] cc = new float[] {0,0,0,0,0};
            float[] cpaa = new float[] {0,0,0,0,0};
            float summ = 0;
            float first = rand.nextInt(101);
            aa[0] = first;
            for(int j = 0;j < m;j++){
                float a = rand.nextInt(4);
                float b = rand.nextInt(101);
                aa[j + 1] = b;
                bb[j] = a;
            }

            for(int k = 0;k < m + 1;k++)
                cpaa[k] = aa[k];

            for(int k = 0;k < m;k++){
                if(bb[k] == 1){
                    aa[k + 1] = -aa[k + 1];
                }
            }
            for(int k = 0;k < m;k++){
                if(bb[k] == 2 || bb[k] == 3){
                    if(bb[k] == 2){
                        aa[k + 1] = aa[k] * aa[k + 1];
                        cc[k] = 1;
                    }
                    if(bb[k] == 3){
                        aa[k + 1] = aa[k] / aa[k + 1];
                        cc[k] = 1;
                    }
                }
            }

            for (int k = 0;k < m + 1;k++){
                if(cc[k] == 0){
                    summ = summ + aa[k];
                    summ = ((float)((int)((summ + 0.005) * 100))) / 100;
                }
            }
            if(summ < 0){
                d++;
                continue;
            }
            else{
                for (int k = 0;k < m + 1;k++){
                    System.out.print(cpaa[k]);
                    if(k < m){
                        if (bb[k] == 0)
                            System.out.print("+");
                        if (bb[k] == 1)
                            System.out.print("-");
                        if (bb[k] == 2)
                            System.out.print("*");
                        if (bb[k] == 3)
                            System.out.print("/");
                    }
                }
                System.out.print("=");
            }

            Scanner sc = new Scanner(System.in);
            float in;
            in = sc.nextFloat();
            if(in == summ){
                System.out.println("√");
                flag++;
            }else{
                System.out.println("×");
            }
            System.out.println("正确答案为:" + summ);
        }
        System.out.println("正确率为:" + flag / flagn * 100 + "%");
    }
}

运行结果:

四则运算随机出题

 

 代码还不够完善,需待后期改进

 

上一篇:习题:费用流(网络流)


下一篇:蓝桥杯第十届省赛试题G:完全二叉树的权值(20分)