整体功能简介:

1.题目不重复;

2.可以定制数量;

3.可以自己选择输入范围;

4.可以选择是否添加乘除法;

5.可以选择除法结果是取整或商加余数形式表示或小数方式(默认小数点后两位)表示;

6.支持真分数计算;

7.可以判断正误,如果错误能给出正确答案;

8.最后可以给出错误和正确的个数。

不足之处:

1.题目不重复的前提是数值范围比较大而且数量相对少,相反的情况就可能出现重复了;

2.乘法结果数值偏大,除法基本没有整除的情况(不太符合小学除法的命题规则);

3.分数运算虽然默认真分数,但结果可能出现假分数,分数减法可能会出现负值(也不符合小学生出题要求);

4.只能给出两元运算。

如果要出四则运算的话推翻这个程序重写是没跑了,但是我需要先把这个程序尽我可能优化到最后,半途而废于心不忍啊。

 

************************华丽丽的分割线,下面是废话*****************************

我是用C语言编写的程序,虽然这个小程序不难,但是我却写了三个晚上,加起来有十多个小时吧,而且还有这么多缺陷,不过还好我大致编出来了,千里之行第一步迈出去了。我的这个程序没用到比较高级的知识,指针什么的我想用也用不好,数组也没用到,可能不够优化,但看到黑框框里面的东西和自己想的一样的的时候也是比较高兴地。

我把自己的思路以及编写过程中遇到的问题总结一下,再附上coding地址。

一开始的作业是随机30道小学生加减习题,随机的话就需要随机数了,前人这么聪明一定会有直接的函数的,于是百度一下rand函数就出来了,设置取值范围,根据所取第一个数的奇偶性确定符号,再来个if-else就可以随机选择加减法了;后来要进行优化,给了一个word文档,里面是作业要求。也给了一个邹欣老师的网页链接,里面也是要求。感觉我现在不一定能按照邹老师的要求写出来,我就选择了许老师的作业要求,当然后期要进行优化直到符合所有要求。我选择性的添加了许老师的扩充要求,其中添加括号,真分数假分数的分别,以及小数精确位数都没有添加上去,剩下的功能的设计思路如下:

设计的没有条理性,思路不够清晰,功能也不是在单个函数下去实现的,在设计思路下面就不粘贴源代码了。

*************************华丽丽的分割线,下面是各功能设计思路以及截图************************

题目不重复:利用系统时间来改变系统的种子值,即srand(time(NULL)),保证每次运行rand的种子值不同,能够选取不同的随机数;

定制数量:由用户自己输入数量,利用for循环来判断是否结达到用户所要求的数目;

数值范围:同样由用户自己输入范围m、n,然后进行rand()%(n-m)+m运算,达到选择数值范围的要求;

是否有乘除法:我是根据第一个随机数对2取余来判断加减法,如果需要添加乘除法的时候对4取余就可以达到要求,中间需要添加几个临时变量来进行判断;

支持分数计算:寒假的时候写过一个关于分数计算的小程序,直接拿来用了。里面需要求最大公约数,最小公倍数以及约分。最大公约数函数用到辗转相除法,递归调用自己求得结果,最小公倍数和约分调用最大公约数函数得到结果,并在约分函数进行输出;

除法结果的输出形式:默认取整,结果以商和余数的形式表示的时候分别取整取余就行了,结果含小数的时候,先定义浮点类型的变量,然后直接把随机数强制类型转换得到结果,四舍五入后得到最终结果,再与输入结果比较就行了,附上小数显示结果的代码;

 void DivDec(int a,int b)
{
double c,d; //存放输入结果和运算结果
// int temp; //临时变量
printf("%d/%d=",a,b);
scanf("%lf",&c); //结果输入
d=(float)a/b;
d*=; //四舍五入取小数余数
d+=0.5;
d=floor(d); //利用floor()函数得到最接近d数,但不大于d的整数(完成四舍五入)
d/=;
// temp=(int)d;
if((d-c)==)
printf("right!\n");
else
// printf("%f \n",c);
printf("error!the right answer is %.2f.\n",d);
}

判断正误以及给出正确错误个数:把正确运算的结果放在一个变量里,输入结果放在另一个变量里,进行比较,错误的话输出正确结果即可;定义变量表示正确个数,并随着子函数的调用进行传递返回,更新正确个数,最后用总个数减去正确的个数来显示错误的个数。

随机部分出题并判断的的截图,没有随机出来除法而且看着还有点乱- -!

给出其他几种选择形式的截图:

1.没有乘除法以及分数计算

2.不添加乘除法只添加分数

3.除法的其他两种表示结果的方式

(1)商加余数的形式

(2)结果是两位小数的形式

****************************华丽丽的分割线,下面是遇到的问题****************************************

我判断随机符号是先生成随机数再根据随机数取余来添加随机符号的,一开始数值范围为正,后来添加负数的时候总是出错,单步调试之后才知道我的判断语句里面只有0,1,2,3。根本没负数嘛。我把随机数取绝对值然后再取余就行了。

在写除法的结果用小数表示的时候定义了两个double类型的变量,输入的时候写的是%f(其实就是这里错了),然后每次判断对错的时候总是错的,即使输入的是对的,一开始以为是浮点数的比较出问题了,认为输入的浮点数小数点后面就只有输入的几位(自己都忍不住笑了),然后抓着这个问题不放了,一番苦战无果后决定又感觉是输入的数出错了(这次感觉对了)。然后又是一番苦战才找到时输入格式写错了,双精度类型的输入格式是“%lf”,我当时看错了改成“%1f”,还是错,还是苦战,最后才发现错在哪。汗!基本功不扎实真坑,太坑了!就这么一点程序整了半天。这段代码如上。

