软件工程第二次作业
- 题目:
请编写一个能自动生成小学四则运算题目的 “软件”。
让程序能接受用户输入答案,并判定对错。
最后给出总共 对/错 的数量。
——需求分析
此“软件”主要面向小学生,考虑到小学生对计算机的使用和掌握程度有限,所以此“软件”的操作应尽量简单,易使用;
用户能在此"软件"上联系简单的四则运算;
此“软件”能提交用户的答案,并判断对错;
在使用此 “软件”后及时给出正确与错误的题目数。
——设计
考虑到小学生的计算能力有限,本“软件”随机生成百以内的操作数;
考虑学生的年级跨越较大,且各年级的学生掌握的知识水平有差异。本“软件”采用菜单的方式,可由用户选择所要练习的运算法则;
考虑到小学生在小学阶段没有接受过负数知识,本“软件”确保在用户进行减法练习时,随机生成的两个操作数相减不会出现负数;
另外,考虑到用户进行除法练习时对无法整除的运算结果输入不便,本“软件”确保在用户进行除法练习时,随机生成的两个操作数相除不会出现分数或小数;
对年级较高的学生,本“软件”设计了四则混合运算,方便用户进行综合练习;
最后,本“软件”在设计上使用C语言实现。
——代码实现
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
//函数原型
void doExercise(int);
int test(int);
// 功能:计分器
void doExercise(int n)
{
int score=0; //练习得分,初始化为0
int i=0;
//练习题数的计数器
for(i=1;i<=5;i++)
{
score=score+test(n);
}
printf("本次练习5道题,你做对了%d道,做错了%d道\n",score,5-score);
printf("========================================================\n");
}
int test(int n)
{
int ranswer=0;
//正确答案
int uanswer=0;
//用户输入的答案
int t=0;
//临时变量
char operation;
//运算类别
int num1=0;
//操作数1
int num2=0;
//操作数2
srand(time(NULL)); //初始化伪随机数种子
num1=rand()%100;
//取0—99之间的随机数
num2=rand()%100;
//进入程序功能,如果选择5就随机产生1-4所代表的每一种运算方式
if(n==5)
{
n=rand()%4+1;
}
switch(n)
{
case 1:
operation='+';
break;
case 2:
operation='-';
break;
case 3:
operation='*';
break;
case 4:
operation='/';
break;
}
if((operation=='-') && (num1<num2))//当减数大于被减数数时,交换
{
t=num1;
num1=num2;
num2=t;
}
if(operation=='/')
{
if(num2==0)
num2=1;//当除数随机取0时,就将除数置为1
num1=num1*num2;//为确保整除将被除数与除数的乘积赋值给被除数
}
//输出测试题本身、提示用户输入
printf("%d%c%d= ",num1,operation,num2);
scanf("%d",&uanswer);
//程序计算正确结果
switch(operation)
{
case '+':
ranswer=num1+num2;
break;
case '-':
ranswer=num1-num2;
break;
case '*':
ranswer=num1*num2;
break;
case '/':
ranswer=num1/num2;
break;
}
//评判,做对返回1,做错返回0
if(uanswer==ranswer)
{
printf("做对了!\n");
return 1;
}
else
{
printf("做错了!\n");
return 0;
}
}
void main()
{
int choice=0;
do
{
printf("\t1、加法练习\t2、减法练习\n");
printf("\t3、乘法练习\t4、除法练习\n");
printf("\t5、综合练习\t0、退出系统\n");
printf("===================================================\n");
printf("请输入你的选择(0--5):");
int choice;
scanf("%d",&choice);
while(choice<0 || choice>5)
{
printf("你的输入有误,请重新输入:");
scanf("%d",&choice);
}
if(choice==0)
break;
//用户选择0,退出循环(退出系统)
doExercise(choice);
//做什么练习,并启动评分
}while(true);
printf("欢迎使用,再见\n");
}
——测试
不合法输入
减法:
除法:
综合并退出:
耗时分析:
Process Stages |
Time |
Time(%) |
需求分析 |
15 |
25 |
代码设计 |
23 |
38.33 |
代码复审 |
11 |
18.33 |
测试 |
5 |
8.33 |
分析总结 |
6 |
10 |
——分析总结
本“软件”经过反复测试后,在保证软件正确性的基础上,使用结构化设计,易于维护。且界面相对友好,并在用户输入不合法时提示用户重新输入,使软件的健壮性得到提高。有很多不足之处,请老师给与指正。