函数与程序结构
C程序的构成和函数的构成
(1)C程序是由函数构成的。
一个C程序至少且包含一个main函数,也可以包含一个main函数和若干其他函数。
因此函数是C程序的基本单位。
被调用的函数可以是系统提供的库函数(比如: printf 和scanf函数),也可以是用户根据自己需要编制设计的函数。
C语言的函数就相当与其他语言的子程序。
用函数来实现特定的功能。
程序全部工作都是由各个函数分别完成的。
编写C程序就是编写一个个函数。
C的函数库十分丰富。
ANSI C提供一百多个库函数,Turbo C提供三百多个库函数。
C语言的这种特点使得容易实现程序的模块化。
(2)一个函数由两部分组成:A.函数的首部,即函数的第一行,包括函数名.函数类型.函数属性.函数参数(形式参数)名.参数类型。
如:一个函数名后面必须跟一对圆括号,括号内写函数的参数名及其类型。
函数可以没有参数,如main()。
B.函数体,即函数首部下面的花括号内的部分。
如果一个函数内有多个花括号,则最外层的一对花括号为函数体的范围。
函数体一般包括一下两部分:*声明部分。
在这部分中定义所用到的变量和对所调用函数的声明。
如main函数中对变量的定义“int a,b,c;”和对所调用的函数的声明“int max(int x,int y);”*执行部分。
由若干个语句组成。
当然,在某些情况下也可以声明部分,甚至可以即无声明部分也无执行部分。
如:void dump(){}它是一个空函数,什么也不做,但这是合法的C.一个C程序总是从main函数开始执行的,而不论main函数在整个程序的位置如何(main函数可以放在程序最开头,也可以放在程序最后,或在一些函数之前,或在另一些函数之后)。
D.C程序书写格式自由,一行内可以写几个语句,一个语句可以分写在多行上,C程序没有行号。
E.没个语句和数据声明的最后必须有一个分好。
分好是C语句的必要组成部分。
如:c=a+b;分好是不可缺少的。
即使是程序中最后一个语句也应包含分号。
C语言的四种程序结构
C语言的四种程序结构C语言是一种通用高级编程语言,被广泛应用于系统开发、嵌入式编程和科学计算等领域。
在C语言中,程序结构是指程序的组织方式和逻辑架构,它决定了程序的执行顺序和流程。
C语言具有四种基本的程序结构,分别是顺序结构、选择结构、循环结构和函数调用结构。
本文将对这四种程序结构进行详细介绍。
一、顺序结构顺序结构是最简单、最常见的程序结构,它按照代码的顺序执行,一行接一行地执行程序语句,没有任何跳转或分支。
它的基本形式如下:```c语句1;语句2;...```在顺序结构中,每一条语句都按照先后顺序依次执行,直到执行完所有语句为止。
这种结构适合于一些简单的操作,比如输入输出、变量赋值等。
二、选择结构选择结构根据条件判断的结果选择执行不同的代码段,它用于根据特定条件选择性地执行不同的代码。
C语言中最常见的选择结构是if 语句和switch语句。
1. if语句:if语句根据条件表达式的值决定是否执行特定的代码块。
它的基本形式如下:```cif (条件表达式) {执行语句块1;} else {执行语句块2;}```条件表达式的值为真时,执行语句块1;否则执行语句块2。
if语句可以嵌套,形成多层选择结构。
2. switch语句:switch语句根据表达式的值从多个选项中选择一个进行执行。
它的基本形式如下:```cswitch (表达式) {case 值1:执行语句块1;break;case 值2:执行语句块2;break;...default:执行语句块n;}```根据表达式的值,选择对应的case进行执行,如果没有匹配的case,则执行default中的语句块。
每个case后面必须加上break语句,以避免执行其他case的语句。
三、循环结构循环结构用于重复执行一段代码,直到满足特定的循环条件才终止。
C语言中最常见的循环结构是for循环、while循环和do-while循环。
1. for循环:for循环通过设置初始条件、循环条件和步进操作,按照规定的次数重复执行一段代码。
C语言中的结构化编程和函数模块化
C语言中的结构化编程和函数模块化在软件开发过程中,结构化编程和函数模块化是两个非常重要的概念。
它们能够帮助程序员更好地组织代码、提高代码的可读性和模块化程度,从而提高软件的开发效率和维护性。
本文将介绍C语言中的结构化编程和函数模块化,并探讨如何应用这些概念来写出高效、可维护的C语言程序。
一、结构化编程结构化编程是一种编程范式,它的核心思想是将程序分解为多个小而独立的模块,每个模块有一个特定的功能,并通过顺序、选择和循环等结构将这些模块连接起来。
结构化编程强调代码的结构化和逻辑的清晰性,以及消除程序中的混乱和难以理解的部分。
在C语言中,结构化编程的实现主要依赖于函数和控制结构。
1. 函数函数是C语言中实现结构化编程的基本组织单位。
通过将代码划分为多个函数,每个函数具有特定的功能,可以让程序更易于理解、修改和测试。
在编写函数时,需要遵循一些规范和最佳实践:- 函数应该具有良好的命名,能够准确地描述函数的功能。
- 每个函数应该只负责一个具体的任务,遵循“单一职责原则”。
- 函数的参数应该被合理地设计,避免参数过多或过少。
- 函数应该尽可能地短小,每个函数的代码行数应该控制在一个可读性良好的范围内。
- 函数应该遵循“高内聚、低耦合”的原则,减少代码之间的依赖关系。
2. 控制结构控制结构用于控制程序的执行流程,常见的控制结构包括顺序结构、选择结构和循环结构。
在编写结构化程序时,需要合理地运用这些控制结构来实现代码逻辑的清晰化。
- 顺序结构:代码按照从上到下的顺序依次执行。
- 选择结构:根据条件判断选择执行不同的代码块,例如if语句和switch语句。
- 循环结构:根据条件重复执行代码块,例如while循环和for循环。
二、函数模块化函数模块化是将程序分解为多个模块或功能块,并通过调用这些模块来实现程序的功能。
函数模块化能够提高代码的可重用性和可维护性,减少了代码的重复编写和修改。
在C语言中,实现函数模块化通常包括以下几个步骤:1. 功能划分将程序的功能划分为多个小而独立的模块。
python的程序结构
python的程序结构Python 程序结构Python 是一种高级解释型编程语言,具有清晰简洁的语法,使其易于阅读、编写和维护。
Python 程序通常遵循以下结构:1. 导入程序开始时,通常会导入所需的模块或库。
模块是包含特定功能或类集合的文件,而库则是一组相关模块的集合。
导入语句使程序能够访问这些模块中的功能和类。
2. 函数函数是Python 中代码的组织块。
函数封装了特定任务或操作,可以从程序的其他部分调用。
函数通常包含一个函数头和一个函数体。
函数头指定函数名和参数,而函数体包含要执行的代码。
3. 类和对象类是对象的蓝图或模板。
类定义了对象的属性和方法,而对象是类的实例。
对象存储特定于该实例的数据,并可以访问类定义的方法。
4. 控制流控制流语句用于控制程序的执行流。
这些语句包括条件语句(例如 if、elif 和 else)、循环语句(例如 for 和 while)和异常处理语句(例如 try 和 except)。
5. 数据结构Python 提供了各种内置数据结构,如列表、元组、字典和集合。
这些结构用于组织和存储数据,并在程序中广泛使用。
6. 文件 I/O文件 I/O 操作使程序能够读取和写入文件。
Python 提供了内置函数和模块,用于打开、读取、写入和关闭文件。
7. 错误处理错误处理机制使程序能够处理和报告错误。
Python 使用异常对象来表示错误,异常处理语句用于捕获和处理这些异常。
总的来说,Python 程序结构提供了灵活且高效的方式来组织和执行代码。
它的模块化设计、代码重用性和强大的数据结构使其成为各种应用程序的理想选择。
python基本结构
python基本结构Python是一种面向对象的,解释型的计算机编程语言。
它的设计思想是“以人为本”,其开发的目的是为了建立一个实用的、实惠的和易于使用的编程环境,以满足许多应用领域的需求,如系统管理、脚本、Web项目、科学计算以及图形界面编程。
Python的语法非常易懂,适用性很强,它具有如下几个特点: 1.洁明了:Python的语法非常简洁明了,读者容易掌握,可以快速上手。
2.能强大:Python具有许多内建功能和程序库,可以让开发者快速开发,提高工作效率。
3 .可移植性强:Python是一种跨平台的语言,可以运行于不同的操作系统上,可以解决很多跨平台的问题。
Python主要结构由程序,语句,表达式和模块组成,其中程序是Python程序的最小单元,语句由表达式组成,而模块是由程序或语句组成的完整程序文件。
程序是Python语言编写的每一段代码,它可以包含函数、类等。
Python序可分为两类:顶层程序和模块。
顶层程序是独立的程序文件,可以通过Python解释器直接运行,而模块是组成较大程序的一部分,可以在其他的Python程序文件中引用运行。
语句是组成程序的基本单位,它包括赋值语句、控制语句、函数定义语句、导入语句等。
赋值语句的作用是给变量赋值,控制语句用于控制程序的执行顺序,函数定义语句用于定义函数,导入语句用于导入模块。
表达式由运算符和操作数组成,它主要用来表示运算过程,常用的表达式包括算术表达式、逻辑表达式、关系表达式和赋值表达式等。
模块是由函数定义和程序组成的文件,它可以被其他程序调用,它可以定义模块内的函数,也可以定义类和变量。
Python的标准库是一组完整的模块集合,它包含如数据结构、字符串处理、日期时间、网络编程、文件处理等基本模块,这些模块极大地丰富了用户的编程选择,让开发者可以轻松解决各种问题。
总之,Python结构简单易懂,功能强大,可移植性高,可以用来完成复杂的任务,提高程序的开发效率。
第三章 输入输出函数与顺序结构程序设计
3.1格式化输出函数printf( )
案例3-1 计算三个学生的平均成绩 存放三个学生的考试成绩 显示三个学生的成绩 计算平均分后显示该信息
程序代码
/*代码文件名:code3_1.c*/ #include <stdio.h> main() { int score1=12,score2=23,score3=25; /*定义并初始化三个学生成绩 */ float avg; /*输出三个学生成绩*/ printf("score1=%d, score2=%d, score3=%d\n", score1, score2, score3); avg=( score1+ score2+ score3)/3.0;/*计算平均分*/ printf("平均分avg=%f\n",avg); /*输出平均分*/ }
非格式字符
如果格式控制串中有非格式字符则输入时也要 输入该非格式字符。 例如: scanf("%d,%d,%d",&a,&b,&c); 其中用非格式符“ , ”作间隔符,故输入 时应为: 5,6,7 又如: scanf("a=%d,b=%d,c=%d",&a,&b,&c); 则输入应为: a=5,b=6,c=7
尽量不要在输出语句中改变输出变量的值,因 为可能会造成输出结果的不确定性。例如:int k=8;printf(“%d,%d\n”,k,++k);输出结果不是8, 9,而是9,9。这是因为调用函数printf时,其 参数是从右至左进行处理的,将先进行++k运 算。 输出数据时的域宽可以改变。若变量m、n、i 和f都已正确定义并赋值,则语句 printf(%*.*f,m.n,f);将按照m和n指定的域宽 输出浮点型变量f的值,并不输出m、n的值。
常见程序设计结构
常见程序设计结构一、顺序结构顺序结构是程序中最基本的结构之一,也是最常见的结构。
顺序结构表示程序按照代码的顺序一步步执行,每一行代码都会被依次执行,直到程序结束。
例如,在一个简单的计算器程序中,用户输入两个数值,程序按照顺序执行加法、减法、乘法和除法运算,并输出结果。
代码如下:```num1 = input("请输入第一个数值:")num2 = input("请输入第二个数值:")sum = float(num1) + float(num2)difference = float(num1) - float(num2)product = float(num1) * float(num2)quotient = float(num1) / float(num2)print("加法结果:", sum)print("减法结果:", difference)print("乘法结果:", product)print("除法结果:", quotient)```二、分支结构分支结构用于根据不同的条件选择不同的执行路径。
根据条件的真假,程序会执行不同的代码块。
常见的分支结构有单分支结构和双分支结构。
1. 单分支结构单分支结构根据条件的真假决定是否执行某个代码块。
如果条件为真,则执行该代码块;如果条件为假,则跳过该代码块。
例如,在一个学生成绩管理系统中,根据学生的成绩判断是否及格。
如果成绩大于等于60分,则输出"及格";否则输出"不及格"。
代码如下:```score = float(input("请输入学生成绩:"))if score >= 60:print("及格")```2. 双分支结构双分支结构根据条件的真假选择不同的执行路径。
实验3-函数与程序结构
计算机程序设计实验报告姓名班级学号实验日期2011-9-26 课程名称计算机程序设计指导教师成绩实验三:函数与程序结构一、实验目的1、掌握函数声明、定义和使用的方法。
2、掌握全局变量、局部变量、静态局部变量的概念和使用方法。
3、掌握自定义头文件的方法,学会建立和调试多文件程序。
二、实验环境1.硬件环境:微机2.软件环境:Windows XP;Microsoft Visual C++6.0 集成开发环境。
三、实验内容1、实验题目:分析程序运行结果#include <iostream.h>int n;int func(int x);void main(){int a,b;a=5;b=func(a);cout<<"\nlocal a="<<a<<endl<<"local b="<<b<<endl<<"globel n="<<n<<endl;a++;b=func(a);cout<<"\nlocal a="<<a<<endl<<"local b="<<b<<endl<<"globel n="<<n<<endl;}int func(int x){int a =1;static int b=10;a++;b++;x++;n++;cout <<"\nlocal func a="<<a<<endl<<"local func b="<<b<<endl<<"parameter x="<<x<<endl;return b;}(1)基本要求:(a)运行该程序,给出运行结果。
c语言程序的基本结构
c语言程序的基本结构C语言是一种广泛应用于计算机编程的高级编程语言,被广泛应用于系统软件、应用软件、嵌入式系统等领域。
了解C语言程序的基本结构对于学习和理解C语言的编程技巧以及写出高效、稳定、易于维护的代码至关重要。
本文将介绍C语言程序的基本结构,以便读者快速上手和编写C语言程序。
一、预处理指令C语言程序通常以预处理指令开始,预处理器会根据这些指令对代码进行预处理,例如移除注释、插入文件等操作。
预处理指令以"#"开头,常见的预处理指令包括:1. #include:用于包含文件,将指定的文件内容插入到当前位置。
例如:`#include <stdio.h>`表示包含标准输入输出头文件。
2. #define:用于定义宏,将一段代码标识为一个宏,并在后续代码中使用。
例如:`#define PI3.14159`定义了一个名为PI的宏,它的值是3.14159。
二、函数声明在C语言程序中,函数是代码的基本组织单元。
函数声明用于向编译器说明函数的名称、参数个数和类型以及返回值类型。
函数声明的语法如下:```返回值类型函数名(参数列表);```例如,以下是一个函数声明的例子:```int add(int a, int b);```三、主函数C语言程序必须包含一个特殊的函数,称为主函数(main函数)。
主函数是程序的入口点,程序在运行时会从主函数开始执行。
主函数的基本结构如下:```返回值类型 main(参数列表) {// 函数体return 0;}```其中,返回值类型通常为int,表示函数执行完成后返回的结果。
参数列表是通过命令行传递给程序的参数,可以为空。
函数体中编写程序的具体逻辑,return语句用于返回结果并结束函数的执行。
```int main() {printf("Hello, World!");return 0;}```四、函数定义函数定义用于给出函数的具体实现。
C语言程序设计(第3版)何钦铭 颜 晖 第10章 函数与程序结构
第10章函数与程序结构【练习10-1】使用递归函数计算1到n之和:若要用递归函数计算sum=1+2+3+…+n(n为正整数),请写出该递归函数的递归式子及递归出口。
试编写相应程序。
解答:递归式子: sum(i) = sum(i-1) + i;递归出口: sum(i) = 0;【练习10-2】请完成下列宏定义:① MIN(a,b) 求 a,b 的最小值② ISLOWER(c) 判断 c 是否为小写字母③ ISLEAP(y) 判断 y 是否为闰年④ CIRFER(r) 计算半径为 r 的圆周长解答:① MIN(a, b):求a,b的最小值。
#define MIN(a,b) (a<b)? a: b② ISLOWER(c):判断c是否为小写字母。
#define ISLOWER(c) (c>='a'&&c<='z')③ ISLEAP(y):判断y是否为闰年。
#define ISLEAP(y) (y%4==0&&y%100!=0)||y%400==0)④ CIRFER(r):计算半径为r的圆周长。
#define PI 3.14159#define CIRFER(r) 2*PI*(r)【练习10-3】分别用函数和带参宏实现从 3 个数中找出最大数,请比较两者在形式上和使用上的区别。
解答:(1)函数实现int max(int x,int y,int z){int t;if(x>=y)if(x>=z) t=x;else t=z;elseif(y>=z) t=y;else t=z;return t;}(2)宏实现#define MAX( x, y, z ) x>=y? (x>=z? x:z) : (y>=z? y:z)两者在定义形式上完全不同。
使用上函数是在执行时,从主调函数转到函数 max(),然后再返回到主调函数,函数体始终存在;而宏是在编译预处理时,用条件表达式去替换MAX(int x, int y, int z ),等程序执行时,执行的是条件表达式,而不再存在 MAX(int x, int y,int z )的式子。
c程序的基本框架
c程序的基本框架C程序的基本框架引言:C语言作为一种常用的编程语言,其基本框架是指程序的基本结构和组织方式。
正确的程序框架能够使程序具有良好的可读性、可维护性和可扩展性。
本文将介绍C程序的基本框架,包括主函数、头文件引用、全局变量定义、函数定义和函数调用等内容。
一、主函数C程序的主函数是程序的入口,程序从主函数开始执行。
主函数的基本框架如下:```cint main(){// 程序逻辑代码return 0;}```在主函数中,可以编写程序的逻辑代码,包括变量定义、输入输出、控制语句等。
主函数的返回值类型为int,通常返回0表示程序执行成功。
二、头文件引用在C程序中,使用头文件可以引入外部定义的函数和变量,以及预定义的常量和数据类型。
头文件的引用通常放在程序的开头,用于声明和定义程序所需的函数和变量。
头文件的引用语句的基本框架如下:```c#include <头文件名>```其中,头文件名是指包含所需函数和变量声明的头文件的名称。
常见的头文件包括stdio.h(标准输入输出)、stdlib.h(标准库函数)、math.h(数学函数)等。
三、全局变量定义全局变量是指在函数外定义的变量,其作用域为整个程序,可以在程序的任何地方进行访问。
全局变量的定义通常放在函数之外,程序的开头或头文件中。
全局变量的基本框架如下:```c数据类型变量名;```全局变量的命名应具有描述性,并符合命名规范,以提高程序的可读性和可维护性。
四、函数定义函数是C程序的基本组成单元,用于实现特定的功能。
函数定义包括函数头和函数体两部分。
函数头用于声明函数的名称、参数列表和返回值类型,而函数体包含函数的具体实现。
函数的定义基本框架如下:```c返回值类型函数名(参数列表){// 函数体代码return 返回值;}```其中,返回值类型是函数返回值的数据类型,函数名是函数的名称,参数列表是函数接收的参数,函数体代码是函数的具体实现。
C语言课件:第11讲 函数与程序结构
程序设计基础
9
B 函数设计
• 读行函数:
• 判读文件中“还有未读的行” • 读行函数,直接调用fgets函数
• 子串查找函数:判定“一行字符串是否包含指定的子串”
• 直接利用字符串比较函数char *strstr(const char *string, const char *strSearch)
• Windows:集成开发环境(VC++ 6.0、VS等)
• 集成开发环境中的编译器是面向工程的。工程(project)描述了一 个程序所使用的资源,包括源代码文件。
• 对于多文件程序,必须将所有源代码文件加入到同一个工程。 • 执行编译时自动建立各文件之间的链接,生成唯一的可执行文件。
程序设计基础
a、c生存期 main
f2
main f1
b生存期
f2
f1
main
13
变量作用域:示例
int nmax = 20; int main (void)
{
问题1:各变量的作用域?
iint aa == 00,,b b= =1,1,c,cn,, nn;max = 25;
printf ("%3d: %d\n", 1, a);
原始文本: Ah Love! could you and I with Fate conspire To grasp this sorry Scheme of Things entire, Would not we shatter it to bits -- and then Re-mould it nearer to the Heart’s Desire!
输出文本: Ah Love! could you and I with Fate conspire Would not we shatter it to bits -- and then Re-mould it nearer to the Heart’s Desire!
c语言程序的基本结构
c语言程序的基本结构
C语言程序的基本结构包括以下部分:
1. 头文件包含
在程序开始的部分需要对应用程序所需的函数和变量进行声明,这些函数和变量通常被定义在头文件中,因此需要使用#include指令将这些头文件引入到程序中。
2. 宏定义
在程序中需要定义一些常量或者宏,方便在程序中进行调用,通常使用#define 指令来定义。
3. 函数定义
函数是C语言程序的主要组成部分,程序可以通过函数实现特定的功能。
函数定义包括函数名、输入参数、返回值等。
4. 变量定义
变量是程序中用来存储数据的一种数据类型。
在程序中需要定义不同类型的变量,
并赋予初始值。
5. 主函数
程序的主函数是C语言程序的入口函数,它是程序执行的起点。
主函数包括函数头和函数体,执行程序的主要功能。
6. 函数调用
函数调用是程序的主要逻辑过程,程序可以通过调用不同的函数来实现特定的功能。
7. 控制语句
C语言提供了多种控制语句来帮助程序实现不同的逻辑功能,如if-else语句、for循环语句、while循环语句等。
以上是C语言程序的基本结构,程序员需要按照程序的需要合理地组织程序的逻辑结构,编写出高效、可读性高的程序。
c语言程序的构成
c语言程序的构成
C语言程序的构成
C语言是一种广泛使用的通用高级程序设计语言,它是由Dennis M. Ritchie在1971年发明的,并且仍然处于当今计算机世界的核心地位。
C语言在软件工程世界中处于重要的地位,尤其在嵌入式系统的开发方面,它提供了一个灵活、高效、功能强大的编程环境。
C语言程序的构成包括三个部分:函数,变量和语句。
1. 函数:函数是C语言程序的基本单元,它由一系列语句组成,按照一定的顺序,应用于某种特定的目的。
函数可以分为两类:内置函数和用户定义函数。
内置函数是指C语言提供的一些函数,如printf()、scanf()等;而用户定义函数是指程序员自己定义的函数,它可以实现某种功能,并返回一个值,例如求和函数sum()等。
2. 变量:C语言程序中的变量是程序执行过程中所要操作的对象,它可以用来存储和传递信息。
变量可以分为两类:局部变量和全局变量。
局部变量是指函数内部定义的变量,它仅在函数内部可见,函数外部不可见;而全局变量是指整个程序都可以访问的变量,它可以在任何地方被访问。
3. 语句:C语言程序中的语句是实现程序功能的基本单元,它由一个或多个关键字,以及它们之间的运算符和常量组成。
C语言中的语句主要有算术语句、条件语句、迭代语句、跳转语句、函数调用语句等。
C语言程序由上述三部分构成,函数是最基本的单元,变量用于存储和传递信息,而语句则提供了实现程序功能的基本方式。
因此,C语言程序的构成是函数、变量和语句。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数fact(n),则fact (n)的实现依赖于fact(n-1)。
例10-2 用递归函数求n!。10.2.2递归函数基本概念
#include <stdio.h>
double fact(int n);
int main(void)
{ int n;
scanf ("%d", &n);
printf ("%f", fact (n) );
函数m
函数 1_1
函数 1_2
函数 … 函数 m_1 … m_n
10.1.1 程序解析-计算常用圆形体体积
例10-1 设计一个常用圆形体体积计算器,采用 命令方式输入1、2、3,分别选择计算球体、 圆柱体、圆锥体的体积,并输入计算所需相应 参数。
分析:
输入1、2、3选择计算3种体积,其他输入结束计 算
cal (sel); } void cal (int sel) { ……
例10-1 分析
main( )
cal ( )
} double vol_ball( ) vol_ball ( ) {
…… } double vol_cylind( ) {
…… } double vol_cone( ) {
…… }
vol_cylind ( )
y = fact(3); …… z = mypow(3.5, 2); …… } double fact(int n) { …… } double mypow(double x, in n) { …… }
main
fact
mypow
main fact
mypow
10.1.2 函数的嵌套调用
嵌套调用
int main(void)
return 0;
} double fact(int n)
/* 函数定义 */
{ double result;
if (n==1 || n == 0)
/* 递归出口 */
result = 1;
else
result = n * fact(n-1);
return result;
}
10.2.2 递归函数基本概念
同时有4个函数在运
fact(3)= 3*fact(2)= 3*2=6 行,且都未完成
2*fact(1)= 2*1=2
main()
fact(3)
{ ....
{ ....
printf(fact(3)) f=3*fact(2)
}
return(f)Fra bibliotek}fact(1)=1
fact(2) { ....
f=2*fact(1) return(f) }
vol_cone ( )
10.1.2 函数的嵌套调用
在一个函数中再调用其它函数的情况称为函 数的嵌套调用。
如果函数A调用函数B,函数B再调用函数C, 一个调用一个地嵌套下去,构成了函数的嵌套 调用。
具有嵌套调用函数的程序,需要分别定义多个 不同的函数体,每个函数体完成不同的功能, 它们合起来解决复杂的问题。
ddoouubblelevdvoolu_l_bccyloelinnveod(l(_))ball( )
{{ ddoouubbl{elerrd,,ohhu;b; le r ;
pprrininttff((""请请p输r输in入入tf圆(圆"请柱锥输的的入底底球圆圆的半半半径径径和和:高高"::);""));;
return 0;
}
double fact(int n)
{ double result;
if (n==1 || n == 0)
result = 1;
递归出口
else
fact(n)=n*fact(n-1);
result = n * fact(n-1); 递归式
return result;
}
递归函数 fact( n )的实现过程
避免函数功能间的重复。对于在多处使用的同一个计算 或操作过程,应当将其封装成一个独立的函数,以达到 一处定义、多处使用的目的,以避免功能模块间的重复。
减少全局变量的使用。应采用定义局部变量作为函数的 临时工作单元,使用参数和返回值作为函数与外部进行 数据交换的方式。只有当确实需要多个函数共享的数据 时,才定义其为全局变量。
10.2 汉诺塔问题
10.2.1 程序解析 10.2.2 递归函数基本概念 10.2.3 递归程序设计
10.2.1 汉诺(Hanoi)塔问题解析
A
B
C
将64 个盘从座A搬到座B
(1) 一次只能搬一个盘子 (2) 盘子只能插在A、B、C三个杆中 (3) 大盘不能压在小盘上
分析
A
B
C
分析
n A
n-1 A
n!= 1×2×3×…×n
用循环语句实现:
result = 1;
for(i = 1; i <= n; i++)
result = result * i;
递归法
n!= n ×(n-1)! =1
当n>1 当n=1或n=0
递归式子 递归出口
即求n!可以在(n-1)!的基础上再乘上n。如果把求n!写成函
函数实现:通过逐步求精,把程序要解决的全局目标分 解为局部目标,再进一步分解为具体的小目标,把最终 的小目标用函数来实现。问题的逐步分解关系,构成了 函数间的调用关系。
函数设计时应注意的问题
限制函数的长度。一个函数语句数不宜过多,既便于阅 读、理解,也方便程序调试。若函数太长,可以考虑把 函数进一步分解实现。
}
/* 递归出口 */ /* 递归调用 */
例10-4 汉诺(Hanoi)塔问题
A
B
C
hanio(n个盘,A→B,C为过渡)
{ if (n == 1) 直接把盘子A→B
else{ hanio(n-1个盘,A→C,B为过渡) 把n号盘 A→B hanio(n-1个盘,C→B,A为过渡)
} }
/* 搬动n个盘,从a到b,c为中间过渡 */ void hanio(int n, char a, char b, char c)
ssccaannff((""%%slcflf%a%nlflff"(","&,%&rr,l&,f&"h,h&));r;);
rreettuurrnn((PPIr*Ie*rrt**urr*r*hnh)(/;43.0/)3; .0*PI*r*r*r);
}}
}
10.1.2 函数的嵌套调用
顺序调用
int main(void) { ……
n-1
A
B
C
算法:
hanio(n个盘,A→B, C为过渡)
{ if (n == 1)
直接把盘子A→B
else{
hanio(n-1个盘,A→C, B为过渡)
把第n号盘 A→B
hanio(n-1个盘,C→B, A为过渡)
}
}
10.2.2递归函数基本概念
例10-2 用递归函数实现求n!
递推法
在学习循环时,计算n!采用的就是递推法:
B
C
n-1
B
C
分析
n
A
B
C
A
B
C
10.2.1 汉诺(Hanoi)塔问题解析
递归方法的两个要点
(1)递归出口:一个盘子的解决方法; (2)递归式子:如何把搬动64个盘子的问题简
化成搬动63个盘子的问题。
把汉诺塔的递归解法归纳成三个步骤:
n-1个盘子从座A搬到座C 第n号盘子从座A搬到座B n-1个盘子从座C搬到座B
10.2.3 递归程序设计
例10-3 编写递归函数reverse(int n)实现将 整数n逆序输出。
分析:
将整数n逆序输出可以用循环实现,且循环次数 与n的位数有关。递归实现整数逆序输出也需要 用位数作为控制点。归纳递归实现的两个关键 点如下:
递归出口:直接输出n,如果n<=9,即n为1位数 递归式子:输出个位数n%10,再递归调用
Chap 10 函数与程序结构
10.1 圆形体积计算器 10.2 汉诺塔问题 10.3 长度单位转换 10.4 大程序构成
本章要点
怎样把多个函数组织起来? 怎样用结构化程序设计的思想解决问题? 怎样用函数嵌套求解复杂的问题? 怎样用函数递归解决问题? 如何使用宏? 如何使用多文件模块构建较大规模程序
设 计 一 个 控 制 函 数 cal(), 经 它 辨 别 圆 形 体 的 类 型 再调用计算球体、圆柱体、圆锥体体积的函数
设计单独的函数计算不同圆形体的体积
程序结构
main( )
cal ( )
vol_ball ( ) vol_cylind ( ) vol_cone ( )
3层结构,5个函数 降低程序的构思、编写、调试的复杂度 可读性好
源程序
{ if (n == 1) printf("%c-->%c\n", a, b);
else{ hanio(n-1, a, c, b);
input the number of disk: 3 the steps for 3 disk are: a-->b
10.1 圆形体积计算器
使用结构化程序设计方法解决复杂的问题
把大问题分解成若干小问题,小问题再进一步分解成 若干更小的问题
写程序时,用main()解决整个问题,它调用解决小问 题的函数
这些函数又进一步调用解决更小问题的函数,从而形 成函数的嵌套调用
程序结构