1. 程式人生 > >作業四:個人專案---小學四則運算

作業四:個人專案---小學四則運算

本次作業要求來自:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2186

我的github遠端倉庫的地址:https://github.com/Ingramm/lxc

一、題目要求

像《構建之法》的人物阿超那樣,寫一個能自動生成小學四則運算題目的命令列 “軟體”。

具體要求:任何程式語言都可以,命令列程式接受一個數字輸入,然後輸出相應數目的四則運算題目和答案。例如輸入數字是 30, 那就輸出 30 道題目和答案。 運算式子必須至少有兩個運算子,運算數字是在 100 之內的正整數,答案不能是負數。 如:23 - 3 * 4 = 11。

擴充套件要求:

1) 要求能出和真分數 (二分之一, 十二分之五,等)相關的練習題。

2) 並且要求能處理使用者的輸入,並判斷對錯,打分統計。 要求能處理使用者輸入的真分數, 如 1/2, 5/12 等。

二、設計思路

開發工具:Code::Blocks

程式語言:C語言

程式碼主要函式:

main()函式、randomNumber(int n)函式、add(int m,int n)函式、jianfa(int m,int n)函式、chengfa(int m,int n)函式、chufa(int m,int n)函式。

程式碼實現思路:

用結構體定義運算式子,包含運算式子的屬性。在main()函式中,使用者輸入式子數量後,呼叫randomNumber(int n)函式隨機產生式子,並存入結構體變數中,然後通過switch語句來判斷式子符號優先順序,計算式子結果,並存入結構體變數中。最後判斷使用者輸入的答案是否正確並給出本次做題總分。

三、主要程式碼

main()函式主要程式碼:

  for(i=0;i<n;i++)
    {
        if(formula[i].m >= 2 && formula[i].n <2)
        {
            switch(formula[i].m)
            {
            case 2:
                sum1[i] = chengfa(formula[i].firstNumber,formula[i].secondNumber);
                break
; case 3: sum1[i] = chufa(formula[i].firstNumber,formula[i].secondNumber); break; } switch(formula[i].n) { case 0: formula[i].sum = add(sum1[i],formula[i].thirdNumber); break; case 1: formula[i].sum = jianfa(sum1[i],formula[i].thirdNumber); break; } } else if(formula[i].n >= 2 && formula[i].m <2) { switch(formula[i].n) { case 2: sum1[i] = chengfa(formula[i].secondNumber,formula[i].thirdNumber); break; case 3: sum1[i] = chufa(formula[i].secondNumber,formula[i].thirdNumber); break; } switch(formula[i].m) { case 0: formula[i].sum = add(formula[i].firstNumber,sum1[i]); break; case 1: formula[i].sum = jianfa(formula[i].firstNumber,sum1[i]); break; } }

randomNumber(int n)函式的主要程式碼:

void randomNumber(int n)
{
    int i;
    srand(time(NULL));
    for(i=0;i<n;i++)
    {
        formula[i].firstNumber = rand()%100 + 1;
        formula[i].secondNumber = rand()%100 + 1;
        formula[i].thirdNumber = rand()%100 + 1;
        formula[i].m = rand()%4;
        switch(formula[i].m)
        {
        case 0:
            formula[i].fuhao1 = '+';
            break;
        case 1:
            formula[i].fuhao1 = '-';
            break;
        case 2:
            formula[i].fuhao1 = '*';
            break;
        case 3:
            formula[i].fuhao1 = '/';
            break;
        }
        formula[i].n = rand()%4;
        switch(formula[i].n)
        {
        case 0:
            formula[i].fuhao2 = '+';
            break;
        case 1:
            formula[i].fuhao2 = '-';
            break;
        case 2:
            formula[i].fuhao2 = '*';
            break;
        case 3:
            formula[i].fuhao2 = '/';
            break;
        }
    }
}

運算函式程式碼:

int add(int m,int n)
{
    int sum = 0;
    sum = m + n;
    return sum;
}
int jianfa(int m,int n)
{
    int sum = 0;
    sum = m - n;
    return sum;
}
int chengfa(int m,int n)
{
    int sum = 0;
    sum = m * n;
    return sum;
}
int chufa(int m,int n)
{
    int sum = 0;
    sum = m / n;
    return sum;
}

四、執行結果

五、主要問題

主要問題:本次作業主要是用結構體來實現的,用結構體來對運算式子進行儲存。但做完作業後,發現其實用結構體是有弊端的,在記憶體資源上,結構體陣列要固定給它分配記憶體空間,如果用不完,就會出現記憶體浪費的情況,而用指標來對式子進行儲存,就不用預留記憶體空間,就比結構體要好。不過,由於本次作業做好了,只能課後再進行更改。

六、時間估計

PSP2.1 Personal Software Process Stages Time Senior Student Time
Planning 計劃 8 6
· Estimate 估計這個任務需要多少時間 12 10
Development 開發 85 80
· Analysis 需求分析 (包括學習新技術) 8 10
· Design Spec 生成設計文件 0 0
· Design Review 設計複審 3 5
· Coding Standard 程式碼規範 4 3
· Design 具體設計 10 15
· Coding 具體編碼 30 30
· Code Review 程式碼複審 10 10
· Test 測試(自我測試,修改程式碼,提交修改) 15 30
Reporting 報告 9 6
· 測試報告 5 9
· 計算工作量 5 2
· 並提出過程改進計劃 0