標籤:
題目要求:隨機產生四則運算題目
//隨機四則運算要求:題目避免重複可定製數量,數值範圍、加減有無負數、除法有無餘數等
#include<iostream>
#include<time.h>
using namespace std;
void basic(int num,int cc,int mhs,int kgs,int pyu,int max,int nnum) //基礎四則運算函數
{
srand(time(NULL));
int a[100]; //存放第一個運算元的數組
int b[100]; //存放第二個運算元的數組
int c[100]; //存放運算子的數組
int n,o,p,q,m;
int repet; //控制是否重複
for(int i=0;i<num;i++)
{
n=rand()%max;
a[i]=n;
o=rand()%max;
b[i]=o;
p=rand()%cc;
c[i]=p;
q=rand()%2;
m=rand()%2;
while(nnum)
{
switch(q)
{
case(0):
a[i]=-a[i];
break;
case(1):
break;
}
break;
}
while(nnum)
{
switch(m)
{
case(0):
b[i]=-b[i];
break;
case(1):
break;
}
break;
}
repet=1;
for(int j=0;j<i;j++)
{
if(a[i]==a[j]&&b[i]==b[j]&&c[i]==c[j]) //判斷是否有重複
{
i=i-1;
repet=0;
}
}
while(repet)
{
if(i%mhs==0)
{
cout<<endl;
}
switch(c[i])
{
case(0):
cout<<"("<<i+1<<") "<<a[i]<<"+ "<<b[i]<<"=";
break;
case(1):
cout<<"("<<i+1<<") "<<a[i]<<"- "<<b[i]<<"=";
break;
case(2):
cout<<"("<<i+1<<") "<<a[i]<<"* "<<b[i]<<"=";
break;
case(3):
{
while(pyu)
{
if(a[i]%b[i]!=0)
i=i-1;
repet=0;
}
if(b[i]==0) //判斷被除數是否為0,是0則不輸出
{
i=i-1;
break;
}
else
{
cout<<"("<<i+1<<") "<<a[i]<<"/ "<<b[i]<<"=";
break;
}
}
}
for(int k=0;k<kgs;k++)
{
cout<<"\t";
}
break;
}
}
cout<<endl;
}
void main()
{
int num1,cc1,m,n;
int mhs1,kgs1,pyu1,max1,nnum1;
while(n)
{
cout<<" 隨機四則運算"<<endl;
cout<<"--------------------------------------------------------"<<endl;
cout<<"1、請輸入運算題的數目:";
cin>>num1;
cout<<endl;
while(1)
{
cout<<"2、有乘除法請輸入0,沒有輸入1:";
cin>>m;
cout<<endl;
if(m==0)
{
cc1=4;
break;
}
else if(m==1)
{
cc1=2;
break;
}
else
cout<<" 輸入有誤,請重新輸入:1代表有乘除法,2代表無乘除法:";
}
if(m==0)
{
cout<<" 請選擇除法是否有餘數,有餘數則輸入0,沒有餘數輸入1:";
cin>>pyu1;
cout<<endl;
}
cout<<"3、請輸入是否有負數(0代表無負數,1代表有負數):";
cin>>nnum1;
cout<<endl;
cout<<"4、請輸入數值範圍(最大值,預設從0開始,若有負數則從最大值的負數開始):";
cin>>max1;
cout<<endl;
cout<<"5、請輸入列印方式:每行運算題的個數(建議3或4):";
cin>>mhs1;
cout<<endl;
cout<<" 每列運算題之間的間隔(建議1或2):";
cin>>kgs1;
cout<<endl;
cout<<"結果為:";
basic(num1,cc1,mhs1,kgs1,pyu1,max1,nnum1);
cout<<endl;
cout<<"繼續請輸入1,退出輸入0:";
cin>>n;
cout<<endl;
}
}
結果:
總結:
看到題目,初始想的是寫若干個函數區分別實現題目要求,但在編寫的過程中遇到了難題,有些地方拆分不開,便在一個函數中增加修改代碼實現新的要求導致本程式除了主函數外唯寫了一個函數,所有的要求都在這一個程式中完成,導致程式的擴充性很不好,編寫時找錯也不太好找。在編寫的過程中會有一些語句搭配忘記,比如while和break等。編寫代碼基礎知識不牢,之前練得比較少,導致有些語句要反覆實驗才能確定。題目還有不完善的地方,比如輸出的負數沒用括弧括起等。
軟體工程——四則運算Ⅱ(還有很大缺陷,忘指教)