C语言程序设计第7章函数PPT课件
合集下载
C语言函数部分PPT课件

auto int a int a
第33页/共66页
动态与静态存储变量
void f1()
{ int c;
c=4;
}
void main() { int a,b;
f1
4
a=b=3; f1();
main
3 3
}
第34页/共66页
动态与静态存储变量
二、静态存储变量 1、系统在程序运行期间为其分配固定存储 空间的变量。 2、全局变量是静态存储变量 3、static声明局部变量是静态存储变量
• 掌握C语言的参数传递方法
第22页/共66页
函数与变量的作用域
存在 时间
作用 范围
旅馆房间 家 房车
第23页/共66页
函数与变量的作用域
• 变量的作用域 • 变量的存储类别
第24页/共66页
局部变量和全局变量
一、变量的作用域 一个C程序由多个函数构成,每个函数内部为一个范围。
吉地林区
变量的分类: 局部变量 全局变量
函数概述
什么是函数?
函数是能够完成一定任务的、相对独立的程序段,可以被看作组成 一个程序的逻辑单元。
为什么使用函数?
(1)简化程序设计 (2)便于调试和维护
第1页/共66页
5.1 函数概述
函数的分类(从使用角度) ❖标准函数(库函数) 由系统提供的函数,用户不必自己定义,
可以直接调用。 用户自定义函数 根据函数所要完成的功能自己定义函数 的格式。
第5页/共66页
函数的定义
返回值的类型怎样确定? 返回值的类型应该与函数类型一致。
可以有多条return语句吗? 执行到哪一条return语句,哪一条起作用。 可以没有return语句(或return后的表达式为空)
第33页/共66页
动态与静态存储变量
void f1()
{ int c;
c=4;
}
void main() { int a,b;
f1
4
a=b=3; f1();
main
3 3
}
第34页/共66页
动态与静态存储变量
二、静态存储变量 1、系统在程序运行期间为其分配固定存储 空间的变量。 2、全局变量是静态存储变量 3、static声明局部变量是静态存储变量
• 掌握C语言的参数传递方法
第22页/共66页
函数与变量的作用域
存在 时间
作用 范围
旅馆房间 家 房车
第23页/共66页
函数与变量的作用域
• 变量的作用域 • 变量的存储类别
第24页/共66页
局部变量和全局变量
一、变量的作用域 一个C程序由多个函数构成,每个函数内部为一个范围。
吉地林区
变量的分类: 局部变量 全局变量
函数概述
什么是函数?
函数是能够完成一定任务的、相对独立的程序段,可以被看作组成 一个程序的逻辑单元。
为什么使用函数?
(1)简化程序设计 (2)便于调试和维护
第1页/共66页
5.1 函数概述
函数的分类(从使用角度) ❖标准函数(库函数) 由系统提供的函数,用户不必自己定义,
可以直接调用。 用户自定义函数 根据函数所要完成的功能自己定义函数 的格式。
第5页/共66页
函数的定义
返回值的类型怎样确定? 返回值的类型应该与函数类型一致。
可以有多条return语句吗? 执行到哪一条return语句,哪一条起作用。 可以没有return语句(或return后的表达式为空)
C语言程序设计第四版_谭浩强7章

➢函数的功能
return z; }
函数体
函数首部,不是语 句,行尾无分号
精选课件ppt
函数的返回值,类 型与首部定义一致14
函数的定义
关于函数类型的说明
无返回值的函数类型为void; 有返回值的函数,其类型根据返回值 类型决定;省略类型时默认为int(建议 不要省略)
精选课件ppt
15
函数的调用
int main( )
{ int max(int a[ ],int n);
int x[6],i;
for(i=0;i<=5;i++)
scanf("%d",&x[i]);
printf("max=%d",max(x,6));
return 0;
}
实参为数组名
精选课件ppt
int max(int a[ ],int n) { int m,i; m=a[0]; for (i=1;i<n;i++)
float fac; fac=1; for(i=1;i<=n;i++)
fac=fac*i; return fac;
printf("c="); scanf("%d",&c);
}
sum=factorial(a)+factorial(b)+factorial(c);
printf("%d!+%d!+%d!=%.0f",a,b,c,sum);
函数1 函数2 函数3
函数1 函数2
精选课件ppt
34
变量作用域——局部变量和全局变量
C语言(函数)ppt课件

} 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-第7章函数

