课堂练习之四则运算加强版

一、程序设计题目要求和设计思想

1、题目

(1)、题目避免重复;

(2)、可定制(数量/打印方式);

(3)、可以控制下列参数: 是否有乘除法、是否有括号、 数值范围、加减有无负数、除法有无余数、否支持分数 (真分数, 假分数, …)、是否支持小数 (精确到多少位)、打印中每行的间隔可调整;

2、设计思想

1、题目避免重复; 2、可定制(数量/打印方式): 3、可以控制下列参数(是否有乘除法,是否有括号,数值范围,加减有无负数,除法有无余数、是否支持分数(真分数,假分数)):

设计思路:

1、(任意自定义题目个数)通过输入的数字对应for循环的次数,

2、(是否有乘除法)

3、(是否支持分数)(有/否:1/0):

这两个放在一起实现,两个组合一起可以有四种方式,00,01,10,11

分别对应case语句中的选项,在选则时,0、1是加法,2、3是减法,4、5是乘法,6、7是除法,

奇数是可以产生分数的,

当00时,选择0和2,

当01时,选择1,2,3,4;

当10时,选择0,2,4,6;

当11时,选择全部。

4、(数值的范围) 将传进来的数num3直接当作指数进行运算,产生该数位的最大和最小两个数字,

并通过random_2方法,产生两数之间的随机数。

自定义两数之间的随机数方法random_2思路:

1、先随机产生小于较大数的随机数, 2、判断该随机数是否大于较小数, 3、如果大于则返回该数,否则就通过循环产生另一个随机数,重复判断。

二、程序源代码

  1 /*
  2 需求:每天出30道四则运算题目给小学生做
  3 */
  4 import java.util.*;
  5 class Rand
  6 {
  7     public static void sop(Object obj)
  8     {
  9         System.out.print(obj);
 10     }
 11     public static int random_1(int n)//随机产生一个0--n之间的数
 12     {
 13         return new Random().nextInt(n);
 14     }
 15
 16     public static int random_2(int n1,int n2)//产生n1--n2随机数的方法
 17     {
 18         int temp = 0,b = 0;
 19         while((temp=new Random().nextInt(n2))>=n1)//如果产生的随机数大于n1,就将其返回,否则就继续
 20         {
 21             b = temp;
 22         }
 23         if(b==0)
 24             b = b + 2*n1;
 25         return b;
 26     }
 27
 28     public static void main(String[] args)
 29     {
 30         sop("<---小学生二年级课后作业,每天30道四则运算练习--->");
 31
 32         System.out.print("\r\n1、请输入今日想完成的题目数量:");
 33
 34         Scanner sc = new Scanner(System.in);
 35         int num = sc.nextInt();
 36
 37         System.out.print("\r\n2、请选择是否有乘除运算:(有/否:1/0):");
 38
 39         Scanner sc1 = new Scanner(System.in);
 40         int num1 = sc1.nextInt();
 41
 42         System.out.print("\r\n3、请选择是否需要真分数运算:(有/否:1/0):");
 43
 44         Scanner sc2 = new Scanner(System.in);
 45         int num2 = sc2.nextInt();
 46
 47         System.out.print("\r\n4、请输入每行打印的个数:");
 48
 49         Scanner sc4 = new Scanner(System.in);
 50         int num4 = sc4.nextInt();
 51
 52         System.out.print("\r\n5、请选择需要几位数的运算:(请输入大于1的位数,\r\n如不需要定制,输入1,随机产生不大于1000的运算):");
 53
 54         Scanner sc3 = new Scanner(System.in);
 55         int num3 = sc3.nextInt() - 1;
 56
 57         int count = 0,d1,d2,k1,k2,k3,k4;//计数器
 58
 59         for (int i=0;i<num ;i++ )
 60         {
 61             if(num3==0)//如果输入为1,就将随机产生不大于1000的数
 62             {
 63                 d1 = random_1(1000);
 64                 d2 = random_1(1000);
 65                 k1 = random_1(1000);
 66                 k2 = random_1(1000);
 67                 k3 = random_1(1000);
 68                 k4 = random_1(1000);
 69             }
 70             else
 71             {
 72                 d1 = random_2((int)Math.pow(10,num3),(int)Math.pow(10,num3+1)-1);//自定义的产生随机数
 73                 d2 = random_2((int)Math.pow(10,num3),(int)Math.pow(10,num3+1)-1);
 74                 k1 = random_2((int)Math.pow(10,num3),(int)Math.pow(10,num3+1)-1);
 75                 k2 = random_2((int)Math.pow(10,num3),(int)Math.pow(10,num3+1)-1);
 76                 k3 = random_2((int)Math.pow(10,num3),(int)Math.pow(10,num3+1)-1);
 77                 k4 = random_2((int)Math.pow(10,num3),(int)Math.pow(10,num3+1)-1);
 78             }
 79
 80
 81             int k = 0,r = 0;//声明两个变量
 82             if(num1==0 && num2==0)//都没有
 83             {
 84                 r = random_1(4);
 85                 if(r%2!=0)//将产生的奇数随机数取出
 86                     k=r;
 87                 if(k==0)//即使已经将k判断为奇数了,但还是会等于0,所以就再判断一次,如果为0,就将其+1;
 88                     ++k;
 89             }
 90
 91             else if(num1==0 && num2==1)//没乘除,有分数
 92                 k = random_1(4);
 93             else if(num1==1 && num2==0)//有乘除,没分数
 94             {
 95                 r = random_1(8);
 96                 if(r%2!=0)
 97                     k=r;
 98                 if(k==0)
 99                     ++k;
100             }
101             else//都有
102                 k = random_1(8);
103
104             switch(k)//前两个是加法,2,3是减法,4,5是乘法,6,7是除法
105             {
106                 case 0:
107                     sop(zhenfenshu(k1,k2)+" + "+zhenfenshu(k3,k4)+" = \t");
108                 break;
109                 case 1:
110                     sop(d1+" + "+d2+" = \t");
111                 break;
112                 case 2:
113                     sop(zhenfenshu(k1,k2)+" - "+zhenfenshu(k3,k4)+" = \t");
114                 break;
115                 case 3:
116                     jianfa(d1,d2);
117                 break;
118                 case 4:
119                     sop(zhenfenshu(k1,k2)+" * "+zhenfenshu(k3,k4)+" = \t");
120                 break;
121                 case 5:
122                     sop(d1+" * "+d2+" = \t");
123                 break;
124                 case 6:
125                     sop(zhenfenshu(k1,k2)+" ÷ "+zhenfenshu(k3,k4)+" = \t");
126                 break;
127                 case 7:
128                     chufa(d1,d2);
129                 break;
130
131
132                 default:
133                     sop("duang,duang,daung");
134                 break;
135             }
136             count++;
137             if(count%num4==0)
138                 System.out.println();
139         }
140
141         sop("以上共有:"+count+"道题。");
142
143     }
144     public static void jianfa(int a,int b)//因为小学二年级没有学负数,所以相减不能为负数
145     {
146         if(a>=b)
147             sop(a+" - "+b+" = \t");
148         else
149         {
150             sop(b+" - "+a+" = \t");
151         }
152
153     }
154
155     public static void chufa(int a,int b)//为了使除法有意义,除数不能为零,
156     {
157         if(b>0)
158             sop(a+" ÷ "+b+" = \t");
159         //如果除数为零,就将其加上10,再进行运算
160         else
161         {
162             b = b + 10;
163             sop(a+" ÷ "+b+" = \t");
164         }
165
166     }
167     public static String zhenfenshu(int a,int b)//产生真分数的方法
168     {
169         if(a<=b)
170             return a+"/"+b;
171         else
172             return b+"/"+a;
173     }
174 }

