C++程序设计第5章 函数
C语言程序设计教程(第5章 函数)

22
信息科学与工程学院
作用域(可用域)与生存期
C语言中定义的变量都有一个起作用的范 围,称为变量的作用域。 程序运行时,变量被创建和被删除的时间 段,称为变量的生存期。
23
信息科学与工程学院
局部变量和全局变量
在一个函数内部定义的变量是内部变量, 它只在本函数内部范围内有效。也就是说 只有在本函数内才能使用它们。这些变量 称为“局部变量”。 在函数之外定义的变量称为外部变量,也 称为全局变量,在文件内的所有函数都能 使用它。它的有效范围为从定义变量的位 置开始到文件的结束。
4
信息科学与工程学院
5.1 问题的提出
C语言程序是由什么构成的? 函数 什么是函数?
能完成特定功能的功能块; 一般有输入参数 和返回值; 一次定义,可以调用多次。
一个C语言程序为什么需要不同的函数?
一个函数过大难于编写和维护; 一个函数的程序不利于协作; 代码和功能共享的需要。
5
信息科学与工程学院
6. 函数调用举例分析(见下页)
15
信息科学与工程学院
实参到形参是单向值传递 例2 求两个整数中的最大值
int max(int x,int y) /*函数定义*/ { int temp; if (x>y) temp=x; else temp = y; COPY return temp; } void main() { int a,b; scanf("%d,%d",&a,&b); a = max(a,b); /*函数调用*/ printf("\n max= %d \n",a); }
2
信息科学与工程学院
第5章 函数
本章需要掌握的知识点: 函数定义 函数说明 函数调用 形参和实参的关系 变量的存储类别
C语言程序设计第五章

