天天看點

《作業二》自動生成四則運算題目

作業二:個人程式設計項目——四則運算

本周的作業題目要求:

  編寫一個自動生成國小四則運算題目的程式

程式設計環境:

  程式設計語言選擇了C#,程式設計軟體選擇了Visual Studio 2015

程式設計思路:

  在看到題目首先想到了使用Random()這個随機方法進行随機産生數字,同時加減乘除四個運算符用0、1、2、3這個四個數字表示,也通過随機方法生成,在列印輸出時再進行判斷輸出成相應的數學符号。我将題目分成了幾個階段進行編寫,分别為整數階段、分數階段、混合階段和優化階段。

階段一:

  需要注意的部分是在C#語言中Random()在使用時随機生成的數字是小于你所輸入的數字的。為了友善使用同時加入了設定了出題數目與最大值範圍的語句,通過使用者的輸入進行設定,在接收時C#語句預設接收的為String

源代碼

#include<iostream.h>
#include<stdlib.h>
#include<conio.h>

void DealFenshu(int m, int a[][2])
{
    for(int p=0;p<m;p++)
    {
        int i=(int)rand()%10;
        int j=(int)rand()%10;
        while(j==0||i>=j)
        {
            i=(int)rand()%10;
            j=(int)rand()%10;
        }
        int x=(int)rand()%10;
        int y=(int)rand()%10;
        while(y==0||x>=y)
        {
            x=(int)rand()%10;
            y=(int)rand()%10;
        }
        int k=(int)rand()%100/25;
        switch(k)
        {
            case 0:
                cout<<"("<<i<<"/"<<j<<")"<<"+"<<"("<<x<<"/"<<y<<")"<<"=";
                a[p][0]=i*y+x*j;
                a[p][1]=j*y;
                break;
            case 1:
                cout<<"("<<i<<"/"<<j<<")"<<"-"<<"("<<x<<"/"<<y<<")"<<"=";
                a[p][0]=i*y-x*j;
                a[p][1]=j*y;
                break;
            case 2:
                cout<<"("<<i<<"/"<<j<<")"<<"*"<<"("<<x<<"/"<<y<<")"<<"=";
                a[p][0]=i*x;
                a[p][1]=j*y;
                break;
            case 3:
                a[p][0]=i*y;
                a[p][1]=j*x;
                cout<<"("<<i<<"/"<<j<<")"<<"/"<<"("<<x<<"/"<<y<<")"<<"=";
            }
            
            if(p%5==4)
            {
                cout<<endl;
            }
            else
            {
                cout<<'\t';
            }
    }

}
                   void DisplayFenshu(int a[][2],int w,int m)
{
    if(w==1)
    {
        for(int q=0;q<m;q++)
        {
            if(a[q][0]==0)
                cout<<"0"<<'\t';
            else
                cout<<a[q][0]<<"/"<<a[q][1]<<'\t';
            if(q%5==4)
            {
                cout<<endl;
            }
        }
    }
    
}
            void DealInt(int m,int a[])
{
        
            for(int p=0;p<m;p++)
    {
    int i=(int)rand()%10;
    int j=(int)rand()%10;
    int k=(int)rand()%100/25;
    switch(k)
    {
    case 0:
        cout<<i<<"+"<<j<<"=";
            a[p]=i+j;
        break;
    case 1:
        cout<<i<<"-"<<j<<"=";
        a[p]=i-j;
        break;
    case 2:
        cout<<i<<"*"<<j<<"=";
        a[p]=i*j;
        break;
    case 3:
        try
        {
        a[p]=i/j;
        cout<<i<<"/"<<j<<"=";
        }
        catch(...)
        {
            p--;
        }
        

    }
        
        if(p%5==4)
        {
            cout<<endl;
        }
        else
        {
            cout<<'\t';
        }
    }
}
void DisplayInt(int a[],int w,int m)
{
    if(w==1)
    {
        for(int q=0;q<m;q++)
        {
            cout<<a[q]<<'\t';
            if(q%5==4)
            {
                cout<<endl;
            }
        }
    }
    else
    {};
}
int main()
{
    int p;
    do
    {
        system("cls");
        int a[1000],b[1000][2];
        int m,n,w;
        cout<<"請輸入生成的四則運算題個數:";
        cin>>m;
        cout<<endl;
        cout<<"請輸入要生成的四則運算種類(輸入1為整數,否則為真分數):";
        cin>>n;
        cout<<endl;
        if(n==1)
        {
            DealInt(m,a);
            cout<<endl;
        }
        else
        {
            DealFenshu(m,b);
            cout<<endl;
        }
        cout<<"是否輸出答案(輸入1則輸出答案否則不輸出答案)"<<endl;
        cin>>w;
        if(n==1)
        {
            DisplayInt(a,w,m);        
        }
        else
        {
            DisplayFenshu(b,w,m);
        }
        cout<<endl;
        cout<<"是否繼續生成運算題(輸入1則生成否則不生成)"<<endl;
        cin>>p;
        cout<<endl;
    }while(1==p);

} 

           

程式運作截圖

《作業二》自動生成四則運算題目
《作業二》自動生成四則運算題目

總結

通過本次課程設計,使我對這門課程有了更深入的了解。這是一門實踐性較強的課程,為了學好這門課程,必須在掌握理論知識的同時,加強上機實踐。一個人的力量是有限的,要想把課程設計做的更好,就要學會參考一定的資料,吸取别人的經驗,讓自己和别人的思想有機的結合起來,得出屬于你自己的靈感。

程式的編寫需要有耐心,有些事情看起來很複雜,但問題需要一點一點去解決,分析問題,把問題一個一個劃分,劃分成小塊以後就逐個去解決。再總體解決大的問題。這樣做起來不僅有條理也使問題得到了輕松的解決。

在這個過程中,我也曾經因為實踐經驗的缺乏失落過,也曾經仿真成功而熱情高漲。生活就是這樣,汗水預示着結果也見證着收獲。勞動是人類生存生活永恒不變的話題。雖然這隻是一次的極簡單的課程制作,可是平心而論,也耗費了我不少的心血,這就讓我不得不佩服開發技術的前輩,才意識到老一輩對我們社會的付出,為了人們的生活更美好,他們為我們社會所付出多少心血對我而言,知識上的收獲重要,精神上的豐收更加可喜。讓我知道了學無止境的道理。我們每一個人永遠不能滿足于現有的成就,人生就像在爬山,一座山峰的後面還有更高的山峰在等着你。挫折是一份财富,經曆是一份擁有。這次課程設計必将成為我人生旅途上一個非常美好的回憶!

通過這次的課程設計我對于專業課的學習有了更加深刻的認識,以為現在學的知識用不上就加以怠慢,等到想用的時候卻發現自己的學習原來是那麼的不紮實。以後努力學好每門專業課,讓自己擁有更多的知識,才能解決更多的問題!