請(qǐng)麻煩給解釋下
#include<stdio.h>
int a(int b)
{
? ? int c;//階乘結(jié)果
? ? if(b<0)
? ? {
? ? ? ? printf("輸入錯(cuò)誤!\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;
? ? }
有以下幾個(gè)問題想請(qǐng)教下大家:
由于粗心,沒有在自定義函數(shù)里面添加return語句,但是發(fā)現(xiàn)這樣也可以得到正確的結(jié)果(從網(wǎng)上了解到在c語言中如果沒有return語句,軟件會(huì)默認(rèn)為return 0)如果默認(rèn)為return 0的話,最后的結(jié)果不就應(yīng)該是0嗎,怎么答案還是正確的?
如果把b賦值為負(fù)數(shù),由于return 0的關(guān)系程序輸出的結(jié)果會(huì)為(輸入錯(cuò)誤!
0)怎么把后面的0去除?
2018-06-16
我用VS運(yùn)行了下 結(jié)果是-96? 不太明白其中的道理= =..
2018-03-22
我試運(yùn)行了下你的代碼,(雖然現(xiàn)在我對(duì)于堆棧概念還不理解)但我嘗試將c和d的表達(dá)式換了下位置,所得結(jié)果似乎驗(yàn)證了你的猜想,但
#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;
}
這段代碼所輸出的結(jié)果為7,2;這個(gè)我就理解不了了。
另:你對(duì)問題鍥而不舍地精神值得學(xué)習(xí)
2018-03-21
其實(shí)挺有意思的一個(gè)問題。先回答我能說清楚的。非void型函數(shù)不加return語句絕對(duì)錯(cuò)誤,沒報(bào)錯(cuò)是編譯器比較寬容,大概在一些編譯器那里是錯(cuò)的。

默認(rèn)return 0是哪里說的能給個(gè)鏈接嗎?我覺得return 0是主函數(shù)的默認(rèn)返回值。具體的你再看看。我改成復(fù)述以后是輸入錯(cuò)誤14。你知道指針的概念嗎?如果知道的話,先看看指針和函數(shù)名之間的關(guān)系吧。去掉后面的數(shù)字就把主函數(shù)里的printf換成a(b)就好了。