基本要求:
(1)实现一个加减乘除运算的小型系统,进行整数的加、减、乘、除运算;
(2)在每一种运算下,由系统随机产生两个数(数值大小在1~100之间)参加运算,当用户根据系统提供的公式进行计算,并输入计算结果后,系统判断结果的对错。如果结果正确,则显示“Very Good”,否则,显示“Wrong!!!”。
(3)每次选择一种运算后,系统随机产生5或10道题目(需保证出的题目不超纲,即加法和与乘积不能超出100、减法结果不能出现负数、除法必须能整除),当用户运算完毕后,系统给出正确率。如用户10题答对了6题,则显示正确率为60%。每道题目可以考虑最多给2次答题机会。运算完毕后,系统将返回主菜单,供用户再次选择。
一、功能结构图
Tips:因为循环等原因,源程序中的变量定义与流程图不同。
二、核心功能介绍
用户选择一种运算,出现10道或者5道相应的100以内的运算题,用户根据系统提供的公式进行计算,并输入计算结果后,系统判断结果的对错。如果结果正确,则显示“Very Good”,否则,显示“Wrong!!!”。每道题目用户最多有2次答题机会。当用户运算完毕后,系统给出正确率。
三、源程序
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
int a[10],b[10],sum[10],k;
int i,j,m,n,t=0;
char q;
q=getchar();
//选择运算,输入“+,-,*,/”四个运算符决定运算类型。
srand((unsigned)time(NULL));
k=rand()%2;
if(k==0) n=5;
else n=10;
printf("你将要答题 %d道\n",n);
//随机选择产生5道还是10道 题目 。
for(i=1;i<=n;i++)
//产生n道题目
{
srand((unsigned)time(NULL));
a[i]=rand()%100+1;
b[i]=rand()%100+1;
//随机产生两个1~100的随机数 。
while(q=='+'&&a[i]+b[i]>100){srand((unsigned)time(NULL));a[i]=rand()%100+1;b[i]=rand()%100+1;}
while(q=='-'&&a[i]-b[i]<0){srand((unsigned)time(NULL));a[i]=rand()%100+1;b[i]=rand()%100+1;}
while(q=='*'&&a[i]*b[i]>100){srand((unsigned)time(NULL));a[i]=rand()%100+1;b[i]=rand()%100+1;}
while(q=='/'&&(a[i]/b[i]<0||a[i]%b[i]!=0)) {srand((unsigned)time(NULL));a[i]=rand()%100+1;b[i]=rand()%100+1;}
//保证出的题目不超纲,即加法和与乘积不能超出100、减法结果不能出现负数、除法必须能整除。
if(q=='+') {printf("%d. %d+%d= \n",i, a[i],b[i]);sum[i]=a[i]+b[i];}
if(q=='-') {printf("%d. %d-%d= \n",i,a[i],b[i]);sum[i]=a[i]-b[i];}
if(q=='*') {printf("%d. %d*%d= \n",i,a[i],b[i]);sum[i]=a[i]*b[i];}
if(q=='/') {printf("%d. %d/%d= \n",i,a[i],b[i]);sum[i]=a[i]/b[i];}
//输出公式让用户计算,并保留正确答案 。
for(j=1;j<=2;j++)
{
scanf("%d",&m);
if(m==sum[i]) {printf("Very Good\n");t=t+1;break;}
else printf("Wrong!!\n");
}
//判断用户输入答案的正确性,最多有两次答题机会。
}
printf("正确率:百分之%d\n",t*100/n);
//输出正确率
return 0;
}
四、程序运行结果
4.1 加法测试
4.2 减法测试
4.3 乘法测试
4.4 除法测试
4.5 测试小结
经测试,加、减、乘、除的基本功能都可以正常实现。
在最后输出环节,个人认为还可以输出错题集,表明错的地方,错的次数,还有正确答案。输出如下:
正确率:百分之80
错题:第1题 2次 正确答案 3;第2题 1次 正确答案 5