- 作業要求位址: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語言的學習已經是在大一的時候了,很久沒有使用這種語言了,有些生疏了,要多使用讓自己回憶起來