題目:求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自定義函數(點一下這裏就進入傳送門了)進去以後往下面翻找函數的遞歸