当前课程知识点:C语言程序设计 >  第8章 函数 >  8.1 函数概述 >  函数概述

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

函数概述在线视频

下一节:有参函数

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

函数概述课程教案、知识点、字幕

同学们

大家好

今天我们学习第八章函数

首先我们来看学习函数的意义

人们在求解某个复杂问题时

通常采用逐步分解

分而治之的方法

也就是将一个大问题分解成

若干个比较容易求解的小问题

然后分别求解

每个小问题叫做一个模块

这叫做模块化程序设计

其中的每一个子模块

在C语言中对应于一个函数

那么,我们给出函数的定义

函数就是一段可以重复调用的

功能相对独立完整的程序段

下面看函数的基本特性

函数有如下一些基本特性

第一C语言是函数式语言

指的是一个C语言程序的

基本构成单位是函数

第二一个C程序只能有一个main函数

main函数是C程序的一个特殊函数

第三C程序的执行总是从main函数开始

在main中结束

即main函数是C程序的入口

第四

函数不能嵌套定义

可以嵌套调用

即一个函数可以调用另外一个函数

下面

我们看函数的分类

从用户角度

函数分为

标准函数和用户自定义函数

标准函数

指的就是由系统提供的库函数

例如我们用过的printf函数

用户自定义函数

就是由我们用户自己定义的函数

如何自定义一个函数

就是本章的主要内容

我们在使用库函数应注意以下一些方面

第一

函数的功能

要知道该函数完成什么功能

第二

函数参数的数目和顺序

及各参数的意义和类型

我们要知道每个参数表示的含义是什么

以及每个参数的数据类型

第三

函数返回值的意义和类型

要知道函数返回值

也就是计算结果

它的含义是什么

以及计算结果的数据类型是什么

第四

使用时需要使用的包含文件

例如

使用printf函数时需要包含头文件stdio.h

从函数形式上

函数分为

无参数无返回值

无参数有返回值

有参数无返回值

有参数有返回值

其中的参数

指的是函数所要操作的数

也就是函数的输入

返回值

指的是函数的计算结果

也就是函数的输出

函数可以有参数

也可以没有参数

可以有返回值

也可以没有返回值

组合起来就是这四种形式

下面讲解比较简单的无参函数

分为无参数无返回值和

无参数有返回值的函数

第一无参数无返回值的函数

它的定义格式是

void关键字加上函数名

再加上左右括号

括号里面写void关键字

表示不需要参数

也可以留空

然后再加上左右花括号括起来的

变量声明部分和执行部分

其中

函数名必须是合法的标示符

函数前面的viod关键字表示函数没有返回值

但不可省略

变量声明部分和执行部分构成了函数体

此类函数的用途是

完成某项固定的处理任务

执行完成后不向调用者返回函数值

它类似于其它语言的过程

此类函数的原型声明是

void 函数名( void )

或 void 加上函数名( )

括号里面留空

也就是说括号里的void语句可以省略

那么

为什么要对函数进行声明呢

因为C语言规定

若函数的调用出现在函数的定义之前

则必须对其原型进行声明

否则会出现编译错误

下面看无参无返回值函数的调用

此类函数的调用很简单

函数名加上左右括号及分号即可

注意

不能将这种函数调用赋值给任何变量

因为它没有返回值

调用时

中间不能加void关键字

例如

这个程序中定义的函数showerror()

就是一个无参无返回值的函数

main函数中请求用户输入一个整数

当其小于0时

调用showerror函数

showerror函数显示

input error

的错误信息后返回main函数

由于showerror

函数的定义出现在了调用之后

所以程序的第三行对该函数进行了声明

函数的调用出现在函数的定义之前

则必须对其原型进行声明

这个程序同时也描述了编写C程序的一般格式

通常一个C程序由如下几个部分组成

首先是文件包含部分

如include

用于标准库函数原型声明

其次是常量定义部分

如#define PI 3.1415等

再其次是变量定义部分

通常是程序用到的全局变量的定义

