import java.util.Scanner;
public class Suan {
public static void main(String[] args) {
int []b;//设置数组来存放随机产生数
b=new int [4];
Scanner in=new Scanner(System.in);
System.out.println("请选择你想练习的题型:");
System.out.println(" 1、分数的加减乘数法练习!");
System.out.println(" 2、整数的加减乘数法练习!");
int xuanze=in.nextInt();
System.out.println("你想输出四则运算的个数是:");
int num=in.nextInt();
String []a={"+","-","*","/"};//整数运算存放符号的数组
String res,res1 = null, sum1=null;//res为你输入的答案,res1为分数运算和整数运算除法中的正确答案
int []c;//符号的代数
int j=0,sum2=0;//sum2为整数运算中加减除的用户输入答案
int rshu = 0;//用户计算正确数
c=new int [4];
if(1==xuanze)//选择应该输出怎样类型的算式
{
for(int i=0;i<4;i++)//产生符号的代数
{
c[i]=(int)(Math.random()*14/3);
}
for( j=0;j<num;j++)//不够num个数就继续输出算式
{
for(int i=0;i<4;i++)//产生1到10的随机数
{
b[i]=(int)( Math.random()*10);
} if(b[0]>b[1]&&b[2]>b[3]&&b[0]!=0&&b[1]!=0&&b[2]!=0&&b[3]!=0)//真分数的前提
{
System.out.println("("+b[1]+"/"+b[0]+")"+ a[c[0]]+"("+ b[3]+"/"+b[2]+")");
System.out.print("你的答案是:");
res=in.next();
switch(c[0]){//调用成员方法计算
case 0:res1=fracAdd(b[1],b[0],b[3],b[2]);break;
case 1:res1=fracSub(b[1],b[0],b[3],b[2]);break;
case 2:res1=fracMul(b[1],b[0],b[3],b[2]);break;
case 3:res1=fractDiv(b[1],b[0],b[3],b[2]);break;
}
if(!res.equals(res1))//比较答案
{
System.out.println("你的答案错误!正确答案为:"+res1);
}
else
{
rshu++;//用户计算正确数
}
}
else
j--;
}
}
if (2==xuanze)//选择整型数算式
{ for( int r=0;r<num;r++)//不够num个数就继续输出算式
{
int sum = -1;//真正的结果
for(int i=0;i<4;i++)
{
b[i]=(int)( Math.random()*100);
}
for(int i=0;i<4;i++)
{
c[i]=(int)(Math.random()*14/3);
}
switch(c[0])//判断应该用什么符号
{
case 0 :
case 1 :sum=b[0]+b[1];break;
case 2 :sum=b[0]-b[1];break;
case 3 :sum=b[0]*b[1];break;
case 4 : sum1=fractDiv2(b[0],b[1]);break;//除号时调用函数,结果显示分数
}
/*if(sum<0)//减法计算结果不能为0
{
j--;
}*/
if(c[0]==4)//如果符号是除号时
{
System.out.println(b[0]+a[c[0]-1]+b[1]+"=");
System.out.print("你的答案是:");
res=in.next();
if(!res.equals(sum1))
{
System.out.println("你的答案错误!正确答案为:"+sum1);
}
else
rshu++;
}
else//如果符号不是除号时
{
System.out.println(b[0]+a[c[0]-1]+b[1]+"=");
System.out.print("你的答案是:");
sum2=in.nextInt();
if(sum2!=sum)
{
System.out.println("你的答案错误!正确答案为:"+sum);
}
else
rshu++;
//System.out.println(sum);
}
System.out.println(r); }
}
else
{}
System.out.println("你一共答对了"+rshu+"道题"); }
static String fracAdd(int first_numerator,int first_denominator,int second_numrator,int second_denominator){
//分数加法
//需要调用求最大公约数的函数 int denominator; //分子
int numerator; //分母 if(first_denominator==second_denominator) //分母相同时加分子
{
denominator=first_denominator;
numerator=first_numerator+second_numrator;
}
else //否则同分比较分子
{
denominator=first_denominator*second_denominator;
numerator=first_numerator*second_denominator+first_denominator*second_numrator;
}
int gcd = gcd(numerator,denominator); //调用gcd方法约分
denominator = denominator / gcd;
numerator = numerator / gcd;
if(0==denominator/numerator)
{
String res="0";
return res;
}
else
{
String zi1=String.valueOf(numerator);//把结果转换成字符串输出
String zi2=String.valueOf(denominator);//把结果转换成字符串输出
String zi3="/";//把结果转换成字符串输出
String res2=zi1+zi3+zi2;//把结果转换成字符串输出 return res2; } }
static String fracSub(int first_numerator,int first_denominator,int second_numrator,int second_denominator){ //需要调用求最大公约数的函数 int denominator;
int numerator; if(first_denominator==second_denominator) //分母相同时加分子
{
denominator=first_denominator;
numerator=first_numerator-second_numrator;
}
else //否则同分比较分子
{
denominator=first_denominator*second_denominator;
numerator=first_numerator*second_denominator-first_denominator*second_numrator;
}
int gcd = gcd(numerator,denominator);
denominator = denominator / gcd;
numerator = numerator / gcd;
if(0==denominator/numerator)
{
String res="0";
return res;
}
else
{
String zi1=String.valueOf(numerator);
String zi2=String.valueOf(denominator);
String zi3="/";
String res2=zi1+zi3+zi2;
return res2; } }
static String fracMul(int first_numerator,int first_denominator,int second_numerator,int second_denominator){ //需要调用求最大公约数的函数
int denominator;
int numerator; denominator=first_denominator*second_denominator;
numerator=first_numerator*second_numerator; int gcd = gcd(numerator,denominator);
denominator = denominator / gcd;
numerator = numerator / gcd;
if(0==denominator/numerator)
{
String res="0";
return res;
}
else
{
String zi1=String.valueOf(numerator);
String zi2=String.valueOf(denominator);
String zi3="/";
String res2=zi1+zi3+zi2;
return res2; } }
static String fractDiv(int first_numerator,int first_denominator,int second_numerator,int second_denominator){ //需要调用求最大公约数的函数 int denominator;
int numerator; numerator = first_numerator*second_denominator;
denominator = first_denominator*second_numerator; int gcd = gcd(numerator,denominator);
denominator = denominator / gcd;
numerator = numerator / gcd;
String zi1=String.valueOf(numerator);
String zi2=String.valueOf(denominator);
String zi3="/";
String res2=zi1+zi3+zi2;
return res2; }
static String fractDiv2(int first,int second){ //需要调用求最大公约数的函数
int denominator= first;
int numerator= second;
int gcd = gcd(numerator,denominator);
denominator = denominator / gcd;
numerator = numerator / gcd;
String zi1=String.valueOf(numerator);
String zi2=String.valueOf(denominator);
String zi3="/";
String res2=zi1+zi3+zi2;
return res2;
}
static int gcd(int x,int y){ //利用辗转相除法求最大公约数
int r;
while( y!= 0)
{
r = x%y;
x = y;
y = r;
}
return x; } }

运行结果:

         

感想:用了四个小时左右把原来的那个作业一修改成可以自动生成分数加减乘除的算法,虽然还不太完善,但是,基本功能还是实现了。感觉很开心

注:昨天下午已经把程序写好,只是学校网络一直上传不了程序,今天没办法,只能用手机开WiFi电脑连然后发布!T_T

一个简单的加减乘除自动生成小程序升级版(JAVA)的更多相关文章

  1. 一个简单的加减乘除自动生成小程序(JAVA)

    在学习软件工程的时候,遇到一个这样的问题,一个程序员的儿子上小学二年级,老师让家长每天出30道加减题目给学生做,由于家长是个程序员,所以呢,他就自己写了个程序实现,我们可爱的老师于是也叫我们写了一个类 ...

  2. 使用MFC做一个简单的‘能自动生成小学生四则运算的软件’

    这是软件工程的第一次作业!但由于我们python还没入门,所以这次的要求是‘语言不限’. 小学期做过一个关于MFC的‘资金管理系统’,也正好可以有界面,所以就选择了自己很熟悉的MFC来做这个作业! 1 ...

  3. go语言实现一个简单的登录注册web小程序

    最近学习golang也有一段时间了,基础差不多学了个大概,因为本人是java程序员,所以对web更感兴趣.根据<go web编程>中的例子改编一个更简单的例子,供新手参考,废话不多说,上菜 ...

  4. 完成一段简单的Python程序,用于实现一个简单的加减乘除计算器功能

    #!/bin/usr/env python#coding=utf-8'''完成一段简单的Python程序,用于实现一个简单的加减乘除计算器功能'''try: a=int(raw_input(" ...

  5. nodejs + 小程序云函数 生成小程序码

    前言:这个东西坑死我了 业务需求要生成小程序码 然后我找了两天的资料 运行 生成一堆的乱码 死活就是不能生成 最后看了一遍博客 套用了一下 自己又简单的改了一下  nodejs 我是刚刚接触  有很多 ...

  6. .NET生成小程序码,并合自定义背景图生成推广小程序二维码

    前言: 对于小程序大家可能都非常熟悉了,随着小程序的不断普及越来越多的公司都开始推广使用起来了.今天接到一个需求就是生成小程序码,并且于运营给的推广图片合并在一起做成一张漂亮美观的推广二维码,扫码这种 ...

  7. 一个简单的猜大小的小游戏 python

    初学python,用python写了一个简单的猜大小的小游戏 #!/usr/bin/env python #-*- coding:utf-8 -*- print "------------- ...

  8. 微信小程序获取Access_token和页面URL生成小程序码或二维码

    1.微信小程序获取Access_token: access_token具体时效看官方文档. using System; using System.Collections.Generic; using ...

  9. PHP生成小程序二维码

    /** * [生成小程序二维码] * @return [type] [description] */ public function makeMiniQrcode_do() { begin: $id ...

随机推荐

  1. jQuery带缩略图轮播效果图片切换带缩略图

    以上为效果图 HTML代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8" /& ...

  2. 【数据结构与算法】002—树与二叉树(Python)

    概念 树 树是一类重要的非线性数据结构,是以分支关系定义的层次结构 定义: 树(tree)是n(n>0)个结点的有限集T,其中: 有且仅有一个特定的结点,称为树的根(root) 当n>1时 ...

  3. 20155202 张旭 课下作业: Linux下IPC机制

    20155202张旭 Linux下IPC机制 IPC机制定义 在linux下的多个进程间的通信机制叫做IPC(Inter-Process Communication),它是多个进程之间相互沟通的一种方 ...

  4. Autovacuum 的运行限制

    磨砺技术珠矶,践行数据之道,追求卓越价值 回到上一级页面:PostgreSQL内部结构与源代码研究索引页    回到顶级页面:PostgreSQL索引页 作者:高健@博客园  luckyjackgao ...

  5. mfc 创建一个C++ 类

     类创建向导  添加一个C++类  #pragma once的作用  认识类视图 一.类创建向导 二.添加一个C++类 认识类创建向导: 创新一个处理文字信息的类CMessage CMessa ...

  6. c++ 动态数组,指针与动态内存分配

    教学内容: 内存的使用 动态内存分配malloc函数 分配内存时使用sizeof运算符 用指针访问内存 以数组的形式访问内存 一.内存的使用 堆(heap) 在程序执行期间分配内存时,内存区域中的这个 ...

  7. [Windows]_[中级]_[崩溃报告的中级解决方案]

    场景 1.在Windows上用C/C++开发软件, 经常会出现软件级别的崩溃情况, 如果用户看到这种崩溃报告, 那么一般会认为软件质量不高, 从而不想用. Windows上就会有崩溃报告这种噢给你工具 ...

  8. python安装mysql

    一.MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性. 二.最近在学习python语言,总体上面来说还是接触的挺快 ...

  9. git删除所有提交历史记录

    这种方式是最快最有效的 进项目根目录启动git bash,然后执行这些即可 最后的 git push -f origin master 会失败,直接在idea里push就能成功了 .Checkout ...

  10. 【JUC源码解析】ScheduledThreadPoolExecutor

    简介 它是一个线程池执行器(ThreadPoolExecutor),在给定的延迟(delay)后执行.在多线程或者对灵活性有要求的环境下,要优于java.util.Timer. 提交的任务在执行之前支 ...