小學四則運算題目自動生成


      原題目如下:     

      阿超有個兒子上小學二年級,老師每天讓家長給孩子出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();
    }
}

 

   

       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM