c语言的一个算法问题
发布网友
发布时间:2024-07-07 08:56
我来回答
共5个回答
热心网友
时间:2024-08-10 14:21
你先定义了一个无返回值的空类型函数fun(),这个函数先定义一个整形数a,初值为零。每次运行函数,都使a值增加2并赋值到a,然后再打印出a。执行主函数时,
当cc从1
自增加到3
会循环3次
也就是执行3次fun()函数,所以输出的为
2
4
6
热心网友
时间:2024-08-10 14:13
你循环里面的内容写错了,应该是p=q%b;q=b;b=p;同样的下面那个循环也一样,还有while判断前面那部分可以去掉,因为两个数相等取余为零,再下一个循环时会推出的,手机上不能帮你改代码……
热心网友
时间:2024-08-10 14:15
哈哈,我也是一个初学者,程序我帮你修正了,并加了说明,你自己看一下吧!
#include <stdio.h>
#include <math.h>
main()
{
int p,q,a,b;
printf("Please enter the p and q:\n");
scanf("%d%d",&p,&q); //注意这里输入一个数值后,要加一个空格在输入另一个数。
if (p>q)
{
b=p%q;
//这个循环也有问题,是一个死循环,因为b!=0在while中不是可能实现的。而且这数值互换也有问题 。
while(b!=q&&b!=0) //q&&b这一步不多余,因为q做为除数不可以为0。如果要去了,就必需在前面判定q!=0;
{
p=q;
q=b;
b=p;
break; //跳出循环。
}
printf("它们的最大公约数是%d",q);
}
else if(p<q)
{
a=q%p;
while(a!=p&&a!=0)
{
q=p;
p=a;
a=q; //这里同样要加一个变量,实现数值互换!
break; //跳出循环。
}
printf("它们的最大公约数是%d",p);
}
else if (p=q)
{
printf("它们的最大公约数是%d",p);
}
}
程序是没问题了,不过很让人失望的是这个程序并不是所有数都可以求出最大公约数。程序从开始设计时就有问题了。我通常求最大公约数时,使用的是for()循环,一直到整除后跳出。
热心网友
时间:2024-08-10 14:16
循环体里面把a赋值给P。肯定a=p成立。。所以第二次循环就必定结束循环吧。。
辗转相除是这样的:
m和n是要做出公约数的2个数且m>n成立
do
{
r = m%n;
m = n;
n = r;
}
while (r);
热心网友
时间:2024-08-10 14:20
哦歇特。。
怎么感觉你这个编程思路有bug阿
走一遍吧
譬如p=64 q=24
公约数应该是8吧(公约数概念都忘记了汗)
那么
if (p>q)
{
b=p%q;
while(b!=q&&b!=0)
{
p=q;
q=b;
}
printf("它们的最大公约数是%d",q);
}
进到这里
b=64约24=16
p=q=24
q=b=16
然后因为满足b!=q&&b!=0
继续循环
p=q=16
q=b=16
因为b==q了所以退出循环
。。。。
最后显示q=16
貌似改这样
#include <stdio.h>
#include <math.h>
main()
{
int p,q,a,b;
printf("Please enter the p and q:\n");
scanf("%d%d",&p,&q);
if (p>q)
{
b=p%q;
while(b!=0)
{
p=q%b;
q=b;
b=p;
}
printf("它们的最大公约数是%d",q);
}
else if(p<q)
{
a=q%p;
while(a!=0)
{
p=q%a;
q=a;
a=p; }
printf("它们的最大公约数是%d",p);
}
else if (p=q)
{
printf("它们的最大公约数是%d",p);
}
}
分给一楼吧