一个简单的加减乘除自动生成小程序升级版(JAVA)
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)的更多相关文章
- 一个简单的加减乘除自动生成小程序(JAVA)
在学习软件工程的时候,遇到一个这样的问题,一个程序员的儿子上小学二年级,老师让家长每天出30道加减题目给学生做,由于家长是个程序员,所以呢,他就自己写了个程序实现,我们可爱的老师于是也叫我们写了一个类 ...
- 使用MFC做一个简单的‘能自动生成小学生四则运算的软件’
这是软件工程的第一次作业!但由于我们python还没入门,所以这次的要求是‘语言不限’. 小学期做过一个关于MFC的‘资金管理系统’,也正好可以有界面,所以就选择了自己很熟悉的MFC来做这个作业! 1 ...
- go语言实现一个简单的登录注册web小程序
最近学习golang也有一段时间了,基础差不多学了个大概,因为本人是java程序员,所以对web更感兴趣.根据<go web编程>中的例子改编一个更简单的例子,供新手参考,废话不多说,上菜 ...
- 完成一段简单的Python程序,用于实现一个简单的加减乘除计算器功能
#!/bin/usr/env python#coding=utf-8'''完成一段简单的Python程序,用于实现一个简单的加减乘除计算器功能'''try: a=int(raw_input(" ...
- nodejs + 小程序云函数 生成小程序码
前言:这个东西坑死我了 业务需求要生成小程序码 然后我找了两天的资料 运行 生成一堆的乱码 死活就是不能生成 最后看了一遍博客 套用了一下 自己又简单的改了一下 nodejs 我是刚刚接触 有很多 ...
- .NET生成小程序码,并合自定义背景图生成推广小程序二维码
前言: 对于小程序大家可能都非常熟悉了,随着小程序的不断普及越来越多的公司都开始推广使用起来了.今天接到一个需求就是生成小程序码,并且于运营给的推广图片合并在一起做成一张漂亮美观的推广二维码,扫码这种 ...
- 一个简单的猜大小的小游戏 python
初学python,用python写了一个简单的猜大小的小游戏 #!/usr/bin/env python #-*- coding:utf-8 -*- print "------------- ...
- 微信小程序获取Access_token和页面URL生成小程序码或二维码
1.微信小程序获取Access_token: access_token具体时效看官方文档. using System; using System.Collections.Generic; using ...
- PHP生成小程序二维码
/** * [生成小程序二维码] * @return [type] [description] */ public function makeMiniQrcode_do() { begin: $id ...
随机推荐
- UOJ#34. 多项式乘法(NTT)
这是一道模板题. 给你两个多项式,请输出乘起来后的多项式. 输入格式 第一行两个整数 nn 和 mm,分别表示两个多项式的次数. 第二行 n+1n+1 个整数,表示第一个多项式的 00 到 nn 次项 ...
- 部署MongoDB复制集(副本集)
环境 操作系统:Ubuntu 18.04 MongoDB: 4.0.3 服务器 首先部署3台服务器,1台主节点 + 2台从节点 3台服务器的内容ip分别是: 10.140.0.5 (主节点) 10.1 ...
- python3安装crypto出错,及解决方法
首先我用的python3.5的版本 问题的由来,我想通过python去实现RSA加密算法时,破解某网站的js加密认证,网上说需要安装pycrypto,我就去进行pip安装了 pip install p ...
- IIS中多域名多网站的设置方法
一个 IP 可以绑定多个域名.如您需要实现多个域名访问同一个网站,只需就不同域名添加 A 记录指向同一个 IP 即可. 如您需要实现多个域名访问同一虚拟服务器上不同网站,也需要就不同域名添加 A 记录 ...
- [2016北京集训试题14]股神小D-[LCT]
Description Solution 将(u,v,l,r)换为(1,u,v,l)和(2,u,v,r).进行排序(第4个数为第一关键字,第1个数为第二关键字).用LCT维护联通块的合并和断开.(维护 ...
- QtGUI Module's Classes
Qt GUI C++ Classes The Qt GUI module provides the basic enablers for graphical applications written ...
- void与NULL详解
void 是 “空”类型(无值型),意思是这种类型的大小无法确定. 并不存在void类型的对象,所以也就不能声明void类型的对象或者将sizeof()运算符用于void类型,C++/C语言不能对一个 ...
- 14-HTML-CSS案例
1.超链接美化 <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...
- 12-[CSS]-margin塌陷,margin 0 auto,善用父级的padding
1.margin塌陷 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...
- python面试题(三)
一.项目技术点梳理 (一)Django项目 本项目是用python的Django框架开发的前后端不分离项目.项目采用MVT架构,使用的MySQL和redis数据库,用Django自带的orm与数据库交 ...