三、运算结果截图

(只有加减法,没有分数,所有的数都是四位的)

(有乘除,没分数,两位数运算)

(有乘除,也有分数,两位数)

(在自定义数的位数,输入1,就是产生小于1000的随机数)

四、总结

  在对该程序进行修改的过程中,只实现了一部分的功能,虽然可以做一些简单的定制功能,
还存在不少的缺陷和bug,比如没有实现小数的运算,但是我感觉比较好的就是,
可以自定义两个数,产生这两个数之间的随机数,希望在下面可以继续将本程序
再加改进,功能更加完善。

时间安排:

一、项目计划总结:

周活动总结表

姓名:                                          日期:


日期       任务


听课


编写程序


阅读课本


准备考试


日总计


周日


周一


周二


100


30


30


160


周三


150


30


180


周四


120


40


160


周五


100


120


40


160


周六


180


40


220


周总结


200


600


180


980

阶段时间和效率                                            周数(上一次周活动表的周数+1):

不包括上一周在内的累计时间


总计


200


600


180


980


平均


200


600


180


980


最大


200


600


180


980


最小


200


600


180


989

以前各周的累计时间


总计


平均


最大


最小

二、时间记录表:

学生          郭健豪                                                   日期       2015.3.15

教师        王建民                                             课程           PSP


日期


开始时间


结束时间


中断时间


净时间


活动


备注


3.10


19:20


20:00


10


30


编程


3.11


15:00


18:20


50


150


编程、看书


3.12


18:30


21:30


20


160


编程、看书


3.13


19:00


21:30


20


130


编程、看书


3.14


9:00


11:20


30


180


编程。看书

三、缺陷记录日志:

学生        郭健豪

日期       2015.3.15

