實現一個自動產生小學四則運算題目的命令列程式

來源:互聯網
上載者:User

標籤:目的   運算子   random   sof   基本   tin   table   process   gets   

Github項目地址:https://github.com/sumilekaedei/Myapp.git

題目:實現一個自動產生小學四則運算題目的命令列程式。

          自然數:0, 1, 2, …。

  • 真分數:1/2, 1/3, 2/3, 1/4, 1’1/2, …。
  • 運算子:+, ?, ×, ÷。
  • 括弧:(, )。
  • 等號:=。
  • 分隔字元:空格(用於四則運算子和等號前後)。
  • 算術運算式:

e = n | e1 + e2 | e1 ? e2 | e1 × e2 | e1 ÷ e2 | (e),

其中e, e1和e2為運算式,n為自然數或真分數。

  • 四則運算題目:e = ,其中e為算術運算式。

效能分析:分別對1、2、3個運算子的式子進行討論,列出其中可能出現的情況,對其中沒有提到出現的情況進行改進。

設計實現過程:其中又一個主函數和五個子函數構成,子函數間也會相互調用。主函數中,調用產生問題的函數,然後產生問題函數調用隨機函數和產生答案函數,產生答案的函數也會調用產生問題函數和輾轉相除的函數。

代碼說明:

#include <stdio.h>#include <time.h>#include <stdlib.h>#include <string.h>char getSignal()//運算子int random(int a)//隨機數 int gcd(int x,int y)//輾轉相除法 int answers(int y,int num,int num1,int num2,int num3,int num4,char signal1,char signal2,char signal3,int r)//產生答案 int question(int y,int r)//產生題目{    FILE *fp;//srand((unsigned)time(0));    int get;    int num,num1,num2,num3,num4;    char signal1,signal2,signal3;    signal1=getSignal();    signal2=getSignal();    signal3=getSignal();    num1=random(r);    num2=random(r);    num3=random(r);    num4=random(r);    num=rand()%3+1;    if(num==1)    {         answers(y,num,num1,num2,num3,num4,signal1,signal2,signal3,r);         fp=fopen("Exercises.txt","a");         fprintf(fp,"題目%d:%d %c %d = \n",y,num1,signal1,num2);         fclose(fp);    }    if(num==2)    {         answers(y,num,num1,num2,num3,num4,signal1,signal2,signal3,r);         fp=fopen("Exercises.txt","a");         fprintf(fp,"題目%d:%d %c %d %c %d = \n",y,num1,signal1,num2,signal2,num3);         fclose(fp);        }    if(num==3)    {         answers(y,num,num1,num2,num3,num4,signal1,signal2,signal3,r);         fp=fopen("Exercises.txt","a");         fprintf(fp,"題目%d:%d %c %d %c %d %c %d = \n",y,num1,signal1,num2,signal2,num3,signal3,num4);         fclose(fp);    }    return 0;} int main(){    srand((unsigned)time(0));    FILE *fp;    fp=fopen("Exercises.txt","w");    fclose(fp);    fp=fopen("Answers.txt","w");    fclose(fp);    int n,r;    int y=1;    char argv1[3];    char argv2[3];    //n=10,r=10;    scanf("%s",argv1);//-n    scanf("%d",&n);;    scanf("%s",argv2);//-r    scanf("%d",&r);    if(!strcmp(argv1,"-n")&&!strcmp(argv2,"-r"))    {        while(n>0)        {            question(y,r);            y++;            n--;        }    }    else printf("輸入錯誤!");    return 0;}

 

測試回合:

 

 

 

PSP2.1表格:

PSP2.1

Personal Software Process Stages

預估耗時(分鐘)

實際耗時(分鐘)

Planning

計劃

   

· Estimate

· 估計這個任務需要多少時間

720

2160

Development

開發

   

· Analysis

· 需求分析 (包括學習新技術)

240

720

· Design Spec

· 產生設計文檔

60

80

· Design Review

· 設計複審 (和同事審核設計文檔)

120

150

· Coding Standard

· 代碼規範 (為目前的開發制定合適的規範)

90

90

· Design

· 具體設計

120

150

· Coding

· 具體編碼

600

1440

· Code Review

· 代碼複審

120

300

· Test

· 測試(自我測試,修改代碼,提交修改)

240

240

Reporting

報告

   

· Test Report

· 測試報告

30

30

· Size Measurement

· 計算工作量

15

20

· Postmortem & Process Improvement Plan

· 事後總結, 並提出流程改善計劃

30

30

合計

 

1665

3330

 項目小結:這次的項目,開始看題目以為很簡單,但是到了實際做的時候,因為需求比較多,做起來非常困難,而且其中又很多自己原來沒有學會的做法。而且這個程式做的不太好,雖然勉強能實現準系統,但是括弧、題目中有真分數等功能沒有能實現,而且其中也有很多bug沒有得到有效解決。

 

實現一個自動產生小學四則運算題目的命令列程式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.