我们将在后面的内容介绍全局变量

然后是用户自定义函数原型的声明

再然后是main函数部分

最后是用户自定义函数

也就是用户自定义函数的实现

其中,常量定义部分和变量定义部分

根据程序需要

也可以没有

main函数和用户自定义函数的顺序也可以颠倒

例如

main函数在用户自定义函数之后

则带来的好处是

可以减少一些用户自定义函数的声明

但如果用户自定义函数在main函数之后

则通常需要在main函数之前或

main函数内部开头的部分

对用户自定义函数做声明

下面看函数的返回

函数的返回使用return表达式

有三种形式

第一rerurn (表达式);

第二rerutn 表达式;

第三return;

这三种语句的功能

均可结束函数的执行

使程序控制从被调用函数返回到调用函数中

其中

前两种方式用于

有返回值函数的计算结果的返回

而第三种形式用于无返回值的函数

想提前结束运行的时候

需要说明的是

函数中可以有多个return语句

在无返回值的函数中

return语句的形式只能是第③种形式

也就是return加分号

例如

函数showyes的功能是

如果输入的字符不是'Y'或'y'

则什么都不输出

直接返回

否则

输出"YES! "

其中用到了函数toupper

它的功能是将小写字符转换成大写字符

下面看无参数有返回值的函数

它的定义格式是

返回值类型符 函数名 (void)

括号中的viod可以省略

再加左右花括号

左右花括号中加变量声明部分和执行部分

其中返回值类型符可以为

除数组类型外的任何类型

缺省时也就是说

不写返回值类型时默认为int型

函数名必须为合法的标识符

其次,括号里的void表明无参数

可以缺省略

此类函数的用途是

用于完成某项固定的处理任务

执行完成后向调用者返回函数值

此类函数的原型声明是

返回值类型符 函数名( void );

或 返回值类型符 函数名( )

括号里面留空,不加viod关键字

无参数有返回值的函数的调用形式是

函数名( void )加右括号

或 变量 = 函数名( );

例如

这个程序中的sum函数

该函数功能是

获取用户的输入

并判断

当输入‘0’时

则 计算1~100之间所有偶数之和并返回

当输入‘1’时

则 计算1~100之间所有奇数之和并返回

main()函数

通过tot=sum语句

调用sum函数

并根据用户输入是0还是1来计算

1~100之间所有偶数或奇数之和

并将结果赋值给tot变量

最后输出结果

无参数有返回值的函数的返回

其格式是

rerurn (表达式); 或 rerutn 表达式;

需要说明的是

第一

表达式的值即是函数的返回值

第二

函数体中一般都包含return语句

如果没有

函数也会返回一个值

但这个值是不可预知的

将会使程序可能犯有逻辑错误

我们要避免这种情况的发生

第三

一般情况下

表达式值的类型应与函数返回值类型一致

第四

当return语句中的表达式的类型

与函数的返回值类型不一致时

编译器将对表达式进行强制类型转换

将表达式的值强制转换成函数返回值类型

然后返回给调用者

同学们

今天的内容就讲到这里

再见

C语言程序设计课程列表:

第1章 C语言程序设计预备知识

-计算思维与计算机

--计算思维与计算机

--计算思维与计算机

--计算思维和计算机

第2章 C语言程序设计基础

-2.1 程序设计语言的发展及其特点和应用

--程序设计语言的发展及其特点和应用

--程序设计语言的特点及发展

- 2.2 C语言程序的基本结构及编制C语言程序的基本步骤

-- C语言程序的基本结构及编制C语言程序的基本步骤

--C语言程序的结构和编制步骤

第3章 基本数据类型、运算符与表达式

-3.1 C语言的数据类型

--C语言的数据类型

--C语言的数据类型

-3.2 常量

--常量

--常量

-3.3 什么是变量

--什么是变量

--什么是变量

-3.4 如何进行算术运算

--如何进行算术运算

--如何进行算术运算

-3.5 赋值运算符和逗号运算符

