函数学习总结

本文详细介绍了函数的基础概念,包括定义、声明与参数传递等,并深入探讨了递归函数的应用及其实现方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

函数学习总结

一.函数的定义

函数定义的语法形式

数据类型  函数名(形式参数表)

{

   函数体  //执行语句

}

注意事项

  • 函数的数据类型是函数的返回值类型(若数据类型为void类型,则无返回值)。

如:intmax(int a)或者 void max(int  n)

  •  形式参数(形参)表可以是空的(既无参函数),多个形参用逗号隔开,但是每一个都必须写明形参类型,类型相同也不可省略。形参可以是变量名,数组名或者指针名。

如:intmax(int a,int b,int c)

  •  不管有没有参数,函数名后面的圆括号必须有
  • 函数不允许嵌套定义!但是!允许嵌套使用
  •  函数的形式从结构上说可以分为三种:无参函数,有参函数和空函数
  • 无参函数一般不需要带回返回值,所以函数类型说明为void。
  •  有参函数有参数传递,一般需要带回返回值。
  • 空函数即函数体只有一对花括号,花括号内什么也没有。
  • 例如    函数名()

{  }

空函数不完成什么工作,只占据一个位置。在大型程序设计中,空函数用于扩展函

数功能

二.函数的声明和参数传递

  • 如果实现功能的函数写在主函数后面,调用函数之前,要在主函数之前提前做一个声明

例如     int prime(int x);

如此即可,计算机才会执行和分配空间。

  • 在参数传递的时候,只是把实参的内容赋值给形参,之后它的变化情况跟实参毫无关系。

例如  void swap(char a,char b)

{ char t; t=a;a=b;b=t;} 只是交换了函数的形参a和b,并没对实参产生影响。这也就是我们所说的传数值形式。

  • 当函数的数值需要传递给实参或者函数的返回值不止一个的时候,就需要调用以下方式:1.传地址   2.传引用

传地址

在定义函数的时候,将形参定义成指针,这时形参指向实参的存储空间,在改变形参的同时,实参数值也会改变。

指针变量:其内容为地址,简称指针。指向的地址的变量叫目标变量。

传引用

类型名 & 引用名 = 某变量名,计算机不会给这个类型名 & 引用名再分配新的存储空间,它就是实参的另一种表达方式,相当于直接改变实参数值,也能达到上述目的。

  • 数组与指针

数组也可以用指针来表示,数组名代表了数组的起始地址;数组的指针其实就是数组的起始地址。数组元素的指针就是数组元素的地址

由此,我们可以通过对指针的自加自减来指向数组的前后元素。

例如   int a[10],*p; p=a;(此时p就指向a[0]元素)  所以p+1=a[1];通过指针的加减实现对数组的操作方便快捷。

 在操作的时候,实参和形参可以在指针变量和数组名之间随意选择。

三.递归函数

  • 递归函数就是在调用函数的时候再对自身进行调用,把复杂问题分解,直至不能在分解,也就是答案或者解决办法一眼就能看得出。

例如 

 leicheng(int a)

{if(a==0||a==1) return 1;

       else return n*leicheng(n-1);}

这样就可以用简单的方法实现复杂的问题。

例题

1. 求从1加到n的阶乘的和,输入n的值。(函数

#include<iostream>

using namespace std;

int jch(int m)

{

   int i,jc=1,sum=0;

   for (i=1;i<=m;i++)

   {

       jc*=i;

       sum+=jc;

   } return sum;

}

int main()

{

    int a;

    cin>>a;

    cout<<jch(a)<<endl;

    return 0;

}

2.  递归见上面例子。

3.  输入和输出数组(用指针变量

 #include<bits/stdc++.h>

using namespace std;

int main()

{

    inta[10],i;

    int*p;

   for(i=0;i<10;i++) cin>>a[i];

   for(p=a;p<a+10;p++) cout<<*p<<'\t';

   return 0;

}

 感悟:

    学完这节程序设计,我最大的感悟就是这门课好难啊,其实说难也不难,就是我没有理解,我觉得函数还好写,但是到了递归,就很难了,主要是吃不透,而且上课讲的例子都挺简单的,到了练习题的时候,就连解题思路都没有,这就比较绝望了。递归,我存在的问题就是找不出层叠关系,不能分解问题组成,我也不知道这时不是数学方法没学好的原因,而且应该是不止我一个,从做题情况来看就能知道还有很多同学对这节的理解还不够,所系我也希望老师能拿两个作业题来讲一讲,让我们理解的更深一些。

     如果说还有问题的话,那就是指针变量和参数传递那个地方有点晕,不明白指针什么时候加星号,什么时候用&地址等等。不过这个就算是小问题了,通过自己多看看书,多做点题就可以自己弄懂,搞明白。

     希望自己可以多多学习,早点学会并且熟练运用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值