四則運算題目生成程序(基於控制檯)

 源代碼地址:https://git.coding.net/c_xx/02.gitgit

題目描述:app

  1. 除了整數之外,還要支持真分數的四則運算,真分數的運算,例如:1/6 + 1/8 = 7/24
  2. 運算符爲 +, −, ×, ÷
  3. 而且要求能處理用戶的輸入,並判斷對錯,打分統計正確率。
  4. 要求能處理用戶輸入的真分數, 如 1/2, 5/12 等
  5. 使用 -n 參數控制生成題目的個數,例如執行下面命令將生成10個題目:Myapp.exe -n 10

需求分析:函數

  1. 支持整數及真分數的四則運算;
  2. 可以處理用戶的輸入並判斷對錯從而得出正確率;
  3. 使用-num參數控制生成題目的個數。

功能設計:學習

  1. 隨機產生四則運算符;
  2. 隨機產生整數或真分數四則運算;
  3. 對分數結果實現約分運算;
  4. 根據用戶需求肯定出題數目;
  5. 處理用戶輸入並判斷正誤,計算正確率。

代碼說明:測試

爲了實現需求,共設計了4個功能函數,分別是:編碼

char Operator()            //隨機選取運算符
int maxNumber(int k, int l)            //展轉相除法求最大公約數函數
void integer()        //整數運算
void fraction()            //真分數運算
char Operator()            //隨機選取運算符
{ 
    char op;
    srand(time(0));
    int i=rand()%4+1; 
    switch(i) 
    { 
        case 1: return '+'; 
        case 2: return '-'; 
        case 3: return '*'; 
        case 4: return '/'; 
    } 
}
int maxNumber(int k, int l)            //展轉相除法求最大公約數函數
{
    while(k%l!=0){
        int t=k%l;
        k=l;
        l=t;
    }
    return l;
}
void integer()        //整數運算
{ 
    int g;
    int x,y; 
    char op; 
    srand(time(0));
    x=rand()%100+1; 
    y=rand()%100+1; 
    op=Operator(); 
    cout<<x<<op<<y<<"="<<endl;
    cout<<"請輸入運算結果:";
    if(op=='+')            //整數「+」運算
    {        
        cin>>g;
        if(g==x+y)
        {
            cout<<"恭喜你答對了!"<<endl<<endl;
            correct++;
        }
        else
        {
            cout<<"很遺憾你答錯了,正確答案是:"<<x+y<<endl<<endl;
            mistake++;
        }
    }
    else 
        if(op=='-')            //整數「-」運算
    {        
        cin>>g;
        if(g==x-y)
        {
            cout<<"恭喜你答對了!"<<endl<<endl;
            correct++;
        }
        else
        {
            cout<<"很遺憾你答錯了,正確答案是:"<<x-y<<endl<<endl;
            mistake++;
        }
    }
        else 
            if(op=='*')            //整數「*」運算
    {        
        cin>>g;
        if(g==x*y)
        {
            cout<<"恭喜你答對了!"<<endl<<endl;
            correct++;
        }
        else
        {
            cout<<"很遺憾你答錯了,正確答案是:"<<x*y<<endl<<endl;
            mistake++;
        }
    }
        else 
            if(op=='/')            //整數「/」運算
    {        
        cin>>result;
        element=x;
        denominator=y;
        maxNum=maxNumber(element,denominator);
        element=element/maxNum;
        denominator=denominator/maxNum;
        if(denominator!=1)
        {

            sprintf_s(answer, "%d/%d",element ,denominator);
            if (strcmp(answer, result) == 0)
            {
                cout<<"恭喜你答對了!"<<endl<<endl;
                correct++;
            }
            else
            {
                cout<<"很遺憾你答錯了,正確答案是:"<<answer<<endl<<endl;
                mistake++;
            }
        }
        else
        {
            sprintf_s(answer, "%d",element);
            if (strcmp(answer, result) == 0)
            {
                cout<<"恭喜你答對了!"<<endl<<endl;
                correct++;
            }
            else
            {
                cout<<"很遺憾你答錯了,正確答案是:"<<answer<<endl<<endl;
                mistake++;
            }
        }
    }
} 
void fraction()            //真分數運算
{ 
    srand(time(NULL));
    memset(result,0, sizeof(result));
    memset(answer,0, sizeof(answer));
    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(); 
    cout<<"("<<b<<"/"<<a<<")"<<op<<"("<<d<<"/"<<c<<")"<<"="<<endl;
    cout<<"請輸入運算結果:";
    cin>>result;
    if(op=='+')            //分數「+」運算
    {        
        element=(b*c)+(a*d);
        denominator=a*c;
        maxNum=maxNumber(element,denominator);
        element=element/maxNum;
        denominator=denominator/maxNum;
        if(denominator!=1)
        {
            sprintf_s(answer, "%d/%d",element ,denominator);
            if (strcmp(answer, result) == 0)
            {
                cout<<"恭喜你答對了!"<<endl<<endl;
                correct++;
            }
            else
            {
                cout<<"很遺憾你答錯了,正確答案是:"<<answer<<endl<<endl;
                mistake++;
            }
        }
        else
        {
            sprintf_s(answer, "%d",element);
            if (strcmp(answer, result) == 0)
            {
                cout<<"恭喜你答對了!"<<endl<<endl;
                correct++;
            }
            else
            {
                cout<<"很遺憾你答錯了,正確答案是:"<<answer<<endl<<endl;
                mistake++;
            }
        }
    }
    else 
        if(op=='-')            //分數「-」運算
    {        
        element=(b*c)-(a*d);
        denominator=a*c;
        maxNum=maxNumber(element,denominator);
        element=element/maxNum;
        denominator=denominator/maxNum;
        if(denominator!=1)
        {

            sprintf_s(answer, "%d/%d",element ,denominator);
            if (strcmp(answer, result) == 0)
            {
                cout<<"恭喜你答對了!"<<endl<<endl;
                correct++;
            }
            else
            {
                cout<<"很遺憾你答錯了,正確答案是:"<<answer<<endl<<endl;
                mistake++;
            }
        }
        else
        {
            sprintf_s(answer, "%d",element);
            if (strcmp(answer, result) == 0)
            {
                cout<<"恭喜你答對了!"<<endl<<endl;
                correct++;
            }
            else
            {
                cout<<"很遺憾你答錯了,正確答案是:"<<answer<<endl<<endl;
                mistake++;
            }
        }
    }
        else 
            if(op=='*')            //分數「*」運算
    {        
        element=b*d;
        denominator=a*c;
        maxNum=maxNumber(element,denominator);
        element=element/maxNum;
        denominator=denominator/maxNum;
        if(denominator!=1)
        {
            sprintf_s(answer, "%d/%d",element ,denominator);
            if (strcmp(answer, result) == 0)
            {
                cout<<"恭喜你答對了!"<<endl<<endl;
                correct++;
            }
            else
            {
                cout<<"很遺憾你答錯了,正確答案是:"<<answer<<endl<<endl;
                mistake++;
            }
        }
        else
        {
            sprintf_s(answer, "%d",element);
            if (strcmp(answer, result) == 0)
            {
                cout<<"恭喜你答對了!"<<endl<<endl;
                correct++;
            }
            else
            {
                cout<<"很遺憾你答錯了,正確答案是:"<<answer<<endl<<endl;
                mistake++;
            }
        }
    }
        else 
            if(op=='/')            //分數「/」運算
    {    
        element=b*c;
        denominator=a*d;
        maxNum=maxNumber(element,denominator);
        element=element/maxNum;
        denominator=denominator/maxNum;
        if(denominator!=1)
        {

            sprintf_s(answer, "%d/%d",element ,denominator);
            if (strcmp(answer, result) == 0)
            {
                cout<<"恭喜你答對了!"<<endl<<endl;
                correct++;
            }
            else
            {
                cout<<"很遺憾你答錯了,正確答案是:"<<answer<<endl<<endl;
                mistake++;
            }
        }
        else
        {
            sprintf_s(answer, "%d",element);
            if (strcmp(answer, result) == 0)
            {
                cout<<"恭喜你答對了!"<<endl<<endl;
                correct++;
            }
            else
            {
                cout<<"很遺憾你答錯了,正確答案是:"<<answer<<endl<<endl;
                mistake++;
            }
        }
    }
} 

測試運行:spa

 

PSP展現:.net

 ||||| |:--|:--|:--|:--| |**PSP2.1**|**Personal Software Process Stages**|**Time (%) Senior Student(/hour)**|**Time (%)(/hour)**| |· Planning|計劃|2|1.5| |· Estimate|估計這個任務須要多少時間|38|49| |· Analysis|需求分析 (包括學習新技術)|2|2.5| |· Coding Standard|代碼規範|0.5|0.5| |· Design|具體設計|1.5|2| |· Coding|具體編碼|30|40| |· Test|測試(自我測試,修改代碼,提交修改)|1|1| |Reporting|報告|1|1.5| 
相關文章
相關標籤/搜索