C語言自定義函數的調用

題目:求a的n次方-b的n次方

#include<stdio.h>
int pow(int begin,int end);
int main(void)
{
	int a,b,n,sum1,sum2;
	scanf("%d %d %d",&a,&b,&n);
	sum1=pow(a,n);//int pow中的return會返回一個值給調用 int pow的地方,因此
//需要設置一個變量來接住這個值,如果不需要這個值,那麼可以把該函數設置成void類型
	sum2=pow(b,n);//
	printf("%d",sum1-sum2); 
	
	
return 0;
}

int pow(int begin,int end)
{
	int sum=1;
	for(int i=0;i<end;i++)
	{
		sum=sum*begin;
	}
	return sum;
}

 自定義函數的函數原型聲明要寫在#預編譯main函數之間, 函數原型聲明要和自定義函數保持一致(最後的分號不能忘)

 函數聲明是可以省略形參名字的,而函數定義則不能。我們拿一個例子來說明

#include<stdio.h>
#include<assert.h>
int add(int,int);//這個是函數聲明,形參名可以省略
int main(int argc,char *argv[])
{
	int a=1,b=2;
	int c;
	printf("add is %d\n",add(a,b));
return 0;
}

int add(int a,int b)//函數定義,不能省略。道理很簡單。
{                    //如果省略形參名的話,在函數體裏該怎麼使用他們呢?
	int c=0;
	c=a+b;//比如這裏,如果我不說int a和int b,我用什麼來表示他們呢?
        return c; //        所以這個時候形參名不能省略		
} 

每個函數在被調用的時候,都會產生相應的複製變量(我們不如把他們稱爲替身演員吧)(術語一點就是傳值?),在調用的函數裏所有操作都是對這些替身演員做的。

替身演員們演的戲,跟我本明星有什麼關係(www)

這也就是普通的swap並不會讓a&b的值swap,只能通過指針來完成這樣的工作。

如果還沒學過指針,就這樣理解吧。真正的a和b都在main中,派到自定義函數裏的只不過是a和b的替身演員(不夠準確,就這樣粗略的理解吧)

 

#include<stdio.h>
void swap(int *a,int *b);
int main(void)
{
    int a=3;
    int b=4;
    swap(a,b);
    printf("a=%d b=%d",a,b);// a=3 b=4
 return 0;
}

void swap(int a,int b)
{
    int j;
    j=a;
    a=b;
    b=j;	
}
#include<stdio.h>
void swap(int *a,int *b);
int main(void)
{
    int a=3;
    int b=4;
    swap(&a,&b);
    printf("a=%d b=%d",a,b);// a=4 b=3
 return 0;
}

void swap(int *a,int *b)
{
    int j;
    j=*a;
    a=*b;
    *b=j;	
}

 

  唯一有紅色字的小標題。(如果你會了鏈表結合例子更好)https://mp.csdn.net/postedit/102489869                     

自定義函數中調用自定義函數 

很顯然是可以的,有一個非常經典的例子就是函數的遞歸。編譯器在編譯的時候,在你的自定義函數A裏發現了一個自定義函數B,編譯器會馬上在你的源代碼文件中尋找這個自定義函數B,找到了以後會把自定義函數A裏的調用自定義函數B語句替換成自定義函數B 的語句

先來一個普通的例子

#include<stdio.h>
void hello();
void world();
int main(int argc,char *argv[])
{
	hello();
return 0;
}

void hello()
{
	printf("hello,");
	world();//在hello自定義函數中調用world自定義函數
} 

void world()
{
	printf("world!");
}
看看輸出的是啥

遞歸應該算是一種特例,調用的函數剛好是它自己本身(itself)。因爲遞歸像一個俄羅斯套娃,我們需要設置一些來讓遞歸在恰當的時機結束(說人話就是要有條件判斷)比如下面的例子,我們輸出0-4。

#include<stdio.h>
void numberPrint(int i);
int main(int argc,char *argv[])
{
	int i=0;
	numberPrint(i);
return 0;
}

void numberPrint(int i)
{
	if(i<5)//這就是我們設置的條件,來讓遞歸在恰當的時候結束
	{
		printf("now i is %d\n",i);
		i++;
		numberPrint(i);
	}
} 

怎麼設置合適的條件呢?我的另一篇關於python自定義函數的blog裏有寫到。Python自定義函數(點一下這裏就進入傳送門了)進去以後往下面翻找函數的遞歸

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章