四则运算的简单实现

对于四则运算的简单实现,我个人理解需要实现以下功能:1、用户输入控制题目个数;2、用户控制题目的数值范围;3、对于除法要以真分数的形式;4、运算符个数不能超过3个;5、题目不能重复;6、生成题目存入txt;7、支持一万道题目;8、统计结果按格式输出还要存入txt。

附上码云地址 https://git.oschina.net/greathong/SiZeYunSuan.git。

接下来,对的代码思路进行分析。首先,用户输入题目数目和算术范围,这两个参数传入CreatStr自定义方法中。在其中,用OperatorKind自定义方法随机产生运算符,用operand方法随机产生指定范围的运算数值,并将数值存入字符串str[]。通过该字符串str[i]和str[location]对比,如相同,则代表重复,不往下进行。在不重复的情况下往下进行程序。Display方法输出运算式,4个为一行,writefile方法写入文件。Input方法存入用户此时输入的正确答案,并存入数组。对用户答案Input[i]与系统生成答案ans[i]对比,正确则count+1,count为正确题目个数。错误则用数组a[i]=-1表示。最后输出a[i]=-1中的i集合,这些i就为错误的题目号,反之则为正确的题目号,然后将统计结果写入文档。

以下提供我的代码:

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintStream;
import java.util.Random;
import java.util.Scanner;
public class SizeYunsuan {

	/**
	 * @param args
	 */
	public static Random rand=new Random();
    public static class Qst
    {
        static int Operand(int Range)//产生操作数
        {
            int Opd=rand.nextInt(Range*2+1)-Range;
            return Opd;
        }
        public static char OperatorKind(char Operator)//生成运算符
        {
            int OperatorPossible=rand.nextInt(3);

            switch(OperatorPossible)
            {
                case 0:
                    Operator=‘+‘;
                    break;
                case 1:
                    Operator=‘-‘;
                    break;
                case 2:
                    Operator=‘*‘;
                    break;

                default:
                    System.out.print("Error!");
            }
            return Operator;
        }
        public static boolean IfRepeated(String str[],int Location)//判断是否重复
        {
            for(int i=0;i<Location;i++)
            {
                if(str[i].equals(str[Location]))
                    return true;
            }
            return false;
        }
        public static int Ans(int ans,int Operand1,int Operand2,char Operator)//生成答案
        {
            switch(Operator)
            {
                case ‘+‘:
                    ans=Operand1+Operand2;
                    break;
                case ‘-‘:
                    ans=Operand1-Operand2;
                    break;
                case ‘*‘:
                    ans=Operand1*Operand2;
                    break;

                default:
                    System.out.print("Error!");
            }
            return ans;
        }
        //生成一道运算题
        public static void CreateStr(int Range,char Operator,String str[],int i,int QstNum,int ans[])
        {       int answer = 0;
                Qst.OperatorKind(Operator);
                int Operand1=Qst.Operand(Range);
                int Operand2=Qst.Operand(Range);
                str[i]=Integer.toString(Operand1);
                str[i]+=Operator;
                str[i]+=Integer.toString(Operand2);
                str[i]+="=";
                while(IfRepeated(str,i))//判断是否重复
                {
                    Operand1=Qst.Operand(Range);
                    Operand2=Qst.Operand(Range);
                    str[i]=Integer.toString(Operand1);
                    str[i]+=Operator;
                    str[i]+=Integer.toString(Operand2);
                    str[i]+="=";
                }
                    ans[i]=Qst.Ans(answer,Operand1,Operand2,Operator);
        }
        public static void Display(String str[])//输出生成的运算题
        {

            for(int j=0;j<str.length;j++)
            {
                System.out.print(str[j]);
                if(j%4==3)
                {
                    System.out.println();
                }
                else
                {
                    System.out.print(‘\t‘);
                }
            }
        }
        public static void Writefile(String str[],String filePath){

        	try {
        		 File file = new File(filePath);
                 PrintStream ps = new PrintStream(new FileOutputStream(file));
                 for(int j=1;j<str.length;j++){
                 ps.println(j+"、"+str[j]);// 往文件里写入字符串

                 }

			} catch (FileNotFoundException e) {
				// TODO: handle exception
				 e.printStackTrace();
			}
        }
        public static void Input(int Input[],int QstNum)//输入问题答案
        {
            Scanner sca=new Scanner(System.in);
            for(int j=0;j<QstNum;j++)
            {
                Input[j]=sca.nextInt();
            }
        }
        public static void OutAns(int ans[],int QstNum)//输出答案
        {
            for(int j=0;j<QstNum;j++)
            {
                System.out.print(ans[j]);
                if(j%4==3)
                {
                    System.out.println();
                }
                else
                {
                    System.out.print(‘\t‘);
                }
            }
        }
        public static void ConfirmAns(int ans[],int Input[],int QstNum,int count)
        {   int a[] = new int[QstNum];
            count=0;
            for(int i=0;i<QstNum;i++)
            {
                if(ans[i]==Input[i]){
                    count++;
                    a[i]=i;
                }else{
                	a[i]=-1;
                }
            }
            try {
            	File file = new File("D:\\Grade.txt");
                PrintStream ps = new PrintStream(new FileOutputStream(file));
                System.out.print("Correct:");
                ps.print("Correct:");
                System.out.print(count);
                ps.print(count);
                System.out.print("(");
                ps.print("(");
                for(int i=0;i<a.length;i++){

                	if(a[i]!=-1){

                		 System.out.print(i+1+",");
                		 ps.print(i+1+",");
                		}
                	}

            	System.out.println(")");
            	 ps.println(")");
                System.out.print("Wrong:");
                ps.print("Wrong:");
                System.out.print(QstNum-count);
                ps.print(QstNum-count);
                System.out.print("(");
                ps.print("(");
                for(int i=0;i<a.length;i++){

                	if(a[i]==-1){

                		 System.out.print(i+1+",");
                		 ps.print(i+1+",");
                		}
                	}

           	System.out.println(")");
            ps.println(")");

			} catch (FileNotFoundException e) {
				// TODO: handle exception
			}

        }

    }

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int Range,QstNum=0,count=0;

