当前课程知识点:C++语言程序设计基础 >  第3章 函数 >  函数调用 >  函数调用(例3-1)

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

函数调用(例3-1)在线视频

函数调用(例3-1)

函数调用

 

调用函数需要先声明函数原型

若函数定义在调用点之前,可以不另外声明;

若函数定义在调用点之后,必须要在调用函数前声明函数原型:

函数原型:类型标识符 被调用函数名(含类型说明的形参表)

 

函数调用形式

函数名(实参列表)

 

嵌套调用17.png

嵌套调用:在一个函数的函数体中,调用另一函数。

 

例3-1编写一个求x的n次方的函数

#include <iostream>

using namespace std;

 

//计算x的n次方

double power(double x, int n) {

double val = 1.0;

while (n--) val *= x;

return val;

}

 

int main() {

cout << "5 to the power 2 is "
<< power(5, 2) << endl;

return 0;

}




下一节:例3-2

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

函数调用(例3-1)课程教案、知识点、字幕

大家好

欢迎继续学习C++语言程序设计

这一节我来介绍函数的调用

对于我们自己定义好的函数

或者是C++库里面的函数

当我们要使用的时候

直接调用就可以了

这就是模块化程序设计它的好处

把一些功能模块分解开

每一个模块相对独立

然后我们可以预先

把它都实现好 定义好

放在那儿

什么时候需要用的时候

调用就可以了

而且可以多次重复地调用

那么调用一个函数

有些什么规定呢

它语法上怎么实现呢

接下来我就给大家详细地介绍

而且我要给大家很多

函数调用的例题来看

现在我们来看

如何在程序中调用

一个已经定义好的函数

那么函数在调用之前要先声明

声明的意思就是告诉编译器

我即将调用一个这种格式的

这种规定的函数

为什么我们在调用函数之前

要先声明呢

因为函数的定义和调用

往往不在一个程序

或者在一个程序中

但是函数的定义的位置

可能出现在调用的位置之后

这种情况下

当你程序中有

函数调用表达式的时候

编译器

它还没有见过你的函数定义呢

它怎么能够给你做语法检查

怎么能知道你的函数调用表达式

语法对不对呢

这就依靠我们

预先做的函数声明了

所以C++中要求

在调用函数之前

必须要做一个函数的原型声明

所谓函数的原型声明

就要声明你即将调用的函数

它的名字是什么

它的参数表是什么样的

它的返回值是什么

但是当然你不用把函数体

写在这儿

函数体应该在另外的什么地方

定义的

有一个函数原型声明

然后我们就可以调用函数了

调用的时候用什么形式调用呢

用函数名和实参列表就行了

这个地方叫做实参了

这叫实际参数 简称实参

在函数定义的时候

在函数原型声明的时候

那个参数表都叫做形参表

里面的参数都叫做形式参数

而实际参数呢

是我们程序中实际的

已经确定的变量

或者是常量表达式

它已经占有存储空间了

在这个调用表达式

执行的时刻呢

将要用实参表中的实参

去初始化形参表中的形参

就在这个时刻

是为形参分配存储空间的

函数调用呢

它可以由函数1调用函数2

函数2又调用函数3

也就是说

在一个被调用函数中间

它又去调用了别的函数

这种情况

就叫做嵌套调用

函数还可以自身调用自身

那么C++支持函数的递归调用

就是函数自己调用自己

那不是没完没了吗

什么时候有返回的时候呢

我们后面要讲递归调用

它的关键就在于

有递归的深入方式

还要有返回点

好 现在我们来看

求x^n次方的这个函数

我们为了多次重复使用

同一个功能

通常地

就会将一个功能写成函数

比如说求x的n次方

我们就把它写成这样一个power

名字叫power的函数

这个函数体里面的内容呢

我们看非常简单

就是一个while循环

执行n次乘法

用n--来计数

那为什么

我们把这么简单的功能

要写成函数呢

因为这是特别常用的一个功能

我们可能不仅在一个程序中

可能在今后的其他程序中

都要求x的n次方

所以把这个功能模块

让它相对独立出来

在定义这个函数的时候

有函数名power

有参数表

参数中有两个形参

x和n

分别是double和int类型

它的返回值类型是double

所以这个函数的最后一句