--赋值运算符和逗号运算符

--赋值运算符和逗号运算符

-3.6 数据类型转换

--数据类型转换

--数据类型转换

第4章 基本输入输出和顺序程序设计

-4.1 格式化输出printf

--格式化输出printf

--格式化输出

-4.2 格式化输入scanf及字符数据的非格式化输入输出

--格式化输入scanf及字符数据的非格式化输入输出

--格式化输入

第5章 选择结构程序设计

-5.1 关系运算符和关系表达式

--关系运算符和关系表达式

--关系运算符和关系表达式

-5.2 逻辑运算符和逻辑表达式

--逻辑运算符和逻辑表达式

--逻辑运算符和逻辑表达式

-5.3 条件运算符和条件表达式

--条件运算符和条件表达式

--条件运算符和条件表达式

-5.4 if语句

--if语句

--if语句

-5.5 switch语句

--switch语句

--switch语句

第6章 循环结构程序设计

-6.1 while语句

--while语句

--while语句

--do-while语句

-6.2 for语句

--for语句

--for语句

-6.3 循环的嵌套

--循环的嵌套

--循环的嵌套

-6.4 break语句和continue语句

--break语句和continue语句

--break和continue语句

第7章 数组

-7.1 一维数组的定义和引用

--一维数组的定义和引用

--一维数组的定义和引用

-7.2 一维数组的赋值

--一维数组的赋值

--一维数组的赋值

-7.3 二维数组的定义和引用

--二维数组的定义和引用

--二维数组的定义和引用

-7.4 二维数组的赋值

--二维数组的赋值

--二维数组的赋值

-7.5 字符串的本质

--字符串的本质

--字符串的本质

-7.6 字符串操作的常用函数

--字符串操作的常用函数

--字符串常用函数

-7.7 字符串数组

--字符串数组

--字符串数组

第8章 函数

-8.1 函数概述

--函数概述

--函数概述

-8.2 有参函数

--有参函数

--有参函数

-8.3 函数参数的传递方式

--函数参数的传递形式

--函数参数的传递方式

-8.4 变量的作用域和生存期

--变量的作用域和生存期

--变量的作用域和生存期

-8.5 变量的存储类型

--变量的存储类型

--变量的存储类型

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

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

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

-8.7 函数的作用域与封装

--函数的作用域与封装

--函数的作用域与封装

第9章 指针

-9.1 指针变量的概念(上)

--指针变量的概念(上)

--指针变量的概念(上)

-9.2 指针变量的概念(下)

--指针变量的概念(下)

--指针变量的概念(下)

-9.3 指向一维数组的指针变量

--指向一维数组的指针变量

--指向一维数组的指针变量

-9.4 指向二维数组的指针变量(上)

--指向二维数组的指针变量

--指向二维数组的指针变量(上)

-9.5 指向二维数组的指针变量(下)

--指向二维数组的指针变量(下)

--指向二维数组的指针变量(下)

-9.6 动态内存分配

--动态内存分配

--动态内存分配

第10章 预处理命令

-10.1 编译预处理

--编译预处理

第11章 复杂数据类型

-11.1 用户自己建立数据类型

--用户自己建立数据类型

--用户自己建立数据类型

-11.2 定义结构体类型变量

--定义结构体类型变量

--定义结构体类型变量

-11.3 结构体变量的引用与初始化

--结构体变量的引用与初始化

-11.4 结构体数组

--结构体数组

--结构体数组

-11.5 指向结构体类型数据的指针

--指向结构体类型数据的指针

--指向结构体类型数据的指针

第12章 文件

-12.1 文件的基本概念和文件指针

--文件的基本概念和文件指针

--文件的基本概念和文件指针

-12,2 文件的打开和关闭

--文件的打开和关闭

--文件的打开和关闭

-12.3 文本文件读写

--文本文件读写

--文本文件读写

-12.4 二进制文件读写

--二进制文件读写

--二进制文件读写

函数概述笔记与讨论

也许你还感兴趣的课程:

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