首页 > 其他 > 详细

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

时间:2019-09-12 20:17:49      阅读:106      评论:0      收藏:0      [点我收藏+]

==========

##利用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=left*fanwei*fanwei+right*fanwei+'fuhao';//哈希求值,获得每个算式的哈希数值
        for(int i=0;i<=ll;i++)
        {
        if(p[i]==sum)
        {
            flag=0;return 0;//如果哈希数值与数组中的某个数相同,则为重复出现               
        }   
        }
            p[ll++]=sum; flag=1;//如果第一次出现,将该哈希数值存入数组,个数增加,返回1
      }
    2.进行随机加减乘除运算。
        if(h==2)
    {
        for(int g=0;g<f;g++)
    {
    n=rand()%4;//利用随机数余除4来随机生成加减乘除
    if(n==0){i='+';}
    if(n==1){i='-';}
    if(n==2){i='*';}
    if(n==3){i='/';}
    a=rand()%j+1;//生成随机数
    b=rand()%j+1;
    c=rand()%j+1;
    d=rand()%j+1;
    m=rand()%2;
    }
    }
    3.进行加减值大于0小于100,控制乘法值小于100,除法只生成完全整除算式。
         if(n==0&&(a+b)>100)//加法值小于100
    {
        g--;continue;
    }
    else if(n==1&&(a-b)<0)//减法值大于0
    {
        g--;continue;
    }
    else if(n==2)
    {
        if((a*b)>100||flag==2)//乘法值小于100
        {
            g--;continue;
        }       
    }
    else if(n==3)
    {
        if((a%b!=0)||flag==2)//除法必须是整除
        {
            g--;continue;
        }
    }
    4.生成负数。
          a=rand()%j+1-j+rand()%j/2;
          b=rand()%j+1-j+rand()%j/2;
          c=rand()%j+1-j+rand()%j/2;
          d=rand()%j+1-j+rand()%j/2;
          m=rand()%2;
    5.导出结果到外部文件。
        FILE *fp;
        fp=fopen("D:\\result.txt","w");

6.总结

1.利用函数调用来进行数值比较处理,先申明后使用。
2.使用了大量的IF,ELSE来分类进行不同功能的分类实现。
3.C++好多方法不会写,Java也不太会,我好菜啊嘤嘤嘤,给我条大腿教教我吧!

7.PSP

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

原文:https://www.cnblogs.com/Yiuser/p/11508448.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!