C++求助right operand has type 'void'是什么错误?
题目如下:求两个正整数的最大公约数和最小公倍数。⑵要求编写两个函数,分别求最大公约数和最小公倍数,在主函数中输出结果。⑶思路①求最大公约数函数中,使用辗转相除法完成功能。...
题目如下:
求两个正整数的最大公约数和最小公倍数。
⑵ 要求
编写两个函数,分别求最大公约数和最小公倍数,在主函数中输出结果。
⑶ 思路
① 求最大公约数函数中,使用辗转相除法完成功能。
② 最小公倍数等于两个正整数乘积除以最大公约数,因此可以在求最小公倍数函数中调用求最大公约数函数,形成函数嵌套调用。
如果使用没有返回值函数,通过定义全局变量定义也可以完成本题要求功能,如何实现?
程序:
#include <iostream>
using namespace std;
int maximum;
int minimum;
void x(int k,int j)
{
int r;
while(r!=0)
{
r=k%j;
k=j;
j=r;
maximum=k;
}
}
void y(int k,int j)
{
int s;
s=(k*j)/x(k,j);
minimum=s;
}
int main()
{
int k,j;
cout<<"输入两个正整数:"<<endl;
cin>>k;
cin>>j;
cout<<"最大公约数为:"<<maximum<<endl;
cout<<"最小公倍数为:"<<minimum<<endl;
return 0;
}
显示错误
error C2297: '/' : illegal, right operand has type 'void'
请问哪里出了错?该如何改正?? 展开
求两个正整数的最大公约数和最小公倍数。
⑵ 要求
编写两个函数,分别求最大公约数和最小公倍数,在主函数中输出结果。
⑶ 思路
① 求最大公约数函数中,使用辗转相除法完成功能。
② 最小公倍数等于两个正整数乘积除以最大公约数,因此可以在求最小公倍数函数中调用求最大公约数函数,形成函数嵌套调用。
如果使用没有返回值函数,通过定义全局变量定义也可以完成本题要求功能,如何实现?
程序:
#include <iostream>
using namespace std;
int maximum;
int minimum;
void x(int k,int j)
{
int r;
while(r!=0)
{
r=k%j;
k=j;
j=r;
maximum=k;
}
}
void y(int k,int j)
{
int s;
s=(k*j)/x(k,j);
minimum=s;
}
int main()
{
int k,j;
cout<<"输入两个正整数:"<<endl;
cin>>k;
cin>>j;
cout<<"最大公约数为:"<<maximum<<endl;
cout<<"最小公倍数为:"<<minimum<<endl;
return 0;
}
显示错误
error C2297: '/' : illegal, right operand has type 'void'
请问哪里出了错?该如何改正?? 展开
3个回答
展开全部
老兄,这样的低级错误也犯???!!!
'/' : illegal, right operand has type 'void' 说得很明白,被除数的类型为void,除("/")允许的右操作数类型有:int, long, float,double,而你的x函数没有返回值,而是直接修改全局变量。
修改方法很简单,先调用x函数,再除以全局变量就行了。
y函数改成:
void y(int k, int j)
{
int s = k * j;
x(k,j);
minimum = s / maximum;
}
PS: LZ应该是初学者吧,即使按照上面的方法修改,程序依然输出最大公约数和最小公倍数都是0!!!!
因为你在main函数中根本没有调用 y 函数!
再在main函数中修改:
cin>>k;
cin>>j;
y(k, j); //加上函数调用才行,无需调用x,因为y中已经调用
cout<<"最大公约数为:"<<maximum<<endl;
cout<<"最小公倍数为:"<<minimum<<endl;
'/' : illegal, right operand has type 'void' 说得很明白,被除数的类型为void,除("/")允许的右操作数类型有:int, long, float,double,而你的x函数没有返回值,而是直接修改全局变量。
修改方法很简单,先调用x函数,再除以全局变量就行了。
y函数改成:
void y(int k, int j)
{
int s = k * j;
x(k,j);
minimum = s / maximum;
}
PS: LZ应该是初学者吧,即使按照上面的方法修改,程序依然输出最大公约数和最小公倍数都是0!!!!
因为你在main函数中根本没有调用 y 函数!
再在main函数中修改:
cin>>k;
cin>>j;
y(k, j); //加上函数调用才行,无需调用x,因为y中已经调用
cout<<"最大公约数为:"<<maximum<<endl;
cout<<"最小公倍数为:"<<minimum<<endl;
展开全部
s=(k*j)/x(k,j);
错误在这里,你这个/后面的除数是个函数,但是这个函数返回类型是void,不能作为除数呀
错误在这里,你这个/后面的除数是个函数,但是这个函数返回类型是void,不能作为除数呀
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
把void x(int k,int j ),改为int x(int k,int j),并在函数体中加入return maxium;就OK了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询