20194587 自动生成四则运算题第一版报告

==========

##利用C来自动生成四则运算##

1.需求分析

    对于四则运算计算题,用户需要的功能更加复杂。
    第一点比如生成的四则运算题不能重复,避免一道题做两遍的情况发生,并且值控制在100以内。
    第二个需求是要控制数字的大小范围,便于增加题目难度。
    第三点是数量可以定制,便于控制题目数量。
    第四是是否包含乘除法来控制题目难度。
    第五是是否包含负数运算。
    第六是可以把生成的算式输出到另外的文件上方便使用。

2.功能设计

    1--基本功能
        1.自动生成10道100以内的2个操作数的四则运算算式(+ - *  /),并且运算结果也在100以内。
        2.剔除重复算式。比如2+3=和2+3=是重复算式,而2+3=和3+2=不属于重复算式。
    2--扩展功能
        1.可以自由控制需要题目的数量,用户只需要在页面输入数字即可。
        2.可以自由控制是否需要乘除法。
        3.可以自由控制数值范围,比如加数可以是1~10也可以是1~100等等。
        4.可以自由控制四则运算式中是否出现负数。  
        5.可以把生成的文件存储到外部文件result.txt中。

3.设计实现

    1.使用C,C++语言。
    2.使用<stdlib.h>,<time.h>的函数库,随机生成采用随机生成函数rand.
    3.使用srand((unsigned)time(NULL))来调用系统时间作为生成随机数的种子,以此保证每一次的随机数生成与之前的必不相同。
    4.使用哈希去重法来解决判算式是否重复的问题,自己写了一个HAXI函数,并在判断的时候进行函数调用。
    5.使用IF,ELSE语句进行对各种需求的分类判断。
    6.随机负数使用是将第一个生成的随机数a=rand()%b;减去用户输入的范围b,再加上一个rand()%b来生成随机产生正负数同时存在的情况。并且当第二个运算数未负数时,自动加入括号。

4.测试运行

    1.含有乘除,含有负数。
     
    2.控制题目数量,生成15道含有乘除的算式。
    ![](https://img2018.cnblogs.com/blog/1791021/201909/1791021-20190912185550325-942251956.jpg)
    3.生成20道带加减乘除,包含负数,且负数在第二个位置加括号的算式。
    ![](https://img2018.cnblogs.com/blog/1791021/201909/1791021-20190912185738228-582374408.jpg)
    4.将生成的算式自动保存到result.txt的外部文件中。
    ![](https://img2018.cnblogs.com/blog/1791021/201909/1791021-20190912185838082-1731485706.jpg)

5.代码片段

    1.利用哈希去重法写了一个哈希函数去重算式。

...
int haxi(int left,char fuhao,int right,int fanwei)
{
static int p[999]; //开启一个长为1000的静态数组来存放结果值
static int ll=0;
int flag;
int sum=leftfanweifanwei+right*fanwei+'fuhao';//哈希求值,获得每个算式的哈希数值
for(int i=0;i<=ll;i++)
{
if(p[i]==sum)
{
flag=0;return 0;//如果哈希数值与数组中的某个数相同,则为重复出现
}
}
p[ll++]=sum; flag=1;//如果第一次出现,将该哈希数值存入数组,个数增加,返回1
}
...

猜你喜欢

转载自www.cnblogs.com/Yiuser/p/11508448.html