小学四则运算题目自动生成

      原题目如下:     

      阿超有个儿子上小学二年级,老师每天让家长给孩子出30道加减法题,虽然不多,但是每天都做也算是个负担,阿超作为一个老牌程序员当然想用计算机来解决这个小问题,目前对于这个问题对于任何语言都不是问题,比如:

      C/C++、C#、Java、Python、VB、JavaScript、Perl……

    具体要求如下:

       1.能自动生成小学四则运算题目(注意是给小学生用的,要是结果出现负数的话他们会迷茫的!)

       2.除了整数外,还要支持真分数的四则运算

 

 

       分析可知需要采用一个自己熟悉的语言来变成实现自动生成30道小学四则运算题目且结果均为非负数,同时还要可以支持真分数的四则运算。这里我选择了C语言(毕竟我太菜,别的还不会)。一开始我的写的是四则混合运算,但是反复调试发现自己的判断非负的地方还存在很大问题,昨天晚上想了很久发现解决很麻烦,跟全算出结果差不多少,所以我还是放弃了。今天重新写了一个简单的。我觉得这个程序主要有3个地方需要注意。首先是随机生成问题,只使用rand()是不对的,这样生成的数是伪随机数,上网查了一下得知最简单的解决方法是应该在主函数里加上一句srand(time(0)),这里我最初是在每个rand()前都加上了srand(time(0)),导致产生的随机数都一样,应该只要在主函数里加一句就行了。这是个值得注意的地方。其次是关于如何保证结果都是非负数,由于是四则运算,因此只有出现“-”号的时候才会有这种可能。我是这样解决的:用x和y来表示整数题目时2个运算数,当出现“-”时(if(op==‘-’)),通过while(x-y<0)语句来循环进行重新随机,知道产生x大于等于y为止。当遇到分数题目时候,采用a/b,c/d形式,同理通过while(a*d-b*c<=0)语句来循环进行重新随即。最后关于真分数的问题,并不难,真分数简单来讲就是分母比分子大的分数,因此只要保证a>b且c>d就好了。整个程序的开发时间大概1个小时。下面是源代码:

#include<iostream.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>

char Operator()
{
    char op;
    int i;
    i=rand()%4+1;
    switch(i)
    {
        case 1: return '+';
        case 2: return '-';
        case 3: return 'x';
        case 4: return '/';
    }
}

void integer()
{
    int x,y;
    char op;
    x=rand()%100+1;
    y=rand()%100+1;
    op=Operator();
    if(op=='-')
        while(x<y)
        {
            x=rand()%100+1;
            y=rand()%100+1;
        }
    cout<<x<<op<<y<<"="<<endl;
}

void fraction()
{
    int a,b,c,d;
    a=rand()%100+1;
    b=rand()%100+1;
    c=rand()%100+1;
    d=rand()%100+1;
    char op;
    while(a<=b||c<=d)
    {
        a=rand()%100+1;
        b=rand()%100+1;
         c=rand()%100+1;
        d=rand()%100+1;
    }
    op=Operator();
    if(op=='-')
        while((b*c-a*d)<0)
        {
            a=rand()%100+1;
            b=rand()%100+1;
            c=rand()%100+1;
            d=rand()%100+1;
        }
    cout<<b<<"/"<<a<<op<<d<<"/"<<c<<"="<<endl;
}
+
void main()
{
    srand(time(0));
    int i,n,m;
    cout<< "请输入出题类型"<<endl;
    cout<< "1.整数四则运算"<<endl;
    cout<< "2.分数四则运算"<<endl;
    cin>>i;
    cout<< "请输入出题数目"<<endl;
    cin>>n;
    for(m=1;m<=n;m++)
    {
        if(i==1)
            integer();
        else
            fraction();
    }
}

 

   

       

posted @ 2016-03-12 18:59  王敬一  阅读(1840)  评论(3编辑  收藏  举报