当前课程知识点:高级语言程序设计 >  函数 >  7.1 为什么要自定义函数 >  为什么要自定义函数

返回《高级语言程序设计》慕课在线视频课程列表

为什么要自定义函数在线视频

为什么要自定义函数

下一节:函数的定义

返回《高级语言程序设计》慕课在线视频列表

为什么要自定义函数课程教案、知识点、字幕

大家好 本讲介绍为什么要自定义函数

在前面学习的C程序中

都是把所有的代码写在main函数中

如果程序的功能比较多 规模比较大

就会使得程序既不容易阅读

也不容易修改

更不可能是稳定可靠的

大家来看一个实例

编写程序

从键盘输入两个正整数m n

求这两个正整数的组合数

这是组合数公式

请看源代码

在这个C程序中

求阶乘的代码出现了6次

如果需要多次求两个数的组合数

程序的规模会更大

势必会加大程序维护的难度

以及程序出错的可能性

我们能否将完成上述求阶乘功能的代码

包装成一个单元

可以供其他代码来调用

C语言提供了子函数机制可以实现

子函数是封装并予以命名的一段程序代码

这段程序代码完成子函数所定义的功能

可供其它代码调用

调用者只需要关心代码能完成什么功能

如何调用代码

而不需要关心代码的内部实现

回到上个程序

我们可以设计一个子函数fact

用于计算一个整数的阶乘

在main函数需要计算阶乘处调用fact函数

子函数有一个很重要的特点

调用者只需要关心子函数接口

不必了解子函数内部实现机制

在设计子函数的时候

要注意以下几点

调用者通过子函数名进行调用

调用时需要传递一些供子函数计算

和处理的数据 也就是参数

子函数执行完成后

需要返回处理结果

利用子函数机制

可以做到程序 复用

避免在程序中使用重复代码

可以将程序设计模块化

我们可以自顶向下 逐步细化

将复杂问题分解为相对简单的子问题

这些子问题用子函数实现

从而提高主程序结构的清晰性和易读性

利用子函数机制

还可以使程序的调试和维护变得更加容易

那么我们设计子函数时要注意

尽量使一个子函数功能相对独立和完整

也就是高内聚

第二 就是低耦合

子函数与外界的关系尽量松散

不要太紧密

使其能方便地被重用

C语言用函数实现模块化设计思想

较大的C语言应用程序

往往是由多个函数组成的

C语言提供了丰富的函数集

能够完成常用的数学计算

字符串处理

输入 输出等各种操作

程序员可以直接使用

从而减轻工作量

但是标准C提供的库函数功能毕竟是有限的

用户可以自己定义标准C没有提供的函数

如 计算类函数 求组合数 求阶层

求最大公约数等函数

或者是判断推理类函数

如判断一个整数是否是素数的函数

还可以编写操作类函数

交换两个变量的函数

排序函数 查找函数

本讲内容就到这里

谢谢大家

高级语言程序设计课程列表:

程序设计和C语言

-1.1 计算机程序和计算机语言

--计算机程序和计算机语言

--致敬先辈:伟大的C语言之父——丹尼斯·里奇 程序员

-1.2 C程序的构成

--C程序的构成

--当前主流程序设计语言各自都有什么优势?

-1.3 C语言编辑、编译、运行(VC++2010学习版)

--C语言编辑、编译、运行(VC++2010学习版)

-练习题

顺序结构程序设计

-2.1 变量的定义和使用

--变量的定义和使用

-2.2 数据类型

--数据类型简介

--整型数据

--实型数据

-2.3 格式输出和格式输入

--格式输出printf函数

--格式输入scanf函数

--单个字符的输入输出

-2.4 运算符和表达式

--运算符和表达式

-2.5 结构化程序设计入门

--结构化程序设计入门

-练习题

选择结构程序设计

-3.1 为什么要用选择结构解决问题

--为什么要用选择结构解决问题

-3.2 如何正确表示选择结构中的条件

--如何正确表示选择结构中的条件

-3.3 用if语句及if语句嵌套实现选择结构

--用if语句及if语句嵌套实现选择结构

-3.4 用switch语句实现选择结构

--用switch语句实现选择结构

-练习

循环结构程序设计

-4.1 循环的引入

-- 为什么要用循环结构解决问题

-4.1 循环的引入--作业

-4.2 用while语句实现循环

--用while语句实现循环

-4.3 用do-while语句实现循环

-- 用do-while语句实现循环

-4.4 用for语句实现循环

-- 用for语句实现循环

-4.4 用for语句实现循环--作业

-4.5 何时需要用循环的嵌套

--何时需要用循环的嵌套

-4.6 如何提前终止循环和提前结束本次循环

--如何提前终止循环和提前结束本次循环

-习题--作业

数组

-5.1 数组类型的引入

--数组类型的引入

-5.2 一维数组的定义和初始化

--一维数组的定义和初始化

-5.3 一维数组的使用

--一维数组的使用

-5.4 二维数组的定义和初始化

--二维数组的定义和初始化

-5.5 二维数组的使用

--二维数组的使用

-习题--作业

指针

-6.1 什么是指针

--什么是指针

-6.2 指针类型及相关概念

--指针类型及相关概念

-6.3 指针变量的定义、赋值与使用

--指针变量的定义、赋值与使用

-6.4 指针的运算

--指针的运算

-6.5 指针与一维数组

--指针与一维数组

-6.6 指针的指针

--指针的指针

-6.7 指针与二维数组

--指针与二维数组

-习题--作业

函数

-7.1 为什么要自定义函数

--为什么要自定义函数

-7.2 函数的定义

--函数的定义

-7.3 函数的调用

--函数的调用

-7.4 函数参数的传递

--函数参数的传递

-7.5 函数的嵌套调用和递归调用

--函数的嵌套调用和递归调用

-7.6 变量的作用域和存储类型

--变量的作用域和存储类型

-习题--作业

字符串

-8.1 字符串的存储及输入输出

--字符串的存储及输入输出

-8.2 系统字符串处理函数

--系统字符串处理函数

-8.3 自定义字符串处理函数

--自定义字符串处理函数

-习题--作业

结构体和共用体

-9.1 结构体类型的定义

--结构体类型的定义

-9.2 结构体变量及指针变量的定义及使用

--结构体类型变量和指针变量的定义和使用

-9.3 结构体变量和指针变量作函数的参数

--用结构体变量和指向结构体的指针作函数参数

-9.4 结构体数组的定义和使用

--结构体数组的定义和使用

-9.5 共用体类型和枚举类型

--共用体和枚举类型

-习题--作业

动态内存分配

-动态内存分配--习题

文件

-习题--作业

为什么要自定义函数笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。