教员       王建民

程序号


日期


编号


类型


引入阶段


排除阶段


修复时间


修复缺陷


3.11


想自定义一个方法,可以随机输入两个数,产生这两个数之间的随机数,但是不能将得到的这个数返回,这个问题一直困扰着我。


3.12


在今天晚上,我继续想昨天的这个没有解决的问题,经过将近一个小时的思考和调试,最终我给设了一个中间变量,将该数给返回出来,

时间: 2024-10-31 22:23:02

课堂练习之四则运算加强版的相关文章

小学自动生成四则运算加强版

这是一个在自动生成计算式的代码上加强的新版本 1.支持用户交互 2.用户可以在线答题,程序会检查用户的答案是否正确 3.增加了真分数的计算 4.增加了有余数的计算 思路: 整数: 1.需要生成式子,程序需要生成一定范围内的数,判断生成数的大小,在自动生成一个符号 2.复杂的是除法,分母不能为0,并且生成的数可以整除 分数: 1.需要生成式子,程序需要生成一定范围内的数,判断生成数的大小,在自动生成一个符号 2.分母不能为0 3.加法与减法,需要求最小公倍数,结果必须最简化,求最大公约数,化简成最

四则运算加强版

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

软件工程--课堂练习之四则运算之续编

一.设计思想 在之前的基础上添加了如下功能: 1.为使用户可定制数量以及打印方式,用户自己输入 2.参数设置: 提示用户参与运算的数值范围: 提示用户输入出多少道题目: 提示用户输入题目输出列数: 提示用户是否有乘除法运算: 提示用户结果是否有负数: 二.代码 1 #include "stdio.h" 2 #include "stdlib.h" 3 #include "time.h" 4 int main(){ 5 srand(time(NULL

3月10号周二课堂练习:四则运算二

一.题目新的要求 1.题目避免重复: 2.可定制(数量/打印方式): 3.可以控制下列参数: 是否有乘除法.是否有括号. 数值范围.加减有无负数.除法有无余数.否支持分数 (真分数, 假分数, …).是否支持小数 (精确到多少位).打印中每行的间隔可调整: 二.设计思想(将自己上次上课时的设计思想进行稍微的修改) 1.判断两次随机数是否相同    使用函数srand()保证两个随机数不同 2.多加入一个变量,来控制题目数量 3.在每一个switch选择的语句,进行选择判断  3.1选择是否有乘除

课堂练习之每天出30道四则运算题目

1 /* 2 需求:每天出30道四则运算题目给小学生做 3 */ 4 5 class Rand 6 { 7 public static void sop(Object obj) 8 { 9 System.out.println(obj); 10 } 11 public static void main(String[] args) 12 { 13 sop("小学生二年级课后作业,每天30道四则运算练习:"); 14 15 int count = 0; 16 17 for (int i=

软件工程课堂练习-随机生成30道四则运算练习题

习题要求:随机生成30道四则运算题 以下是程序代码: 1 #include "stdafx.h" 2 #include "stdio.h" 3 #include "time.h" 4 #include "stdlib.h" //随机器函数头文件 5 6 void print() 7 { 8 srand((int)time(0)); 9 for(int i=0;i<=29;i++) 10 { 11 int x; 12 in

软件工程课堂作业(一)——随机产生四则运算题目

一.设计思想: 1.首先主函数只用来调用随机产生并输出运算题目函数,随机产生并输出这一部分功能用一个randout函数实现: 2.随机产生运算数这一功能,两个运算数可以用随机函数生成,并将它们控制在100以内.其中,考虑到除数不能为零,第二个运算数随机产生时+1: 3.随机产生运算法则这一功能,运算法则一共有4种,也可以随机产生0-4的数,分情况进行四则运算. 二.源代码: #include "stdafx.h" #include "stdlib.h" void r

30道四则运算题目---课堂作业--软件工程c++

问题:设计一程序,给二年级小学生随机产生四则运算题目. 一.设计思考问题: 1.四则运算需要俩个运算数和一个运算符. 2.如何产生随机数? 3.如何实现随机产生四则运算? 4.题目是否符合小学生学习范围?(减法和除法) 二.程序源代码: #include<iostream.h>#include<stdlib.h>#include "time.h"int main (){ cout<<"--------四则运算题--------"&

软件工程课堂练习--四则运算(三)

一.设计思路 题目:可以答题并判断对错,最后显示做对几道题. 思路:在原来的基础上又添加了用户在系统上可选择直接答题模块,思路上上次的四则运算(二)大致相同,不过又添加了几个函数,经过调用实现操作. 二.程序代码 1 #include "stdafx.h" 2 #include "stdio.h" 3 #include "time.h" 4 #include "stdlib.h" //随机器函数头文件 5 6 int true