c语言函数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
递归的优缺点
优点:为某些编程问题提供了最简单的解 决办法
缺点:递归算法会很快的耗尽计算机的内 存资源,难于维护和阅读
本讲内容
基本函数概念 函数的递归 局部变量和全局变量 变量的存储类别
局部变量和全局变量
局部变量
在一个函数内部定义的变量是内部变量,它只在本函数范围内有效,也 就是说只有在本函数内才能使用它们,在此函数以外是不能使用这些变 量的。这称为“局部变量”
从用户使用的角度看,函数有两种: 标准函数,即库函数。这是由系统提供的,用户不必自己定义这 些函数,可以直接使用它们。应该说明,每个系统提供的库函数 的数量和功能不同,当然有一些基本的函数是共同的 用户自己定义的函数,以解决用户的专门需要
从函数的形式看,函数分两类 无参函数。在调用无参函数时,主调函数并不将数据传送给被调 用函数,一般用来执行指定的一组操作。无参函数可以带回或不 带回函数值,但一般以不带回函数值的居多 有参函数。在调用函数时,在主调函数和被调用函数之间有参数 传递,也就是说,主调函数可以将数据传给被调用函数使用,被 调用函数中的数据也可以带回来供主调函数使用。
编写和使用一个简单的函数
带参数的函数
定义带参数的函数(形式参数)
函数定义以下面的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语言》课件
数据
关闭文件:使用fclose()函 数,关闭打开的文件
程序调试技巧和方法
单步调试:逐行执行代码, 观察变量值和程序状态
异常处理:使用try-catch 语句捕获和处理异常,避免
程序崩溃
代码审查:与他人共同审查 代码,发现潜在问题
断点调试:设置断点,逐 步执行代码,观察变量值
和程序状态
打印调试:在关键位置打 印变量值,观察程序状态
数组的定义:使用关键字 "int[]"、"char[]"等定义数
组
添加标题
数组的访问:通过数组下标 访问数组元素,下标从0开始
添加标题
数组的修改:可以通过数组 下标修改数组元素
数组的查找:可以使用查找 算法在数组中查找元素,如
二分查找、顺序查找等
字符串的处理和操作
字符串的定义:由字符组成 的序列,用双引号括起来
嵌套控制结构
概念:在一个控制 结构中嵌套另一个 控制结构
应用场景:循环嵌 套、条件嵌套等
语法:使用{}、() 等符号表示嵌套关 系
示例:for(int i=0;i<10;i++){if(i %2==0){...}}
函数和程序结构
函数的定义和调用
函数的定义:函数是完成特定任务的独立代码块,可以重复使用。 函数的调用:在程序中使用函数名和参数列表来调用函数。 函数的参数:函数可以接受参数,参数可以是变量、常量或表达式。 函数的返回值:函数可以返回一个值,返回值可以是任何类型的数据。
数据类型和运算 符
变量和常量
变量:在程序运行过程中可以改变的值
常量类型:整型、浮点型、字符型、布 尔型等
常量:在程序运行过程中不能改变的值
关闭文件:使用fclose()函 数,关闭打开的文件
程序调试技巧和方法
单步调试:逐行执行代码, 观察变量值和程序状态
异常处理:使用try-catch 语句捕获和处理异常,避免
程序崩溃
代码审查:与他人共同审查 代码,发现潜在问题
断点调试:设置断点,逐 步执行代码,观察变量值
和程序状态
打印调试:在关键位置打 印变量值,观察程序状态
数组的定义:使用关键字 "int[]"、"char[]"等定义数
组
添加标题
数组的访问:通过数组下标 访问数组元素,下标从0开始
添加标题
数组的修改:可以通过数组 下标修改数组元素
数组的查找:可以使用查找 算法在数组中查找元素,如
二分查找、顺序查找等
字符串的处理和操作
字符串的定义:由字符组成 的序列,用双引号括起来
嵌套控制结构
概念:在一个控制 结构中嵌套另一个 控制结构
应用场景:循环嵌 套、条件嵌套等
语法:使用{}、() 等符号表示嵌套关 系
示例:for(int i=0;i<10;i++){if(i %2==0){...}}
函数和程序结构
函数的定义和调用
函数的定义:函数是完成特定任务的独立代码块,可以重复使用。 函数的调用:在程序中使用函数名和参数列表来调用函数。 函数的参数:函数可以接受参数,参数可以是变量、常量或表达式。 函数的返回值:函数可以返回一个值,返回值可以是任何类型的数据。
数据类型和运算 符
变量和常量
变量:在程序运行过程中可以改变的值
常量类型:整型、浮点型、字符型、布 尔型等
常量:在程序运行过程中不能改变的值
《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课件
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语言( 函数) 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课件
修改不会影响外部传递的实参。 • · 返回值:函数执行完成后,可以返回一个值给调用者。例如 • · ```c • · int max(int a, int b) { • · return a > b ? a : b; • ·}
数组的定义与初始化
• 数组定义:使用数组类型和长度来定义一个数组。例如 • int arr[5]; • 数组初始化:在定义数组的同时,可以对其元素进行初始化。例如 • int arr[5] = {1, 2, 3, 4, 5}; • · 数组定义:使用数组类型和长度来定义一个数组。例如 • · ```c • · int arr[5]; • · ``` • · 数组初始化:在定义数组的同时,可以对其元素进行初始化。例如 • · ```c • · int arr[5] = {1, 2, 3, 4, 5}; • · ```
打印“Hello World”程序
需求分析
编写一个C程序,能够在控制台 输出“Hello World”。
程序设计
通过printf函数实现输出功能。
代码实现
使用printf函数输出“Hello World”。
数据复制和排序
需求分析
给定一个整数数组,实现对该数组的复制和排序。
程序设计
可以使用冒泡排序算法实现数组的排序,通过循环语句实现数 组的复制。
类型错误
将不同类型的指针进行比较或算术 运算。
内存泄漏
未释放已分配的内存空间而导致内 存泄漏。
05
数据结构与算法
链表
01
02
03
链表定义
链表是一种线性数据结构 ,由一系列节点构成,每 个节点包含数据域和指针 域。
链表特点
链表不需要连续的内存空 间,可以高效地进行插入 和删除操作,但访问元素 不如数组直观。
数组的定义与初始化
• 数组定义:使用数组类型和长度来定义一个数组。例如 • int arr[5]; • 数组初始化:在定义数组的同时,可以对其元素进行初始化。例如 • int arr[5] = {1, 2, 3, 4, 5}; • · 数组定义:使用数组类型和长度来定义一个数组。例如 • · ```c • · int arr[5]; • · ``` • · 数组初始化:在定义数组的同时,可以对其元素进行初始化。例如 • · ```c • · int arr[5] = {1, 2, 3, 4, 5}; • · ```
打印“Hello World”程序
需求分析
编写一个C程序,能够在控制台 输出“Hello World”。
程序设计
通过printf函数实现输出功能。
代码实现
使用printf函数输出“Hello World”。
数据复制和排序
需求分析
给定一个整数数组,实现对该数组的复制和排序。
程序设计
可以使用冒泡排序算法实现数组的排序,通过循环语句实现数 组的复制。
类型错误
将不同类型的指针进行比较或算术 运算。
内存泄漏
未释放已分配的内存空间而导致内 存泄漏。
05
数据结构与算法
链表
01
02
03
链表定义
链表是一种线性数据结构 ,由一系列节点构成,每 个节点包含数据域和指针 域。
链表特点
链表不需要连续的内存空 间,可以高效地进行插入 和删除操作,但访问元素 不如数组直观。
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就是形式参 数。 实际参数(实参):一个有参函数在被调用的时候, 主调函数必须根据被调用函数形参(形式参数)的要 求,传递具体数据给被调用函数的形参,这些实际的 数据就叫做实际参数,也就是我们所说的实参。 实参是有具体值的,实参可以是常数,也可以是变量 。但在使用时必须有具体值。
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语言_7函数
2 必须有某个结束递归条件:这个结束条件是递归 分解的终止点。
例 1. 用递归法求 n! n! =n*(n-1)! n! =1 当n>1时 时 当n=0或n=1时 或 时
例 2.用递归函数计算Febonacci序列的第n项值 函数原形是:f(n)=f(n-1)+f(n-2)
例 3.用递归函数计算xn的值
§4 函数的调用 一、 函数调用的一般形式 函数名(实参表列) 函数名(实参表列) 说明 : 调用无参函数,虽然不需要实参,但括号不能省。 调用无参函数,虽然不需要实参,但括号不能省。
调用函数的方式有三种: 调用函数的方式有三种: 函数语句、函数表达式、函数参数。 函数语句、函数表达式、函数参数。 如: ShowInfor(); m=max(a,b)*20; cout<<max(a,b);
实验题 1.找出1000之内的所有“完数”,判一个数是否 为完数用函数实现 。 2 .编写程序,从键盘上读入一个整数m,然后输出 这个数的全部素数因子,其中判断是否为素数用函 数实现。
§7.5 函数的嵌套调用
函数的嵌套调用
main 函数 ① 调用 a 函数 ⑨ ⑧ 结束 函数不能嵌套定义函数 ②
main
a d e f e
b g h i g
c j
C 程序结构
§2 函数定义
无参函数 形式: 函数名() 形式:函数类型 函数名() { 函数体 } 注意: 注意: 如果一个函数不需要返回值, 如果一个函数不需要返回值,认为函数类型是void类 型 例如: 定义一个ShowInfor函数,显示如下信息: 函数, 例如: 定义一个 函数 显示如下信息: ********* int a,b,c; cin>>a>>b; c=max( a ,b ); cout<<c<<‘\n’; }
四川大学《c语言程序设计》课件-第5章 函数
用void定义参数 ,表示没有参数
void 函数名(void)
{ 声明语句序列 可执行语句序列 return ;
}
return语句后无需 任何表达式
【例】 计算整数n的阶乘n!
/* 函数功能: 用迭代法计算n!
返回值函数类入型口参数:函整数型名变量说n明表示阶乘的形阶参数表,函
函数返回值: 函返数回的n!功的能值
函数定义(Function definition)
返回值 类型
函数名标识符, 说明运算规则
参数表相当于 运算的操作数
类型 函数名(类型 参数1, 类型 参数2, ……)
{ 声明语句序列
可执行语句序列 return 表达式;
}
函数出口
返回运算的结果
函数定义(Function definition)
因变量
函数名
自变量
程序设计中的函数
程序设计中的函数不局限于计算 –计算类,如打印阶乘表的程序…… –判断推理类,如排序、查找……
问题的提出
读多少行的程序能让你不头疼? 假如系统提供的函数printf()由10行代码替换,那么你编过的程 序会成什么样子?
–实际上一个printf()有上千行代码 main()中能放多少行代码? 如果所有代码都在main()中,怎么团队合作? 如果代码都在一个文件中,怎么团队合作?
C程序的存储类别 – auto型(自动变量) – static型(静态变量) – extern型(外部变量) – register型(寄存器变量)
变量的存储类型( Storage Class)
变量的生存期(Lifetime )
The lifetime of a variable is the period of time during which memory is allocated to the variable
C语言课件-第5章 函数 湘潭大学上课课件
为什么要用函数
解决的方法:用模块化程序设计的思路
采用‚组装‛的办法简化程序设计的过程 事先编好一批实现各种不同功能的函数 把它们保存在函数库中,需要时直接用
为什么要用函数
解决的方法:用模块化程序设计的思路
函数就是功能 每一个函数用来实现一个特定的功能 函数的名字应反映其代表的功能
b
g h
c
i
为什么要用函数
可以使用库函数
可以使用自己编写的函数 在程序设计中要善于利用函数,可以减少
重复编写程序段的工作量,同时可以方便 地实现模块化的程序设计
C语言中的函数
0个或多个数据被传递
参数
函数体
至多一个数据或结构被返回
C语言中的函数
math.h中提供的函数(库函数)
double sqrt(double x)
//函数定义 int firstDigit (int num) { return (num % 10); }
digit = firstDigit (number); printf("\nLeast significant digit is: %d\n", digit); return 0; } // main
带参数的void函数:void getnum(int a) 有返回值但不带参数的函数:int caculate() 有返回值且带参数的函数:int max(int a,int b)
函数使用(调用)
greeting();
getnum(10); Result=caculate();
a
200 100
?
x
200 100
void TryToChange(int x) { x = x * 2; }
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
max(int x, int y) { int z;
z=x>y?x:y;
return(z);
}
实参 形参
形参与实参
❖形式参数:定义函数时函数名后面括号中的变量名 ❖实际参数:调用函数时函数名后面括号中的表达式
❖说明1:
实参必须有确定的值 形参必须指定类型 形参与实参类型一致,个数相同 若形参与实参类型不一致,自动按形参类型转换———函数
三 请在这里输入您的主要叙述内容
C是模块化程序设计语言
C程序
源程序文件1 源程序文件i 源程序文件n
预编译命令
函数1
函数n
说明部分 执行部分
C程序结构 C是函数式语言 必须有且只能有一个名为main的主函数 C程序的执行总是从main函数开始,在main中结束 函数不能嵌套定义,可以嵌套调用
例、在 C 程序中 , 函数既可以嵌套定义 , 也可以嵌套调用。
若无return语句,遇}时,自动返回调用函数
若函数类型与return语句中表达式值的类型不一致,按前者 为准,自动转换------函数调用转换
void型函数
例、编写程序,输入一个正整数n,求下列
算式的值。要求定义和调用函数fact(k)计
算k的阶乘,函数返回值的类型是double。
2006年春试题。 double fact(int k)
#include <stdio.h> main() {intn; double sum; scanf(“%d”,&n); sum=fact(n);//函数调用 Printf(“%f”,sum);}
调用方式
❖函数语句: 例 printstar(); printf(“Hello,World!\n”);
第六章 函数
模块化程序设计
❖基本思想:将一个大的程序按功能分割成一些小模块, ❖特点:
各模块相对独立、功能单一、结构清晰、接口简单 控制了程序设计的复杂性 提高元件的可靠性 缩短开发周期 避免程序开发的重复劳动 易于维护和功能扩充
整体 概述
一 请在这里输入您的主要叙述内容
二
请在这里输入您的主要 叙述内容
函数分类
❖从用户角度
标准函数(库函数):由系统提供 用户自定义函数
❖从函数形式
无参函数 有参函数
使用库函数应注意: 1、函数功能 2、函数参数的数目和顺序,及各参数意义和类型 3、函数返回值意义和类型 4、需要使用的包含文件
Ch7_201.c
§ 6.1 函数 一、函数的定义
一般格式
函数返回值类型 缺省int型
a=printstar(); pr出:10
void printstar() { printf("**********"); } main() { int a;
a=printstar(); printf("%d",a); }
编译错误!
例 函数返回值类型转换
main() { float a,b;
无返回值void
合法标识符
函数类型 函数名(形参类型说明表)
{ 说明部分 语句部分
}
函数体
例或例{p{pi{}rnri例intppnzr无i{}t有mrren=tisiisntttnnxua参zrta参t有amtte>xr=riff例zrnnt({(((y函x(ua;d函vi参t““(?n>xrz)uo**z}nx数t()y数mi**;函i;空(:dx?ny**zm,xt());**数函;y:xy**y)现,(**(;数in**)代t**现y**风)**代\\nn函格风””))数);;格体}})为空
例 无返回值函数
返回语句
❖形式: return(表达式); 或 return 表达式;
void swap(int x,int y ) { int temp;
temp=x; x=y;
或 return;
y=temp;
❖功能:使程序控制从被调用函} 数返回到调用函数中, 同时把返值带给调用函数
❖说明:
函数中可有多个return语句
int c; scanf("%f,%f",&a,&b); c=max(a,b); printf("Max is %d\n",c); } max(float x, float y) { float z; z=x>y?x:y; return(z); }
三、函数参数及其传递方式
形参与实参
❖形式参数:定义函数时函数名后面括号中的变量名 ❖实际参数:调用函数时函数名后面括号中的表达式
调用转换 形参在函数被调用前不占内存;函数调用时为形参分配内存;
s
n1 k 1 k !
{double s=0;
int i,t=1;
for(i=1;i<=k;i++)
{t=t*i;
s=s+1.0/t;
}
return s;}
二、函数的调用
调用形式
函数名(实参表); 说明:
实参与形参个数相等,类型一致,按顺序一一对应 实参表求值顺序,因系统而定(Turbo C 自右向左)
❖函数表达式: 例 m=max(a,b)*2; ❖函数参数: 例 printf(“%d”,max(a,b));
m=max(a,max(b,c));
例 参数求值顺序
main() { int i=2,j=2,p;
p=f(i,j); printf("%d",p); } int f(int a, int b) { int c; if(a>b) c=1; else if(a==b) c=0; else c=-1; return(c); }
运行结果:0
调用函数 语句1;
执行函数调用的内涵: 1、把实参的值传给形参; 2、把控制语句传给被调函数 ;也就是说程序的执行由主调 函转到被调函数; 3、在函数中执行return语句, 将返回值带回到主调函数。
Return语句或最后 一个}
主调函数
主调函数
例 函数带回不确定值
printstar() { printf("**********"); } main() { int a;
例 比较两个数并输出大者 main()
{ int a,b,c;
scanf("%d,%d",&a,&b);
c=max(a,b); (main 函数) c=max(a,b);
max(int x, int y) (max 函数) printf("Max is %d",c);
{ int z;
}
z=x>y?x:y; return(z); }