05 案例分析
案例一:条件语句在程序中的应用
总结词
条件语句是C语言中用于根据不同条件执行不同操作的语句,通过if、else if和else关键 字实现。
详细描述
编程练习二:循环语句应用
总结词
理解并掌握while和for循环的使用
详细描述
通过编写程序,实现重复执行某段代 码直到满足特定条件,或者根据需要 重复执行某段代码指定次数。例如, 计算1到100的累加和,或者打印出0 到99的所有偶数。
编程练习三:数组操作应用
总结词
理解并掌握数组的基本操作
VS
详细描述
详细描述
数组在程序中用于存储和处理同一种类型的 数据元素,例如存储一组学生的成绩、计算 一组数据的平均值等。数组操作包括数组的 声明、初始化、访问和修改等。通过循环语 句可以方便地遍历数组元素并进行处理。数 组操作在程序中具有广泛的应用,是C语言
中重要的数据结构和算法之一。
06 总结与展望
本章总结
详细描述
C语言中的数组是一种存储相同类型元素的线性数据结构。可以通过索引访问数 组元素,进行赋值、交换、排序等操作。同时,C语言还提供了字符串操作函数, 如strcpy、strcat、strlen等。
语法点三:数组操作
01
示例代码
02
```c
int array[10]; // 声明一个包含10个整数的数组
详细描述
循环语句在程序中用于重复执行一段代码, 例如打印1到10的数字、计算一定数量的累 加和等。循环语句可以嵌套使用,以实现更 复杂的循环结构和算法。循环语句通常与条 件语句结合使用,以控制循环的执行条件和 次数。
C语言程序设计 (何钦铭 颜晖 著) 高等教育出版社第五章 课后答案

{
double e,x,cos;
printf("Enter two numbers e and x :"); /*输入两个数e,x */
scanf("%lf%lf",&e,&x);
cos=funcos(e,x); /*调用函数funcos */
printf("The result of cos(%lf) is %lf.\n",x,cos);
printf("sign(%lf)=%d\n",x,y); /*输出x的符号*/
}
int sign(double x) /*定义函数sign */
{
int y;
if(x>0)y=1;
else if(x==0)y=0;
else y=-1;
return y;
}
练习5-2
#include <stdio.h>
#include <stdio.h>
int even(int n); /*声明函数even */
void main()
{
int num,sum=0;
printf("Enter the first number :"); /*输入第一个数*/
scanf("%d",&num);
while(num>0)
{
{
int i,j;
for(i=1;i<=n;i++) /*共n行金字塔*/
{
for(j=1;j<=n-i;j++)printf(" "); /*输出每行左边的空格*/
C语言程序设计 第05章 函数

8
计算机与信息工程学院
Page 8
C语言程序设计 第 5 章 函数
例1 计算两个整数的平均数的函数。 /* 函数功能:就算平均数 函数入口参数:整型x,存储第一个运算数
7
计算机与信息工程学院
Page 7
C语言程序设计 第 5 章 函数
❖参数:一般用于一个函数把数据传递给另一个函数(调用 者和被调用者之间),实现函数之间的通信。定义函数的 时候,函数的参数是形式参数,是对一件具体事件可能需 要数据的假设。
❖ 返回值: 即函数带回来的值。而返回值的类型是在定义函数 的时指定的,即用“返回值类型”指定函数的类型。 ❖ 1、如果类型标识符为void则表示不需要带回函数值; ❖ 2、如果没有类型标识,则为默认返回值类型,视编译 器的不同而不同。
单向传递,只由实参传给形参,而不能由形参传回 来给实参。 f) 在内存中,实参单元与形参单元是不同的单元。
13
计算机与信息工程学院
Page 13
C语言程序设计 第 5 章 函数
例2 调用函数时的数据(参数)传递。
#include <stdio.h> void main() {
int max(int x, int y); int a, b, c; scanf("%d, %d",&a, &b); c=max(a, b); printf("max is %d", c); }
计算机与信息工程学院
Page 4
C语言程序设计 第 5 章 函数
5.2.1 函数的分类
第5章 函数与带参数宏 《C语言程序设计及应用教程》课件-PPT课件

5.2 函数的嵌套与递归调用
函数的嵌套调用
不允许嵌套定义,函数间平行的、独立。 C中的函数:
允许嵌套调用。
main( ) 调用函数a 结束
a函数
调用函数b
b函数
【例5-7】 输入两个整数,求平方和
#include <stdio.h>
int fun1(int x,int y)
int fun1(int x,int y);
斐波那契数列");
for(i=0;i<N;i++)
{
printf("%d\t",iF[i]);
if((i+1)%10==0)
printf("\n");
}
printf("\n");
}
int Sum(int iF[],int n); void main() { int i,Fibonacci[N],m,n; //生成斐波那契数列 CreateFibonacci(Fibonacci); //输出斐波那契数列 PrintFibonacci(Fibonacci); //求数列前n项的和 printf(" 请输入要求和的项数 n(n<%d): ",N); scanf("%d",&n); m=Sum(Fibonacci,n); printf("\n 斐波那契数列前 %d项的和:%4d\n",n,m);}
第5章 函数与带参数宏 ?C语言 程序设计及应用教程?课件
5.1 函数的声明、定义与调用
5.1.1 函数的声明与定义 5.1.2 函数调用 5.1.3 函数参数传递 5.1.4 主函数中的参数
第5章 函数

oop技术:封装性、继承性、多态性。
多态性 :一个名字,多个人口”,或称“同一接口, 多种方法 。
例5.6 重载绝对值函数
int abs(int x)
{ { { return x>0?x:-x;} return x>0?x:-x;} return x>0?x:-x;} double abs(double x) 1ong abs(1ong x) void main()
形参带值后,即可进行相应的数据处理
如果有结果值,通过return语句带回到主函数
5.2 函数的调用
函数要先定义,后调用。
调用函数时要考虑到函数本身的参数;
调用标准库函数时,要包含相应的头文件 输入/输出函数 iostream.h 字符串函数 string.h 常用数学函数 math.h 调用自定义函数时,要定义相应的实参,并给 这些实参赋值。
main()
{ int a = 1,b = 2; cout << "Before exchange:a= " << a << ",b= " << b << endl;
swap(a,b);
cout << "After exchange:a= " << a << ",b= " << b << endl; }
例5.8 定义一个求两数最大值的模板函数。
template <class T> T Max(T a, T b) { return a>b?a:b; }
void main()
C程序设计题目集答案之第5章

第5章判断题1-1C语言函数返回类型的默认定义类型是void。
(1分)T F1-2函数形参的存储单元是动态分配的。
(1分)T F1-3如果函数定义出现在函数调用之前,可以不必加函数原型声明。
(1分)T F1-4C 语言程序中可以有多个函数, 但只能有一个主函数。
(1分)T F1-5局部变量如果没有指定初值,则其初值不确定。
(1分)T F1-6C语言中,通过函数调用只能获得一个返回值。
(1分)T F1-7函数的实参和形参都可以是变量、常量和表达式。
(1分)T F1-8按照C语言的规定,在参数传递过程中,既可以将实参的值传递给形参,也可以将形参的值传递给实参,这种参数传递是双向的。
(1分)T F1-9按照C语言的规定,实参和形参的命名不得重复。
(1分)T F1-10一个函数定义中可以完整地包含另一个函数的定义。
(1分)T F1-11函数调用得到的值,可以作为另一次函数调用时的参数。
(1分)1-12c语言每个函数的返回值都是int型的。
(1分)T F1-13C语言在函数调用时,若形参实参都是普通变量,实参和形参可以共用存储单元。
(1分)T F1-14函数的形参都属于全局变量。
(1分)T F1-15实参向形参进行数值传递时,数值传递的方向是单向的,即形参变量值的改变不影响实参变量的值。
(1分)T F1-16全局变量只能定义在程序的最前面,即第一个函数的前面。
(1分)T F1-17全局变量与局部变量的作用范围相同,不允许它们同名。
(1分)T F1-18为了便于计算机存储管理,C语言把保存所有变量的数据区,分成动态存储区和静态存储区,静态局部变量被存放在动态存储区。
(1分)T F1-19自动变量如果没有赋值,其值被自动赋为0。
(1分)T F1-20静态局部变量如果没有赋值,其存储单元中将是随机值。
(1分)T F单选题2-1C语言中函数返回值的类型是由()决定的。
(1分)A.B.调用该函数的主调函数的类型C.调用函数时临时决定D.定义函数时所指定的函数类型2-2在一个被调用函数中,关于return 语句使用的描述,错误的是()。
C语言程序设计-第5章--函数

实参可以是常量、变量或表达式,但要求 它们必须要有确定的值,在调用时将实参 的值赋给形参。另外,实参和形参的类型 应相同或兼容。
— 31 —
5.2 函数的参数传递和返回值
➢ 5.2.2 函数的返回值
一般情况下,主调函数调用完被调函数后,都希望能够得到一 个确定的值,这就是函数的返回值。在C语言中,函数返回值 是通过return语句来实现的。return语句的一般形式有3种:
/*函数声明*/
/*调用逆序函数,将a的逆序值赋给b*/ /*调用逆序函数,将b的逆序值赋给c */
— 23 —
5.2 函数的参数传递和返回值
➢ 5.2.1 函数的形参与实参
{
int y=0,sign=1;
/*定义sign表示x的符号,定义变量y代表逆序数据*/
if(x<0)
/*当x小于0时取符号及取反*/
— 18 —
5.1 函数的定义和调用
➢ 5.1.2 函数的调用
另外,按函数在语句中的作用来分,可以有以下3种函数调用方式:
函数表达式
函数语句
函数作为实参
函数作为表达式中的一项出 现,以函数返回值参与表达 式的运算。
函数调用的一般形式加上分 号即构成函数语句。
函数作为另一个函数调用的 实际参数出现,即把该函数 的返回值作为实参进行传送。
#include<stdio.h> int main() {
int x=0,y; y=trans(x); printf("y=%d\n",y); printf("x=%d\n",x); return 0; } trans(int a) { a++; printf("a=%d\n", a); return a; }
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
完整版ppt
7
5.函数的原型说明
在C++程序中,当函数定义在前、函数调用在后时, 程序能被正确编译执行。而当函数调用在前、函数定义 在后时,则应在主调函数中增加对被调函数的原型说明。
(1)函数原型说明的格式:
<类型> <函数名>(<形参表>); 或:<类型> <函数名>(<形参类型说明表>);
完整版ppt
15
一维数组作为函数参数
(3)实参与形参的传送方式:传地址
当数组作为函数参数,在调用函数时,系统并 没有为形参数组重新分配内存空间,而是将实参
第5章 函数
目的与要求 5.1 函数的定义和调用 5.2 函数的嵌套调用和递归调用 5.3 数组作函数参数(习题课) 5.4 变量的存储类型 5.5 内联函数 5.6 具有默认参数值的函数 5.7 函数的重载 本章小结
完整版ppt
1
目的与要求
通过本章学习,应理解函数的概 念,熟练掌握函数的定义和调用方法, 理解函数调用时实参和形参间数据的 传递方法。理解函数递归的概念,初 步掌握递归的使用方法,理解变量的 作用域和存储类型的概念,了解内联 函数与函数重载的概念。
(2)函数原型说明的作用:
告诉编译程序,函数返回值的类型、参数个数和各参 数类型。
【例5.3.2】用自定义函数求三个整数的最大值。 例程
完整版ppt
8
5.1.4 实参与形参的数据传送
在C++中,实参和形参间数据传送的方式有三种: 值传送、传地址和引用传送。先介绍值传送方式。
值传送过程: (1)调用函数时,先为形参分配存储单元,后将实 参值传递给形参; (2)函数执行过程中均为形参参与运算; (3)函数调用后,形参所对应的存储单元被释放, 实参保持原来的值不变。 【例5.4】 定义变量交换函数swap(),将两个整型变量
1.函数的定义格式
函数定义的一般格式为: 〔类型〕<函数名>(<形参表>) {<函数体> }
(1)类型 (2)函数名 (3)形参表:<类型> <形参名1>,<类型> <形参名2>… (4)函数体{}:由一系列语句组成。
空函数的定义格式为: 〔类型〕<函数名>(void){ }
完整版ppt
4
2.函数的形参
(3)递归约束条件: n≥0
例程
完整版ppt
12
递归
3.递归两个阶段
(1)递归阶段:将原问题不断分解为新的子问题,逐渐 从未知向已知推进,最终达到已知的条件,即递归结束条 件,此时递归阶段结束。
(2)回推阶段:从已知的条件出发,按照递归的逆方向, 逐一求值回推,最后达到递归的开始处,结束回推阶段, 从而完成整个递归调用过程。 【例5.7】 用递归法求裴波那契数列的前20个数,要求每行
f2函数
调用f函数 函数的直接递归调用
调用f2函数
调用f1函数
函数的间接递回调用
完整版ppt
11递归Βιβλιοθήκη 例【例5.6】 用递归法求n!。
分析:用递归方法求n!的公式为:
1
n=0
n!=
1
n=1
n*(n-1)! n>1
在利用递归求值时,必须注意三点:
(1)递归公式: n*(n-1)!
(2)递归结束条件: n=0或1
例程
cm
n
完整版ppt
10
5.2.2 函数的递归调用
函数递归调用定义:在函数体中出现直接或间接地调用 该函数本身的调用关系称为函数的递归调用。
1.直接递归:在函数f的定义过程中出现调用函数f。 2.间接递归: 在函数f1的定义过程中调用函数f2,而在
函数f2的定义过程中又调用了f1函数。
f函数
f1函数
完整版ppt
2
5.1 函数的定义和调用
5.1.1 函数的概念
函数概念:具备特定功能的独立程序段。
函数包括标准函数和自定义函数。
【例5.1】 在主函数中调用标准函数sin(x)与自
定义函数f(x)。
例程
通常将调用f(x)的函数(main())称为主调
函数,而将f(x)称为被调函数。
完整版ppt
3
5.1.2 函数的定义
完整版ppt
6
函数调用方式
(2)函数表达式
函数调用出现在一个表达式中,此时要求函数有确定的返回 值以便参与表达式的运算。
(3)函数参数
函数调用作为一个函数的实参。
【例5.3.1】用自定义函数求三个整数的最大值。 例程
4.函数返回语句return
(1)格式: return <表达式>; 或:return (<表达式>);
输出4个数。 例程
完整版ppt
13
5.3 数组作函数参数(习题课)
5.3.1 数组元素作函数实参
传送方式:值传送。
【例5.8】定义显示变量值函数print(),用 数组元素作函数实参,输出数组元素值。
例程
【例5.9】定义判素数的函数prime(),用
数组元素作函数实参,判断数组各元素
值是否为素数。若不是素则清0。最后输
出数组中的素数。
例程
完整版ppt
14
5.3.2 数组名作函数参数
1.一维数组作为函数参数
(1)函数定义格式 <类型><函数名>(<类型><数组名>[长度],…) { 函数体}
说明:对于一维数组而言,函数定义中的数组长度可省略。
(2)函数调用格式 函数名(数组名,…)
注意:实参数组名后不能加“[]”。
交换数据后输出。 例程
完整版ppt
9
5.2 函数的嵌套调用和递归调用
5.2.1 函数的嵌套调用
(1)函数不允许嵌套定义:即不允许在函数内再定义函数。 (2)函数可以嵌套调用:即在被调用函数体内又调用另一
个函数。
main函数
a函数
b函数
调用a函数
调用b函数
结束
返回
返回
函数的嵌套调用
【例5.5】 编写C++程序,求组合数 的值。
1.函数调用格式
函数调用的一般格式为: <函数名>(<实参表>)
其中,实参表的一般格式为: <实参1>,<实参2>, …
2.函数的实参
(1)实参为能求值的表达式 (2)实参和形参的类型应兼容
3.函数的三种调用方式
(1)函数调用语句。函数调用语句的一般格式为:
<函数名>(实参表); 此时不要求函数有返回值,只要求函数完成一定的操作。
(1)函数可以没有形参,则形成无参函数。在定义无参函
数时,形参表应该写成void。
无参函数的定义格式为:
〔类型〕<函数名>(void) {<语句序列> }
【例5.2】 无参函数的实例。 (2)C++对形参的个数没有限制。
例程
(3)必须依次说明每一个参数的数据类型。
完整版ppt
5
5.1.3 函数的调用