我只想知道这个C语言代码哪里错了- -。。求大神。。出来的乘法式子乘积会大于300

题目是:300以内的四则运算。帮助某小学数学老师出试卷。随机生成2个300以内的正整数或零,随机计算+、-、*或/,答案也必须是300以内的正整数或零。共出50道题目,不... 题目是:
300以内的四则运算。帮助某小学数学老师出试卷。随机生成2个300以内的正整数或零,随机计算+、-、*或/,答案也必须是300以内的正整数或零。共出50道题目,不能出现重复题目,并将题目写入文件。

#include"stdio.h"
#include"time.h"
void main()
{ int a,b,i,c,x;

FILE*fp; fp=fopen("question.txt","w");
srand(time(NULL));
for(i=0;i<50;i++)
{
loop: a=rand()/109;
b=rand()/109;
c=rand()%4;

if(c==0)
if(a+b<300) fprintf(fp,"%d+%d=\n",a,b);
else
goto loop;

else if(c==1)
if(a-b>0) fprintf(fp,"%d-%d=\n",a,b);
else
goto loop;

else if(c==2)
{
x=a*b;
if(x<300)
fprintf(fp,"%d*%d=\n",a,b);
else
goto loop;
}
else if(c==3)

if(a>b&&a%b==0) fprintf(fp,"%d/%d=\n",a,b);
else
goto loop;
}
}
展开
 我来答
kaixingui2012
2012-12-22 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6212万
展开全部
优化了你的程序
一、去除goto语句
二、变if为switch
三、按原题意生成数据
四、优化生成算式代码
#include"stdio.h"
#include"time.h"
#include"stdlib.h"
int main()
{
int i;
FILE*fp; fp=fopen("question.txt","w");
if(fp==NULL)
{
printf("open file error\n");
return -1;
}
srand(time(NULL));
i=0;
while(i<50)
{
int a,b,c;
a=rand()%300;
b=rand()%300;
c=rand()%4;
switch(c)
{
case 0:
if(a+b<300)
{
fprintf(fp,"%3d + %3d=\n",a,b);
i++;
}
break;
case 1:
if(a-b>0)
fprintf(fp,"%3d - %3d=\n",a,b);
else
fprintf(fp,"%3d - %3d=\n",b,a);
i++;
break;
case 2:
if(a*b<300)
{
fprintf(fp,"%3d * %3d=\n",a,b);
i++;
}
break;
default: //case 3
if(b&&a%b==0)
{
fprintf(fp,"%3d / %3d=\n",a,b);
i++;
}
else
if(a&&b%a==0)
{
fprintf(fp,"%3d / %3d=\n",b,a);
i++;
}
}
}
fclose(fp);
return 0;
}
不要执着自己的代码错在哪里了!
zcy990718
2012-12-22 · TA获得超过1.2万个赞
知道大有可为答主
回答量:1.2万
采纳率:66%
帮助的人:1652万
展开全部
#include <stdlib.h>
#include <stdio.h>
#include <time.h>

void swapInt(int &x,int &y);
void main()
{
int a,b,i,c,x;
FILE*fp;
fp=fopen("question.txt","w");
srand(time(NULL));
for(i=0;i<50;i++)
{
loop:
a=rand()/109;
b=rand()/109;
c=rand()%9;

if(c == 0)
{
if(a+b<300)
fprintf(fp,"%d+%d=\n",a,b);
else
goto loop;
}
else if(c == 1)
{
if(a-b>0)
fprintf(fp,"%d-%d=\n",a,b);
else
goto loop;
}
else if(c == 2)
{
x=a*b;
int n = 0;
while(x > 300)
{
if(!n) a /= 2;
else b /= 2;
x = a*b;
}

if(x<300)
fprintf(fp,"%d×%d=\n",a,b);
else
goto loop;
}
else if(c==3)
{
if(a < b)
swapInt(a,b);
if((a % b) == 0)
fprintf(fp,"%d÷%d=\n",a,b);
else goto loop;
}
}
}

void swapInt(int &x,int &y)
{
int a = x;
x = y;
y = a;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式