例7-7读程序,写出运行结果
# include <stdio.h> void swap(float x,float y){
float temp; temp=x;x=y;y=temp; } void main(){ float x=8.5,y=3.7; swap(x,y); printf("x=%.2f y=%.2f\n",x,y); }
哪个return都将结束函数的调用返回主调函数.
如: void swap(float x,float y) {float temp; temp=x;x=y;y=temp; return x; return y;}
(3)return语句中的括号可以省略;return后面的值可以是一 个表达式.
7.2.2函数的返回值
§7.1.1 函数概述
C程序的结构图如图所示:
main
a bc d e f g hh i
e
g
1、一个C程序可以分为若干个函数;
2、每个程序有且只能有一个主函数 (main),其他函数都是子函数;
3、子函数可以相互调用,但主函数 不能被调用;
4、一个源程序由一个或多个函数构 成,一个源程序文件是一个编译单 位;
例7-1函数调用示例
#include <stdio.h> void printstar(){
printf("***************\n"); } void print_message(){
printf (" How do you do?\n"); } void main(){
printstar(); print_message(); printstar(); }
《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语言程序设计第7章(谭浩强)PPT版本

如 int a[5]; static int a[5]={6,2,3}; int a[]={1,2,3,4,5,6}; 等价于: a[0]=6; a[1]=2;a[2]=3; a[3]=0; a[4]=0; 等价于:a[0]=0; a[1]=0; a[2]=0; a[3]=0; a[4]=0; 如 编译系统根据初值个数确定数组维数 int a[3]={6,2,3,5,1}; ()
例
38 49 49 38 65 76 97 13 97 76 97 27 13 30 97 27 97 30 初 始 关 键 字 n=8
38 49 65 13 76 27 76 13 30 76 27 76 30 97 第 一 趟
38 49 13 65 27 65 13 30 65 27 65 30
程序举例
#include <stdio.h> #define SIZE 10 例 读10个整数存入数组,找出其中最大值和最小值 main() { int x[SIZE],i,max,min; printf("Enter 10 integers:\n"); for(i=0;i<SIZE;i++) 步骤: { printf("%d:",i+1); 1. 输入:for循环输入10个整数 scanf("%d",&x[i]); 2. 处理: } (a) 先令max=min=x[0] max=min=x[0]; (b) 依次用x[i]和max,min比较(循环) for(i=1;i<SIZE;i++) 若max<x[i],令max=x[i]{ if(max<x[i]) max=x[i]; 若min>x[i],令min=x[i] if(min>x[i]) min=x[i]; 3. 输出:max和min } printf("Maximum value is %d\n",max); printf("Minimum value is %d\n",min); }
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语言课件第07章-自定义函数