        char Operator = ‘+‘;
        Scanner sca=new Scanner(System.in);
        System.out.println("请输入生成题目的数量:");
        QstNum=sca.nextInt();
        System.out.println("请输入算数范围:");
        Range=sca.nextInt();

        String str[] = new String[QstNum];
        int ans[]=new int[QstNum];
        int Input[]=new int[QstNum];
        for( int i=0;i<QstNum;i++)
        {
            try
            {
                Qst.CreateStr(Range,Qst.OperatorKind(Operator),str,i,QstNum,ans);
            }
            catch(Exception e)
            {
                i--;
            };
        }
        Qst.Display(str);
        String filePath;
        filePath="D:\\Exercises.txt";
		Qst.Writefile(str, filePath);
        System.out.println();
        System.out.println("输入答案:");
        Qst.Input(Input, QstNum);
        System.out.println("正确答案:");
        Qst.OutAns(ans,QstNum);
        System.out.println();
        Qst.ConfirmAns(ans,Input,QstNum,count);
	}

}下面为代码的运行结果:

在Exercises.txt与Grade.tex中图片

另外,因为本人编程技术还在努力提高中,不可能一撮而就,一下完美完成老师题目要求(这不可能的,是代码总会有要改进的地方),还有一些不足。比如关于题目要求的真分数运算,可能单独写,我可以实现之,但功能添加进来的时候就出问题了。
时间: 2024-08-06 10:58:59

四则运算的简单实现的相关文章

四则运算加强版

设计思路 控制重复:建立三个数组分别控制两个随机数和通过随机数产生的四则运算符号,通过循环使三个数组同时与前面的比较,出现重复时使循环的数减一来控制总数不变. 可定制(数量/打印方式):运用循环控制数量,输出时添加变量控制打印方式. 可控下列参数(是否有乘除法.数值范围,加减有无负数.除法有无余数.是否支持分数):输出前判断所控条件,添加条件判断乘除法.加减有无负数.除法有无余数.支持分数运算,在添加随机数时控制数值范围,最后根据所判断的条件分别打印出所处题目. 代码: #include<ios

实验四:201571030116/201571030106《小学四则运算练习软件需求说明》结对项目报告

任务1:以实验二个人项目.实验三结对项目所开发的小学生四则运算练习软件作为原型,实施小学生四则运算练习软件用户调研活动. 由于上次作业小伙伴很机智的把软件的操作过程录成了gif动图,所以在做基于原型的用户需求调查时减少了很多麻烦.对于这个任务我们采用了三种方法做用户需求调查:1.线上问卷调查 2.真实用户线上访谈 3.会议研讨 1.线上问卷调查:地址: 我们通过前两次作业整理了一些问题,用"问卷星"做了一份线上问卷调查,为了更精确的区分不同真实用户对软件的需求,我们把问卷调查分成了三个

