天天看點

第三次作業

  • 作業要求位址:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/2166
  • Github位址:https://github.com/zhong666/test
  • 一、時間計劃與實際使用時間
    PSP2.1 Personal Software Process Stages Time Senior Student Time
    Planning 計劃 5 10
    · Estimate 估計這個任務需要多少時間
    Development 開發 20 40
    · Analysis 需求分析 (包括學習新技術) 6
    · Design Spec 生成設計文檔 7
    · Design Review 設計複審 9
    · Coding Standard 代碼規範 4
    · Design 具體設計 12
    · Coding 具體編碼 36 21
    · Code Review 代碼複審
    · Test 測試(自我測試,修改代碼,送出修改) 15 30
    Reporting 報告  5  6
    · 測試報告
    計算工作量 3 2
    并提出過程改進計劃

    二、題目要求

      任何程式設計語言都可以,指令行程式接受一個數字輸入,然後輸出相應數目的四則運算題目和答案。例如輸入數字是 30, 那就輸出 30 道題目和答案。 運算式子必須至少有兩個運算符,運算數字是在 100 之内的正整數,答案不能是負數。 要求能出和真分數 (二分之一, 十二分之五,等)相關的練習題。并且要求能處理使用者的輸入,并判斷對錯,打分統計。 要求能處理使用者輸入的真分數。 

  • 三、代碼送出
    #include <stdio.h>
    #include <stdlib.h>
    
    char token; /*全局标志變量*/
    
    /*遞歸調用的函數原型*/
    int exp( void );
    int term( void );
    int factor( void );
    
    void error( void ) /*報告出錯資訊的函數*/
    {
        fprintf( stderr, "錯誤\n");
        exit( 1 );
    }
    
    void match( char expectedToken ) /*對目前的标志進行比對*/
    {
        if( token == expectedToken ) token = getchar(); /*比對成功,擷取下一個标志*/
        else error(); /*比對不成功,報告錯誤*/
    }
    void Message(void)
    {
        printf("================================================================\n");
        printf("*               遞歸實作的四則運算表達式求值程式               *\n");
        printf("****************************************************************\n");
        printf("使用方法:請從鍵盤上直接輸入表達式,以Enter鍵結束.如45*(12-2)[回車]\n");
        printf("*****************************************************************\n\n");
    }
    main()
    {
        int result;  /*運算的結果*/
        Message();
        printf(" >> 請輸入表達式: ");
        token = getchar(); /*載入第一個符号*/
        
        result = exp(); /*進行計算*/
        if( token == '\n' ) /* 是否一行結束 */
            printf( " >> 表達式的計算結果為 : %d\n", result );
        else error(); /* 出現了例外的字元 */
        puts("\n\n                  請按任意鍵退出 ...\n");
        getch();
        return 0;
    }
    
    int exp( void )
    {
        int temp = term(); /*計算比加減運算優先級别高的部分*/
        while(( token == '+' ) || ( token == '-' ))
            switch( token ) {
            case '+': match('+');     /*加法*/
                  temp += term();
                  break;
            case '-': match('-');
                  temp -= term(); /*減法*/
                  break;
            }
        return temp;
    }
    
    int term( void )
    {
        int div; /*除數*/
        int temp = factor();   /*計算比乘除運算優先級别高的部分*/
        while(( token == '*' ) || ( token == '/' ))
            switch( token ) {
            case '*': match('*');  /*乘法*/
                  temp *= factor();
                  break;
            case '/': match('/');   /*除法*/
                  div = factor();
                  if( div == 0 ) /*需要判斷除數是否為0*/
                  {
                      fprintf( stderr, "除數為0.\n" );
                      exit(1);
                  }
                  temp /= div; 
                  break;
            }
        return temp;
    }
    
    int factor( void )
    {
        int temp; 
        if( token == '(' ) /*帶有括号的運算*/
        {
            match( '(' );
            temp = exp();
            match(')');
        }
        else if ( isdigit( token )) /*實際的數字*/
        {
            ungetc( token, stdin ); /*将讀入的字元退還給輸入流*/
            scanf( "%d", &temp ); /*讀出數字*/
            token = getchar();  /*讀出目前的标志*/
        }
        else error(); /*不是括号也不是數字*/
        return temp;
    }
          

      

    四、需求分析

    使用者控制生成題目的個數,并能夠自動随機生成加減乘除四則運算,運算包括整數的運算,答完題後生出正确答案,并在最後能統計答題正确數與正确率。

    五、設計

    開發工具:Visio c++ 6.0

    程式設計語言:C語言

  • 六、遇到的問題與解決
  • c語言的學習已經是在大一的時候了,很久沒有使用這種語言了,有些生疏了,要多使用讓自己回憶起來