首页 > 技术文章 > 随机四则运算2程序

xiangwo 2015-03-18 19:59 原文

#include<iostream> #define N    100 using namespace std;

struct fenshu {int x;int y;int z;};

int gongyueshu(int a,int b) {  int c=a;  while(b!=0)  {   c=a%b;   a=b;   b=c;  }  return a; } int main() {  cout<<"直接生成的是支持假分数、支持正负、支持加减乘除、范围在0-225之间无重复的题"<<endl;  cout<<endl<<"请输入题量及每行题数:"<<endl;  int sum,col,fuhao[N];  cin>>sum>>col;  int a,b,c;

 fenshu fir[N],sec[N];  for(int i=0;i<sum;i++)  {   a=rand()%100;   while(a==0)   {a=rand()%100;}   b=rand()%100;   while(b==0)   {b=rand()%100;}   if(b>a)   {c=a;a=b;b=c;}   c=rand()%256;   int yueshu;   yueshu=gongyueshu(a,b);   fir[i].x=b/yueshu;   fir[i].y=a/yueshu;   if(rand()%2==1)    fir[i].z=c*(-1);   else    fir[i].z=c;   fuhao[i]=rand()%4;  }  for(int i=0;i<sum;i++)  {   a=rand()%100;   while(a==0)   {a=rand()%100;}   b=rand()%100;   while(b==0)   {b=rand()%100;}   if(b>a)   {c=a;a=b;b=c;}   c=rand()%255;   int yueshu;   yueshu=gongyueshu(a,b);   sec[i].x=b/yueshu;   sec[i].y=a/yueshu;   if(rand()%2==1)    sec[i].z=c*(-1);   else    sec[i].z=c;   for(int j=0;j<i;j++)   {    if(fuhao[j]==fuhao[i])    {     if(fir[j].x==sec[j].x&&fir[j].y==sec[j].y&&fir[j].z==sec[j].z)     {i--;continue;}    }   }  }  for(int i=0;i<sum;i++)  {   cout<<"("<<fir[i].z<<" "<<fir[i].x<<"/"<<fir[i].y<<")  ";   if(fuhao[i]==0)    cout<<"+  ";   if(fuhao[i]==1)    cout<<"-  ";   if(fuhao[i]==2)    cout<<"*  ";   if(fuhao[i]==3)    cout<<"/  ";   cout<<"("<<sec[i].z<<" "<<sec[i].x<<"/"<<sec[i].y<<")          ";   if((i+1)%col==0)    cout<<endl;  }

}

 

 

     本来是想写成按照选择的条件生成运算题的,但是越想越晕,感觉有好多参数,写着写着自己就不知道什么参数代表什么了,干脆就全部删了,写了直接生成能控制打印方式,避免重复,支持分数,支持加减乘除且有范围的程序。

     跟当初的设想差距不大。

    (1)创建了struct fenshu来存放分数的整数部分、分子和分母,并控制分母不能为0,还创建函数公约数来将分子分母化成最简形式。

   (2)符号是存在正想数组中的整数,控制输出就可以了。

   (3)避免重复是每当生成一个算式就按照生成的运算符号判断,如果符号一样就判断生成的两个数是不是一样,一样则重新生成。

   (4)生成正负号通过随机生成0和1控制是否乘以-1

日期

开始时间

结束时间

中断时间

净时间

活动

备注

3/13

11:30

12:00

0

30

设置程序的布局和思路

 

3/18

14:00

18:00

10

240

重新构思编程修改

 

3/19

17:00

18:00

50

10

实验截图,上传博客

 

推荐阅读