C语言程序设计函数精品PPT课件
合集下载
《C语言函数》PPT课件
#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第三章函数
5
239
明 其中arctan用如下形式的级数计算:
与 使
arctan( x) x x3 x5 x7
用
357
直到级数某项绝对值不大于10-15为止;
π和x均为double型。
8
#include<iostream.h> int main() {
double a,b; double arctan(double x);//函数原型声明 a=16.0*arctan(1/5.0); b=4.0*arctan(1/239.0); //注意:因为整数相除结果取整, //如果参数写1/5,1/239,结果就都是0 cout<<"PI="<<a-b<<endl; }
=10510
所以,如果输入01101001,则应输出105
6
#include <iostream.h>
double power (double x, int n); //声明函数原型power
int main()
{
int i;
int value = 0;
char ch;
cout << "Enter an 8 bit binary number ";
}
4
C++语言程序设计
函 例3-1编写一个求x的n次方的函数
数
的
声 明
运行结果:
与 5 to the power 2 is 25
使
用
5
C++语言程序设计
函 例3-2 数制转换
数
的 题目:
声 输入一个8位二进制数,将其转换为十进 明 制数输出。
《C语言函数》课件
总结词
文件操作函数用于创建、打开、读取、写入和关闭文件等 操作。
要点二
详细描述
C语言标准库提供了许多文件操作函数,如fopen()用于打 开文件,fclose()用于关闭文件,fread()用于读取文件内容 ,fwrite()用于写入文件内容等。这些函数通常需要包含 stdio.h头文件以正确使用。
详细描述
C语言提供了许多字符串函数,用于处理字符串数据。这些函数包括连接字符串、比较字符串、查找 子串等。它们通常在string.h头文件中定义,使用时需要包含该头文件。
字符串函数应用案例
• 示例:连接两个字符串
字符串函数应用案例
01
```c
02
int main() {
03
char str1[50] = "Hello, ";
• 示例:计算圆的面积和周长
数学函数应用案例
```c int main() { double radius, area, circumference;
数学函数应用案例
circumferencea = M_PI * pow(radius, 2);
radius = 5.0;
printf("无法打开文件n");
return 1; // 返回错误代码 1 表示打 开文件失败
文件操作函数应用案例
} else {
while ((ch = fgetc(file)) != EOF) { // 从文件中读取字符 并输出到控制台,直到到达
文件末尾(EOF)为止。
putchar(ch); // 使用 putchar() 函数将字符输出到 控制台。
01
03 02
数学函数应用案例
文件操作函数用于创建、打开、读取、写入和关闭文件等 操作。
要点二
详细描述
C语言标准库提供了许多文件操作函数,如fopen()用于打 开文件,fclose()用于关闭文件,fread()用于读取文件内容 ,fwrite()用于写入文件内容等。这些函数通常需要包含 stdio.h头文件以正确使用。
详细描述
C语言提供了许多字符串函数,用于处理字符串数据。这些函数包括连接字符串、比较字符串、查找 子串等。它们通常在string.h头文件中定义,使用时需要包含该头文件。
字符串函数应用案例
• 示例:连接两个字符串
字符串函数应用案例
01
```c
02
int main() {
03
char str1[50] = "Hello, ";
• 示例:计算圆的面积和周长
数学函数应用案例
```c int main() { double radius, area, circumference;
数学函数应用案例
circumferencea = M_PI * pow(radius, 2);
radius = 5.0;
printf("无法打开文件n");
return 1; // 返回错误代码 1 表示打 开文件失败
文件操作函数应用案例
} else {
while ((ch = fgetc(file)) != EOF) { // 从文件中读取字符 并输出到控制台,直到到达
文件末尾(EOF)为止。
putchar(ch); // 使用 putchar() 函数将字符输出到 控制台。
01
03 02
数学函数应用案例
C语言( 函数) ppt课件
思考:n=1234,如何逆置? 提示:考虑((4*10+3)*10+2)*10+1=4321。
11 ppt课件
#include<stdio.h> //构成逆序数的函数 int reverseNum(int x) // x 是正整数 {
int r=0; while(x>0) {
r = r*10 + x%10; x = x/10; } return r; }
#include<stdio.h>
#include<math.h>
void process(double array[ ], int n)//数组名作函数形参
{
int i;
for(i=0; i<n; i++) {
if(array[i]>=36) array[i]=sqrt( array[i] )*10;
printf("%d", a[i]);//数组元素作为函数实参
}
return 0;
p}pt课件
19
例5:有一个一维数组a,内放10个整数,分别输出这十 个数的平方。
#include<stdio.h> int square(int n) {
return n*n; } int main() {
int a[10], i, j; for(i=0;i<10;i++) scanf("%d",&a[i]); for(i=0;i<10;i++) printf("%5d",square(a[i])); return 0; }
int isSymmetric(int n) //n为回文数返回1,否返回0 {
11 ppt课件
#include<stdio.h> //构成逆序数的函数 int reverseNum(int x) // x 是正整数 {
int r=0; while(x>0) {
r = r*10 + x%10; x = x/10; } return r; }
#include<stdio.h>
#include<math.h>
void process(double array[ ], int n)//数组名作函数形参
{
int i;
for(i=0; i<n; i++) {
if(array[i]>=36) array[i]=sqrt( array[i] )*10;
printf("%d", a[i]);//数组元素作为函数实参
}
return 0;
p}pt课件
19
例5:有一个一维数组a,内放10个整数,分别输出这十 个数的平方。
#include<stdio.h> int square(int n) {
return n*n; } int main() {
int a[10], i, j; for(i=0;i<10;i++) scanf("%d",&a[i]); for(i=0;i<10;i++) printf("%5d",square(a[i])); return 0; }
int isSymmetric(int n) //n为回文数返回1,否返回0 {
C语言完整函数教程PPT课件
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语言程序设计教程ppt课件(2024)
打印九九乘法表
使用嵌套的for循环打印九九乘法表。
23
04
数组与字符串处理
2024/1/30
24
一维数组定义和操作
2024/1/30
01
一维数组定义
类型说明符 数组名
[常量表达式];
02
一维数组初始化
在定义数组时对数 组元素赋以初值;
04
一维数组操作
包括赋值、输入输
03
出、排序、查找等
。
一维数组引用
do-while循环
与while循环类似,但至少会执行一次 循环体。
示例
int i = 0; do { printf("%d ", i); i; } while (i < 10);
语法
do { // code to be executed } while (condition);
2024/1/30
19
赋值运算符
包括赋值运算符(=)和复合赋 值运算符(+=、-=、*=、/=、 %=),用于为变量赋值或进行 运算后赋值。
12
类型转换与运算顺序
2024/1/30
类型转换
当不同类型的数据进行运算时,需要进行类型转换,包括自 动类型转换和强制类型转换。自动类型转换由编译器自动完 成,而强制类型转换需要使用类型转换运算符。
0。
free函数
用于释放已分配的内存空间 ,避免内存泄漏。
2024/1/30
36
指针在数组、字符串等数据结构中应用
指针与数组
数组名本质上是一个指向数组首元素的指针;通过指针可 以访问和修改数组元素。
指针与字符串
字符串在C语言中以字符数组的形式存储,指针可以方便 地操作字符串。
使用嵌套的for循环打印九九乘法表。
23
04
数组与字符串处理
2024/1/30
24
一维数组定义和操作
2024/1/30
01
一维数组定义
类型说明符 数组名
[常量表达式];
02
一维数组初始化
在定义数组时对数 组元素赋以初值;
04
一维数组操作
包括赋值、输入输
03
出、排序、查找等
。
一维数组引用
do-while循环
与while循环类似,但至少会执行一次 循环体。
示例
int i = 0; do { printf("%d ", i); i; } while (i < 10);
语法
do { // code to be executed } while (condition);
2024/1/30
19
赋值运算符
包括赋值运算符(=)和复合赋 值运算符(+=、-=、*=、/=、 %=),用于为变量赋值或进行 运算后赋值。
12
类型转换与运算顺序
2024/1/30
类型转换
当不同类型的数据进行运算时,需要进行类型转换,包括自 动类型转换和强制类型转换。自动类型转换由编译器自动完 成,而强制类型转换需要使用类型转换运算符。
0。
free函数
用于释放已分配的内存空间 ,避免内存泄漏。
2024/1/30
36
指针在数组、字符串等数据结构中应用
指针与数组
数组名本质上是一个指向数组首元素的指针;通过指针可 以访问和修改数组元素。
指针与字符串
字符串在C语言中以字符数组的形式存储,指针可以方便 地操作字符串。
C语言程序设计教程ppt课件完整版pptx
C语言的应用领域
计算机系统基本概念
计算机系统的组成 操作系统的基本概念 计算机中的数与编码
编程环境与工具安装配置
01
常见的C语言编程环境
02
安装与配置C语言编译器
使用集成开发环境(IDE)进行C语言编程
03
第一个C程序:Hello, World!
01
C程序的基本结 构
02
编写Hello, World!程序
应用场景
适用于需要根据特定条件提前终 止循环或跳过某些循环操作的情 况。
04 函数与模块化设计
函数定义和调用
01
函数定义
包括函数名、参数列表、返回值 类型和函数体等部分,用于描述 函数的功能和实现细节。
函数调用
02
03
函数声明
通过函数名和参数列表来调用函 数,实现相应功能并获取返回值 。
在使用函数之前,需要对函数进 行声明,以便编译器识别函数的 存在和调用方式。
THANKS FOR WATCHING
感谢您的观看
指针运算符
包括取地址运算符&和取值运算符*,分别 用于获取变量的内存地址和通过指针访问内 存中的数据。
动态内存分配函数(malloc, free)使用方法
malloc函数
用于在堆区动态分配指定大小的内存空间,并返回 分配内存的起始地址。
free函数
用于释放之前通过malloc函数分配的内存空间,防 止内存泄漏。
动态规划思想
动态规划是一种在数学、计算机科学和经济学中 使用的,通过把原问题分解为相对简单的子问题 的方式来求解复杂问题的方法。动态规划常用于 优化重叠子问题的计算。
回溯与分支限界法
回溯法是一种通过探索所有可能的候选解来找出 所有解的算法,而分支限界法是一种通过剪枝来 减少搜索空间的优化算法。回溯与分支限界法常 用于解决组合优化问题。
计算机系统基本概念
计算机系统的组成 操作系统的基本概念 计算机中的数与编码
编程环境与工具安装配置
01
常见的C语言编程环境
02
安装与配置C语言编译器
使用集成开发环境(IDE)进行C语言编程
03
第一个C程序:Hello, World!
01
C程序的基本结 构
02
编写Hello, World!程序
应用场景
适用于需要根据特定条件提前终 止循环或跳过某些循环操作的情 况。
04 函数与模块化设计
函数定义和调用
01
函数定义
包括函数名、参数列表、返回值 类型和函数体等部分,用于描述 函数的功能和实现细节。
函数调用
02
03
函数声明
通过函数名和参数列表来调用函 数,实现相应功能并获取返回值 。
在使用函数之前,需要对函数进 行声明,以便编译器识别函数的 存在和调用方式。
THANKS FOR WATCHING
感谢您的观看
指针运算符
包括取地址运算符&和取值运算符*,分别 用于获取变量的内存地址和通过指针访问内 存中的数据。
动态内存分配函数(malloc, free)使用方法
malloc函数
用于在堆区动态分配指定大小的内存空间,并返回 分配内存的起始地址。
free函数
用于释放之前通过malloc函数分配的内存空间,防 止内存泄漏。
动态规划思想
动态规划是一种在数学、计算机科学和经济学中 使用的,通过把原问题分解为相对简单的子问题 的方式来求解复杂问题的方法。动态规划常用于 优化重叠子问题的计算。
回溯与分支限界法
回溯法是一种通过探索所有可能的候选解来找出 所有解的算法,而分支限界法是一种通过剪枝来 减少搜索空间的优化算法。回溯与分支限界法常 用于解决组合优化问题。
C语言函数PPT课件
类型名 函数名() {
函数体 }
类型名 函数名(void) {
函数体 }
包包括括声声明明部部分分和 和语语句句部部分分
7.2.2 定义函数的方法
1.定义无参指 值函定的数函类数型 定义无参函数的一般形式为:
类型名 函数名() {
函数体 }
类型名 函数名(void) {
函数体 }
7.2.2 定义函数的方法
实参 a 2 3 b
形参 x 2 3 y
7.3.4. 函数的返回值
➢通常,希望通过函数调用使主调函数能得 到一个确定的值,这就是函数值(函数的返 回值) (1)函数的返回值是通过函数中的return语
定义函数时函数名后面的变量名称为“形 式参数”(简称“形参”)
主调函数中调用一个函数时,函数名后面 参数称为“实际参数”(简称“实参”)
实际参数可以是常量、变量或表达式
7.3.2 函数调用时的数据传递
2. 实参和形参间的数据传递
在调用函数过程中,系统会把实参的值传 递给被调用函数的形参
或者说,形参从实参得到一个值 该值在函数调用期间有效,可以参加被调
7.3.2 函数调用时的数据传递
先编写max函数:
int max(int x,int y) {
int z; z=x>y?x:y; return(z); }
7.3.2 函数调用时的数据传递
在max函数上面,再编写主函数
#include <stdio.h> int main() { int max(int x,int y); int a,b,c;
printf(“two integer numbers: "); scanf(“%d,%d”,&a,&b); c=max(a,b); 实参可以是常量、变量或表达式 printf(“max is %d\n”,c); }
C语言程序设计实用教程课件第5章函数
void printHello( ) {…}
函数调用形式:
printHello();
5.1 函数的定义与调用
书写函数时注意:
(1)程序中如果定义了多个函数,这些函数定 义在书写上应该是并列的关系,而不是嵌套 的关系。
例如,一个源程序有三个函数组成:
void f1(float x) {…} int main() {
2. 在main()函数中使用一个for循环,检查1到10000之 间的所有整数是否为完全数。
#include <stdio.h>
int isPerfect(int x);
//函数原型,判断x是否完全数
void displayPerfect(int x); //函数原型,输出x的因子之和的公式
void main(){
int main() { float a=3.0; f1(2.0); f2(a);
}
5.1 函数的定义与调用
书写函数时要注意点:
例如,函数定义在后,函数调用在前的情形:
void f1(float);
//函数原型,省略了形参名
void f2(int x);
//函数原型
int main() {
f1(2.0f);
printf("%d",i);
} printf("\n");
printf(i==1? "%d":"+%d",i);
}
5.2 函数的参数传递
函数的调用者如何将实际参数值传递给 被调用者?
C语言的参数传递方式:
按值传递 按地址传递。
C++语言增加:
按引用传递
函数调用形式:
printHello();
5.1 函数的定义与调用
书写函数时注意:
(1)程序中如果定义了多个函数,这些函数定 义在书写上应该是并列的关系,而不是嵌套 的关系。
例如,一个源程序有三个函数组成:
void f1(float x) {…} int main() {
2. 在main()函数中使用一个for循环,检查1到10000之 间的所有整数是否为完全数。
#include <stdio.h>
int isPerfect(int x);
//函数原型,判断x是否完全数
void displayPerfect(int x); //函数原型,输出x的因子之和的公式
void main(){
int main() { float a=3.0; f1(2.0); f2(a);
}
5.1 函数的定义与调用
书写函数时要注意点:
例如,函数定义在后,函数调用在前的情形:
void f1(float);
//函数原型,省略了形参名
void f2(int x);
//函数原型
int main() {
f1(2.0f);
printf("%d",i);
} printf("\n");
printf(i==1? "%d":"+%d",i);
}
5.2 函数的参数传递
函数的调用者如何将实际参数值传递给 被调用者?
C语言的参数传递方式:
按值传递 按地址传递。
C++语言增加:
按引用传递
C语言程序设计实例教程课件:函数
函数体: • 实际上是一个复合语句。花括号“{}”中包含了各种语句,函数的 功能就是由执行这些语句来实现的。
4.2.1 函数的定义
从函数是否带参数的角度来看,函数可分为无参函数和有参函数 两种。如果函数不带参数,则函数名后的圆括号中为空,但圆括号不 可省略。如果带多个参数,则参数间用逗号间隔。
4.2.1 函数的定义
4.3 函数调用
3. 函数调用过程 一个C程序可以包含多个函数,但必须包含且只能包含
一 个 main() 函 数 。 程 序 的 执 行 从 main() 函 数 开 始 , 到 main()函数结束。程序中的其它函数必须通过main()函数 直接或者间接地调用才能执行。
【例4.3】比较两个数的大小,输出较大值。
分析:定义一个求n!的函数fac,主函数中三次调用fac 函数实现求组合数。 当输入6,2,运行结果如图所示:
4.6 递归调用
如果一个函数在调用的过程中出现直接或者间接地调用 该函数本身,称为函数的递归调用。C语言的特点之一就是 允许使用函数的递归调用。
int fn(int a) { int x,y;
4.2.1 函数的定义
在函数定义中还应注意以下几个问题: ▪ 不论函数的形式参数类型是否相同,必须分别说明参数类型。 如: (float a, float b)不能写成(float a, b) ▪ 函数的定义不允许嵌套。也就是说不允许在一个函数体内再 定义一个函数。下列写法是错误的:
int f1(int x, int y) { int a, b; … int f2(int m) { … } … }
出2!,就必须先求出1!,而根据递归公式可知,1!=1,从而,再反过来 就可以依次求出2!,3!,4!,5!。
4.2.1 函数的定义
从函数是否带参数的角度来看,函数可分为无参函数和有参函数 两种。如果函数不带参数,则函数名后的圆括号中为空,但圆括号不 可省略。如果带多个参数,则参数间用逗号间隔。
4.2.1 函数的定义
4.3 函数调用
3. 函数调用过程 一个C程序可以包含多个函数,但必须包含且只能包含
一 个 main() 函 数 。 程 序 的 执 行 从 main() 函 数 开 始 , 到 main()函数结束。程序中的其它函数必须通过main()函数 直接或者间接地调用才能执行。
【例4.3】比较两个数的大小,输出较大值。
分析:定义一个求n!的函数fac,主函数中三次调用fac 函数实现求组合数。 当输入6,2,运行结果如图所示:
4.6 递归调用
如果一个函数在调用的过程中出现直接或者间接地调用 该函数本身,称为函数的递归调用。C语言的特点之一就是 允许使用函数的递归调用。
int fn(int a) { int x,y;
4.2.1 函数的定义
在函数定义中还应注意以下几个问题: ▪ 不论函数的形式参数类型是否相同,必须分别说明参数类型。 如: (float a, float b)不能写成(float a, b) ▪ 函数的定义不允许嵌套。也就是说不允许在一个函数体内再 定义一个函数。下列写法是错误的:
int f1(int x, int y) { int a, b; … int f2(int m) { … } … }
出2!,就必须先求出1!,而根据递归公式可知,1!=1,从而,再反过来 就可以依次求出2!,3!,4!,5!。
C语言程序设计课件:函数
函数
图5-2 例5-4程序运行结果
函数
5.2.2 函数的声明 在C语言中,除了main函数外,用户所定义的函数遵循
“先定义、后使用”的规则。当把函数的定义放在调用之后, 应该在调用之前对函数进行声明,即在所调用的函数之后定 义,则在调用函数之前需要对被调函数进行声明。
函数声明的一般形式如下: 类型名 函数名(参数类型1,参数类型2,…); 或者 类型名 函数名(参数类型1 参数名1,参数类型2 参数名 2,…); 这里的参数名可以是任意的标识符,即不必与函数首部 中的形参相同,甚至可以省略。 例如,在例5-4中,如果function函数在main函数之后定 义,则需在main函数之前加以说明,程序修改如下:
函数
2.函数定义的一些表现形式 (1) 无参函数的定义形式。 类型说明符 函数名() { 声明部分
语句 [return 语句] }
由于是无参函数,函数首部括号内是空的,说明没有 任何参数。
函数
(2) 有参函数的定义形式。
类型说明符 函数名(形参列表) { 声明部分
语句 [return 语句] }
实现判断素数功能,判断结果若是素数,m值为1; 判断结果若不是素数,m值为0
return (m); }
函数
5.2 函 数 的 调 用
5.2.1 函数调用的一般形式 定义函数的目的在于通过调用函数实现其功能。函数调
用的一般形式如下: 函数名(实际参数表)
或 函数名() 当实际参数(简称实参)多于一个时,各实参之间用逗号
函数
【例5-6】 10个人的成绩存放在数组中,定义函数对成 绩进行处理,将低于60分的成绩修改为60。
将10个人的成绩存放于数组score中,以score作为实参 调用函数pass。函数pass处理形参数组array,将其中小于60 的元素值修改为60。
C语言程序设计第11讲函数.ppt
main是主函数,首先执行main
2020/4/24
Page 5
7.1 函数概述
C语言语法规范:
Program Design in C Language
一个C程序由一个或多个函数组成,但至少 有一个主函数(main函数);main函数是程序执 行的入口,可置于程序的任何位置。
2020/4/24
Page 6
z=x+y; return z ; }
2020/4/24
Page 10
7.2 函数定义的一般形式
Program Design in C Language
函数定义的一般形式说明:
(1)
类型说明符:
float sum (float x , float y ) 指明函数的类型,函数的
{ float z ;
float sum (float x , float y ) 函数名:
{ float z ;
通常是一个标识符,
z=x+y; return z ;
在一个程序中除了主函 数外其余函数的名字可 以任意取,但应有意义。
}
"()" 函数标志。
2020/4/24
Page 12
7.2 函数定义的一般形式
Program Design in C Language
Page 3
7.1 函数概述
函数组成程序的例子
#include “stdio.h” void printstar( ) {
printf(“**********\n”); } void print_message( ) {
Program Design in C Language
} int main() { printstar( ); print_message( ); printstar( ); return 0; }
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第7
本章学习内容
函数定义、函数调用、函数原型、函数的参数 传递与返回值
递归函数和函数的递归调用
函数封装,函数复用,函数设计的基本原则, 程序的健壮性
变量的作用域与存储类型,全局变量、自动变 量、静态变量、寄存器变量
“自顶向下、逐步求精”的模块化程序设计方 法
2021/1/8
2/78
数学中的函数
–函数调用(Founction Call)时提供的表达式
有返回值时 –放到一个数值表达式中 返回值 = 函数名(实参表列);
c = max(a,b);
–作为另一个函数调的参数
c = max(max(a,b),c);
printf("%d\n", max(a,b));
无返回值时 –函数调用表达式
函数名(实参表列);
2021/1/8
10/78
7.2.1函数的分类
标准库函数
– ANSI/ISO C定义的标准库函数
符合标准的C语言编译器必须提供这些函数 函数的行为也要符合ANSI/ISO C的定义
– 第三方库函数
由其他厂商自行开发的C语言函数库 不在标准范围内,能扩充C语言的功能(图形、网络、数据 库等)
自定义函数
结构设计艺术
–程序的肉体 –模块化(Parnas, 1972)
结构化(Structural) 面向对象(Object-Oriented) 面向组件(Component-Oriented) 面向智能体(Agent-Oriented)
……
2021/1/8
7/78
7.2 函数(Function)的定义
函数是C语言中模块化编程的最小单位
2021/1/8
display(a,b);
16/78
函数的参数传递
y f (x)
因变量
函数名
自变量
程序设计中的函数
程序设计中的函数不局限于计算
–计算类,如打印阶乘表的程序……
–判断推理类,如排序、查找……
2021/1/8
3/78
问题的提出
读多少行的程序能让你不头疼? 假如系统提供的函数printf()由10行代码替 换,那么你编过的程序会成什么样子?
– 实际上一个printf()有上千行代码 main()中能放多少行代码? 如果所有代码都在main()中,怎么团队合作? 如果代码都在一个文件中,怎么团队合作?
2021/1/8
4/78
问题的提出
《三国演义》中有这样一段描写:
–懿问曰:“孔明寝食及事之烦简若何?”使
者曰:“丞相夙兴夜寐,罚二十以上皆亲览焉 。所啖之食,日不过数升。”懿顾谓诸将曰: “孔明食少事烦,其能久乎?”
–此话音落不久,诸葛亮果然病故于五丈原。
“事无巨细”,“事必躬亲”
–管理学的观点是极其排斥这种做法的,认为
起来,从而使整个程序结构清楚
–使用函数时,不用知道函数内部是如何运作的
,只按照我们的需要和它的参数形式调用它即可
2021/1/8
6/78
程序设计的艺术
算法设计艺术
–程序的灵魂
–Donald E. Knuth,
“The Art of Computer Programming”, 清华大学出版社(英),国防工业出版社(中)
}
2021/1/8
函数出口
返回运算的结果
12/78
7.2.2函数的定义 (Function Definition)
参数表里的变量(叫形式参数, Formal Parameter)也是内部变量
类型 函数名(类型 参数1, 类型 参数2, ……)
{ 声明语句序列
函数体的定界符
可执行语句序列 return 表达式;
工作必须分工,各司其职
–其中的思想,在程序设计里也适用
2021/1/8
5/78
7.1分而治之与信息隐藏
分而治之( Divide and Conquer,Wirth, 1971 ) – 函数把较大的任务分解成若干个较小的任务,并
提炼出公用任务
信息隐藏(Information Hiding, Parnas, 1972) –设计得当的函数可把具体操作细节对外界隐藏
【例7.1a】 计算整数n的阶乘n!
/* 函数功能: 用迭代法计算n!
返回值函数类入型口参数:函整数型名变量说n明表示阶乘的形阶参数表,函
函数返回值: 函返数回的n!功的能值
数入口
*/
long Fact(int n) /* 函数定义 *函/ 数内部可以定义
{
只能自己使用的变
int i;
量,称内部变量
long result = 1;
for (i=2; i<=n; i++)
{ result *= i;
}
返回值作为函数 调用表达式的值
return result;
}
2021/1/8
15/78
7.3向函数传递值和从函数返回值
函数名(表达式1, 表达式2, ……);
实际参数(Actual Argument )
若干相关的函数可以合并成一个“模块” 一个C程序由一个或多个源程序文件组成 一个源程序文件由一个或多个函数组成
2021/1/8
9/78
7.2.1函数的分类
函数生来都是平等的,互相独立的,没有 高低贵贱和从属之分 – main()稍微特殊一点点 – C程序的执行从main函数开始 – 调用其他函数后流程回到main函数 – 在main函数中结束整个程序运行
}
函数体
2021/1/8
13/78
7.2.2函数的定义 (Function Definition)
函数无返回值,用 void定义返回值类型
用void定义参数 ,表示没有参数
void 函数名(void)
{ 声明语句序列
可执行语句序列
return; }
return语句后无
需任何表达式
2021/1/8
14/78
–自己定义的函数
包装后,也可成为函数库,供别人使用
2021/1/8
11/78
7.2.2函数的定义 (Function Definition)
返回值 类型
函数名标识符, 说明运算规则
参数表相当于 运算的操作数
类型 函数名(类型 参数1, 类型 参数2, ……)
{ 声明语句序列
可执行语句序列 return 表达式;
– 可以把每个函数看作一个模块( Module )
如把编程比做制造一台机器,函数就好比其
零部件
–可将这些“零部件”单独设计、调试、测试好
,用时拿出来装配,再总体调试。
–这些“零部件”可以是自己设计制造/别人设
计制造/现成的标准产品
Larry
Curly
Moe
2021/1/8
8/78
7.2 函数(Function)的定义
本章学习内容
函数定义、函数调用、函数原型、函数的参数 传递与返回值
递归函数和函数的递归调用
函数封装,函数复用,函数设计的基本原则, 程序的健壮性
变量的作用域与存储类型,全局变量、自动变 量、静态变量、寄存器变量
“自顶向下、逐步求精”的模块化程序设计方 法
2021/1/8
2/78
数学中的函数
–函数调用(Founction Call)时提供的表达式
有返回值时 –放到一个数值表达式中 返回值 = 函数名(实参表列);
c = max(a,b);
–作为另一个函数调的参数
c = max(max(a,b),c);
printf("%d\n", max(a,b));
无返回值时 –函数调用表达式
函数名(实参表列);
2021/1/8
10/78
7.2.1函数的分类
标准库函数
– ANSI/ISO C定义的标准库函数
符合标准的C语言编译器必须提供这些函数 函数的行为也要符合ANSI/ISO C的定义
– 第三方库函数
由其他厂商自行开发的C语言函数库 不在标准范围内,能扩充C语言的功能(图形、网络、数据 库等)
自定义函数
结构设计艺术
–程序的肉体 –模块化(Parnas, 1972)
结构化(Structural) 面向对象(Object-Oriented) 面向组件(Component-Oriented) 面向智能体(Agent-Oriented)
……
2021/1/8
7/78
7.2 函数(Function)的定义
函数是C语言中模块化编程的最小单位
2021/1/8
display(a,b);
16/78
函数的参数传递
y f (x)
因变量
函数名
自变量
程序设计中的函数
程序设计中的函数不局限于计算
–计算类,如打印阶乘表的程序……
–判断推理类,如排序、查找……
2021/1/8
3/78
问题的提出
读多少行的程序能让你不头疼? 假如系统提供的函数printf()由10行代码替 换,那么你编过的程序会成什么样子?
– 实际上一个printf()有上千行代码 main()中能放多少行代码? 如果所有代码都在main()中,怎么团队合作? 如果代码都在一个文件中,怎么团队合作?
2021/1/8
4/78
问题的提出
《三国演义》中有这样一段描写:
–懿问曰:“孔明寝食及事之烦简若何?”使
者曰:“丞相夙兴夜寐,罚二十以上皆亲览焉 。所啖之食,日不过数升。”懿顾谓诸将曰: “孔明食少事烦,其能久乎?”
–此话音落不久,诸葛亮果然病故于五丈原。
“事无巨细”,“事必躬亲”
–管理学的观点是极其排斥这种做法的,认为
起来,从而使整个程序结构清楚
–使用函数时,不用知道函数内部是如何运作的
,只按照我们的需要和它的参数形式调用它即可
2021/1/8
6/78
程序设计的艺术
算法设计艺术
–程序的灵魂
–Donald E. Knuth,
“The Art of Computer Programming”, 清华大学出版社(英),国防工业出版社(中)
}
2021/1/8
函数出口
返回运算的结果
12/78
7.2.2函数的定义 (Function Definition)
参数表里的变量(叫形式参数, Formal Parameter)也是内部变量
类型 函数名(类型 参数1, 类型 参数2, ……)
{ 声明语句序列
函数体的定界符
可执行语句序列 return 表达式;
工作必须分工,各司其职
–其中的思想,在程序设计里也适用
2021/1/8
5/78
7.1分而治之与信息隐藏
分而治之( Divide and Conquer,Wirth, 1971 ) – 函数把较大的任务分解成若干个较小的任务,并
提炼出公用任务
信息隐藏(Information Hiding, Parnas, 1972) –设计得当的函数可把具体操作细节对外界隐藏
【例7.1a】 计算整数n的阶乘n!
/* 函数功能: 用迭代法计算n!
返回值函数类入型口参数:函整数型名变量说n明表示阶乘的形阶参数表,函
函数返回值: 函返数回的n!功的能值
数入口
*/
long Fact(int n) /* 函数定义 *函/ 数内部可以定义
{
只能自己使用的变
int i;
量,称内部变量
long result = 1;
for (i=2; i<=n; i++)
{ result *= i;
}
返回值作为函数 调用表达式的值
return result;
}
2021/1/8
15/78
7.3向函数传递值和从函数返回值
函数名(表达式1, 表达式2, ……);
实际参数(Actual Argument )
若干相关的函数可以合并成一个“模块” 一个C程序由一个或多个源程序文件组成 一个源程序文件由一个或多个函数组成
2021/1/8
9/78
7.2.1函数的分类
函数生来都是平等的,互相独立的,没有 高低贵贱和从属之分 – main()稍微特殊一点点 – C程序的执行从main函数开始 – 调用其他函数后流程回到main函数 – 在main函数中结束整个程序运行
}
函数体
2021/1/8
13/78
7.2.2函数的定义 (Function Definition)
函数无返回值,用 void定义返回值类型
用void定义参数 ,表示没有参数
void 函数名(void)
{ 声明语句序列
可执行语句序列
return; }
return语句后无
需任何表达式
2021/1/8
14/78
–自己定义的函数
包装后,也可成为函数库,供别人使用
2021/1/8
11/78
7.2.2函数的定义 (Function Definition)
返回值 类型
函数名标识符, 说明运算规则
参数表相当于 运算的操作数
类型 函数名(类型 参数1, 类型 参数2, ……)
{ 声明语句序列
可执行语句序列 return 表达式;
– 可以把每个函数看作一个模块( Module )
如把编程比做制造一台机器,函数就好比其
零部件
–可将这些“零部件”单独设计、调试、测试好
,用时拿出来装配,再总体调试。
–这些“零部件”可以是自己设计制造/别人设
计制造/现成的标准产品
Larry
Curly
Moe
2021/1/8
8/78
7.2 函数(Function)的定义