整体功能简介:

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. Spring之强制修改某个方法的行为(Arbitrary method replacement)

      A less commonly useful form of method injection than Lookup Method Injection is the ability to rep ...

  2. 【转】Fiddler工作原理

    原文章链接:Web代码网chinabit.org Fiddler是一个http调试代理,它能 够记录所有的你电脑和互联网之间的http通讯,Fiddler 可以也可以让你检查所有的http通讯,设置断 ...

  3. ORB SLAM2在Ubuntu 16.04上的运行配置

    http://www.mamicode.com/info-detail-1773781.html 安装依赖 安装OpenGL 1. 安装opengl Library$sudo apt-get inst ...

  4. html5获取地理位置信息API

    html5获取地理位置信息API 在HTML5中,可以看下如何使用Geolocation API来获得用户的地理位置信息,如果该浏览器支持的话,且设备具有定位功能,就能够直接使用这组API来获取当前位 ...

  5. 模板自定义函数 template function

    sqlite3中的日期默认是UTC,当日期字段的默认值是CURRENT_TIMESTAMP时,这个日期和北京时间CST少了8小时. 网上建议说数据库里用UTC,读取数据时再转换为当地时间. web页面 ...

  6. 第三次作业:结对编程--实现表格在APP的导入和显示

    031302517 031302319 ps:共同完成一篇随笔,文章中的第一人称我(517),队友(319) 一.功能分析+实现思路+结队讨论 这里我将功能分析和实现思路还有结对过程中的一些讨论结合在 ...

  7. 第13章 GPIO—位带操作

    第13章     GPIO—位带操作 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fire ...

  8. 20155204 王昊《网络对抗技术》EXP4

    20155204 王昊<网络对抗技术>EXP4 一.实验后回答问题 (1)如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么.请设计下你想监控的操作有 ...

  9. 网络对抗技术 2017-2018-2 20152515 Exp7 信息搜集与漏洞扫描

    1. 实践内容(3.5分) 本实践的目标理解常用网络欺诈背后的原理,以提高防范意识,并提出具体防范方法. DNS欺骗就是攻击者冒充域名服务器的一种欺骗行为. 原理:如果可以冒充域名服务器,然后把查询的 ...

  10. 20155331《网络对抗》Exp5 MSF基础应用

    20155331<网络对抗>Exp5 MSF基础应用 基础问题回答 用自己的话解释什么是exploit,payload,encode 答:exploit就是漏洞利用.exploit就是利用 ...