要用return语句

返回一个值

返回x^n次方的计算结果

它是一个double类型的值

正好跟这个返回类型是吻合的

这是这个函数的定义

接下来我们看在主函数中

在主函数中我们来计算5的2次方

调用这个power

然后将这个函数的计算结果值

返回到这个位置

并且赋值给这个power这个变量

那么通过这个例题呢

我还要给大家演示一下

如何单步跟踪到函数体的内部

现在我们还是进入调试状态

单步执行

进到主函数中以后

好 执行到这个地方

现在要准备要调用power函数了

如果在这个时候你按f10的话

你就看不到

程序是如何在power函数体里面

一步一步执行的了

所以这个地方呢

需要使用f11进行追踪

好 在这里我点f11

大家看现在进到

power函数的函数体里面了

进到函数体以后

我们看这个x得到的值是5

n得到的值是2

恰好是我们实参给它的5和2

这样传递到形参中来了

接下来呢

进这个while循环

计算5的2次方

n一开始是2

然后每一次它减1

进到循环以后n就减1了

x累乘到while这个累乘积上面去

再来一次

n就减到0了

这一次累乘做完了以后

再回到头上

判断n等于0 也就是假

这样while循环就不执行了

就走到return句

那么这个return语句

将使程序的控制流程

转回到它的调用者那里去

并且把这个返回值也带回去

那我们回到这儿来

就回到这儿来了

那么这个power的返回值

也带回来了

我们看到

执行完这一句之后

这个power得到的值是25

得到这个返回值

那么在函数体里面的时候

我们还可以观察

这个调用栈的状态

好 我们停止调试

再重新开始一遍调试

这一次我们不要单步执行

那么慢慢走了

我们在进入函数体以后的地方

设一个断点

然后直接按f5

就用调试状态执行到这个位置

进到函数体里面了

这个时候我们再看这个调用栈

也就是现在处于什么位置呢

处于power函数里面

然后是程序的第7行

它从哪儿来的呢

它是在主函数中main函数中

也是程序的第15行这个位置

来调用它的

这个程序第15行的位置

从这儿调用的power

所以

如果有函数的多极调用的时候

我们可以从调用栈来观察

好 这就是这个简单计算

x^n次方面的这个函数例题

C++语言程序设计基础课程列表:

第1章 绪论

-导学

--第1章导学

-计算机系统简介

--计算机系统简介

--计算机系统简介 测试题

-计算机语言和程序设计方法的发展

--计算机语言和程序设计方法的发展

--计算机语言和程序设计方法的发展 测试题

-面向对象的基本概念

--面向对象的基本概念

--面向对象的基本概念 测试题

-程序的开发过程

--程序的开发过程

--程序的开发过程 测试题

-信息的表示和储存

--计算机中的信息与存储单位

--计算机的数字系统

--数据的编码表示

--信息的表示和储存 测试题

-实验指导

--实验一:VS开发环境介绍

第2章 C++简单程序设计(一)

-导学

--第二章导学

-C++语言概述

--C++的特点和程序实例

--C++字符集和词法记号

--C++语言概述 测试题

-基本数据类型、常量、变量

--基本数据类型、常量、变量

--程序举例

--基本数据类型、常量、变量 测试题

-运算与表达式

--算术运算与赋值运算

--逗号运算、关系运算、逻辑运算和条件运算

--Sizeof运算、位运算

--运算优先级、类型转换

--运算与表达式 测试题

-实验二:简单程序设计(上)

--实验二:简单程序设计(上)

第2章 C++简单程序设计(二)

-数据的输入和输出

--数据的输入和输出

--数据的输入和输出 测试题

-选择结构

--if语句

--switch语句

--选择结构 测试题

-循环结构

--循环结构——while语句

--do-while语句

--for语句

--嵌套的控制结构、其他控制语句

--循环结构 测试题

-自定义类型

--自定义类型

--自定义类型

-第2章小结

--第二章小结

-实验二:C++简单程序设计(下)

--实验二C++简单程序设计(下)

第3章 函数

-导学

--导学

-函数定义

--函数定义

--函数定义 测试题

-函数调用

--函数调用(例3-1)

--例3-2

--例3-3

--例3-4

--例3-5

