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

发布了42 篇原创文章 · 获赞 23 · 访问量 2340

猜你喜欢

转载自blog.csdn.net/qq_40710190/article/details/101392915