四则运算02
小组成员:黄丽萍 杜若憧
设计思想:
1.设四个变量用来控制随机数的生成。
2.(1)可定制:由用户输入number,利用for循环进行题目输出。打印方式不明确。
(2)是否有乘除法:用0和1控制是否有乘除法。除法调用simplify()求最大公约数函数进行化简。
(3)是否有括号(最多可以支持十个数参与计算):无括号的情况:直接由生成0~3的随机数控制运算符。有括号的情况:定义数组完成,定义字符型数组储存'+','-','*','/'。随机生成数字的个数szgs(3~7),字符个数为szgs-1,利用for循环加上括号输出。如果运算符个数为偶数,则从第二个数添加括号,否则从第一个输出括号。
(4)数值范围:用户输入,控制随机数的生成范围。
(5)加减有无负数:如果要求有负数则将第一个数*-1
(6)除法有无余数:没有余数情况:利用for循环,如果a1%b1!=0继续随机生成。
3.对于除法行化简。定义simplify(int x,int y)求最大公约数,继而化简。
4.根据题目输出题目。
源代码:
import java.util.Scanner; public class test { static int simplify(int x,int y){/*求两数最大公约数,用于分数化简*/ int t,xx,yy,k=1; if(x>y){ t=x;x=y;y=t; } for(int i=x;i>=2;i--){ xx=x%i;yy=y%i; if(xx==0&&yy==0){ k=i; break; } } return k; } public static void main(String[] args) { // TODO 自动生成的方法存根 int a1,a2,b1,b2,k; /*控制题目个数*/ Scanner in=new Scanner(System.in); System.out.print("请输入题目个数(>0):"); int number=in.nextInt(); /*数值范围*/ System.out.print("请输入数值所取得最大值(>0):"); int max=in.nextInt(); /*判断括号*/ int backets; System.out.print("是否有括号:(0:无 1:有):"); backets=in.nextInt(); if(backets==0) { /*控制是否有负数*/ System.out.print("是否有负数:(0:无 1:有):"); int negative=in.nextInt(); /*控制是否有乘除*/ System.out.print("是否有乘除法(0:无 1:有):"); int panduan; for(;;) { panduan=in.nextInt(); if(panduan==0||panduan==1) break; else panduan=in.nextInt(); } /*有无余数*/ int remainder=0; if(panduan==1){ System.out.print("是否有余数:(0:无 1:有):"); remainder=in.nextInt();} /*算法的实现*/ for(int i=0;i<number;i++) { int index=(int)(Math.random()*4); //随机产生,控制运算符 a1=(int)(Math.random()*max); a2=(int)(Math.random()*(max-1)+1); b1=(int)(Math.random()*max); b2=(int)(Math.random()*(max-1)+1); k=(int)(Math.random()*2); //控制是否是整数或分数,随机产生 if(k==0)//k=1输出整数运算 { if(index==0) //加法运算 { if(negative==0)//没有负数 System.out.println(a1+"+"+b1+"="); else { a1=-1*a1; System.out.println(a1+"+"+b1+"="); } } if(index==1)//减法运算 { if(negative==0){ if(a1>b1) { System.out.println(a1+"-"+b1+"="); } else { System.out.println(b1+"-"+a1+"="); } } else System.out.println(a1+"-"+b1+"="); } if(panduan!=0) { if(index==2)//乘法运算 { System.out.println(a1+"*"+b1+"="); } if(index==3)//除法运算 { if(remainder==0) {//没有余数 for(int kk=0;;){ //余数不为0.继续生成随机数 if(a1!=0){ //判断分母是否为0 if(b1%a1!=0){ a1=(int)(Math.random()*max); b1=(int)(Math.random()*max); } else break; } else a1=(int)(Math.random()*max);} } System.out.println(b1+"/"+a1+"="); } } else if(panduan==0){//没有乘除 if(index==2) //加法运算 { if(negative==0)//没有负数 System.out.println(a1+"+"+b1+"="); else { a1=-1*a1; System.out.println(a1+"+"+b1+"="); } } if(index==3)//减法运算 { if(negative==0){ if(a1>b1) { System.out.println(a1+"-"+b1+"="); } else { System.out.println(b1+"-"+a1+"="); } } else System.out.println(a1+"-"+b1+"="); } } } else//分数计算 { int s2=simplify(a1,a2);a1=a1/s2;a2=a2/s2; int s3=simplify(b1,b2);b1=b1/s3;b2=b2/s3; if(index==0) { if(negative==0) //没有负数 { /*分母不为1,分情况输出*/ if(a2!=1&&b2!=1) System.out.println(a1+"/"+a2+"+"+b1+"/"+b2+"="); else if(a2==1){ System.out.println(a1+"+"+b1+"/"+b2+"="); } else if(b2==1){ System.out.println(a1+"/"+a2+"+"+b1+"="); } } else{//没有负数 if(a2!=1&&b2!=1) System.out.println("-"+a1+"/"+a2+"+"+b1+"/"+b2+"="); else if(a2==1){ System.out.println("-"+a1+"+"+b1+"/"+b2+"="); } else if(b2==1){ System.out.println("-"+a1+"/"+a2+"+"+b1+"="); } } } if(index==1) { if(a1/a2>=b1/b2){ if(a2!=1&&b2!=1) System.out.println(a1+"/"+a2+"-"+b1+"/"+b2+"="); else if(a2==1){ System.out.println(a1+"-"+b1+"/"+b2+"="); } else if(b2==1){ System.out.println(a1+"/"+a2+"-"+b1+"="); } } else{ if(a2!=1&&b2!=1) System.out.println(b1+"/"+b2+"-"+a1+"/"+a2+"="); else if(a2==1){ System.out.println(b1+"/"+b2+"-"+a1+"="); } else if(b2==1){ System.out.println(b1+"-"+a1+"/"+a2+"="); } } } if(panduan!=0){ if(index==2) { if(a2!=1&&b2!=1) System.out.println(a1+"/"+a2+"*"+b1+"/"+b2+"="); else if(a2==1){ System.out.println(a1+"*"+b1+"/"+b2+"="); } else if(b2==1){ System.out.println(a1+"/"+a2+"*"+b1+"="); } } if(index==3) { if(a2!=1&&b2!=1) System.out.println("("+a1+"/"+a2+")"+"/"+"("+b1+"/"+b2+")"+"="); else if(a2==1&&a1!=0){ System.out.println(a1+"/"+"("+b1+"/"+b2+")"+"="); } else if(b2==1&&b1!=0){ System.out.println("("+a1+"/"+a2+")"+"/"+b1+"="); } } } else if(panduan==0){ if(index==2) { if(negative==0) //没有负数 { /*分母不为1,分情况输出*/ if(a2!=1&&b2!=1) System.out.println(a1+"/"+a2+"+"+b1+"/"+b2+"="); else if(a2==1){ System.out.println(a1+"+"+b1+"/"+b2+"="); } else if(b2==1){ System.out.println(a1+"/"+a2+"+"+b1+"="); } } else{//没有负数 if(a2!=1&&b2!=1) System.out.println("-"+a1+"/"+a2+"+"+b1+"/"+b2+"="); else if(a2==1){ System.out.println("-"+a1+"+"+b1+"/"+b2+"="); } else if(b2==1){ System.out.println("-"+a1+"/"+a2+"+"+b1+"="); } } } if(index==3) { if(a1/a2>=b1/b2){ if(a2!=1&&b2!=1) System.out.println(a1+"/"+a2+"-"+b1+"/"+b2+"="); else if(a2==1){ System.out.println(a1+"-"+b1+"/"+b2+"="); } else if(b2==1){ System.out.println(a1+"/"+a2+"-"+b1+"="); } } else{ if(a2!=1&&b2!=1) System.out.println(b1+"/"+b2+"-"+a1+"/"+a2+"="); else if(a2==1){ System.out.println(b1+"/"+b2+"-"+a1+"="); } else if(b2==1){ System.out.println(b1+"-"+a1+"/"+a2+"="); } } } } } } } else//有括号 { int szgs,fhgs,x,z,y;//szgs数字个数 fhgs符号个数 int sz[]=new int[20];//数字数组 char fh[]=new char[10];//字符数组 char operate[]={'+','-','*','/'}; for(int p=0;p<number;p++){ szgs=(int)(Math.random()*7+3);//随机生成数字个数(3~7) fhgs=szgs-1;//字符个数比数字少1 for(y=0;y<szgs;y++) { sz[y]=(int)(Math.random()*max);//随机生成数 } for(y=0;y<fhgs;y++) { x=(int)(Math.random()*3);//产生0~3的随机数 控制字符 fh[y]=operate[x]; } fh[fhgs]='='; if(fhgs%2==0){ System.out.print(sz[0]);System.out.print(fh[0]); for(y=1;y<fhgs;y++){ System.out.print("("); System.out.print(sz[y]); System.out.print(fh[y]); System.out.print(sz[y+1]); System.out.print(")"); System.out.print(fh[y+1]); y=y+1; }System.out.println(); } else{
for(y=0;y<fhgs;y++){ System.out.print("("); System.out.print(sz[y]); System.out.print(fh[y]); System.out.print(sz[y+1]); System.out.print(")"); System.out.print(fh[y+1]); y=y+1; }System.out.println(); } } } } }
结果截图:
周活动总结表
姓名:杜若憧 日期 2016/3/18
|
听课 |
编写代码 |
阅读课本 |
准备考试 |
|
|
日总计 |
周日 |
|
|
32 |
|
|
|
32 |
周一 |
100 |
40 |
|
|
|
|
140 |
周二 |
|
54 |
|
|
|
|
54 |
周三 |
|
|
20 |
|
|
|
20 |
周四 |
|
60 |
|
|
|
|
60 |
周五 |
|
65 |
|
|
|
|
65 |
周六 |
|
|
|
|
|
|
|
周总计 |
100 |
219 |
52 |
|
|
|
371 |
时间记录日志
学生:杜若憧 日期:2016/3/18
教师:王建民 课程:软件工程
日期 |
开始时间 |
结束时间 |
中断时间 |
净时间 |
活动 |
备注 |
C |
U |
3/14 |
8:00 |
9:50 |
10 |
100 |
听课 |
理论学时,课件 |
|
|
|
15:00 |
17:00 |
20+15 |
85 |
编程序 |
作业,玩手机,聊天 |
|
|
3/15 |
14:30 |
16:30 |
20+10 |
100 |
编程序 |
查资料,休息 |
|
|
3/16 |
16:30 |
17:30 |
|
60 |
读书 |
《构建之法》 |
|
|
|
19:00 |
19:30 |
|
30 |
讨论 |
|
|
|
3/17 |
21:00 |
23:30 |
15+20 |
125 |
编程序 |
作业,接电话,洗漱 |
|
|
3/18 |
16:30 |
18:00 |
15 |
75 |
编程序 |
休息 |
|
|
|
21:00 |
22:00 |
|
60 |
写报告 |
|
|
|
缺陷记录日志
学生:杜若憧
日期:2016/3/18
教员:王建民
程序号:四则运算2
日期 |
编号 |
类型 |
引入阶段 |
排除阶段 |
修复时间 |
修复缺陷 |
3/18 |
1 |
20 |
编码 |
编译 |
15min |
|
描述:分数化简,分母可能为1,输出a/1 |
||||||
|
2 |
20 |
编码 |
编译 |
10min |
|
描述:if语句太多,括号丢失 |
||||||
|
3 |
20 |
编码 |
|
15min |
|
描述:打算直接用函数化简分数,但出现错误。改为求最大公约数。 |
||||||
|
4 |
20 |
执行 |
|
15min |
|
描述:控制题目没有乘除法时,题目输出的数量少于要求的数量。 |
个人总结:
如果在第一次的四则运算程序中修改实现难度很大,所以又重新整理思路,进行重新编写。起初思路不清晰,经过讨论后明了。对于不同的问题应该分块讨论,将问题简化,然后再细化。有括号的情况利用了整形数组和字符型数组进行分情况输出括号。
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 继承的思维:从思维模式到架构设计的深度解析
· 如何在 .NET 中 使用 ANTLR4
· 后端思维之高并发处理方案
· 理解Rust引用及其生命周期标识(下)
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· 35岁程序员的中年求职记:四次碰壁后的深度反思
· 当职场成战场:降职、阴谋与一场硬碰硬的抗争
· ShadowSql之.net sql拼写神器
· Excel百万数据如何快速导入?
· 无需WebView,Vue也能开发跨平台桌面应用