调试的时候分数减法的参数传递时又出现问题了,不过调试一下也算找到问题了,没有之前那么艰难。

其他的小问题也不少,但是没有完全记下来。程序也比较简单,就不吹嘘功能了。

估计以后的优化会很艰难,直接重写一份也是有可能的。毕竟问题太多了,到处都是不合理的地方。先大致写出来给自己点信心(这小程序我也会写的嘛),然后优化好以后和这个对比一下(自嘲当初的根本不能看嘛),让程序的不断优化见证自己的进步。

代码地址:https://coding.net/u/DreamQ/p/First/git/blob/master/AddSub.cpp

博客修改次数:6(估计最后一次了)

小学生二元四则运算(F)的更多相关文章

  1. 用C++实现简单随机二元四则运算

    让我们想看看二元四则运算都需要实现什么: (1) 定制题目数量 (2) 是否有乘除法 (3) 题目数值范围 (4) 加减有无负数 (5) 除法有无余数 (6) 是否支持分数(真分数.假分数…) (7) ...

  2. 小学生噩梦——四则运算题库(python 全功能实现)

    Github: https://github.com/holidaysss 小组:龙天尧(代码实现),林毓植(浮点转分数函数,代码审查) PSP2.1 Personal Software Proces ...

  3. 四则运算二(java web)

    最近我和我的小伙伴yaoyali结成对子,共同写网页版的四则运算.虽然现在还没弄好,但是比起上次用纯java写的四则运算有了很大改进. 一.存放四则运算题目和答案的类 package com.jaov ...

  4. 结对编程1---基于Flask的四则运算题目生成器

    项目代码地址 / WEB应用地址 / 合作伙伴iFurySt博文链接 需求分析 本次程序是基于原有的控制台四则运算器的基础上,改成WEB的形式,同时还增加了一些新的功能.同时因为交互方式的改变,代码也 ...

  5. 四则运算App--大总结(已完成)

    1. 贡献分分配(20分) 欧泽波:14分,Android的学习,代码的编写,等等 杨洁华:1分,提供学习资料,框架的设计等等 赵泽嘉:3分,提供学习资料,框架的设计等等 林扬滨:2分,提供学习资料, ...

  6. Java实现 蓝桥杯VIP 算法训练 二元函数

    问题描述 令二元函数f(x,y)=ax+by,a和b为整数,求一个表达式S的值. 只有满足以下要求的表达式才是合法的: 1.任意整数x是一个合法的表达式: 2.如果A和B都是合法的表达式,则f(A,B ...

  7. Java实现蓝桥杯VIP算法训练 二元函数

    试题 算法训练 二元函数 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 令二元函数f(x,y)=ax+by,a和b为整数,求一个表达式S的值. 只有满足以下要求的表达式才是合法的: ...

  8. python学习之关键字

    1.assert 语句形式:assert 布尔表达式[,msg] 解释:assert是检验一个表达式是否为真.若不为真,则触发一个错误. 例如: assert False assert 1==2 as ...

  9. MATLAB如何定义函数

    自定义函数的途径:M文件函数(M file function)在线函数(Inline Function)匿名函数(Anonymous Function)1.M文件函数范例function c=myad ...

随机推荐

  1. python第三十课--异常(异常对象传递过程)

    演示异常对象传递的过程(往上“抛”),并将其解决 def func1(): print('func1...') print(10/0) def func2(): print('func2...') t ...

  2. 在 Laravel 5 中集成七牛云存储实现云存储功能

    本扩展包基于https://github.com/qiniu/php-sdk开发,是七牛云储存 Laravel 5 Storage版,通过本扩展包可以在Laravel 5中集成七牛云存储功能.   1 ...

  3. 补码与C++的应用

    12.inti=(int)((unsigned int)0xffffffff+(unsigned int)0xffffffff); printf(“%d”,i);结果是:C A.0           ...

  4. 架构图+kubernetes 问题理解 -- kube-pproxy - endpoint

    1.详述kube-proxy原理,一个请求是如何经过层层转发落到某个pod上的整个过程.请求可能来自pod也可能来自外部. 1.1kube-proxy为集群提供service功能,相同功能的pods对 ...

  5. ansible-playbook如何判断并中断执行

    - fail: msg="Bailing out. this play requires 'bar'"       when: bar is not defined 我的需求是当某 ...

  6. Scala--特质

    一.为什么没有多重继承 c++允许多重继承 Java不允许多重继承,类只能继承一个超类,可以实现任意数量的接口. 如何继承这两个抽象基类? Scala提供“特质”而非接口:特质可以同时抽象方法和具体方 ...

  7. android so壳入口浅析

    本文转自http://www.9hao.info/pages/2014/08/android-soke-ru-kou-q 前言   开年来开始接触一些加固样本,基本都对了so进行了处理,拖入ida一看 ...

  8. 20155202《网络对抗》Exp9 web安全基础实践

    20155202<网络对抗>Exp9 web安全基础实践 实验前回答问题 (1)SQL注入攻击原理,如何防御 SQL注入产生的原因,和栈溢出.XSS等很多其他的攻击方法类似,就是未经检查或 ...

  9. 使用FindAncestor查找方式绑定且不需要使用datacontext

    原文:使用FindAncestor查找方式绑定且不需要使用datacontext <UserControl x:Class="QuJiao.AnimationVideoPlayer&q ...

  10. [c#][福利]BTTool种子文件修改工具

    前言 不知道各位看官是否有过类似的经历.好不容易找到一个电影的种子文件,想用百度云的离线下载功能去下载文件,却被百度云无情提示“离线文件因含有违规内容被系统屏蔽无法下载”!假设有这么一个场景,比如最近 ...