--例3-6

--函数调用 测试题

-嵌套与递归

--函数的嵌套调用(例3-7)

--函数的递归调用(例3-8)

--例3-9

--例3-10

--嵌套与递归 测试题

-函数的参数传递

--函数的参数传递

--函数的参数传递 测试题

-引用类型

--引用类型(例3-11)

--引用类型 测试题

-含有可变参数的函数

--含有可变参数的函数

--含有可变参数的函数 测试题

-内联函数

--内联函数(例3-14)

--内联函数 测试题

-constexpr函数

--constexpr函数

--CONSTEXPR函数课后习题

-带默认参数值的函数

--带默认参数值的函数

--默认参数值例(3-15)

--带默认参数值的函数 测试题

-函数重载

--函数重载(例3-16)

--函数重载 测试题

-C++系统函数

--C++系统函数(例3-17)

--C++系统函数习题

-第3章小结

--第三章小结

-实验三(上)函数的应用

--实验三(上)函数的应用

-实验三(下)函数的应用

--实验三(下)函数的应用

第4章 类与对象

-导学

--导学

-面向对象程序的基本特点

--面向对象程序的基本特点

--面向对象程序的基本特点 测试题

-类和对象

--类和对象的定义

--类和对象的程序举例

--类和对象 测试题

-构造函数

--构造函数基本概念

--构造函数例题(1)——例4-1

--构造函数例题(2)——例4-2

--委托构造函数

--复制构造函数

--复制构造函数调用举例

--构造函数 测试题

-析构函数

--析构函数

--析构函数 测试题

-类的组合

--类的组合

--类的组合程序举例

--前向引用声明

--类的组合 测试题

-UML简介

--UML简介

--UML简介课后习题

-结构体与联合体

--结构体(例4-7)

--联合体(例4-8)

--结构体与联合体 测试题

-枚举类

--枚举类

--枚举类 测试题

-第4章小结

--第四章小结

-实验四(上)

--实验四(上)

-实验四(下)

--实验四(下)

第5章 数据的共享与保护

-导学

--导学

-标识符的作用域与可见性

--标识符的作用域与可见性

--标识符的作用域与可见性 测试题

-对象的生存期

--对象的生存期

--对象的生存期 测试题

-类的静态成员

--静态数据成员(例5-4)

--静态函数成员(例5-5)

--类的静态成员 测试题

-类的友元

--类的友元(例5-6)

--类的友元 测试题

-共享数据的保护

--共享数据的保护(例5-7)

--共享数据的保护 测试题

-多文件结构和预编译命令

--多文件结构和预编译命令(例5-10)

--多文件结构和预编译命令 测试题

-第5章小结

--小结

-实验五

--实验五

第6章 数组、指针与字符串(一)

-导学

--导学

-数组的定义与初始化

--数组的定义与使用

--数组的储存与初始化

--一维数组应用举例

--数组的定义与初始化 测试题

-数组作为函数的参数

--数组作为函数参数(例6-2)

--数组作为函数的参数 测试题

-对象数组

--对象数组

--对象数组 测试题

-基于范围的for循环

--基于范围的for循环

-指针的定义和运算

--指针的概念、定义和指针运算

--指针的初始化和赋值

--指针的算术运算、关系运算

--指针的定义和运算 测试题

-综合实例

--综合实例

-实验六(上)

--实验六上

第6章 数组、指针与字符串(二)

-指针与数组

--用指针访问数组元素

--指针数组

--指针与数组 测试题

-指针与函数

--以指针作为函数参数

--指针类型的函数

--指向函数的指针

--指针与函数 测试题

-对象指针

--对象指针

--对象指针 测试题

-动态内存分配

--动态分配与释放内存

--申请和释放动态数组(一)

--申请和释放动态数组(二)

--动态内存分配 测试题

-智能指针

--智能指针

-vector对象

--vector对象

--vector对象 测试题

-对象复制与移动

--深层复制与浅层复制

--移动构造

--对象复制与移动 测试题

-字符串

--C风格字符串

--string类

--字符串 测试题

-第6章小结

--第六章小结

-综合实例

--综合实例

-实验六(下)

--实验六(下)

函数调用(例3-1)笔记与讨论

也许你还感兴趣的课程:

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