事情是这样的,我在刷题的过程中写了两个返回值是整型的函数来求两个数的最大公因数和最小公倍数,但是由于粗心求最小公倍数的函数中缺少了return语句,但在DevC++中得到了正确的结果。代码如下
#include<stdio.h>
int fun1(int a, int b)
{
int i,t=1;
for(i=1;(i<=a)||(i<=b);i++)
{
if((a%i==0)&&(b%i==0))t=i;
}
return t;
}
int fun2(int a,int b)
{
int t,r;
t=fun1(a,b);
r=a*b/t;
}
int main()
{
int a,b;
scanf("%d%d",&a,&b);
printf("%d %d",fun1(a,b),fun2(a,b));
return 0;
}
于是我就很好奇整型函数缺少return语句的返回值是什么。
经过不严谨的测试之后,我似乎找到了一些规律,还希望各位大神能指正我的错误或是帮我解答一下。
在DevC++中有如下规律:
(一)一般情况下,返回值都为1。
#include<stdio.h>
int fun1()
{
}
int fun2()
{
int a;
a=2;
}
int main()
{
printf("%d %d",fun1(),fun2());
return 0;
}
(二)若缺少return语句的函数调用了正常的整型函数,则返回值为被调用的那个整型函数的值。
#include<stdio.h>
int fun1()
{
return 2;
}
int fun2()
{
fun1();
}
int main()
{
printf("%d %d",fun1(),fun2());
return 0;
}
(三)若缺少return语句的调用了正常的整型函数,且进行了运算并将运算结果赋给了一个变量(若无赋值语句则出现第二条规律的情况),则返回值为赋给变量的值。
#include<stdio.h>
int fun1()
{
return 2;
}
int fun2()
{
int a=fun1()*3;
}
int main()
{
printf("%d %d",fun1(),fun2());
return 0;
}
(四)若有多条第三条规律中的赋值语句,则返回值为最后一条赋值语句中赋给变量的值。
#include<stdio.h>
int fun1()
{
return 2;
}
int fun2()
{
return 3;
}
int fun3()
{
int a=fun1()*5;
int b=fun2()*7;
}
int main()
{
printf("%d %d %d",fun1(),fun2(),fun3());
return 0;
}
本人才疏学浅,实在搞不清楚其中原理是什么,还望各位大神不吝赐教。