标签:
经过两位老师的点评,我此次修正以下两个问题:
1.整数除数为0(如果出现这种情况,就把符号改成除除法之外的随机一种)
2.分数可约分(新增函数zuidagongyueshu,如果存在最大公约数,就除以这个最大公约数,其结果替换之前的数字)
#include<stdio.h> #include<stdlib.h> #include<time.h> #define random(x) (rand()%x) #include <iostream> using namespace std; int zuidagongyueshu(int a,int b) { int c=0,min,i; min = a < b ? a : b; for (i = 1; i < min; i++) { if (a%i == 0 && b%i == 0) c = i; } return c; } int suiji(int k) { srand((int)time(0)); int a,b,c,d,i; for(int j=0;j<k;j++) { i=rand()%4; a=random(100); b=random(100); c=random(100); d=random(100); if (a<b && c<d && b!=0 && d!=0) { int l,p; l = zuidagongyueshu(a, b); p = zuidagongyueshu(c, d); if (l != 0) { a = a / l; b = b / l; } if (k != 0) { c = c / p; d = d / p; } switch(i) { case 0:cout<<"("<<a<<"/"<<b<<")"<<"+"<<"("<<c<<"/"<<d<<")"<<"="<<endl;break; case 1:cout<<"("<<a<<"/"<<b<<")"<<"-"<<"("<<c<<"/"<<d<<")"<<"="<<endl;break; case 2:cout<<"("<<a<<"/"<<b<<")"<<"*"<<"("<<c<<"/"<<d<<")"<<"="<<endl;break; case 3:cout<<"("<<a<<"/"<<b<<")"<<"/"<<"("<<c<<"/"<<d<<")"<<"="<<endl;break; } } if(i==3 && b==0)//如果除数为0 { i = rand() % 3; } else { switch(i) { case 0:cout<<a<<"+"<<b<<"="<<endl;break; case 1:cout<<a<<"-"<<b<<"="<<endl;break; case 2:cout<<a<<"*"<<b<<"="<<endl;break; case 3:cout<<a<<"/"<<b<<"="<<endl;break; } } } return 0; } int main() { int j; cout << "请输入生成四则运算数量="; cin >> j; suiji(j); }
标签:
原文地址:http://www.cnblogs.com/linanil/p/5259959.html