在主函数或其他函数中,我们可以使用y=sum();语句执行函数sum,并把 函数的值送给y,或者用printf("%d",sum());直接输出函数sum的值。
第7章 自定义函数
2. 有参函数的定义形式 如果一个函数,需要调用者提供原始数据才能执 行(如sqrt函数),则这种函数可以被定义成有 参函数。其定义形式如下:
第7章 自定义函数
下面我们定义一个函数,名叫 printStar,其功能就是专门输出 则,主函数代码可以简化为:
经过函数调用,程序的代码行大大缩水,且main 函数更清晰且可读性更好。
第7章 自定义函数
如果我们把printStar函数的代码放到d盘根目录 下的一个文本文件中,比如放到function.txt文 本文件中,其他的程序如果有需要,也完全可以 用#include <d:\function.txt>把有关内容包含 到对应程序文件中,在需要的时候调用printStar 函数即可 。 函数:函数就是一个用名字命名的独立的程序块( 子程序),能实现某些功能,可供本程序其他函数 ,或者另外一些程序的函数调用。
第7章 自定义函数
factorial 函数专门求n的阶乘
第7章 自定义函数
形式参数(形参):函数在声明(定义) 的时候,同时对函数所需要的参数的数量、类型做出 说明。这些参数的名字只是一种形式,只有在函数被 调用时,这些参数才能得到具体值,所以这些参数为 形式参数。比如,函数求阶乘函数中的n就是形式参 数。 实际参数(实参):一个有参函数在被调用的时候, 主调函数必须根据被调用函数形参(形式参数)的要 求,传递具体数据给被调用函数的形参,这些实际的 数据就叫做实际参数,也就是我们所说的实参。 实参是有具体值的,实参可以是常数,也可以是变量 。但在使用时必须有具体值。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2021/1/26
display(a,b);
计制造/现成的标准产品
Larry
Curly
Moe
2021/1/26
8/78
7.2 函数(Function)的定义
若干相关的函数可以合并成一个“模块” 一个C程序由一个或多个源程序文件组成 一个源程序文件由一个或多个函数组成
2021/1/26
9/78
7.2.1函数的分类
函数生来都是平等的,互相独立的,没有 高低贵贱和从属之分 – main()稍微特殊一点点 – C程序的执行从main函数开始 – 调用其他函数后流程回到main函数 – 在main函数中结束整个程序运行
第7章 函数
-
1
本章学习内容
函数定义、函数调用、函数原型、函数的参数 传递与返回值
递归函数和函数的递归调用
函数封装,函数复用,函数设计的基本原则, 程序的健壮性
变量的作用域与存储类型,全局变量、自动变 量、静态变量、寄存器变量
“自顶向下、逐步求精”的模块化程序设计方 法
2021/1/26
6/78
程序设计的艺术
算法设计艺术
–程序的灵魂
–Donald E. Knuth,
“The Art of Computer Programming”, 清华大学出版社(英),国防工业出版社(中)
结构设计艺术
–程序的肉体
–模块化(Parnas, 1972)
结构化(Structural) 面向对象(Object-Oriented) 面向组件(Component-Oriented) 面向智能体(Agent-Oriented)
– 实际上一个printf()有上千行代码 main()中能放多少行代码? 如果所有代码都在main()中,怎么团队合作? 如果代码都在一个文件中,怎么团队合作?
2021/1/26
4/78
问题的提出
《三国演义》中有这样一段描写:
–懿问曰:“孔明寝食及事之烦简若何?”使
者曰:“丞相夙兴夜寐,罚二十以上皆亲览焉
–函数调用(Founction Call)时提供的表达式
有返回值时 –放到一个数值表达式中 返回值 = 函数名(实参表列);
c = max(a,b);
–作为另一个函数调用的参数
c = max(max(a,b),c);
printf("%d\n", max(a,b));
无返回值时 –函数调用表达式
函数名(实参表列);
–自己定义的函数
包装后,也可成为函数库,供别人使用
2021/1/26
11/78
7.2.2函数的定义 (Function Definition)
返回值 类型
函数名标识符, 说明运算规则
参数表相当于 运算的操作数
类型 函数名(类型 参数1, 类型 参数2, ……)
{ 声明语句序列
可执行语句序列 return 表达式;
14/78
【例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/26
15/78
7.3向函数传递值和从函数返回值
函数名(表达式1, 表达式2, ……);
实际参数(Actual Argument )
。所啖之食,日不过数升。”懿顾谓诸将曰: “孔明食少事烦,其能久乎?”
–此话音落不久,诸葛亮果然病故于五丈原。
“事无巨细”,“事必躬亲”
–管理学的观点是极其排斥这种做法的,认为
工作必须分工,各司其职
–其中的思想,在程序设计里也适用
2021/1/26
5/78
7.1分而治之与信息隐藏
分而治之( Divide and Conquer,Wirth, 1971 )
}
函数体
2021/1/26
13/78
7.2.2函数的定义 (Function Definition)
函数无返回值,用 void定义返回值类型
用void定义参数 ,表示没有参数
void 函数名(void)
{ 声明语句序列
可执行语句序列
return; }
return语句后无
需任何表达式
2021/1/26
……
2021/1/26
7/78
7.2 函数(Function)的定义
函数是C语言中模块化编程的最小单位
– 可以把每个函数看作一个模块( Module )
如把编程比做制造一台机器,函数就好比其
零部件
–可将这些“零部件”单独设计、调试、测试好
,用时拿出来装配,再总体调试。
–这些“零部件”可以是自己设计制造/别人设
2/78
数学中的函数
y f (x)
因变量
函数名
自变量
程序设计中的函数
程序设计中的函数不局限于计算
–计算类,如打印阶乘表的程序……
–判断推理类,如排序、查找……
2021/1/26
3/78
问题的提出
读多少行的程序能让你不头疼? 假如系统提供的函数printf()由10行代码替 换,那么你编过的程序会成什么样子?
– 函数把较大的任务分解成若干个较小的任务,并
提炼出公用任务
信息隐藏(Information Hiding, Parnas, 1972) –设计得当的函数可把具体操作细节对外界隐藏
起来,从而使整个程序结构清楚
–使用函数时,不用知道函数内部是如何运作的
,只按照我们的需要和它的参数形式调用它即可
2021/1/26
2021/1/26
10/78
7.2.1函数的分类
标准库函数
– ANSI/ISO C定义的标准库函数
符合标准的C语言编译器必须提供这些函数 函数的行为也要符合ANSI/ISO C的定义
– 第三方库函数
由其他厂商自行开发的C语言函数库 不在标准范围内,能扩充C语言的功能(图形、网络、数据 库等)
自定义函数
}
2021/1/26ห้องสมุดไป่ตู้
函数出口
返回运算的结果
12/78
7.2.2函数的定义 (Function Definition)
参数表里的变量(叫形式参数, Formal Parameter)也是内部变量
类型 函数名(类型 参数1, 类型 参数2, ……)
{ 声明语句序列
函数体的定界符
可执行语句序列 return 表达式;