100以内数的混合四则运算

本文描述了一个针对小学生的100以内混合四则运算软件开发过程,涵盖了需求分析、基础功能和扩展功能设计。软件需确保运算过程中不出现负数和非整数,支持括号和真分数的运算。核心代码涉及负数处理、中缀表达式转后缀表达式以及真分数的处理。作者通过项目学习到模块化设计、运算符优先级和处理括号的方法,认识到接口和注释的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2017012314——100以内的混合四则运算项目报告

大家好! 本文大致描述了一个小学生四则运算软件的开发过程,既是对该段时间学习的记录,亦是对自己学习过程的一个总结。

需求分析

1.通过命令行程序输入一个数字n,产生n道100以内的加减乘除练习题;

2.判断传入参数是否合法,是否是在0-100之间的整数(或真分数);

3.考虑到用户对象是小学生,每个数字在0-100之间,运算符3-5个;

4.由于小学生的知识储备,故运算过程不能出现负数(减法时注意)和非整数(除法时注意);

5.一个完整的软件还需考虑进倒计时功能,如一道题若20s内未能完成,即得0分进入下一题;或者可以检验并输出判断对错,给出对错的数量,从而记录成绩或展现历史记录;并保证题目不重等;

6.最后计算出练习题结果,并将所得信息输出到result.txt文件。

基础功能设计

1)程序可接收一个输入参数n,然后随机产生n道加减乘除(分别使用符号±*÷来表示)练习题,每个数字在 0 和 100 之间,运算符在3个到5个之间。
2)为了让小学生得到充分锻炼,每个练习题至少要包含2种运算符。同时,由于小学生没有分数与负数的概念,你所出的练习题在运算过程中不得出现负数与非整数,比如不能出 3÷5+2=2.6,2-5+10=7等算式。
3)练习题生成好后,将你的学号与生成的n道练习题及其对应的正确答案输出到文件“result.txt”中,不要输出额外信息,文件目录与程序目录一致。

扩展功能设计

1)支持有括号的运算式,包括出题与求解正确答案。注意,算式中存在的括号必须大于2个,且不得超过运算符的个数。
2)扩展程序功能支持真分数的出题与运算(只需要涵盖加减法即可),例如:1/6 + 1/8 + 2/3= 23/24。注意在实现本功能时,需支持运算时分数的自动化简,比如 1/2+1/6=2/3,而非4/6,且计算过程中与结果都须为真分数。

PSP记录

任务 实际所用时间(min)
计划(planning) 60
-需求分析(analysis)- -40-
查找资料(research) 460
设计(design) 60
-编码(coding)- -280-
复审(review) 200
测试(test) 80
-报告(reporting)- -160-

核心代码

1.处理负数和整除问题

// An highlighted block
 int answer=0;//判断结果是否为负数
	public String EasyQuestion1() {
   // 产生最简单部分等式的方法

		int a = (int) (Math.random() * 100);// 产生100以内的随机数
		int b = (int) (Math.random() * 100);
		int c = (int) (Math.random() * 4);// 产生整数0到3
		if (c == 1) {
   // 如果是“-”,保证a比b大,避免出现负数
			if (a < b) {
   
				int temp = a;
				a = b;
				b = temp;
			}
		}
		if (c == 3) {
   // 如果是除法,保证能整除
			b = (int) (Math.random() * 20) + 1;
			a = (int) (Math.random() * 6) * b;
		}
		String m = a + op[c] + b;
		if (op[c].equals("-") || op[c].equals("+")) {
   // 减号时使flag等于1
			flag = 1;

		}
		return m;
	}

2.括号问题

// An highlighted block
	public String ComplexQuestion2(int p) {
   // 产生一个包含3-5个运算符的四则运算的方法
		String question = "";
		for (int i = 0; i < p; i++) {
   
			if (i < p - 1) {
   
				String con = op1[(int) (Math.random() * 2)];
				if (con.equals("*")) {
   
					String com = EasyQuestion1();
					if (flag == 1) {
   //如果前面是加减后面是乘除的话,加括号
						question += "(" + com + ")" + con;
					} else {
   
						question += com + con;//生成一个最简运算式子,和符号
					}

				} else {
   
					question += EasyQuestion1() + con;
				}
			} else {
   
				question += EasyQuestion1();//最后一次只需生成一个最简运算式子,不需要再生成符号

			}
			flag = 0;//每次生成完把falg清0
		}
		return question;
	}

3.利用栈中缀表达式转后缀表达式

// An highlighted block
public void MakeQuestion3() {
   //运算混合四则运算方法,利用栈实现
		Stack<String> number = new Stack<String>();//创建一个存储数字或符号的栈
		Stack<Character> operate 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值