函数心得

  浅谈函数应用



函数存在的意义: 

把main函数中复杂的逻辑进行拆分,由一个一个单独的函数来处理一个单独的模块,main函数只是起到宏观调控作用


我们可以自己编写一些函数,实现某些功能,把函数的声明放在.h文件里,把函数的定义即实现放在.m文件里,然后在main.m文件里的main函数里调用实现,但是调用之前一定不要忘记把自己写的文件导入即导入头文件,导入自己编写的头文件用#import "",导入系统头文件用#import <>


此外,一个函数最多不要超过60行代码,20 到 40行最好,一个文件里代码行数最多最好不要超过300行,如果过多了不太好找

 

2,  函数的定义 : 包含四部分
 1), 返回值类型 (要返回的数据类型)
 2), 函数名 (给函数起一个名字用于唯一标识函数)  命名规范: 有多个单词组成,除了第一个单词外,其余     单   词首字母大写 (工程名 也由单词组成,并且每个单词首字母都应该大写)
 3), 参数列表 (用来接收传入的数据)
 4), 函数体 (函数真正的功能,实际做的操作)

 

3,  函数的使用分为三部分
 1), 函数的声明,  (写在.h文件中)
 2), 函数定义, (函数的实现)(写在.m文件中)
 3), 函数的调用, (在main.m文件中的main函数中实现调用)

 

函数声明和函数定义相比,只是缺少了函数体,并且在最后加了分号

为了更清晰:     一个函数用来实现一个单独的功能,在函数内部只写与函数功能有关的代码即可

 

4,  函数定义有四种格式:


  1), 函数定义的第一种格式:  无参数,无返回值   (无返回值时用void)
 
void like ()
{
    printf("I like learning ios \n");
}
  2), 函数定义的第二种格式:  有参数,无返回值   (无返回值时用void)

  3), 函数定义的第三种格式:  无参数,有返回值   有返回值时
 int giveMoney()
{
    printf("继续加油,\n");
    return 100; 
}

return 用于返回值,将返回的数据放在return后面,  谁调用该函数,就将该值返回给谁
    切记不要把代码放在return后面,会执行不到

 

 4),  函数定义的第四种格式:  有参数,有返回值


5, 实参 与 形参


 实参是实际参数,真实的具体的值,即函数调用时给定的参数叫做实参
 形参是形式参数,只用来表示接收什么类型的数据,具体的存储数据未知,即在函数定义时给定的参数是形参
此外切记函数调用时,实参到形参的传递是一个拷贝的过程,   函数与函数之间可嵌套调用,但不可以嵌套定义;


6, 有关变量的作用域

在函数内部定义的变量,只能在函数内部有效,在函数外部,无权访问,所以叫局部变量,(当函数调用时,为变量开辟空间,当函数执行完毕宏,系统回收空间 

全局变量,在所有函数中都可以访问到,程序运行期间空间不收回

被static修饰的变量,为静态变量,其特点为:
     1), 空间只开辟一次,而且在云期间空间不回收
     2), 变量只初始化一次
     3), 如果不赋初值,默认为0;

### MATLAB 调用函数示例 MATLAB 中的函数可以通过多种方式实现调用,下面给出几个具体的例子。 #### 示例 1:简单函数调用 假设我们需要定义一个函数 `addNumbers` 来计算两个数的和,并在主程序中调用它: ```matlab % 定义 addNumbers 函数 function sum = addNumbers(a, b) sum = a + b; end % 主程序调用 addNumbers 函数 result = addNumbers(5, 7); disp(result); % 显示结果为 12 ``` 在这个例子中,`addNumbers` 是一个简单的加法函数[^1]。通过传入参数 `a` 和 `b`,可以得到两者的和并返回给变量 `sum`。 --- #### 示例 2:带循环的复杂函数调用 如果需要在一个循环中多次调用某个函数,比如求一系列数值的平方根,则可以这样操作: ```matlab % 定义 squareRoot 函数 function root = squareRoot(num) root = sqrt(num); end % 使用 for 循环调用 squareRoot 函数 for i = 1:5 result(i) = squareRoot(i * 10); end disp(result); % 显示数组 [3.1623 4.4721 5.4772 6.3246 7.0711] ``` 在此案例中,`squareRoot` 计算输入值的平方根,并通过循环依次处理多个数据点[^1]。 --- #### 示例 3:嵌套函数调用 当一个函数内部又调用了另一个自定义函数时,称为嵌套调用。以下是具体实现方法之一——利用独立 M 文件的方式完成嵌套调用。 ##### 子函数文件 `gcd.m` ```matlab function output = gcd(a, b) while b ~= 0 temp = b; b = mod(a, b); a = temp; end output = a; end ``` ##### 主函数文件 `mainFunction.m` ```matlab x = 54; y = 24; % 调用 gcd 函数 result = gcd(x, y); disp(result); % 输出结果为 6 ``` 这种情况下,`gcd` 函数被保存为单独的一个 `.m` 文件,而主程序则负责调用该函数来获取最终的结果[^2]。 --- #### 示例 4:子函数形式下的嵌套调用 另一种常见的做法是在单个 M 文件内定义多个子函数。例如: ```matlab function [] = mainProgram() x = 54; y = 24; % 调用子函数 gcdSub result = gcdSub(x, y); disp(result); % 输出结果为 6 end function output = gcdSub(a, b) while b ~= 0 temp = b; b = mod(a, b); a = temp; end output = a; end ``` 在这里,`gcdSub` 是作为 `mainProgram` 的子函数存在,两者共享同一份代码文件。 --- #### 示例 5:实际工程应用中的综合调用 考虑一个通信系统的仿真场景,其中涉及 QAM 调制与解调过程。按照惯例,每种功能都应分别设计成独立的小型模块化函数,随后由顶层脚本统一管理这些组件之间的交互关系。 假设有以下几个核心部分: 1. **QAM 调制** 2. **QAM 解调** 3. **二进制序列转换** 对应的伪代码可能如下所示: ```matlab % 创建顶层测试脚本 testQAMSystem.m binaryData = randi([0, 1], 1, 8); % 随机生成比特流 modulatedSignal = qamModulate(binaryData); % 调用 QAM 调制器 demodulatedData = qamDemodulate(modulatedSignal); % 调用 QAM 解调器 if isequal(binaryData, demodulatedData) disp('成功恢复原始信号'); else disp('失败'); end % 单独保存各子函数至不同 .m 文件 function outSig = qamModulate(inBits) ... end function outBits = qamDemodulate(inSig) ... end ``` 注意,为了确保所有依赖项都能正常加载运行,需提前配置好工作目录路径[^3]。 --- ### 实验总结与心得体会 通过对以上实例的学习实践可知,合理运用 MATLAB 提供的功能可以帮助简化编程流程、提升效率。特别是针对较为复杂的工程项目而言,采用分层架构的思想尤为重要;即将整体任务拆分为若干相对独立却又彼此关联的任务单元(即各个小规模函数),从而便于后续调试优化以及扩展升级。 此外还需强调一点,无论采取何种策略实施函数间协作机制,始终要遵循良好的命名习惯及文档记录原则,这不仅有助于自己日后回顾理解已有成果,也能方便团队成员之间交流沟通。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值