c语言编程500以内的四则运算

随机生成2个500以内的正整数或零,随机计算+、–、*、/,答案也必须是500以内的正整数或零。共出50道题,不能出现重复题目,并将题目写入文件。(一定要写有注释啊,拜托啦~~)

#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啊,还有好多其他相关问题请教一下

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-12-30
 #include <stdio.h>
#include <stdlib.h>
#include <time.h>
int oper(int x,int a,int b)
{
    switch (x)
    {
        case 0:return a+b;
        case 1:return a-b;
        case 2:return a*b;
        case 3:return a/b;
    }
}
char sign(int x)
{
    switch (x)
    {
        case 0:return '+';
        case 1:return '-';
        case 2:return '*';
        case 3:return '/';
    }
}
int main(void)
{
    FILE *fp;
    int a,b,i,x;
    srand((unsigned)time(NULL));//生成随机种子
    fp=fopen("F:\\text.txt","w");//我写入的文件是F盘的text.txt,可以改
    for(i=0;i<50;i++)
    {
        a=rand()%500;//随机生成500以下的数a
        b=rand()%500;//随机生成500以下的数b
        x=rand()%4;//随机生成0~3这4个数,分别对应+ - * /
        fprintf(fp,"%d%c%d=%d\n",a,sign(x),b,oper(x,a,b));
    }
    fclose(fp);
    return 0;
}

有问题 请联系我。。。

追问

能加你 q q请教吗?百度不太方便

追答

qq:1549367119
话说楼上的功能很强啊

追问

。。。。

第2个回答  2013-12-30
你这样问,是没人愿意写的,你最好写一个,让人帮忙更改。追问

就是不会写啊

第3个回答  2013-12-30
你是在整人吗?追问

哪里整人了,不会写才问的

第4个回答  2013-12-30
随机生成两个数大家都懂,能告诉我下,什么叫随机计算+-*/吗?追问

就是随机取+-*/啊

相似回答