第三次作业
- 作业要求地址: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
估计这个任务需要多少时间
10
5
Development
开发
20
40
· Analysis
需求分析 (包括学习新技术)
5
6
· Design Spec
生成设计文档
5
7
· Design Review
设计复审
9
6
· Coding Standard
代码规范
4
4
· Design
具体设计
10
12
· Coding
具体编码
36
21
· Code Review
代码复审
7
9
· Test
测试(自我测试,修改代码,提交修改)
15
30
Reporting
报告
5
6
·
测试报告
5
6
·
计算工作量
3
2
·
并提出过程改进计划
4
3
二、题目要求
任何编程语言都可以,命令行程序接受一个数字输入,然后输出相应数目的四则运算题目和答案。例如输入数字是 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("使用方法:请从键盘上直接输入表达式,以回车键结束.如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语言的学习已经是在大一的时候了,很久没有使用这种语言了,有些生疏了,要多使用让自己回忆起来