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.含有乘除,含有负数。

1791021-20190914191707976-1627015506.jpg

2.控制题目数量,生成15道含有乘除的算式。

1791021-20190912185550325-942251956.jpg

3.生成20道带加减乘除,包含负数,且负数在第二个位置加括号的算式。

1791021-20190912185738228-582374408.jpg

4.将生成的算式自动保存到result.txt的外部文件中。

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

1791021-20190914222852841-2043884166.jpg

转载于:https://www.cnblogs.com/Yiuser/p/11508448.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值