c++自动出题20以内退位减法

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;


}


追问

不对的了吧

温馨提示:答案为网友推荐,仅供参考