一.设计思想

 由于忘记不会数组的地址传递所以所有的程序都在主函数中有点混乱!
用a、b数组存放分子或者是整数时的整数,xy数组存放分数时的分母,当分母为0时重新生成;当是除法时分子为0重新生成;运算符号以整数的形式存在c数组中;负号通过随机生成1和0控制分子乘以-1。

二.源程序代码

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

void main()
{
int a[N],b[N],x[N],y[N],c[N],sel[3],num,page,lie,hang,max;
cout<<"..........请选择下列选项.........."<<endl;
cout<<"1.是否有乘除法."<<endl;
cout<<"2.有无负数"<<endl;
cout<<"3 是否支持分数."<<endl;
cout<<"请输入数值范围(最大值):"<<endl;
for(int i=0;i<3;i++)
cin>>sel[i];
cin>>max;
cout<<"请输入总的页数和行数列数:";
cin>>page>>hang>>lie;
num=page*hang*lie;

//////////////////////////////////////////////////////////////////////////生成随机数
    if(sel[2]==1)
{
for(int i=0;i<num;i++)
   {
a[i]=rand()%max;
x[i]=rand()%max;
while(x[i]==0)
x[i]=rand()%max;
b[i]=rand()%max;
  y[i]=rand()%max;
while(y[i]==0)
y[i]=rand()%max;
     }
    if(sel[1]==1)
      {
    for(int i=0;i<num;i++)
    {
  if(rand()%2==1)
   a[i]=(-1)*a[i];
    if(rand()%2==1)
b[i]=(-1)*b[i];
  }
    }
   if(sel[0]==1)
for(int i=0;i<num;i++)
{
c[i]=rand()%4;
if(c[i]==3)
{
while(b[i]==0)
b[i]=rand()%max;
}
}
   else
for(int i=0;i<num;i++)
c[i]=rand()%2;
}


else
{
for(int i=0;i<num;i++)
   {
a[i]=rand()%max;
b[i]=rand()%max;
   }
if(sel[1]==1)
{
for(int i=0;i<num;i++)
{
if(rand()%2==1)
a[i]=a[i]*(-1);
if(rand()%2==1)
b[i]=(-1)*b[i];
}
}
if(sel[0]==1)
for(int i=0;i<num;i++)
c[i]=rand()%4;
else
for(int i=0;i<num;i++)
c[i]=rand()%2;
}
////////////////////////////////////////////////////////避免重复
if(sel[2]==1)
{
for(int i=0;i<num-1;i++)
{
for(int j=i+1;j<num;j++)
{
while(a[i]==a[j]&&b[i]==b[j]&&c[i]==c[j])
{a[i]=rand()%max;}
}
}
}
else
{
for(int i=0;i<num-1;i++)
{
for(int j=i+1;j<num;j++)
{
while(a[i]==a[j]&&c[i]==c[j])
{a[i]=rand()%max;}
}
}
}

///////////////////////////////////////////////////输出
for(int k=0;k<num;k++)
{
if(sel[2]==1)
{
cout<<a[k]<<"/"<<x[k];
switch(c[k])
{
case 0:
cout<<" + ";break;
case 1:
cout<<" - ";break;
case 2:
cout<<" * ";break;
case 3:
cout<<" / ";break;
}
cout<<b[k]<<"/"<<y[k]<<"    ";

}
else
{
cout<<a[k];
switch(c[k])
{
case 0:
cout<<" + ";break;
case 1:
cout<<" - ";break;
case 2:
cout<<" * ";break;
case 3:
cout<<" / ";break;
}
cout<<b[k]<<"   ";
}
if((k+1)%lie==0)
cout<<endl;
if((k+1)%(lie*hang)==0)
cout<<endl<<endl;
}
}

三.运行结果截图

四.编程总结

 由于忘记不会数组的地址传递所以所有的程序都在主函数中有点混乱!
用a、b数组存放分子或者是整数时的整数,xy数组存放分数时的分母,当分母为0时重新生成;当是除法时分子为0重新生成;运算符号以整数的形式存在c数组中;负号通过随机生成1和0控制分子乘以-1。

五.

日期

开始时间

结束时间

中断时间

净时间

活动

备注

3/13

11:30

12:00

0

30

设置程序的布局和思路

 

3/18

14:00

22:00

120

360

编写程序

 

3/19

16:00

19:00

30

70

修改下写报告截图,上传博客

 
posted on 2015-03-19 19:33  menghuanzhixing  阅读(137)  评论(0编辑  收藏  举报