C语言 函数ppt课件
合集下载
《c语言函数》PPT课件
其它函数: 可以互相调用函数、自调用函数,不能调用main()。
精选课件ppt
4
2、使用参数 入口参数: 主调函数向被调函数传递的数据------实参、形参。
出口参数: 被调函数向主调函数传递的数据------返回值。
精选课件ppt
5
§7.2 函数的定义 问题: 1、被调函数如何使用主调函数中的数据。 2、假设被调函数有办法使用主调函数中的数据,如何保证 被调函数和主调函数中数据类型的一致。
在函数中允许有多个return语句,但每次调用只能有一个 return 语句被执行, 因此只能返回一个函数值。
精选课件ppt
15
2、函数值(回传值)的类型与被调用函数的类型说明
函数调用语句 被调函数类型 回传值类型
在定义函数时,需要指定函数的类型:
例如:
int max(x,y);
doubel a(c1,c2); 等等
1、被调函数为库函数 对库函数的调用不需要再作说明, 但必须把该函数的头
文件用include命令包含在源文件前部。
精选课件ppt
23
2、用户自定义的函数 一般应该在主调函数中对被调函数的返回值的类型做说明。 对被调函数的说明也有两种格式,
一种为传统格式,其一般格式为: 类型说明符 被调函数名();
9
调用结束:形参临时单元被释放,形参数据失效,实参数 据不变。这就是所谓的单值传递。
函数的形参和实参具有以下特点:
(1)、形参变量只有在被调用时才分配内存单元,在调用 结束时, 即刻释放所分配的内存单元。因此,形参只有在 函数内部有效。 函数调用结束返回主调函数后则不能再使 用该形参变量。
精选课件ppt
}
精选课件ppt
精选课件ppt
4
2、使用参数 入口参数: 主调函数向被调函数传递的数据------实参、形参。
出口参数: 被调函数向主调函数传递的数据------返回值。
精选课件ppt
5
§7.2 函数的定义 问题: 1、被调函数如何使用主调函数中的数据。 2、假设被调函数有办法使用主调函数中的数据,如何保证 被调函数和主调函数中数据类型的一致。
在函数中允许有多个return语句,但每次调用只能有一个 return 语句被执行, 因此只能返回一个函数值。
精选课件ppt
15
2、函数值(回传值)的类型与被调用函数的类型说明
函数调用语句 被调函数类型 回传值类型
在定义函数时,需要指定函数的类型:
例如:
int max(x,y);
doubel a(c1,c2); 等等
1、被调函数为库函数 对库函数的调用不需要再作说明, 但必须把该函数的头
文件用include命令包含在源文件前部。
精选课件ppt
23
2、用户自定义的函数 一般应该在主调函数中对被调函数的返回值的类型做说明。 对被调函数的说明也有两种格式,
一种为传统格式,其一般格式为: 类型说明符 被调函数名();
9
调用结束:形参临时单元被释放,形参数据失效,实参数 据不变。这就是所谓的单值传递。
函数的形参和实参具有以下特点:
(1)、形参变量只有在被调用时才分配内存单元,在调用 结束时, 即刻释放所分配的内存单元。因此,形参只有在 函数内部有效。 函数调用结束返回主调函数后则不能再使 用该形参变量。
精选课件ppt
}
精选课件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语言函数详解PPT课件
使用库函数应注意的问题: 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. 函数定义的一般格式
现代风格:
函数返回值的类型
如:调用数学函数,用#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. 函数定义的一般格式
现代风格:
函数返回值的类型
C语言函数.ppt
递归的优缺点
优点:为某些编程问题提供了最简单的解 决办法
缺点:递归算法会很快的耗尽计算机的内 存资源,难于维护和阅读
本讲内容
基本函数概念 函数的递归 局部变量和全局变量 变量的存储类别
局部变量和全局变量
局部变量
在一个函数内部定义的变量是内部变量,它只在本函数范围内有效,也 就是说只有在本函数内才能使用它们,在此函数以外是不能使用这些变 量的。这称为“局部变量”
从用户使用的角度看,函数有两种: 标准函数,即库函数。这是由系统提供的,用户不必自己定义这 些函数,可以直接使用它们。应该说明,每个系统提供的库函数 的数量和功能不同,当然有一些基本的函数是共同的 用户自己定义的函数,以解决用户的专门需要
从函数的形式看,函数分两类 无参函数。在调用无参函数时,主调函数并不将数据传送给被调 用函数,一般用来执行指定的一组操作。无参函数可以带回或不 带回函数值,但一般以不带回函数值的居多 有参函数。在调用函数时,在主调函数和被调用函数之间有参数 传递,也就是说,主调函数可以将数据传给被调用函数使用,被 调用函数中的数据也可以带回来供主调函数使用。
编写和使用一个简单的函数
带参数的函数
定义带参数的函数(形式参数)
函数定义以下面的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课件
#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课件
} 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语言函数》课件
函数的参数传递
函数可以接受参数,用于传递数据给函数内部使 用。
函数的调用
函数通过调用语句来执行,将会转到函数内部执 行相应的代码。
函数的分类
标准库
自定义函数
程序员可以根据需要自行定义函数,以完成特定的 任务。
函数的组成部分
1
函数头
函数头包含函数名和参数列表,用于声明函数的名称和接受的参数。
《C语言函数》PPT课件
C语言函数是学习C语言的基础,本课件将介绍函数的基本概念、分类、组成 部分,以及函数的递归调用、函数指针、库函数的使用等内容。
函数的基本概念
函数的定义
函数是一段完成特定任务的可重复使用的代码块, 通常接受参数并返回值。
函数的返回值
函数可以返回一个值,用于提供计算结果或执行 状态。
编写函数库
将函数编写为库
将一组相关函数封装成库,方便重用。
库的使用方法
使用库函数时,需要包含相关的头文件,并链接 库文件。
错误处理
1
错误处理的概念
程序中可能出现各种错误,需要进行处理,以确保程序正确运行。
2
错误处理的方法
常见的错误处理方法包括返回特定错误码、抛出异常等。
总结
函数的重要性
函数是程序的基本组成单元, 可以将复杂任务分解为更小 的可管理部分。
函数指针
1
函数指针的定义
函数指针是指向函数的指针变量,可以
函数指针的应用
2
用来存储函数的地址。
函数指针可以用来动态地调用不同的函 数,增加代码的灵活性。
库函数的使用
标准库函数的使用
标准库提供了许多常用的函数,可以直接调用来完 成任务。
自定义库函数的使用
《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语言-10-函数一 PPT课件
类型为准。对数值型数据,实现类型自动转换。
函数的类型决定函数返回值的类型
不带返回值的函数可说明为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课件
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课件
printf("*"); printf("*"); printf("*"); printf("*"); printf("*");
函数——完成某一特定特定功能的模块,是程序设计的
基本单位。
“一个程序应该是轻灵自由的,它的子过程就象串在一
根线上的珍珠。” Geoffrey James的《编程之道》
大
函数声明 函数定义 函数调用
“声明”(declaration)——作用是把函数名、函数参数的个数和参数
的类型等信息通知编译系统,以便在遇到函数调用时,编译系统能够正确 识别并检查调用是否合法。
void print(int n);
在函数声明中也可以不写形参名,而只写形参的类型。
编译系统只检查参数个数和参数类型,而不检查参数名。 函数声明——函数原型(function prototype)
z=x>y?x:y; return z; }
(#4)in不cl返ud回e 函<数st值di的o.函h>数,可以明确定义为“空类型”,类型说明符为 “voiidd”main()
{
void printstar(); //对printstar函数进行声明
明 printsvtoaird(3)print_message(); //对print_messge函数进行声
函数声明 函数定义 函数调用
“定义”(defination)——是指对函数功能的确立,
包括指定函数名、函数值类型、形参名称及其类型、函数
体等。
它是一个完整的、独立的函数单位。
v{oid prifinontrt((iii;=n1t;in<)=n;i++形能) 参省pr名略in不tf("*");
C语言函数ppt课件
10
5.3 函数应用举例
例1:逆序数的加法:输入两个正整数,先将它们 分别倒过来,然后再相加,最后再将结果倒过来 输出。 注意:前置的零将被忽略。例如,输入305和794。 倒过来相加得到1000,输出时只要输出1就可以了。 因为得到逆序数的方法是一样的,故编写一个求 逆序数的函数,调用3次即可完成2个输入的整数 和1个结果整数的逆序。
返回值表达式的类型一般应与返回类型一致,否 则以返回类型为准。
return语句后带返回值表达式时控制程序流程返 回调用点的同时带回一个值,语句“return;” 控制程序流程返回到调用点。
6
下面是若干函数定义的例子: void print()//无参函数,也没有返回值 {
printf("hello\n"); }
12
int main() {
int a,b,c; scanf("%d%d",&a,&b); c = reverseNum(a) + reverseNum(b);//调用 printf("%d\n",reverseNum(c)); return 0; }
13
例2:素数判定 素数是除了1与本身之外没有其它因子的自然数 (1不是素数),可以考虑从2~n-1判断是否有n 的因子,若有,则n不是素数。 可以仅在2~ sqrt(n)的范围内判断是否有因子。 因为若n不是素数,则n=i*j(i<=sqrt(n), j>=sqrt(n)),故只需判断2~sqrt(n)范围内是 否有因子。代码如下:
思考:n=1234,如何逆置? 提示:考虑((4*10+3)*10+2)*10+1=4321。
11
#include<stdio.h> //构成逆序数的函数 int reverseNum(int x) // x 是正整数 {
5.3 函数应用举例
例1:逆序数的加法:输入两个正整数,先将它们 分别倒过来,然后再相加,最后再将结果倒过来 输出。 注意:前置的零将被忽略。例如,输入305和794。 倒过来相加得到1000,输出时只要输出1就可以了。 因为得到逆序数的方法是一样的,故编写一个求 逆序数的函数,调用3次即可完成2个输入的整数 和1个结果整数的逆序。
返回值表达式的类型一般应与返回类型一致,否 则以返回类型为准。
return语句后带返回值表达式时控制程序流程返 回调用点的同时带回一个值,语句“return;” 控制程序流程返回到调用点。
6
下面是若干函数定义的例子: void print()//无参函数,也没有返回值 {
printf("hello\n"); }
12
int main() {
int a,b,c; scanf("%d%d",&a,&b); c = reverseNum(a) + reverseNum(b);//调用 printf("%d\n",reverseNum(c)); return 0; }
13
例2:素数判定 素数是除了1与本身之外没有其它因子的自然数 (1不是素数),可以考虑从2~n-1判断是否有n 的因子,若有,则n不是素数。 可以仅在2~ sqrt(n)的范围内判断是否有因子。 因为若n不是素数,则n=i*j(i<=sqrt(n), j>=sqrt(n)),故只需判断2~sqrt(n)范围内是 否有因子。代码如下:
思考:n=1234,如何逆置? 提示:考虑((4*10+3)*10+2)*10+1=4321。
11
#include<stdio.h> //构成逆序数的函数 int reverseNum(int x) // x 是正整数 {
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语言(函数)省公开课获奖课件市赛课比赛一等奖课件
函数旳定义
函数定义旳一般形式为: 类型标识符 函数名(类型 形式参数, 类型 形式参数,…) {
申明部分 执行部分 }
阐明:
类型标识符用来定义函数类型,即指定函数返回值旳类型。 函数类型应根据详细函数旳功能拟定。默认类型标识符为 int类型。
函数值经过return语句返回。函数执行时一旦遇到return 语句,则结束目前函数旳执行,返回到主调函数旳调用点。
【例7.8】 调用函数返回两个数中旳较大者。
#include <stdio.h> int max(float x,float y)
{ float z; z=x>y?x:y; return(z);
} void main()
{float a,b; int c; scanf("%f,%f",&a,&b); c=max(a,b); printf("较大旳是%d\n”,c); }
【例7.5】 分析下列程序旳运营成果。(值传递方式)
#include <stdio.h>
void swap(float x,float y) /* 定义互换变量x,y值旳函数 */
{ float temp;
temp=x; x=y; y=temp;
printf("x=%.2f y=%.2f\n",x,y);
main函数
fa函数
fb函数
调用fa函数
结束
调用fb函数
fa函数结束
fb函数结束
7.4.2 函数旳递归调用
递归调用:一种函数直接或间接地调用此函数本身。
用递归求解问题旳过程分为两个阶段: 1.递推阶段:将原问题不断地转化成子问题。逐渐从未知向已
C语言函数省公开课一等奖全国示范课微课金奖PPT课件
f=1; //0
or 1阶乘为1;
else f=fac(n-1)*n;
//n阶乘等于n-1阶乘乘n;
return f; //返
回n阶乘值
}
11第11页
#include<stdio.h>
float fac(int n)
void main()
{ //自定义fac函数求n阶乘
{
float f; if(n<0)
int fac(int n) {
static int f=1; f*=n; return f; }
17第17页
#include<stdio.h> void main() { int fac(int); int i; for(i=1;i<=5;i++)
printf("%d!=%d\n",i,fac(i)); }
//自定义是f什ac么函变数量求,n阶他乘们
float作f用; 范围分别是什 么?
if(n<0) printf("Error!\n");//
x<0时,数据无效;
else if(n==0||n==1)
f=1; //0
or 1阶乘为1;
else f=fac(n-1)*n;
//n阶乘等于n-1阶乘乘n;
return f; //返
上讲回顾
▪ 结构化程序设计思想及方法; ▪ 函数原型申明; ▪ 函数定义; ▪ 函数形参、实参; ▪ 函数调用;
1第1页
本讲关键点
▪ 函数嵌套; ▪ 函数递归调用; ▪ 局部变量、全局变量; ▪ 变量存放类别;
2第2页
函数嵌套调用
▪ 函数定义相互平行、独立。
or 1阶乘为1;
else f=fac(n-1)*n;
//n阶乘等于n-1阶乘乘n;
return f; //返
回n阶乘值
}
11第11页
#include<stdio.h>
float fac(int n)
void main()
{ //自定义fac函数求n阶乘
{
float f; if(n<0)
int fac(int n) {
static int f=1; f*=n; return f; }
17第17页
#include<stdio.h> void main() { int fac(int); int i; for(i=1;i<=5;i++)
printf("%d!=%d\n",i,fac(i)); }
//自定义是f什ac么函变数量求,n阶他乘们
float作f用; 范围分别是什 么?
if(n<0) printf("Error!\n");//
x<0时,数据无效;
else if(n==0||n==1)
f=1; //0
or 1阶乘为1;
else f=fac(n-1)*n;
//n阶乘等于n-1阶乘乘n;
return f; //返
上讲回顾
▪ 结构化程序设计思想及方法; ▪ 函数原型申明; ▪ 函数定义; ▪ 函数形参、实参; ▪ 函数调用;
1第1页
本讲关键点
▪ 函数嵌套; ▪ 函数递归调用; ▪ 局部变量、全局变量; ▪ 变量存放类别;
2第2页
函数嵌套调用
▪ 函数定义相互平行、独立。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
将会输出什么
请输入两个数 : 3_4 56
递增前的值是 34 和 56
传调用函值数 调用示例
#include <std子io函.nh数>um中1的值是 35 和 57
void increme递nt(增in后t,i的nt)值; 是 34 和 56
void main()
34
numnu2m1 34
56
num2 56
变量的作用域
程序中变量也有不同的使用范围,称为变量的作用域。变量的作
用域决定变量的可访问性。
变量vo说id 明dis的pla位yD置is不co同un,t()其作用域也不同flo。atCd语isc言ou中nt根_a据mt变; 量的作 用域{ 可以将变量分为局部变量和全局变vo量id。main()
回顾 2-1
函数是程序中的一个相对独立的单元或模块; 使用函数带来的好处: 程序更清晰、易维护、分模块
方便设计与开发、提高代码的重用性; 自定义函数是用户在程序中根据需要而编写的函数。
回顾 2-2
函数的结构包括:返回值类型、函数名、参数列表、函 数体
函数原型说明以便向编译器指出该函数使用什么样的格 式和语法
printf(" 子函数中 sum 的值是 %d \n",sum);
} void main() {
addNumbers();
请输入两个数:56 45 子函数中sum的值是101 主函数中sum的值是101
printf("\n 主函数中 sum 的值是 %d \n ",sum);
}
全局变量说明
全局变量的定义必须在所有函数之外,且只能定义一次。 可以利用全局变量,使函数得到一个以上的返回值。 与局部变量不同,全局变量贯穿整个程序,并且可被任何一个模
{
int num1,nFuFm232; printf("\n 请输入两个数: ");
FF05
spcrianntff((""\n%值将递d赋变增%给量d前形"n,的u&参mn值v1ua的m是l11%,&dnu值和将m赋变2%给)量;d形\nnu参"m, vn2au的lm2 1, num2); increment(n3u4m1,n5u6m2); printf("\n 递增后的值是 %d 和 %d\n", num1, num2);
致程序错误。降低程序的清晰性. 在同一源文件中,允许全局变量和局部变量同名。在局部变量的
作用域内,全局变量将被屏蔽而不起作用。
传值调用
传值调用
void main() {
int a = 0; //初始化a值为0 func(0a); //调用函数func printf("%d",a); //输出a的结果 } //定义函数func void func(int a) { a = 10; //让参数a等于10 }
全局变量的作用域
#include <stdio.h>
内存
int sum=0;
num1
void addNumbers() {
sum 56
int num1,num2; printf("\n 请输入两个数:");
scanf("%d %d",&num1,&num2);
101 num2 45
sum=num1+num2;
局部变量变量的作用域
#include <stdio.h> void addNumbers()
内存
num1
{ int num1,num2,sum;
sum 56
printf("\n 请输入两个数:");
0 num2
scanf("%d %d",&num1,&num2);
sum=num1+num2;
45
printf(" 子函数中 sum 的值是 %d \n",sum); } void main()
块使用,它们在整个程序执行期间保持有效。
全局变量说明
建议在不必要时不要使用全局变量,原因如下: ①全局变量可加强函数模块之间的数据联系,但又使这些函数依赖
这些外部变量,因而使得这些函数的独立性降低。 ②全局变量在整个程序执行期间均占有存储空间,而不是仅在需要
时才开辟单元. ③程序中大量使用全局变量,不可知的和不需要的副作用将可能导
float discount_amt;
{
...
...
...
...
...
}
Hale Waihona Puke }void displayDiscount()
局部变量:不能在函数外使用
{ ...
... 全局变量:可以在整个程序中使用
}
局部变量
局部变量也称为内部变量。是指在一定范围内有效的变量。 C语言中,在以下各位置定义的变量均属于局部变量。 在函数体内定义的变量,在本函数范围内有效,作用域局限 于函数体内。 在复合语句内定义的变量,在本复合语句范围内有效,作用 域局限于复合语句内。 有参函数的形式参数也是局部变量,只在其所在的函数范围 内有效。
sum 101
{
int sum=0;
addNumbers();
请输入两个数:56 45
printf("\n 主函数中 sum 的值是 %d \n ",su子m函);数中sum的值是101
}
主函数中sum的值是 0
全局变量
全局变量(外部变量):在函数外部定义的变量。 全局变量的作用域
从该变量定义的位置开始到本源文件结束,变量一直有效。 在一个函数内变量所做的改变,将影响其他函数中该变量的值 但需要注意的是,如果定义了与全局变量同名的局部变量,则 局部变量优先。 在引用全局变量时如果使用“extern”声明全局变量,可以扩大 全局变量的作用域。例如,扩大到整个源文件(模块),对于多 源文件(模块)可以扩大到其它源文件(模块)。
int f1(int a) { int b,c ;
…… } int f2(int x) { int y,z ; …… } main() { int m,n ;
…… }
a,b,c作用域:仅限于函数f1()中 x,y,z作用域:仅限于函数f2()中
m,n作用域:仅限于函数main()中 a, b, c, x, y, z , m, n 都是局部变量
函数调用时程序控制流将转向被调函数,被调函数执行 结束时,控制流返回主调函数
return 语句用于向调用函数返回值
目标
理解两种参数传递的方式:传值、引用 熟练使用数组作为函数参数 理解变量的作用域 理解变量的存储类型
变量的作用域
限于陆地
限于海洋
限于空中
作用域是某些事物起作用或有效的区域。
请输入两个数 : 3_4 56
递增前的值是 34 和 56
传调用函值数 调用示例
#include <std子io函.nh数>um中1的值是 35 和 57
void increme递nt(增in后t,i的nt)值; 是 34 和 56
void main()
34
numnu2m1 34
56
num2 56
变量的作用域
程序中变量也有不同的使用范围,称为变量的作用域。变量的作
用域决定变量的可访问性。
变量vo说id 明dis的pla位yD置is不co同un,t()其作用域也不同flo。atCd语isc言ou中nt根_a据mt变; 量的作 用域{ 可以将变量分为局部变量和全局变vo量id。main()
回顾 2-1
函数是程序中的一个相对独立的单元或模块; 使用函数带来的好处: 程序更清晰、易维护、分模块
方便设计与开发、提高代码的重用性; 自定义函数是用户在程序中根据需要而编写的函数。
回顾 2-2
函数的结构包括:返回值类型、函数名、参数列表、函 数体
函数原型说明以便向编译器指出该函数使用什么样的格 式和语法
printf(" 子函数中 sum 的值是 %d \n",sum);
} void main() {
addNumbers();
请输入两个数:56 45 子函数中sum的值是101 主函数中sum的值是101
printf("\n 主函数中 sum 的值是 %d \n ",sum);
}
全局变量说明
全局变量的定义必须在所有函数之外,且只能定义一次。 可以利用全局变量,使函数得到一个以上的返回值。 与局部变量不同,全局变量贯穿整个程序,并且可被任何一个模
{
int num1,nFuFm232; printf("\n 请输入两个数: ");
FF05
spcrianntff((""\n%值将递d赋变增%给量d前形"n,的u&参mn值v1ua的m是l11%,&dnu值和将m赋变2%给)量;d形\nnu参"m, vn2au的lm2 1, num2); increment(n3u4m1,n5u6m2); printf("\n 递增后的值是 %d 和 %d\n", num1, num2);
致程序错误。降低程序的清晰性. 在同一源文件中,允许全局变量和局部变量同名。在局部变量的
作用域内,全局变量将被屏蔽而不起作用。
传值调用
传值调用
void main() {
int a = 0; //初始化a值为0 func(0a); //调用函数func printf("%d",a); //输出a的结果 } //定义函数func void func(int a) { a = 10; //让参数a等于10 }
全局变量的作用域
#include <stdio.h>
内存
int sum=0;
num1
void addNumbers() {
sum 56
int num1,num2; printf("\n 请输入两个数:");
scanf("%d %d",&num1,&num2);
101 num2 45
sum=num1+num2;
局部变量变量的作用域
#include <stdio.h> void addNumbers()
内存
num1
{ int num1,num2,sum;
sum 56
printf("\n 请输入两个数:");
0 num2
scanf("%d %d",&num1,&num2);
sum=num1+num2;
45
printf(" 子函数中 sum 的值是 %d \n",sum); } void main()
块使用,它们在整个程序执行期间保持有效。
全局变量说明
建议在不必要时不要使用全局变量,原因如下: ①全局变量可加强函数模块之间的数据联系,但又使这些函数依赖
这些外部变量,因而使得这些函数的独立性降低。 ②全局变量在整个程序执行期间均占有存储空间,而不是仅在需要
时才开辟单元. ③程序中大量使用全局变量,不可知的和不需要的副作用将可能导
float discount_amt;
{
...
...
...
...
...
}
Hale Waihona Puke }void displayDiscount()
局部变量:不能在函数外使用
{ ...
... 全局变量:可以在整个程序中使用
}
局部变量
局部变量也称为内部变量。是指在一定范围内有效的变量。 C语言中,在以下各位置定义的变量均属于局部变量。 在函数体内定义的变量,在本函数范围内有效,作用域局限 于函数体内。 在复合语句内定义的变量,在本复合语句范围内有效,作用 域局限于复合语句内。 有参函数的形式参数也是局部变量,只在其所在的函数范围 内有效。
sum 101
{
int sum=0;
addNumbers();
请输入两个数:56 45
printf("\n 主函数中 sum 的值是 %d \n ",su子m函);数中sum的值是101
}
主函数中sum的值是 0
全局变量
全局变量(外部变量):在函数外部定义的变量。 全局变量的作用域
从该变量定义的位置开始到本源文件结束,变量一直有效。 在一个函数内变量所做的改变,将影响其他函数中该变量的值 但需要注意的是,如果定义了与全局变量同名的局部变量,则 局部变量优先。 在引用全局变量时如果使用“extern”声明全局变量,可以扩大 全局变量的作用域。例如,扩大到整个源文件(模块),对于多 源文件(模块)可以扩大到其它源文件(模块)。
int f1(int a) { int b,c ;
…… } int f2(int x) { int y,z ; …… } main() { int m,n ;
…… }
a,b,c作用域:仅限于函数f1()中 x,y,z作用域:仅限于函数f2()中
m,n作用域:仅限于函数main()中 a, b, c, x, y, z , m, n 都是局部变量
函数调用时程序控制流将转向被调函数,被调函数执行 结束时,控制流返回主调函数
return 语句用于向调用函数返回值
目标
理解两种参数传递的方式:传值、引用 熟练使用数组作为函数参数 理解变量的作用域 理解变量的存储类型
变量的作用域
限于陆地
限于海洋
限于空中
作用域是某些事物起作用或有效的区域。