1. 基本要求:
要求用C++语言编程,在Visual C++环境下调试完成。
3. 创新要求:
实现程序功能后,可进行创新设计(3项全部实现为创新):
1) 可以自动出题进位加法题目,如:3+8=?,或?+8=16 或7+?=12。
2) 可以自动出乘法 如: 2*5=?或?*5=35或8*?=32。
3) 随机决定当前题目是进位加法、乘法和退位减法题目。
三、设计方法和基本原理:
1. 问题功能描述:
计算机随机生成100道退位减法题目,其中1~50题为诸如15-6=?形式的退位减法;51~75题为1?-4=7形式的退位减法;76~100题为:16-?=7形式的退位减法。
2. 问题的解决方案:
如果随机生成减数和被减数,会造成某些题目出现频度过高的现象。例如等概率生成10~18的减数,一旦生成18,则被减数只能是9,才能构成退位减法。较好的解决办法是:“10-1”
到“18-9”共有45种不同的退位减法,将这45种不同的退位减法设定为一个数字,如果设定“10-1=”为0,如果随机生成了0,则输出“10-1=”这道题。
四、主要技术问题的描述:
使用rand()函数(无参)可产生随机整数,每调用1次rand()就产生1个随机数。
为使每次运行程序,rand()函数产生不同的随机数,要调用一次srand函数:
srand(time(NULL));
这些函数涉及到的头文件有
#include <stdlib.h>
#include <time.h>
例如产生10个随机整数的程序:
#include<iostream.h>
#include <stdlib.h>
#include <time.h>
void main()
{
srand(time(NULL));
int a[10],i;
for (i=0;i<10;i++)
a[i]=rand();
for (i=0;i<10;i++)
cout<<a[i]<<'\t';
}
利用随机函数生成运算数,然后获取符合范围的运算数,生成算式并保存正确答案。
typedef enum
{
jia,
jian,
cheng
}timu;
void output(timu a)
{
int d = 0;
int p1 = 0,p2 = 0;
int s = 0;
char op;
if (a != cheng)
{
while (1)
{
d = rand()%10+10;
p1 =rand()%9+1;
if (a != jian || (d%10)<p1){break;}
}
p2 = d-p1;
if (a == jian){s=d;d=p1;p1=s;}
}
else
{
p1 =rand()%9+1;
p2 =rand()%9+1;
d = p1*p2;
}
s=rand()%3;
switch(a)
{
case jia: op = '+';break;
case jian: op = '-';break;
case cheng:op = '*';break;
default:break;
}
switch (s)
{
case 0:printf("%d%c%d=?\n",p1,op,p2);break;
case 1:printf("%d%c?=%d\n",p1,op,d);break;
case 2:printf("?%c%d=%d\n",op,p2,d);break;
default:break;
}
}
int main()
{
timu t;
int i;
srand(time(0));
for (i=0; i<100; i++)
{
t= (timu)rand()%3;
output(t);
}
return 0;
}
不对的了吧