题目:求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>
#include<assert.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自定义函数(点一下这里就进入传送门了)进去以后往下面翻找函数的递归