一、时间计划与实际使用时间
|
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语言
原文:https://www.cnblogs.com/-hui/p/9772897.html