整体功能简介:

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. Arcgis创建SDE_Geometry、SDO_Geometry的区别

    先初略的了解下SDE_Geometry和SDO_Geometry的区别: 1. SDO_GEOMETRY Oracle Spatial在MDSYS模式下定义了一系列几何类型.函数来支持空间数据的存储和 ...

  2. python第四十三课——封装性

    1.面向对象的三大特性:封装性.继承性.多态性 封装: 封装使用的领悟: 1).生活层面:食品.快递.计算机.明星... 2).计算机层面: ①.模块.类.函数... ②.属性数据的封装与隐藏 权限修 ...

  3. consul集群搭建,配合nginx完成服务动态发现和健康检查

    1.概述 1.1 介绍 consul是一个服务发现和配置共享的服务软件,结合nginx的主动健康检查模块nginx_upstream_check_module和服务发现模块nginx-upsync-m ...

  4. vmware中装的ubuntu上不了网

    背景 上周末重装了windows主机的系统,之后就重新安装了vmware软件,今天使用的时候就发现git pull代码仓库的时候,发现代码仓库无法获取,检查后发现是虚拟机上不了网了. 查看了一系列教程 ...

  5. Python2.7-time

    time模块,与datetime模块功能有所重合,time较为简单明了,若只需要当前时间或日期或是sleep,直接用time模块,需要更复杂的时间间隔等情况用datetime模块更好 1.获得time ...

  6. JAVA框架:hibernate(四)

    一.绑定本地session 原理:之前connection实现事务一个道理,2种方法:1.变量下传.2.因为servlet是单线程,和本地当前线程绑定. 配置: 1)配置核心配置文件hibernate ...

  7. (一)RESTful 介绍

    什么是RESTful REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为“表征状态转移”或“表现层状态转化”. R ...

  8. opencv7-ml之统计模型

    在opencv的ml模块中有个统计模型类,而其他的比如朴素贝叶斯分类器.knn.svm等等其他模型都是基于该模型上派生出来的.所以先介绍下该模型. 该类的定义在文件"opencv\sourc ...

  9. #define GPIOA ((GPIO_TypeDef *) GPIOA_BASE)

    ((GPIO_TypeDef *) GPIOA_BASE)表示将GPIOA_BASE强制转换为指针类型的结构体, #define GPIOA ((GPIO_TypeDef *) GPIOA_BASE) ...

  10. intellij idea新建maven项目,一直loading archetype list.....

    不知道什么时候开始,在idea里新建maven项目时,在new module页面,一直显示loading archetype list....,导致一直没办法新建.后来我以为是防火墙问题,各种设置还是 ...