#include<stdlib.h>
#include<stdio.h>
#include<time.h>
void main()
{
int x,y,z,t,m,n,l;
float p,q;
srand(unsigned( time(NULL)));//防止重复
printf ("请您想要多少个四则运算算式?");
scanf("%d",&l);//按要求出算式
for(int i=0;i<l;i++)
{
x=rand()%100;
y=rand()%100;//在100内随机抽出一个整数
z=rand()%5;//随机分为五种情况,+,-,*,/,真分数运算
switch(z)
{
case 0: printf("%d + %d =\n", x, y);
break;
case 1:if(x<y){
t=x;
x=y;
y=t;
}
printf("%d - %d =\n", x, y);//防止得数为负数
break;
case 2:
printf("%d * %d =\n", x, y);
break;
case 3:
while (y == 0)
{
y = rand() % 100;
}
printf("%d / %d =\n", x, y);//除数不为0
break;
case 4: m = rand() % 100;
n = rand() % 100;
z = rand() %4 ;
while (y == 0)
{
y = rand() % 100;
}
while (n == 0)
{
n = rand() % 100;
}
if (x > y)
{
t = x;
x = y;
y = t;
}
if (m > n)
{
t = m;
m = n;
n = t;
}
switch (z)
{
case 0:printf("%d/%d + %d/%d =\n", x, y, m, n);
break;
case 1:
p = (float)x / (float)y;
q = (float)m / (float)n;
if (q>p)
{
t = x;
x = m;
m = t;
t = y;
y = n;
n = t;
}
printf("%d/%d - %d/%d =\n", x,y,m,n);//真分数相减大于0
break;
case 2:printf("%d/%d * %d/%d =\n", x, y, m, n);
break;
case 3:
x = rand() % 100;
y = rand() % 100;
m = rand() % 100;
n = rand() % 100;
z = rand() % 4;
while (m == 0)
{
m = rand() % 100;
}
printf("%d/%d / %d/%d =\n", x, y, m, n);
break;
}
}
}
system("pause");
}
有三个要求。不重复,按要求数量出算式,可以计算真分数。
1.”srand((unsigned)time(NULL))是初始化随机函数种子: 1、是拿当前系统时间作为种子,由于时间是变化的,种子变化,可以产生不相同的随机数。 计算机中的随机数实际上都不是真正的随机数,如果两次给的种子一样,是会生成同样的随机序列的。 所以,一般都会以当前的时间作为种子来生成随机数,这样更加的随机。 2、使用时,参数可以是unsigned型的任意数据,比如srand(10); 3、如果不使用srand,用rand()产生的随机数,在多次运行,结果是一样的。“-来自百度匿名用户。可以有效防止重复问题。
2.按要求数量,只需再加入一个未知数,使其代替30在赋值即可。
3.真分数必须注意相减不能为负数,而且相除要符合要求除数要存在且不能为零。