c语言问题,高手请进!

以下是一个求两个数的最大公约数,最小公倍数的一个小程序,请高手看一下,我的问题是:当输入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是整型的,所以运行是出错了!

第1个回答  2019-06-13
你这这一步错了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);)
第2个回答  2007-12-11
#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进入调试模式本回答被提问者采纳
第3个回答  2007-12-11
为什么不用辗转相除法

#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)) 那个时候就返回值了 不会再继续循环
第4个回答  2007-12-11
一楼的可以运行啊
第5个回答  2007-12-11
垃圾

C语言高手请进来11
第一题:运行后,循环第一轮后输出8,第二轮后输出7,第三轮输出6,第四轮时达到要求退出循环,结束程序。选B 第二题:这个是找出小于等于50的整数中能被2、3、7整除的数,这个题直接从答案里找一个,所以选C 第三题:运行到这个时for(j=0;j < 3;j++){ if(j%2) continue;x++;} x++ ...

编程高手请进!(C语言)
printf("\\n NEXT?(Y\/N):");\/*选择是否重新游戏*\/ scanf("%c",&yes);} } 2.include <stdio.h> void main(){ int gj, mj, xj, t1, t2;for (gj=1; gj<=20; gj++){ for (mj=1; mj<34; mj++){ xj=100-gj-mj;t1=xj%3;t2=5*gj+3*mj+xj\/3;if (t1==0&&t2==100...

C语言高手请进啊,高分哦,详细的解释!!!
定义的数组为二维。所以 p[1] 是第二行的全部元素 即 France 另外它不是省略的 p[1][0],两者不同,前者是一行,后者是一个 另外,你可以从c语言的打印方式看出,前者 %s 是打印字符串 后者 %c 是打印字符(一个)希望对你有帮助啊!

C语言编程问题.请高手进(附源码)!!!HELP
printf("请输入菜名,按回车键结束\\n");scanf("%s",A);printf("\\n请输入拼音码(菜名首字母)&编码&价格{回车确定}\\n");scanf("%s%d%f",c,&d,&e);printf("此款菜:类别为%d,编码为%d,拼音吗为%s,菜名为%s,价格为%f\\n是否正确?(正确请输入1,否则按任意键退出):",b,d,c,A,e);scan...

c语言高手请进
include <stdio.h> int main(){ int i,j,k;for(i=0;i<9;i++){ for(j=0;j<9;j++){ for(k=0;k<9;k++){ if((i+j+k)<10 && i!=0)printf("%d%d%d ",i,j,k);} } } return 0;} 都类似的,只要改改if里的条件就可以了...q币啊.....

高分C语言问题~~·高手请进
思路:A[n]中,n代表有多少堆果子,A中的元素代表各堆的果子数目 int getValue(int A[]){ 初始 int S=0 1. (数组A)n个数字从小到大排序 (例如:1,2,9)2. 取上步中最小的两个数相加之和为一个M , S=S+M 3. 数组A中除去最小的两个数,然后将M加进去形成一个新数组A元素个数为 n...

C语言高手请进~~~
static struct s a[3]={1,&a[1],2,&a[2],3,&a[0]},这里定义了一个 结构数组a ,并且将其初始化了,其中a[0]={1,&a[1]},a[1]={2,&a[2]} a[2]={3,&a[0]},后面ptr = &a[1];就是让ptr指向a[1],所以ptr的值就是{2,&a[2]},也就是ptr->i1=2,答案d又...

c语言问题,高手请进谢谢!!!
即i+i--->这两个i些时都是3;而不是一个2,一个3;4。再一个++i 此时i加1得到i,i=3+1=4;由上面的理解知道i此时已经是4,5、由上面四步得到一个i=4,i+i+i的式子,写入数据得到12 今天上课还在纠结这个问题,一看到你的问题突然想起来了!呵呵 ...

几道c语言题目,还请高手不吝赐教,谢谢!不要嫌烦哈……
c=a;printf("a=%d b=%d c=%d\\n",a,b,c);程序的输出结果是()。A.a=10 b=50 c=10 B.a=10 b=50 c=30 C.a=10 b=30 c=10 D.a=50 b=30 c=50 答案:A 我认为是C,求教……if(a>b) 是不成立的,后面的语句不运行!a,b,c值不变 ...

c语言高手请进来...
void copy(char *f,char *t);int main(){ char a[]="iamaman"; \/\/ 要改成数组,原先那样定义的是指向常量的指针,是不允许修改的。char b[]="youareaman"; \/\/同上 printf("a=%s \\nb=%s \\n",a,b);copy(a,b);printf("a=%s b=%s ",a,b);getchar(); \/\/改成getchar ...

相似回答
大家正在搜