C语言函数详解PPT课件
合集下载
C语言函数.ppt
![C语言函数.ppt](https://img.taocdn.com/s3/m/5c559698a76e58fafbb00336.png)
递归的优缺点
优点:为某些编程问题提供了最简单的解 决办法
缺点:递归算法会很快的耗尽计算机的内 存资源,难于维护和阅读
本讲内容
基本函数概念 函数的递归 局部变量和全局变量 变量的存储类别
局部变量和全局变量
局部变量
在一个函数内部定义的变量是内部变量,它只在本函数范围内有效,也 就是说只有在本函数内才能使用它们,在此函数以外是不能使用这些变 量的。这称为“局部变量”
从用户使用的角度看,函数有两种: 标准函数,即库函数。这是由系统提供的,用户不必自己定义这 些函数,可以直接使用它们。应该说明,每个系统提供的库函数 的数量和功能不同,当然有一些基本的函数是共同的 用户自己定义的函数,以解决用户的专门需要
从函数的形式看,函数分两类 无参函数。在调用无参函数时,主调函数并不将数据传送给被调 用函数,一般用来执行指定的一组操作。无参函数可以带回或不 带回函数值,但一般以不带回函数值的居多 有参函数。在调用函数时,在主调函数和被调用函数之间有参数 传递,也就是说,主调函数可以将数据传给被调用函数使用,被 调用函数中的数据也可以带回来供主调函数使用。
编写和使用一个简单的函数
带参数的函数
定义带参数的函数(形式参数)
函数定义以下面的ANSI C函数头开始
ANSI C也接受ANSI之前的形式,但将其视 为废弃不用的形式
调用带参数的函数(实际参数)
使用实际参数对形式参数赋值 实际参数可以是常量、变量或一个复杂的
表达式
调用带参数的函数(实际参数)
float fl(int a) {int b,c; … }
a,b,c有效
Char f2(int x,int y)
{int i,j; … }
x,y,i,j有效
《C语言函数》PPT课件
![《C语言函数》PPT课件](https://img.taocdn.com/s3/m/6d7a7b895ef7ba0d4b733b4a.png)
#include <stdio.h>
int sum(int a, int b)
{
a=a+b;
b=a+b;
函数被调用之前,形参和子函数中的变量
return(a);
不占内存,调用结束返回,形参所占的内存被收回.
}
实参和形参传递的是”值传递”,
void main() {
即单向传递, 只与参数相对位置有关,而与 变量名无关
void printMessage() {
printf(“Hello, world.\n”); printStar(); }
void main() {
printStar(); printMessage(); }
-
12
C语言程序设计
第 6 章 模块化程序设计--函数
函数的调用
一、函数调用一般形式
一般形式: 函数名(实参列表)
3.实参可以是常量、变量或表达式.
z=c(=x>( ya)>?bx) :?ya; :b;
因为传递过来的是具体数值.
retruertnu(rzn)(;c);
4.实参和形参类型必须一致(或可以安全转换).
} void main()
5.C语言中,实参和形参传递的是”按值传递”, {
即单向传递, 只与参数相对位置有关,而与
按生存期局部变量全局变量自动变量静态变量寄存器变量形式参数变量动态存储静态存储自动变量形式参数寄存器变量静态局部变量全局变量按变量的存放位置动态存储区静态存储区自动变量形式参数静态局部变量全局变量寄存器寄存器变量c语言程序设计模块化程序设计函数202137chenli33自定义的函数有两种
模块化程序设计
C语言(函数)ppt课件
![C语言(函数)ppt课件](https://img.taocdn.com/s3/m/e93ba9b0a58da0116c17497b.png)
} main() { int x=6, y=5, z;
如果x, y是字符型,则自动 进行类型转换,结果正确;
z=max(x, y);
如果x, y是短整型,则自动
printf(“%d”, z); }
进b=y行; 类型转换,结果正确;
a=x;
如果x在或参数y传是递时实数,则自动 进行类型转换,有数据丢失,
• 在被调函数内改变形参的值不会改变主调函数中 实参的值。
• 如果函数不需要修改参数的值,就采用这种调用 方式。
– 引用传递
• 主调把实参“自身”传递给被调函数的形参。 • 在被调函数内改变形参的值将改变主调函数中实
函数
参数传递
i{•ntin实mtaxc参(=ai>n=t和b?aa,形:bi;n参t b)的类型确应如;该果相x, y同是或整赋型,值则兼结容果。正 return c;
在函数调用结束后,形参所 占存储单元被释放。
函数
实参
• 实参 int max(int a, int b)
{ int c=a>=b?a:b; return c;
} main() { int a, b, c;
scanf(“%d%d”, &a, &b);
a b c=max( , );
}
实参是函数调用时主调函数 传送给被调函数的形式参数的 实际值。
void main() {
int
int
int
int a, b, c;
printf(“Input three integers: ");
scanf("%d%d%d", &a, &b, &c);
printf("Maximum is: %d\n", maximum(a, b, c));
C语言专用版PPT--《函数》
![C语言专用版PPT--《函数》](https://img.taocdn.com/s3/m/0601e2e1856a561252d36f2b.png)
说明:
1. 定义函数时,形参不占内存单元 ; 调用函数时,形参才分配内存单元 ; 调用结束后,形参所占内存单元被释放。 2. 实参可以是常量、变量或表达式,但必须有确 切的值。 3. 定义函数,必须指明形参类型。 4. 实参与形参类型一致。 5. 实参变量对形参变量的数据传递是“值传递 ”, 即 单向 传递。 6. 可在“形参表列”中说明形参类型。 int max( int x , int y ) { 函数体 }
第8章 函数
8.1 概述 程序结构概念 : 1)较大的程序应分为若干个程序模块 ; 2)每个模块实现单一的特定功能; 3)由主函数开始执行,主函数调用子函数; 4)子函数之间可以互相调用。
说明 : 一个源文件可由一个或多个函数组成; 一个源文件是一个编译单位; 一个 C 程序由一个或多个源文件组成。 从 main() 开始,调用其它函数后, 回到 main() 结束 ; 5. 不能嵌套定义,但可互相调用 。 6. 分类 : 1) 标准函数 和 用户自定义函数 ; 2) 无参函数 和 有参函数 。 1. 2. 3. 4.
8.3.2 函数的返回值
说明 : 1. 通过 return 语句获得返回值 ;
2. 定义函数时指定函数返回值的类型;不加类型说明
的,按整型处理。
3. 函数值的类型和 return 语句中表达式的值不一
致时,以函数类型为准。 4. 被调用函数中没有 return 语句时,带回一个不
确定的值。
5. 为了明确表示“不带回值”,可以用“ void ” 定
函数定义
函数定义是指对函数功能的确 立,包括指定函数名、函数值 类型、形参个数及类型、函数 体等。它是一个完整、独立的 程序单位。
例2: float add(x,y) float x,y; { float z; z=x+y; return(z); }
C语言课件第六章函数
![C语言课件第六章函数](https://img.taocdn.com/s3/m/1aeebb4177c66137ee06eff9aef8941ea76e4b3a.png)
}
printf(“Max=%d”,a);
}
合 iTemp的作用域。 iTemp 肥 ⒉register存储类型
工 作用域和生存期和auto相同,
差别在于,如果CPU内部的寄存
业 器空闲,则使用寄存器作为变量 大 的存储单元,以提高速度。主要
用于循环变量。
学
⒊static(静态)存储类型
作用域:在定义的复合语句内引用,出了复合语句不可见。
定义!
学
⒉函数的定义
格式: type 函数名(参数说明表) int max(int x ,int y)
{ 内部说明语句 ;
如果函数有{ 返回值,应含
功能语句 ; 有return语句。int z ;
Xuan shanli
}
z=x>=y? x : y ;
说明:
合 ⑴函数不能嵌套定义,但可以嵌套引r用et,ur包n (括z引) ;用自己。
关于返回值的几点说明:
⑴函数可以通过一个return语句返回一个值,也可以不返回值,
此时应在定义函数时用void类型加以说明。
⑵函数中可以出现多个return语句,遇到一个return 语句,则
返回值,且返回调用函数,继续执行。
⑶返回值的类型应与函数的类型一致,如不一致,以函数类型
Xuan shanli
fun( );
a
printf(“a=%d,b=%d\n”,a,b);
}
合
void fun(void) {
b
肥
int c;
工
c=a; a=b; b=c; }
业
大
学
外部变量的副作用
Xuan shanli
#include <stdio.h>
printf(“Max=%d”,a);
}
合 iTemp的作用域。 iTemp 肥 ⒉register存储类型
工 作用域和生存期和auto相同,
差别在于,如果CPU内部的寄存
业 器空闲,则使用寄存器作为变量 大 的存储单元,以提高速度。主要
用于循环变量。
学
⒊static(静态)存储类型
作用域:在定义的复合语句内引用,出了复合语句不可见。
定义!
学
⒉函数的定义
格式: type 函数名(参数说明表) int max(int x ,int y)
{ 内部说明语句 ;
如果函数有{ 返回值,应含
功能语句 ; 有return语句。int z ;
Xuan shanli
}
z=x>=y? x : y ;
说明:
合 ⑴函数不能嵌套定义,但可以嵌套引r用et,ur包n (括z引) ;用自己。
关于返回值的几点说明:
⑴函数可以通过一个return语句返回一个值,也可以不返回值,
此时应在定义函数时用void类型加以说明。
⑵函数中可以出现多个return语句,遇到一个return 语句,则
返回值,且返回调用函数,继续执行。
⑶返回值的类型应与函数的类型一致,如不一致,以函数类型
Xuan shanli
fun( );
a
printf(“a=%d,b=%d\n”,a,b);
}
合
void fun(void) {
b
肥
int c;
工
c=a; a=b; b=c; }
业
大
学
外部变量的副作用
Xuan shanli
#include <stdio.h>
C语言完整 ppt课件
![C语言完整 ppt课件](https://img.taocdn.com/s3/m/041b0de2f5335a8102d220bd.png)
1.4.1 宏定义
用一个标识符来表示一个字符串,称为“宏”,标识符称为“宏名”。在 程序中 用宏名替代字符串称为“宏调用”。在编译预处理时,将对程序中所有出现的 “宏 名”,都用宏定义中的字符串代换,这个过程称为“宏展开”。
1.4.1.1 不带参数的宏定义
格式为:#define 标识符 字符串
1.4.1.2 带参数的宏定义
1-4
1.3 C程序上机步骤
C源程序编好后,要经过编辑、编译、连接, 生成可执行文件后,才可运行。
运行集成开发软件
编辑源程序
编译
有 有错? 无 连接
不正确
运行
结果正确? 正确
结束
1-5
1.4 编译预处理
编译预处理是指,在C编译程序对C源程序进行编译之前,由编译预处理程 序对源程序中的预处理命令进行处理的过程。
1.2.1 C语言程序举例
1.2.2 C语言程序的结构
1.2.2.1 函数是C语言程序的基本单位。
1.2.2.2 函数的一般结构
任何函数(包括main()函数)都是由函数首部和函数体两部分组成。
1. 函数首部: 函数首部即函数第一行,由函数类型、函数名和函数参数表三部分组成。
2. 函数体: 函数体为函数首部下面的花括号{……}内的部分。 函数体一般由声明部分和执行部分构成:声明部分定义所用到的变量,声明所调用的函数等; 执行部分有若干语句组成。
2.6.1 运算符及表达式简介 2.6.1.1 运算符
C语言中的运算符具有2个特点: ⑴ 运算符的优先级 C语言中,运算符的优先级共分为15级,1级最高,15级最低。 ⑵ 运算符的结合性 C语言中各运算符的结合性分为左结合性(从左到右)和右结合性(从右到左)。 2.6.1.2 表达式 表达式是由常量、变量、函数和运算符组成的式子。 表达式求值是按运算符的优先级和结合性规定的顺序进行的。
用一个标识符来表示一个字符串,称为“宏”,标识符称为“宏名”。在 程序中 用宏名替代字符串称为“宏调用”。在编译预处理时,将对程序中所有出现的 “宏 名”,都用宏定义中的字符串代换,这个过程称为“宏展开”。
1.4.1.1 不带参数的宏定义
格式为:#define 标识符 字符串
1.4.1.2 带参数的宏定义
1-4
1.3 C程序上机步骤
C源程序编好后,要经过编辑、编译、连接, 生成可执行文件后,才可运行。
运行集成开发软件
编辑源程序
编译
有 有错? 无 连接
不正确
运行
结果正确? 正确
结束
1-5
1.4 编译预处理
编译预处理是指,在C编译程序对C源程序进行编译之前,由编译预处理程 序对源程序中的预处理命令进行处理的过程。
1.2.1 C语言程序举例
1.2.2 C语言程序的结构
1.2.2.1 函数是C语言程序的基本单位。
1.2.2.2 函数的一般结构
任何函数(包括main()函数)都是由函数首部和函数体两部分组成。
1. 函数首部: 函数首部即函数第一行,由函数类型、函数名和函数参数表三部分组成。
2. 函数体: 函数体为函数首部下面的花括号{……}内的部分。 函数体一般由声明部分和执行部分构成:声明部分定义所用到的变量,声明所调用的函数等; 执行部分有若干语句组成。
2.6.1 运算符及表达式简介 2.6.1.1 运算符
C语言中的运算符具有2个特点: ⑴ 运算符的优先级 C语言中,运算符的优先级共分为15级,1级最高,15级最低。 ⑵ 运算符的结合性 C语言中各运算符的结合性分为左结合性(从左到右)和右结合性(从右到左)。 2.6.1.2 表达式 表达式是由常量、变量、函数和运算符组成的式子。 表达式求值是按运算符的优先级和结合性规定的顺序进行的。
C语言-10-函数一 PPT课件
![C语言-10-函数一 PPT课件](https://img.taocdn.com/s3/m/f4951a21f90f76c660371a17.png)
类型为准。对数值型数据,实现类型自动转换。
函数的类型决定函数返回值的类型
不带返回值的函数可说明为void型。void类型无返回值。
函数参数
❖ 形参与实参
P158
❖形式参数:定义函数时函数名后面括号中的变量名
❖实际参数:调用函数时函数名后面括号中的表达式 求两个数的最大值。
#include <stdio.h>
基本概念
P156
一个C程序由一个或多个源程序文件组成,可以分 别编译,统一执行。
一个源程序文件由一个或多个函数组成,编译程序 以文件为单位进行编译的。
C 是函数式语言,C的组成单位是函数。
一个源程序必须有且只有一个名为main的主函数
C程序的执行总是从main函数开始,在main函数中
结束整个程序的运行。
二维数组名
一维数组 二维数组
一维数组名作函数参数,实现地址传递 P177
结论#voi:nidc地lmu址daei传n<(递s) td时io,.h形> 参值的变化影响实参值的变化。
{int a[10]={23,-1,12,-3,-7,-8,46,6,78,34},i,num;
int count(int a[10] );
c= max(a,b);
int max( int x, int y ) 形参 { int z;
int max(int x, int y) {
z=x>y?x:y; return(z); }
……
void main()
return(z); }
{ int a,b,c; scanf("%d,%d",&a,&b);
函数
模块化程序设计
C语言完整函数教程PPT课件
![C语言完整函数教程PPT课件](https://img.taocdn.com/s3/m/45d13e39172ded630b1cb6ec.png)
uC标准库提供了丰富的函数集,能够完成常用的数学 计算、字符串操作、输入/输出等有用操作,程序员可 以直接使用、从而减少工作量;
12
5.1 子程序设计 5.2 函数
5.2.1 函数 5.2.2 函数的定义 5.2.3 函数的调用 5.2.4 函数原型 5.3 头文件 5.4 函数应用举例 5.5 变量作用域 5.6 变量的存储类别 5.7 内部函数和外部函数
printf("%d\t",i);
【程序演示】
16
5.2.2 函数的定义
/*函数功能:判断n是否是闰年 参数: year :要判断的年份 返回值:若是闰年,返回1,否则返回0*/
int isLeapYear(int year) {
if ( (year % 4 == 0 && year % 100 != 0 ) || year % 400 == 0) return 1;
else return 0;
}
17
5.2.2 函数的定义
常见的程序设计错误: (1)把同一种类型的参数声明为类似于形式
float x,y,而不是float x,float y; (2)在函数内部把函数参数再次定义成局部变
量是一种语法错误;如: int sum(int x, int y) {
int x, y;//错误! return (x+y); }
18
5.2.2 函数的定义
(3)不能在一个C函数的内部定义另一个函数;
main()
{
…
int sum(int x,int y)
{ return(x+y);
不允许!
}
…
}
19
5.2.2 函数的定义
12
5.1 子程序设计 5.2 函数
5.2.1 函数 5.2.2 函数的定义 5.2.3 函数的调用 5.2.4 函数原型 5.3 头文件 5.4 函数应用举例 5.5 变量作用域 5.6 变量的存储类别 5.7 内部函数和外部函数
printf("%d\t",i);
【程序演示】
16
5.2.2 函数的定义
/*函数功能:判断n是否是闰年 参数: year :要判断的年份 返回值:若是闰年,返回1,否则返回0*/
int isLeapYear(int year) {
if ( (year % 4 == 0 && year % 100 != 0 ) || year % 400 == 0) return 1;
else return 0;
}
17
5.2.2 函数的定义
常见的程序设计错误: (1)把同一种类型的参数声明为类似于形式
float x,y,而不是float x,float y; (2)在函数内部把函数参数再次定义成局部变
量是一种语法错误;如: int sum(int x, int y) {
int x, y;//错误! return (x+y); }
18
5.2.2 函数的定义
(3)不能在一个C函数的内部定义另一个函数;
main()
{
…
int sum(int x,int y)
{ return(x+y);
不允许!
}
…
}
19
5.2.2 函数的定义
C语言课件(非常详细)
![C语言课件(非常详细)](https://img.taocdn.com/s3/m/ead187600622192e453610661ed9ad51f11d545c.png)
内存释放
使用free函数释放已分配 的内存,避免内存泄漏。
内存管理工具
使用工具如Valgrind检测 内存泄漏和错误。
内存管理注意事项和常见错误
内存对齐
某些硬件平台要求数据 对齐,否则访问会引发
错误。
野指针
指向无效地址的指针, 可能导致程序崩溃。
内存越界
访问数组或内存区域越 界,可能导致未定义行
为。
重复释放
重复释放同一块内存, 导致程序崩溃或未定义
行为。
05
C语言文件操作和程序调试
文件的基本操作
文件打开
使用fopen()函数打开文件,指 定文件名和打开模式。
文件读写
使用fread()、fwrite()函数进行 文件的读写操作。
文件关闭
使用fclose()函数关闭已打开的 文件。
文件指针操作
02
C语言基础语法
数据类型
浮点型
包括float、double 等,用于存储小数 。
布尔型
bool,用于存储真 或假。
整型
包括int、short、 long等,用于存储 整数。
字符型
char,用于存储单 个字符。
指针型
用于存储内存地址 。
运算符和表达式
关系运算符
==、!=、>、<等,用于比较 两个值的大小关系。
位运算符
&、|、~、^等,用于对二进 制位进行操作。
算术运算符
+、-、*、/等,用于进行数学 运算。
逻辑运算符
&&、||、!等,用于进行逻辑 运算。
其他运算符
()、[]、->等,用于改变运算 顺序或访问结构体成员。
C语言程序设计PPT课件第7章 函数
![C语言程序设计PPT课件第7章 函数](https://img.taocdn.com/s3/m/64f0d1904693daef5ef73db8.png)
2019/10/15
29/78
7.3.4函数设计的基本原则
信息隐藏
入口参数有效性检查 敏感操作前的检查 调用成功与否的检查
1
2
3
函数规模 要小
函数功能 要单一
函数接口 定义要清楚
2019/10/15
30/78
函数的嵌套调用
嵌套调用 –在调用一个函数的过程中,又调用另一个函数
C语言规定函数不能嵌套定义,但可以嵌套调用 –函数是相互平行的
– 将1号圆盘从C移到B
2019/10/15
38/78
汉诺塔(Hanoi)问题
A
B
C
第2步:对于一个有 n(n>1)个圆盘的汉诺塔, 将n个圆盘分为两部分:上面 n-1 个圆盘和最下面 的n号圆盘。将“上面n-1个圆盘”看成一个整体
– 将n-1个圆盘从A移到C
– 将n号圆盘从A移到B
– 将n-1个圆盘从C移到B
为18446744073709551615,即1844亿亿次
– 若按每次耗时1微秒计算,则完成64个圆盘的
移动将需要60万年
2019/10/15
32/78
汉诺塔(Hanoi)问题
n=3
A
B
C
A→B,A→C,B→C, A→B,C→A,C→B,A→B
2019/10/15
33/78
汉诺塔(Hanoi)问题
– 实际上一个printf()有上千行代码 main()中能放多少行代码? 如果所有代码都在main()中,怎么团队合作? 如果代码都在一个文件中,怎么团队合作?
2019/10/15
4/78
问题的提出
《三国演义》中有这样一段描写:
–懿问曰:“孔明寝食及事之烦简若何?”使
C语言( 函数) ppt课件
![C语言( 函数) ppt课件](https://img.taocdn.com/s3/m/2c8e91f208a1284ac850438b.png)
return [ 返回值表达式 ] ; //[ ]表示可选
返回值表达式的类型一般应与返回类型一致,否 则以返回类型为准。
return语句后带返回值表达式时控制程序流程返 回调用点的同时带回一个值,语句“return;” 控制程序流程返回到调用点。
6 ppt课件
下面是若干函数定义的例子: void print()//无参函数,也没有返回值 {
每次输出都写一遍输出语句不是不可以, 但代码冗余大,有没有更好的方法?
思考并讨论:输入2个整数,求它们各自逆序之 后的和的逆序数。如输入123,456;求 321+654=975;975的逆序数579为所求结果。
2 ppt课件
5.1 函数概述
把相关语句组织在一起,并给它们注明相应的 名称,利用这种方法把程序分块,这种形式的 组合就称为函数。
printf("hello\n"); }
int max(int a, int b)//求两个整数的最大值 {
if (a>=b) return a; else return b; }
7 ppt课件
5.2.2 函数的声明 函数调用之前必须先进行函数声明,形式为:
“函数类型 函数名([形参列表]);”, 函数声明中形参名可以省略; 若函数定义在函数调用之前,则定义时的函数
12 ppt课件
int main() {
int a,b,c; scanf("%d%d",&a,&b); c = reverseNum(a) + reverseNum(b);//调用 printf("%d\n",reverseNum(c)); return 0; }
13 ppt课件
返回值表达式的类型一般应与返回类型一致,否 则以返回类型为准。
return语句后带返回值表达式时控制程序流程返 回调用点的同时带回一个值,语句“return;” 控制程序流程返回到调用点。
6 ppt课件
下面是若干函数定义的例子: void print()//无参函数,也没有返回值 {
每次输出都写一遍输出语句不是不可以, 但代码冗余大,有没有更好的方法?
思考并讨论:输入2个整数,求它们各自逆序之 后的和的逆序数。如输入123,456;求 321+654=975;975的逆序数579为所求结果。
2 ppt课件
5.1 函数概述
把相关语句组织在一起,并给它们注明相应的 名称,利用这种方法把程序分块,这种形式的 组合就称为函数。
printf("hello\n"); }
int max(int a, int b)//求两个整数的最大值 {
if (a>=b) return a; else return b; }
7 ppt课件
5.2.2 函数的声明 函数调用之前必须先进行函数声明,形式为:
“函数类型 函数名([形参列表]);”, 函数声明中形参名可以省略; 若函数定义在函数调用之前,则定义时的函数
12 ppt课件
int main() {
int a,b,c; scanf("%d%d",&a,&b); c = reverseNum(a) + reverseNum(b);//调用 printf("%d\n",reverseNum(c)); return 0; }
13 ppt课件
c语言函数PPT
![c语言函数PPT](https://img.taocdn.com/s3/m/5c2f311910a6f524ccbf85c3.png)
fac(3) { 3fac(2); }
fac(2) { 2fac(1);
}
fac(1) { return 1; }
简化算法 不节省存储空间,运行效率也不高
2021/9/24
16
华中科技大学计算机学院
5.7.4 汉诺塔问题的递归求解(p152)
A
B
C
n个盘子
保证小(上),大(下) 问题: 将A塔上n个盘子移至C(借助于B)。 移动时,
员的值构成的组合。(4)单个联合类型变量的值:该变量正在起作用的那个成员的
值。(5)&i的值:变量i的地址。
例:自定义一个函数,函数名为power。
(1) int a,b; power(a+b);
(2)float a[5][3];
power(a);
/*表达式a的值为&a[0][0] */
(3)struct stype{
保证三个塔始终是大盘在下,小盘在上。
2021/9/24
17
华中科技大学计算机学院
将A塔n个盘子借助于B移至C:
(1) 先将A塔n –1个盘子借助于C移至B上
(2) 将A上剩下的一个移至C上.
(3) 将B上n –1个盘子借助于A移至C上.
递归结束条件:n=1
/* 将n个盘子从木桩a 移到木桩c,b为临时借用的木桩 */
(2)递归定义。为了描述问题的某一状态, 必须用到它的上一状态,而描述上一状态, 又必须用到它的上一状态,……,这种用自 已来定义自己的方法,称为递归定义。递 归定义必须能使问题越来越简单,使问题 向结束条件转化。
2021/9/24
ห้องสมุดไป่ตู้
13
华中科技大学计算机学院
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
使用库函数应注意的问题: 1、调用库函数时要用#include命令将相关的头文件包含进来。
如:调用数学函数,用#include "math.h" |<math.h> 调用输入输出函数,用#include "stdio.h" |<stdio.h>
2、库函数调用的一般形式: 函数名(参数表)
要注意函数的功能、参数的个数与类型、函数值的类型。 如:求平方根的函数sqrt的形式是:double sqrt(double x)
int mainxt(imnatvxox(,iindnttpx例y,ryi)n)空tst函ar数( )
{ }
zrie=nttxu{}>zrn;zrye=i(?ntz或xut{v{)>:r;zyony;;(ipp?dzxrr);ii:pnnyv{r;ttoiffn}i((d""tsd**tu**a**mr**(m**v**yo**(i**vd**o**函i)\\dnn)数""体));; 为}} 空
f1() { ┇
f11(); ┇
f12(); ┇ } f2() { ┇ f21(); ┇ }
f11() { ┇ } f12() { ┇ } f21() { ┇ }
2
函数的分类
从用户角度
❖标准函数(库函数):由系统提供 ❖用户自定义函数
从函数形式
❖无参函数 ❖有参函数
3
§7.1 库函数
库函数由系统提供,用户只要按照要求的格式正确调用即可。 不同的C编译系统提供的库函数有些不同。
5
§7.2 函数的定义和返回值
1. 函数定义的一般格式
现代风格:
函数返回值的类型
缺省int型 无返回值: void
合法标识 符
函数体
函数类型 函数名(形参类型说明表)
{
声明部分 语句部分 }
没有形参时, 这一对括号不
能省略
多个形参说 明之间要用
逗号隔开
例 有例参函有数例参(函现无数代参(风函现格数代)风格)
void型函数:明确说明函数没有返回值
10
例 函数返回值类型转换
int max(float x, float y) { float z;
z=x>y?x:y; return(z); } main() { float a,b; scanf("%f,%f",&a,&b); printf("Max is %d\n", max(a,b)); }
6
传传统统风风格格::
函数类型 函数名(形参表) 形参类型说明
{ 声明部分 语句部分
}
例 有参函数(传统风格) int max(x,y) int x,y; { int z; z=x>y?x:y; return(z); }
7
例 函数的定义
int max2(int x , int y) /*现代风格*/ {int max; if(x>y) max = x; else max = y;
}
函数的定义是平行的,不能在一个函数的内部再定义其它函数。即每个函
数都是一个相对独立的模块,不能在写某一个函数时又包含了另一个函数
的定义(main函数的执行时有一点点小的特权!)。
9
2. 函数的返回值
返回语句
❖形式return(表达式);或 return 表达式; 或 return;
❖ 功能:使程序控制从被调用函数返回到调用函数中, 同时把返回值带给调用函数
printf("max(max2)=%d\n",max);
return(max); } void main() {int a,b,max;
scanf("%d,%d",&a,&b);
max = max2(a,b)+100;
printf("max(main) =%d\n",max);
}
形参和函数体中定义 的变量只在函数被调 用时才临时分配存储 单元,当退出函数时 ,这些存储单元全部 被释放(称为局部性 ,因而与其它函数中 的变量同名不会引起 混淆)。
11
例 函数可以有多个return语句
main() {int a,b,max;
注意:在C语言中,函数名不 能被赋值,只能通过
scanf("%d,%d",&a,&b); return语句返回一个值
max=max2(a,b);
。
printf("max=%d\n",max);
}
int max2(int x,int y)
4
使用库函数应注意的问题(续)
3、库函数调用以两种方式出现。 其一:出现在表达式中,即作为表达式的一部分参与运算。
如:计算y=x2.5+1.3,则通过以下语句调用来实现。 y=pow(x,2.5)+1.3; 其二:独立的语句,即调用函数后加一分号。
如:printf("*****\n");
4、调用库函数时,要注意参数的一些特殊要求。如三角函数要 求自变量参数用弧度表示,开平方函数要求自变量参数的值大 于或等于0。
第七章 函数
在解决一个比较复杂的实际问题时,不 可能把所有要完成的任务全都写在main函数 中。这时,程序往往由一个main函数和若干 个其它函数组成,每个函数各自完成相对独 立的部分功能。
C语言通过函数实现模块化的 程序设计方法
1
函数间相互调用的示意
main() { ┇ f1(); ┇ f2(); ┇ }
8
函数与函数之间是平等的
void main() {int max2(int x , int y)
{int z; if(x>y) z=x;
else z=y; return(z); } int a,b,max;
scanf("%d,%d",&a,&b);
max=max2(a,b);
printf("max=%d\n",max);
❖ 说明:
函数中可以有多个return语句,但只有其中的一 个return语句能够得到执行
若函数中没有return语句,或者是一个不带表达 式的return语句,则该函数结束时自动返回调用 函数一个不确定的值
若函数类型与return语句中表达式值的类型不一 致,按前者为准,自动转换------函数调用转换
{
int max2(int x,int y)
max2= x>y?x:y ;
{ int z;
}
if(x>y)
return x;
else
re例 函数带回不确定值
printstar() { printf("*********\n"); } main() { int a;
如:调用数学函数,用#include "math.h" |<math.h> 调用输入输出函数,用#include "stdio.h" |<stdio.h>
2、库函数调用的一般形式: 函数名(参数表)
要注意函数的功能、参数的个数与类型、函数值的类型。 如:求平方根的函数sqrt的形式是:double sqrt(double x)
int mainxt(imnatvxox(,iindnttpx例y,ryi)n)空tst函ar数( )
{ }
zrie=nttxu{}>zrn;zrye=i(?ntz或xut{v{)>:r;zyony;;(ipp?dzxrr);ii:pnnyv{r;ttoiffn}i((d""tsd**tu**a**mr**(m**v**yo**(i**vd**o**函i)\\dnn)数""体));; 为}} 空
f1() { ┇
f11(); ┇
f12(); ┇ } f2() { ┇ f21(); ┇ }
f11() { ┇ } f12() { ┇ } f21() { ┇ }
2
函数的分类
从用户角度
❖标准函数(库函数):由系统提供 ❖用户自定义函数
从函数形式
❖无参函数 ❖有参函数
3
§7.1 库函数
库函数由系统提供,用户只要按照要求的格式正确调用即可。 不同的C编译系统提供的库函数有些不同。
5
§7.2 函数的定义和返回值
1. 函数定义的一般格式
现代风格:
函数返回值的类型
缺省int型 无返回值: void
合法标识 符
函数体
函数类型 函数名(形参类型说明表)
{
声明部分 语句部分 }
没有形参时, 这一对括号不
能省略
多个形参说 明之间要用
逗号隔开
例 有例参函有数例参(函现无数代参(风函现格数代)风格)
void型函数:明确说明函数没有返回值
10
例 函数返回值类型转换
int max(float x, float y) { float z;
z=x>y?x:y; return(z); } main() { float a,b; scanf("%f,%f",&a,&b); printf("Max is %d\n", max(a,b)); }
6
传传统统风风格格::
函数类型 函数名(形参表) 形参类型说明
{ 声明部分 语句部分
}
例 有参函数(传统风格) int max(x,y) int x,y; { int z; z=x>y?x:y; return(z); }
7
例 函数的定义
int max2(int x , int y) /*现代风格*/ {int max; if(x>y) max = x; else max = y;
}
函数的定义是平行的,不能在一个函数的内部再定义其它函数。即每个函
数都是一个相对独立的模块,不能在写某一个函数时又包含了另一个函数
的定义(main函数的执行时有一点点小的特权!)。
9
2. 函数的返回值
返回语句
❖形式return(表达式);或 return 表达式; 或 return;
❖ 功能:使程序控制从被调用函数返回到调用函数中, 同时把返回值带给调用函数
printf("max(max2)=%d\n",max);
return(max); } void main() {int a,b,max;
scanf("%d,%d",&a,&b);
max = max2(a,b)+100;
printf("max(main) =%d\n",max);
}
形参和函数体中定义 的变量只在函数被调 用时才临时分配存储 单元,当退出函数时 ,这些存储单元全部 被释放(称为局部性 ,因而与其它函数中 的变量同名不会引起 混淆)。
11
例 函数可以有多个return语句
main() {int a,b,max;
注意:在C语言中,函数名不 能被赋值,只能通过
scanf("%d,%d",&a,&b); return语句返回一个值
max=max2(a,b);
。
printf("max=%d\n",max);
}
int max2(int x,int y)
4
使用库函数应注意的问题(续)
3、库函数调用以两种方式出现。 其一:出现在表达式中,即作为表达式的一部分参与运算。
如:计算y=x2.5+1.3,则通过以下语句调用来实现。 y=pow(x,2.5)+1.3; 其二:独立的语句,即调用函数后加一分号。
如:printf("*****\n");
4、调用库函数时,要注意参数的一些特殊要求。如三角函数要 求自变量参数用弧度表示,开平方函数要求自变量参数的值大 于或等于0。
第七章 函数
在解决一个比较复杂的实际问题时,不 可能把所有要完成的任务全都写在main函数 中。这时,程序往往由一个main函数和若干 个其它函数组成,每个函数各自完成相对独 立的部分功能。
C语言通过函数实现模块化的 程序设计方法
1
函数间相互调用的示意
main() { ┇ f1(); ┇ f2(); ┇ }
8
函数与函数之间是平等的
void main() {int max2(int x , int y)
{int z; if(x>y) z=x;
else z=y; return(z); } int a,b,max;
scanf("%d,%d",&a,&b);
max=max2(a,b);
printf("max=%d\n",max);
❖ 说明:
函数中可以有多个return语句,但只有其中的一 个return语句能够得到执行
若函数中没有return语句,或者是一个不带表达 式的return语句,则该函数结束时自动返回调用 函数一个不确定的值
若函数类型与return语句中表达式值的类型不一 致,按前者为准,自动转换------函数调用转换
{
int max2(int x,int y)
max2= x>y?x:y ;
{ int z;
}
if(x>y)
return x;
else
re例 函数带回不确定值
printstar() { printf("*********\n"); } main() { int a;