Axure函数与变量

AxureRP里面的变量是一个非常有个性和使用价值的功能,有了变量之后,很多需要复杂条件判断或者需要传递参数的功能逻辑就可以设计实现了,大大丰富了原型演示的可实现效果.在AxureRP 6.0版本之前,只能使用定义的全局变量,6.0版本增加了一些AxureRP自带的变量,并且增加了函数运算功能,在前面已经有写过两篇教程<AxureRP教程–使用变量>和<AxureRP教程–变量运算>,分别介绍了全局变量的使用和6.0版本之前如何进行变量的运算,不了解的朋友可以先去看看这两篇文章.

关于VS2013单步调试进入反汇编程序的问题

在写一个稀疏矩阵四则运算的简单程序时,发现单步调试时无法进入子程序,而是显示反汇编程序. 多次检查无果后选择百度相关问题,发现有如下方案: 方法一:重新生成解决方案,再调试.方法二:菜单-工具-选项-调试- “源代码不可用时显示反汇编”方法三:将工具->选项->调试->常规->要求源文件与原始版本完全匹配取消掉.方法四:项目->属性->C/C++->常规->调试信息格式确认不是禁用.尝试使用ZI 尝试之后发现都无法解决现有问题,考虑到进入反汇编是因为无法显示

Pair Programming-四则运算改进

四则运算满足简单加减乘除,以及包含括号的复杂四则运算. 代码描述: 1.采用random随机数产生要参与计算的数字,以及运算符号 2.采用Scanner获取控制台输入的结果,与计算出来的结果进行比对,并告之用户.如果用户计算错误,将正确结果输出. 3.关于复杂计算,所出题是包含四种符号的混合运算. 代码展示: random产生随机数abcd分别代表要参加运算的数字 s代表简单运算中的符号 public static void main(String[] args) { int n = 10; S

如何通过BIPlatform完成计算指标的配置

先睹为快,我们先来看一下如何进行简单的基于四则运算的简单计算指标配置. 访问BIPlatform设计器,进入如下页面: 配置完成之后,点击提交完成配置,之后就可以正常使用你配置的计算指标了. 通过上述简单操作,你就可以完成基于四则运算的计算指标配置. 除上述功能之外,BIPlatform还支持快速同环比的配置,自定义函数配置支持. 关于快速同环比配置,和配置普通计算指标类似,接下来着重讲一下如何支持自定义函数: /** 编写自定义函数功能类,如:本函数主要实现两个数的加和*/ public cl

【编程题】简单的四则运算

问题描述: 输入一个只包含个位数字的简单四则运算表达式字符串,计算该表达式的值 注: 1.表达式只含 +, -, *, /, (, ), 四则运算符 2.表达式数值只包含个位整数(0-9),且不会出现0作为除数的情况 3.要考虑加减乘除按通常四则运算规定的计算优先级 4.除法用整数除法,即仅保留除法运算结果的整数部分.比如8/3=2.输入表达式保证无0作为除数情况发生 5.输入字符串一定是符合题意合法的表达式,其中只包括数字字符和四则运算符字符,除此之外不含其它任何字符,不会出现计算溢出情况 •

简单四则运算

问题描述: 输入一个只包含个位数字的简单四则运算表达式字符串,计算该表达式的值 注: 3.1.表达式只含 +, -, *, / 四则运算符,不含括号 3.2.表达式数值只包含个位整数(0-9),且不会出现0作为除数的情况 3.3.要考虑加减乘除按通常四则运算规定的计算优先级 3.4.除法用整数除法,即仅保留除法运算结果的整数部分.比如8/3=2.输入表达式保证无0作为除数情况发生 3.5.输入字符串一定是符合题意合法的表达式,其中只包括数字字符和四则运算符字符,除此之外不含其它任何字符,不会出现

2nd 简单四则运算更新

简单四则运算更新 功能:由随机数决定出题为10个以内的数字,并确定是否出现括号(仅限一对),顺序输出表达式,并用栈的方式进行计算,判断正误.其他功能有待进一步实现. 头文件 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include <math.h> 栈的结构体 typedef struct stack { double * e; in