201571030303 小学四则混合元算 龚继恒

源码地址

https://github.com/luchengyi312/GongJiheng2

一、需求分析

     1、由用户输入参数n,然后随机产生n道加减乘除练习题,每个数字在 0 和 100 之间,运算符在3个到5个之间;

     2、运算过程中不得出现负数与非整数,比如不能出 3/5+2=2.6,2-5+10=7等算式;

     3、将学号与生成的n道练习题及其对应的正确答案输出到文件“result.txt”中,文件目录与程序目录一致。

      例如:当程序接收的参数为4时,输出如下:

      

 软件附加功能要求如下:

支持有括号的运算式,包括出题与求解正确答案。算式中存在的括号必须大于2个,且不得超过运算符的个数。

扩展程序功能支持真分数的出题与运算,运算时分数需自动化简,比如 1/2+1/6=2/3,而非4/6。

二、设计实现

      1、运算结果不能为负数和非整数;

      2、将学号与生成的n道练习题及其对应的正确答案输出到文件“result.txt”中。

三、功能实现

  我们在设计的开始,就要想随机输出算式就得先了解随机数的定义生成随机数,生成随机数的函数就是math.random,还有运算符的随机产生,不过要想随机产生运算符就要从加减乘除四个运算符号中产产生,即先对其进行定义再调用,最后将所产生的随机式输出我根据学生学习程度的不同,对算式进行了难易分类,让不同程度的学生得到有效的学习
                                                                   

四、测试运行   

                

 

 

           

五、核心代码

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Scanner;

public class Main{

    public static void main(String[] args) throws  IOException {
   
        File file = new File("result.txt");  
                                                                           
        FileOutputStream fop = new FileOutputStream(file);

        if (!file.exists())
        {
            file.createNewFile();
        }
 
        int x;
        System.out.println("输入题目的数量:");
        Scanner scan2 = new Scanner(System.in);
        x = scan2.nextInt();
        String serialNo = "201571030303";
        
        fop.write(serialNo.getBytes());    
        fop.write("\r\n".getBytes());    
        
        for(int i=0;i<x;i++){
            int a=(int)(Math.random()*100);
            int b=(int)(Math.random()*100);
            int c=(int)(Math.random()*100);
            
            String q="";    
            int ans=0;
            int[] flag=new int[2];
            for(int j=0;j<2;j++){      
                int f=(int)(Math.random()*4);
                switch(f){
                case 0:
                    if(j==0){
                        q=a+"+"+b;
                    }
                    else{
                        q=q+"+"+c;
                    }
                    flag[j]=0;
                    break;
                case 1:
                    if(j==0){
                        q=a+"-"+b;
                    }
                    else{
                        q=q+"-"+c;
                    }
                    flag[j]=1;
                    break;
                case 2:
                    if(j==0){
                        q=a+"*"+b;
                    }
                    else{
                        q=q+"*"+c;
                    }
                    flag[j]=2;
                    break;
                case 3:
                    if(j==0){
                        q=a+"/"+b;
                    }
                    else{
                        q=q+"/"+c;
                    }
                    flag[j]=3;
                    break;
                }
            }
            if(flag[0]<2){
                if(flag[1]<2){
                    if(flag[0]==0){
                        ans=a+b;
                    }
                    else{
                        ans=a-b;
                    }
                    if(flag[1]==0){
                        ans+=c;
                    }
                    else{
                        ans-=c;
                    }
                }
                else{
                    if(flag[1]==2){
                        ans=b*c;
                    }
                    else{
                        if(c==0){
                            continue;
                        }
                        if(b<c || b%c!=0) {
                            i=i-1;      
                            continue;                           }
                        ans=b/c;
                    }
                    if(flag[0]==0){
                        ans+=a;
                    }
                    else{
                        ans=a-ans;
                    }
                }
            }
            else{
                if(flag[0]==2){
                    ans=a*b;
                }
                else{
                    if(b==0){
                        continue;
                    }
                    if(a<b || a%b!=0) {
                        i=i-1;       //如果出现重新循环
                        continue;   //判断结果不能为负数和非整数
                    }
                    ans=a/b;
                }
                if(flag[1]==0){
                    ans+=c;
                }
                else if(flag[1]==1){
                    ans-=c;
                }
                else if(flag[1]==2){
                    ans*=c;
                }
                else{
                    if(c==0){
                        continue;
                    }
                    if(ans<c || ans%c!=0) {
                        i=i-1;       //如果出现重新循环
                        continue;   //判断结果不能为负数和非整数
                    }
                    ans/=c;
                }
            }
            
            if(ans<0) //判断结果不能为负数
            {
                i=i-1; continue;
            }   
            
            q=q+"="+ans;           //用字符串将算式和答案连在一起
            System.out.println(q);
            fop.write(q.getBytes());    //写入表达式
            fop.write("\r\n".getBytes());   //换行
        }
        fop.close();
    }
         

posted @ 2018-03-24 23:13  晓之振  阅读(144)  评论(1编辑  收藏  举报