赞
踩
各位小伙伴们,今天YU同学给大家带来的是与函数相关的知识,本篇将会带着大家初步认识和调用函数来解决一些简单的问题。
函数是C语言的基本单元,函数中包含实现程序功能的代码。
C语言程序的入口位于main()函数之中,为了方便组织配合,调试和运行,一般是用main函数作为主调函数,通过调用其他的函数来实现程序的运行。
他们的关系图如下:
先给大家看看完整的函数代码格式,先有个大概印象
int add(int a,int b);
//这是函数声明,告诉系统有这样一个函数
//注:如果函数写在main函数之前,那这句代码是可以省略的
int add(int a,int b)
{
int c=a+b;
return c;
}
int add(int a,int b)
来说,add前面的int是返回类型,add是函数名,int a 是第一个参数,int b 是第二个参数。函数的声明的告诉编译器有一个函数叫什么,参数是什么,返回类型是什么。但是具体内容还是要看函数内部的功能代码。
形式: 返回类型 函数名 (参数) ;
注意要有";"来结束声明。
在C语言学习中会经常看到这样一句代码return 0;
这也是main函数的最后一句代码,其作用有以下两点:
//int Add5(int n); //这里的函数声明在main函数之前,可以省略上面一行的代码 int Add5(int n) { return n + 5; //看看return后面的语句能不能被执行 printf("能执行的话吱一声"); } int main() { int a = 1,b=0; b = Add5(b); printf("%d", b); return 0; }
return 后面的代码是不会运行的。
参数根据其传送的方式分为形式参数和实际参数两种。
形式参数的作用就算传送数值,它把参数的数值传入函数,但参数本身的值是不会被函数修改的,前面举的例子都是用的形参(形式参数的简称)。
下面给大家看看例子:
void fuc(int n);
//void类型即返回类型为空,不会有返回值,但还是会运行内部的代码。
//这里的声明不能省!函数的定义在main函数下面。
int main()
{
int a = 10;
fuc(a);//将a的值传给了n
printf("%d", a);
return 0;
}
void fuc(int n)//这里是函数的定义
{
n = 0;
}
结果打印a的值为10,没有被fuc()修改成0。
实际参数是通过把参数的地址传到函数内部,函数通过地址直接修改实际变量的值,因此,实际参数是可以通过函数修改的。
这里看看传递实参的效果:
void fuc(int* n); //改动1 n的类型是指针,它存的是实际变量的地址 int main() { int a = 10; fuc(&a); //改动二 &为取地址符,直接获取变量的地址,这里是把a的地址传送到函数内部 printf("%d", a); return 0; } void fuc(int* n)//改动三 其实和改动一是一样的 //这里的变量是n,n的类型是int*,n现在是变量a的地址 { *n = 0; }
对于*n = 0;
*为解引用操作符,可以取出地址里面储存的值这里是把n中储存的地址对应的数赋值为0
运行结果如下,a的值被更改为0
很多时候函数是不需要参数的,没有参数是不会影响函数运行的,一般打印菜单的话是不用设置参数的,这里随便给大家展示一下:
void Member_Menu();
void Member_Menu()
{
printf("*******************\n");
printf("用户管理:>>\n请输入您想进行的操作:\n1.会员添加\n2.会员删除\n3.会员修改\n");
}
运行时函数的功能就是打印菜单。
函数内部是可以再调用其他函数的。如:
void fuc1() { printf("函数1"); } void fuc2() { printf("函数2"); } void fuc3() { fuc1(); fuc2(); } int main() { fuc3(); return 0; }
递归简单来说是自己调用自己,这种调用十分巧妙,它可以用少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。
递推实现的重点:
找到递推公式
设置结束标志
现在给大家展示一下递归的使用:
斐波那契数列:F(0)=1,F(1)=1,F(n) = F(n-1) + F(n-2) (n>=2)
递归版本:
int fib(int n)
{
if (n <= 2)
return 1;
else
return fib(n - 1) + fib(n - 2);
}
非递归版本:
int Fib() { int n,m=1,k,j,i=0; scanf_s("%d", &n); if (n == 0 || 1 == n) i = 1; if (n > 1) { for (k = 1, i = 1; k < n; k++) { j = i;//储存i即n-1 i += m;//n=n-1 +n-2 m = j;//m==f(n-2)变成n-1,也就是下一个的n-2 } } printf("%d", i); }
简单对比一下给大家看看二者的区别,不过这里的递归只是以最低要求(完成任务)来写的,实际上这样写道话质量是很低的,这点下一次我们会详细说明的。
今天给大家带来的是简单的函数介绍,让大家简单了解函数声明,两种参数变量以及函数的调用方法。
非常感谢大伙们的耐心阅读(如果内容还可以的话能不能给个小心心鼓励一下YU同学),如果对内容有不明白的可以在评论区直接提问,如果是文章有错误的也还请大佬们指导一番,谢谢大家,这段时间我们一起努力吧,YU同学一定会和大家一起进步的!加油,追梦人!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。