#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
#define NUM 50
int main()
{
int n[NUM]; // 第一个数
int m[NUM]; // 第二个数
char o[NUM]; // 运算符
int result[NUM]; // 结果
int count = 0; // 产生的题目计数
int i; // 临时循环变量
int op; // 操作符号
int temp; // 临时交换用变量
int div; // 判断除数是否为零
int ditto; // 判断是否否重复
FILE *fp;
fp = fopen("data.txt", "w"); // 打开文件
srand(time(NULL)); // 使用随机数种子
while (count != NUM)
{
n[count] = abs(rand() % 500); // 这里写 500 以内的话, 你要求结果也是 500 以内, 基本上产生不了乘法除法的运算式子, 建议写 30
m[count] = abs(rand() % 500);
op = abs(rand() % 4); // 随机的运算符
result[count] = 0;
div = 1; // 默认每次进入除数不为零
ditto = 0; // 默认每次进入为不重复
switch (op)
{
case 0:
result[count] = n[count] + m[count];
o[count] = '+';
break;
case 1:
if (n[count] < m[count])
{
temp = n[count];
n[count] = m[count];
m[count] = temp;
}
o[count] = '-';
result[count] = n[count] - m[count];
break;
case 2:
o[count] = 'x';
result[count] = n[count] * m[count];
break;
case 3:
if (m[count] != 0)
{
o[count] = '/';
result[count] = n[count] / m[count];
}
else
{
div = 0;
}
break;
default:
break;
}
if (div == 0)
{
continue;
}
if (n[count] <= 500 && m[count] <= 500 && result[count] <= 500) // 基本条件
{
if (op == 3)
{
if (result[count] * m[count] != n[count]) // 判断除法可能除不尽, 有余数的情况
{
continue;
}
}
for (i = 0; i < count; i++) // 检查此题目是否重复
{
if (n[i] == n[count] && m[i] == m[count] && result[i] == result[count] && o[i] == o[count]) // 判断第一个数, 第二个数, 操作符号, 结果是否都相同, 相同表示此题目已有
{
ditto = 1; // 标记为重复
break;
}
}
}
else
{
continue;
}
if (ditto == 1) // 重复数据处理, 重新生成数据
{
continue;
}
count++; // 计数
}
for (i = 0; i < NUM; i++) // 将符合的数据写入文件
{
fprintf(fp, "%d: %d %c %d = %d\n", i + 1, n[i], o[i], m[i], result[i]);
}
fclose(fp); // 关闭文件
return 0;
}
追问能不能加下你q q啊,还有好多其他相关问题请教一下