当前课程知识点:高级语言程序设计 > 函数 > 7.2 函数的定义 > 函数的定义
大家好
本讲介绍怎样定义一个函数
定义函数时
一定要明确该函数的功能
第二 要定义该函数的接口
也就是函数头部
包括函数名
参数和返回值
最后要定义该函数的功能实现部分
现在来看如何自己定义一个求n的阶乘的函数
左边是一个求阶乘的程序
能够独立运行
右边是求阶乘的函数
没有输入n的语句
也没有输出n的阶乘的语句
只有计算n的阶乘的循环语句
和return语句
来看fact函数的定义
斜杠星号和星号斜杠之间
是介绍函数功能的注释语句
double是返回值类型
fact是函数名
int n是形参表
这是内部变量i和t
这个循环语句用来计算n的阶乘
这是返回n的阶乘
这全部构成了求n的阶乘函数的定义
我们来看一般函数定义的形式
这是函数的头部
这一对花括号是函数体的定界符
花括号里面是函数体
首先要指定函数的名字
函数名是函数的唯一标识
函数名的命名方法
和变量名的命名方法是相同的
要提醒大家注意的是
应该使用一个有意义的名字为函数进行命名
因为一个有意义的名字
可以让我们看到这个名字
就知道这个函数的功能是什么
在定义函数的时候
还要指定函数的入口参数
由参数表指定了函数
从外界接收数据的类型和个数
如果函数不接收任何参数
则参数列表可以定义为void
现在我们还要指定函数返回值的类型
如果不指明返回值类型
编译器将假定返回值是int型
return语句的功能是
结束子函数的运行
返回到调用函数
并将“表达式”的值带给调用函数
return语句中表达式的类型
要和返回值的类型说明一致
如果不一致
则以返回值类型为准进行类型转换
函数没有返回值时
返回值类型为void
函数没有形参时
圆括号里可以是空的
也可以有一个void
这是我们前面写的main函数
经常用到的两种形式
一种main函数没有返回值
一种main函数的返回值类型为整型
下面再来看
如何定义一个判断整数m是否是素数的函数
prime为函数名
有一个整型参数m
返回值类型为void
这是函数体内部语句
判断m是否是素数
用m依次除以2到m-1之间的整数
如果有能除净的
立刻跳出循环
如果都不能除净
在循环条件不成立时也要跳出循环
根据跳出循环的位置
我们可以判断m是否是素数
这个函数 没有返回值
因此return后面没有表达式
请大家将这个函数
与我们之前定义的求阶乘的函数比较比较
看看他们的区别
这两个函数都有一个参数
fact函数有返回值
prime函数没有返回值
现在 我们再来定义一个求两个整数的和的函数
add是函数名
这是两个int型形参x和y
即使这两个形参都是int型
每个形参都要单独说明类型
y前面的int不能省
返回值是整型
再来看这个函数体
这三条语句还可以简写成一条语句
现在我们来看
如何定义计算求x的y次幂的函数
请看这个函数的定义
函数名power
定义两个int型形参x和y
返回值是整型
在函数体里
用这个循环体语句将x累乘到t里
一共累乘了y次
求出x的y次幂
请大家将这个函数
与我们之前定义的求两个数和的add函数比较
两个函数都是定义对两个int型参数x y的操作
返回值也都是整型
但是函数体里的语句序列决定了函数的功能
一个函数是求x的y次方
一个函数是求x与y的和
在C语言中
所有自定义的函数
都必须遵循“先定义后使用”的原则
并且所有的函数定义都是相互平行和独立的
不容许出现嵌套定义
这里add函数的定义
是嵌套在main函数里 是错误的
这样写add函数的定义和main函数的定义
是相互平行和独立的
是正确的
这样写也是错误的
main函数定义和函数a的定义是平行的
但函数b的定义是嵌套在函数a的定义里
也是错误的
正确的写法应该是这样的
main函数
函数a
函数b
这三个函数的定义是平行的
小结一下
本节定义了下列4个函数
这4个函数都是有参函数
有的有一个参数
有的有两个参数
这4个函数中有三个函数有返回值
有一个函数没有返回值
这4个函数都不是单独可运行的
必须被主函数直接或间接调用才能发挥作用
本讲内容就讲到这里
谢谢大家
-1.1 计算机程序和计算机语言
-1.2 C程序的构成
--C程序的构成
-1.3 C语言编辑、编译、运行(VC++2010学习版)
-练习题
-2.1 变量的定义和使用
--变量的定义和使用
-2.2 数据类型
--数据类型简介
--整型数据
--实型数据
-2.3 格式输出和格式输入
-2.4 运算符和表达式
--运算符和表达式
-2.5 结构化程序设计入门
-练习题
-3.1 为什么要用选择结构解决问题
-3.2 如何正确表示选择结构中的条件
-3.3 用if语句及if语句嵌套实现选择结构
-3.4 用switch语句实现选择结构
-练习
-4.1 循环的引入
-4.1 循环的引入--作业
-4.2 用while语句实现循环
-4.3 用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 共用体类型和枚举类型
--共用体和枚举类型
-习题--作业
-动态内存分配--习题
-习题--作业