一个函数直接或间接地调用自己,称为函数的递归调用。所以函数递归调用的实现必须依靠系统提供一个特殊部件(堆栈)存放未完成的操作,以保证当递归调用结束回溯时不会丢失任何应该执行而没有执行的操作。为了理解函数递归调用的特性,参照例5.9的程序讨论函数递归调用的执行过程,为了讨论方便为程序加上行号。函数递归调用示例。......
2023-11-20
函数的嵌套调用即一个函数在被调用的过程中又调用了另外的一个函数。一个两层嵌套函数调用的执行过程如图5.7所示,程序在主函数main的执行过程中调用了函数fun1,此时主函数并未执行完成但程序的控制流程已经从主函数转移到了函数fun1中;函数fun1在执行的过程中又调用了函数fun2,此时函数fun1并未执行完成但程序的控制流程已经转移到了函数fun2中;函数fun2执行完成后程序的控制流程会返回到函数fun1中对fun2的调用点继续执行函数fun1中未完成部分,当函数fun1执行完成后程序的控制流程返回主函数继续执行直至程序执行完成。
【例5.8】 编程序计算e x的近似数(要求用下面的近似公式计算,精确到10-6)。
解题思路:针对上面的近似公式,可以把问题分解为“求各项值模块”和“求和模块”,对于“求各项值模块”又可以分解为“求幂模块”和“求阶乘模块”。设计3个函数的功能及对应的函数原型如下所示:
①powers函数,参数为x,n,返回值为xn,函数原型为:
double powers(double x,int n);
②fac函数,参数为n,返回值为n!,函数原型为:
double fac(int n);
③sum函数,参数为x,返回值为e x,函数原型为:(www.chuimin.cn)
程序执行时,main函数通过调用sum函数求各项之和,sum函数在每一项的计算过程中,又分别调用了powers函数和fac函数。函数fac和powers的返回值类型均被设计为double型,其主要目的是为了避免n!以及xn数值产生溢出错误。程序一次执行的过程和结果是:
?x:0.5 //0.5从键盘输入的数据
0.50 powers of e=1.648721 //程序执行结果
有关C语言程序设计基础(第3版)的文章
一个函数直接或间接地调用自己,称为函数的递归调用。所以函数递归调用的实现必须依靠系统提供一个特殊部件(堆栈)存放未完成的操作,以保证当递归调用结束回溯时不会丢失任何应该执行而没有执行的操作。为了理解函数递归调用的特性,参照例5.9的程序讨论函数递归调用的执行过程,为了讨论方便为程序加上行号。函数递归调用示例。......
2023-11-20
C语言中所有函数的定义都是平行的,也就是说,不能在函数定义中再定义其他函数。但是C语言允许在函数定义中再调用其他函数,这就是函数的嵌套调用。本例可编写两个函数,一个是用来计算平方值的函数f1(),另一个是用来计算阶乘值的函数f2()。图5.4函数的嵌套调用函数的嵌套调用使程序形成了一种自顶向下树型结构,如图5.5所示。一个C语言程序通常不是由少数几个大函数组成,而是由许许多多小函数组成。......
2023-11-18
但是允许在一个函数的定义中出现对另一个函数的调用,即函数的嵌套调用。图5.9函数嵌套调用与子程序嵌套类似,是在执行主函数main()中调用函数a()的语句时,转去执行函数a();在函数a()中调用函数b()时,转去执行函数b();在函数b()执行完毕,返回函数a()的继续执行;函数a()执行完毕,返回主函数main()。函数嵌套调用举例。图5.11程序运行结果统计一批数据中大于平均值的数据总数。图5.12程序运行结果......
2023-10-21
在C语言中,以函数首部声明函数的形式称为函数原型。使用函数原型是C语言的一个重要特征,主要作用是利用它在程序的编译阶段对调用函数的合法性进行全面检查。......
2023-11-18
针对不同的实际应用,数据排序方法有很多种。本节介绍两种常用排序方法的基本思想和实现方法,帮助读者初步理解排序方法的计算机解决思路。②不考虑已排好序的数据,将剩下的数据作为待排序列。编写程序实现冒泡排序算法,对随机生成的10个3位整数按升序进行排序并输出。......
2023-11-20
在C 语言程序中,是通过对函数的调用来执行函数体,其过程与子程序调用相似。在调用函数时,大多数情况下主调函数和被调函数之间有数据传递。图5.2程序运行结果函数调用在程序中起一个表达式或者语句的作用。在调用函数时,有3 种不同的方式。这就要求该函数必须是有返回值的。getchar 函数调用作为表达式使用,即赋值表达式的右操作。......
2023-10-21
一个循环结构的循环体内又包含另外一个完整的循环结构,称为循环的嵌套。循环嵌套层数可以是多层,称为多重循环。在某些具有规律性重复计算的问题中,如果被重复计算部分的某个局部又包含着另外的重复计算问题,就可以通过使用循环的嵌套结构来处理。while和for 3种循环控制结构均可互相嵌套,并且可以多层嵌套以适应不同的应用,下面列出最常见的几种二层循环嵌套结构:多层循环嵌套时,外层循环每执行一次,内层循环就完整执行一遍。......
2023-11-20
C语言把括号、赋值、强制类型转换等都作为运算符处理,灵活使用各种运算符可以实现在其他高级语言中难以实现的运算,功能强大。另外,C语言还把括号、下标、强制类型转换、取地址等都作为运算符处理,并通过与算数运算符的组合达到不同的目的,从而使程序更加简洁明了。C语言具有超强的可移植性。总之,C语言在运算符方面是比较容易让人混淆的。......
2023-11-18
相关推荐