慕牧羊6158366
2018-03-21 16:32
#include<stdio.h>
int a(int b)
{
int c;//阶乘结果
if(b<0)
{
printf("输入错误!\n");
}
else if(b==0||b==1)
{
c=1;
}
else
{
c=a(b-1)*b;
}
}
int main()
{
int b=5;
printf("%d\n",a(b));
return 0;
}
有以下几个问题想请教下大家:
由于粗心,没有在自定义函数里面添加return语句,但是发现这样也可以得到正确的结果(从网上了解到在c语言中如果没有return语句,软件会默认为return 0)如果默认为return 0的话,最后的结果不就应该是0吗,怎么答案还是正确的?
如果把b赋值为负数,由于return 0的关系程序输出的结果会为(输入错误!
0)怎么把后面的0去除?
我用VS运行了下 结果是-96 不太明白其中的道理= =..
我试运行了下你的代码,(虽然现在我对于堆栈概念还不理解)但我尝试将c和d的表达式换了下位置,所得结果似乎验证了你的猜想,但
#include<stdio.h>
int a(int b)
{
int c=4*b-1;
printf("%d\n",c);
}
int main()
{
int b=2;
printf("%d\n",a(b));
return 0;
}
这段代码所输出的结果为7,2;这个我就理解不了了。
另:你对问题锲而不舍地精神值得学习
其实挺有意思的一个问题。先回答我能说清楚的。非void型函数不加return语句绝对错误,没报错是编译器比较宽容,大概在一些编译器那里是错的。
默认return 0是哪里说的能给个链接吗?我觉得return 0是主函数的默认返回值。具体的你再看看。我改成复述以后是输入错误14。你知道指针的概念吗?如果知道的话,先看看指针和函数名之间的关系吧。去掉后面的数字就把主函数里的printf换成a(b)就好了。
C语言入门
926895 学习 · 21509 问题
相似问题