您的位置:首页 > 其它

小学四则运算题目自动生成

2016-03-12 18:59 856 查看
原题目如下:

阿超有个儿子上小学二年级,老师每天让家长给孩子出30道加减法题,虽然不多,但是每天都做也算是个负担,阿超作为一个老牌程序员当然想用计算机来解决这个小问题,目前对于这个问题对于任何语言都不是问题,比如:

      C/C++、C#、Java、Python、VB、JavaScript、Perl……

具体要求如下:

1.能自动生成小学四则运算题目(注意是给小学生用的,要是结果出现负数的话他们会迷茫的!)

2.除了整数外,还要支持真分数的四则运算

分析可知需要采用一个自己熟悉的语言来变成实现自动生成30道小学四则运算题目且结果均为非负数,同时还要可以支持真分数的四则运算。这里我选择了C语言(毕竟我太菜,别的还不会)。一开始我的写的是四则混合运算,但是反复调试发现自己的判断非负的地方还存在很大问题,昨天晚上想了很久发现解决很麻烦,跟全算出结果差不多少,所以我还是放弃了。今天重新写了一个简单的。我觉得这个程序主要有3个地方需要注意。首先是随机生成问题,只使用rand()是不对的,这样生成的数是伪随机数,上网查了一下得知最简单的解决方法是应该在主函数里加上一句srand(time(0)),这里我最初是在每个rand()前都加上了srand(time(0)),导致产生的随机数都一样,应该只要在主函数里加一句就行了。这是个值得注意的地方。其次是关于如何保证结果都是非负数,由于是四则运算,因此只有出现“-”号的时候才会有这种可能。我是这样解决的:用x和y来表示整数题目时2个运算数,当出现“-”时(if(op==‘-’)),通过while(x-y<0)语句来循环进行重新随机,知道产生x大于等于y为止。当遇到分数题目时候,采用a/b,c/d形式,同理通过while(a*d-b*c<=0)语句来循环进行重新随即。最后关于真分数的问题,并不难,真分数简单来讲就是分母比分子大的分数,因此只要保证a>b且c>d就好了。整个程序的开发时间大概1个小时。下面是源代码:

#include<iostream.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>

char Operator()
{
char op;
int i;
i=rand()%4+1;
switch(i)
{
case 1: return '+';
case 2: return '-';
case 3: return 'x';
case 4: return '/';
}
}

void integer()
{
int x,y;
char op;
x=rand()%100+1;
y=rand()%100+1;
op=Operator();
if(op=='-')
while(x<y)
{
x=rand()%100+1;
y=rand()%100+1;
}
cout<<x<<op<<y<<"="<<endl;
}

void fraction()
{
int a,b,c,d;
a=rand()%100+1;
b=rand()%100+1;
c=rand()%100+1;
d=rand()%100+1;
char op;
while(a<=b||c<=d)
{
a=rand()%100+1;
b=rand()%100+1;
c=rand()%100+1;
d=rand()%100+1;
}
op=Operator();
if(op=='-')
while((b*c-a*d)<0)
{
a=rand()%100+1;
b=rand()%100+1;
c=rand()%100+1;
d=rand()%100+1;
}
cout<<b<<"/"<<a<<op<<d<<"/"<<c<<"="<<endl;
}
+
void main()
{
srand(time(0));
int i,n,m;
cout<< "请输入出题类型"<<endl;
cout<< "1.整数四则运算"<<endl;
cout<< "2.分数四则运算"<<endl;
cin>>i;
cout<< "请输入出题数目"<<endl;
cin>>n;
for(m=1;m<=n;m++)
{
if(i==1)
integer();
else
fraction();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: