c语言问题,高手请进!
以下是一个求两个数的最大公约数,最小公倍数的一个小程序,请高手看一下,我的问题是:当输入1,2,和输入两个相同的数是,为什么程序出错了呢?for(g=1;g<(x+y)/...
以下是一个求两个数的最大公约数,最小公倍数的一个小程序,请高手看一下,我的问题是:当输入1,2,和输入两个相同的数是,为什么程序出错了呢?
for(g=1;g<(x+y)/2;g++)
if((x%g==0)&&(y%g==0))
i=g;为什么这句具体是怎么运行的?这个程序怎么改进?
程序如下:
#include <stdio.h>
#include <math.h>
void main()
{
int zdgys(int x,int y);
int zxgbs(int e,int f);
int a,b,c,d;
scanf("%d,%d",&a,&b);
c=zdgys(a,b);
d=zxgbs(a,b);
printf("zdgys is %d\n",c);
printf("zxgbs is %d\n",d);
}
int zdgys(int x,int y)
{int i,g;
for(g=1;g<(x+y)/2;g++)
if((x%g==0)&&(y%g==0))
i=g;
return(i);
}
int zxgbs(int e,int f)
{int s,g,i;
for(g=1;g<(e+f)/2;g++)
if((e%g==0)&&(f%g==0))
i=g;
s=e*f/i;
return(s);
}
谢谢你们对我的帮助,我编的这个程序确实很垃圾,很感谢yang83980901当面指出我的缺点,我已经把这个程序改进了,运行的很好,我这个程序错在调用函数的定义上,int i,g;
for(g=1;g<(x+y)/2;g++)这里有错,1+2=3;3/2=1.5,但我定义g是整型的,所以运行是出错了! 展开
for(g=1;g<(x+y)/2;g++)
if((x%g==0)&&(y%g==0))
i=g;为什么这句具体是怎么运行的?这个程序怎么改进?
程序如下:
#include <stdio.h>
#include <math.h>
void main()
{
int zdgys(int x,int y);
int zxgbs(int e,int f);
int a,b,c,d;
scanf("%d,%d",&a,&b);
c=zdgys(a,b);
d=zxgbs(a,b);
printf("zdgys is %d\n",c);
printf("zxgbs is %d\n",d);
}
int zdgys(int x,int y)
{int i,g;
for(g=1;g<(x+y)/2;g++)
if((x%g==0)&&(y%g==0))
i=g;
return(i);
}
int zxgbs(int e,int f)
{int s,g,i;
for(g=1;g<(e+f)/2;g++)
if((e%g==0)&&(f%g==0))
i=g;
s=e*f/i;
return(s);
}
谢谢你们对我的帮助,我编的这个程序确实很垃圾,很感谢yang83980901当面指出我的缺点,我已经把这个程序改进了,运行的很好,我这个程序错在调用函数的定义上,int i,g;
for(g=1;g<(x+y)/2;g++)这里有错,1+2=3;3/2=1.5,但我定义g是整型的,所以运行是出错了! 展开
展开全部
你这这一步错了cost=10+(mile-3)*2+((minutes*60+seconds)/300)*2;因为你minutes和second都是int的,当你除以一个整形后它会取整,例如
c=a/100,当a为int型且a=580时,c的值会是5,而不是你所想的5.8,所以这题你只要把minutes和second改为double型就行了(
int
minutes,
seconds;改为
double
minutes,
seconds;及
scanf("%lf%d%d",
&mile,
&minutes,
&seconds);
改为scanf("%lf%lf%lf",
&mile,
&minutes,
&seconds);)
c=a/100,当a为int型且a=580时,c的值会是5,而不是你所想的5.8,所以这题你只要把minutes和second改为double型就行了(
int
minutes,
seconds;改为
double
minutes,
seconds;及
scanf("%lf%d%d",
&mile,
&minutes,
&seconds);
改为scanf("%lf%lf%lf",
&mile,
&minutes,
&seconds);)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include <stdio.h>
#include <math.h>
int zdgys(int x,int y);
int zxgbs(int e,int f);
void main()
{
int a,b,c,d;
scanf("%d", &a);
scanf("%d", &b);
c = zdgys(a,b);
d = zxgbs(a,b);
printf("zdgys is %d\n", c);
printf("zxgbs is %d\n", d);
getchar();
getchar();
}
int zdgys(int x, int y)
{
int i, g;
for(g=1; g<=(x+y)/2; g++)
{
if( (x%g == 0) && (y%g == 0) )
{
i=g;
}
}
return i;
}
int zxgbs(int e, int f)
{
int s, g, i;
for(g=1; g<=(e+f)/2; g++)
{
if( (e%g==0) && (f%g==0) )
{
i=g;
}
}
s = e * f / i;
return s;
}
看看改动了什么。你的编程风格太差了,既没空行,又没空格,让我编辑了半天。
我用你说的值试了都没问题啊,调试命令:F10单行执行,F11进入函数,F9设置断点,F5进入调试模式
#include <math.h>
int zdgys(int x,int y);
int zxgbs(int e,int f);
void main()
{
int a,b,c,d;
scanf("%d", &a);
scanf("%d", &b);
c = zdgys(a,b);
d = zxgbs(a,b);
printf("zdgys is %d\n", c);
printf("zxgbs is %d\n", d);
getchar();
getchar();
}
int zdgys(int x, int y)
{
int i, g;
for(g=1; g<=(x+y)/2; g++)
{
if( (x%g == 0) && (y%g == 0) )
{
i=g;
}
}
return i;
}
int zxgbs(int e, int f)
{
int s, g, i;
for(g=1; g<=(e+f)/2; g++)
{
if( (e%g==0) && (f%g==0) )
{
i=g;
}
}
s = e * f / i;
return s;
}
看看改动了什么。你的编程风格太差了,既没空行,又没空格,让我编辑了半天。
我用你说的值试了都没问题啊,调试命令:F10单行执行,F11进入函数,F9设置断点,F5进入调试模式
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
为什么不用辗转相除法
#include<stdio.h>
int gy(int a,int b)
{int t;
if(a<b)
{t=a;
a=b;
b=t;}
t=a%b;
while(t)
{a=b;
b=t;
t=a%b;
}
return(b);
}
int gb(int a,int b,int c)
{c=a*b/c;
return(c);
}
main()
{int x,y,c;
scanf("%d%d",&x,&y);
c=gy(x,y);
printf("gongyue=%d\n gongbei=%d\n",c,gb(x,y,c));
}
你的程序在g=1的时候就满足 if((x%g==0)&&(y%g==0)) 那个时候就返回值了 不会再继续循环
#include<stdio.h>
int gy(int a,int b)
{int t;
if(a<b)
{t=a;
a=b;
b=t;}
t=a%b;
while(t)
{a=b;
b=t;
t=a%b;
}
return(b);
}
int gb(int a,int b,int c)
{c=a*b/c;
return(c);
}
main()
{int x,y,c;
scanf("%d%d",&x,&y);
c=gy(x,y);
printf("gongyue=%d\n gongbei=%d\n",c,gb(x,y,c));
}
你的程序在g=1的时候就满足 if((x%g==0)&&(y%g==0)) 那个时候就返回值了 不会再继续循环
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
垃圾
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询