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课件
} 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 Programming Language
教学目的:掌握“文化基础”中的相关概 念,明确学习方法,了解C语言基本知识。
教学要求:明确本课程的目标及学习方法, 复习“文化基础”中与C语言相关的知识: 数制、编码、计算机系统组成,了解算法 的概念及表示、C语言及标识符、C语言基 本结构。
学时:2学时
输出AVER的值
.
A
C Programming Language
结束
[例1.2] 输出一个数的绝对值。
开始 输入 X
输入 X N X>=0吗? Y
N X>=0吗? Y
输出 -X 输出 X
输出 -X
输出 X
结束
. C Programming Language
[例1.3] 输入10个 数,把其 中的正数 输出。
程序语言发展现状程序语言发展现状programminglanguage三翻译方式三翻译方式高级语言源程序高级语言源程序目标程序目标程序codecode翻译翻译programminglanguage用高级语言用高级语言书写的源程序书写的源程序用高级语言用高级语言书写的源程序书写的源程序机器指令机器指令程序程序机器指令机器指令程序程序函数函数库库函数函数库库编译程序编译程序编译编译用用高级语言高级语言书写的书写的源程序源程序用高级语言高级语言书写的书写的源程序源程序执行结果执行结果执行结果执行结果解释程序解释程序函数函数库库函数函数库库解释并解释并执行执行programminglanguage用计算机解决问题的基本过程
. C Programming Language
1.1 引言 1.2 算法和程序设计初步 1.3 C语言简介 1.4 集成开发环境TurboC 2.0简介
教学目的:掌握“文化基础”中的相关概 念,明确学习方法,了解C语言基本知识。
教学要求:明确本课程的目标及学习方法, 复习“文化基础”中与C语言相关的知识: 数制、编码、计算机系统组成,了解算法 的概念及表示、C语言及标识符、C语言基 本结构。
学时:2学时
输出AVER的值
.
A
C Programming Language
结束
[例1.2] 输出一个数的绝对值。
开始 输入 X
输入 X N X>=0吗? Y
N X>=0吗? Y
输出 -X 输出 X
输出 -X
输出 X
结束
. C Programming Language
[例1.3] 输入10个 数,把其 中的正数 输出。
程序语言发展现状程序语言发展现状programminglanguage三翻译方式三翻译方式高级语言源程序高级语言源程序目标程序目标程序codecode翻译翻译programminglanguage用高级语言用高级语言书写的源程序书写的源程序用高级语言用高级语言书写的源程序书写的源程序机器指令机器指令程序程序机器指令机器指令程序程序函数函数库库函数函数库库编译程序编译程序编译编译用用高级语言高级语言书写的书写的源程序源程序用高级语言高级语言书写的书写的源程序源程序执行结果执行结果执行结果执行结果解释程序解释程序函数函数库库函数函数库库解释并解释并执行执行programminglanguage用计算机解决问题的基本过程
. C Programming Language
1.1 引言 1.2 算法和程序设计初步 1.3 C语言简介 1.4 集成开发环境TurboC 2.0简介
c语言函数PPT课件
❖从函数形式
无参函数 有参函数
使用库函数应注意: 1、函数功能 2、函数参数的数目和顺序,及各参数意义和类型 3、函数返回值意义和类型 4、需要使用的包含文件
Ch7_201.c
§ 6.1 函数 一、函数的定义
一般格式
函数返回值类型 缺省int型
无返回值void
合法标识符
函数类型 函数名(形参类型说明表)
第六章 函数
模块化程序设计
❖基本思想:将一个大的程序按功能分割成一些小模块, ❖特点:
各模块相对独立、功能单一、结构清晰、接口简单 控制了程序设计的复杂性 提高元件的可靠性 缩短开发周期 避免程序开发的重复劳动 易于维护和功能扩充
C是模块化程序设计语言
C程序
源程序文件1 源程序文件i 源程序文件n
❖函数表达式: 例 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); }
{ 说明部分 语句部分
}
函数体
例或例{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函格风””))数);;格体}})为空
无参函数 有参函数
使用库函数应注意: 1、函数功能 2、函数参数的数目和顺序,及各参数意义和类型 3、函数返回值意义和类型 4、需要使用的包含文件
Ch7_201.c
§ 6.1 函数 一、函数的定义
一般格式
函数返回值类型 缺省int型
无返回值void
合法标识符
函数类型 函数名(形参类型说明表)
第六章 函数
模块化程序设计
❖基本思想:将一个大的程序按功能分割成一些小模块, ❖特点:
各模块相对独立、功能单一、结构清晰、接口简单 控制了程序设计的复杂性 提高元件的可靠性 缩短开发周期 避免程序开发的重复劳动 易于维护和功能扩充
C是模块化程序设计语言
C程序
源程序文件1 源程序文件i 源程序文件n
❖函数表达式: 例 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); }
{ 说明部分 语句部分
}
函数体
例或例{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函格风””))数);;格体}})为空
C语言函数篇讲解ppt课件
⑤
b函数结束
精选版课件ppt
20
main( ) { int x,y,sum;
x=5; y=6; sum=add(x,y); printf(“%d”,sum); }
add(int a ,int b) { int z;
z=a+fun(b); return z; } 运行结果:
41
精选版课件ppt
汉诺塔问题 ( Hanoi)
数调用任意多次。 4. 从用户角度看,函数分为两种:
① 标准函数:即库函数,由系统提供。
② 用户自定义函数:用户自己定义的。 5. 从函数形式看,函数分为两种:
①无参函数。
②有参函数。
精选版课件ppt
3
6.2 函数定义的一般形式
一 函数定义的一般形式
列表
类型标识符 函数名(类型1 形参1,类型2 形参2,…) { 声明部分 语句 }
二 说明:
1.所有函数在定义时都是互相独立的,即不能嵌套定义; 2.类型标识符:说明了函数返回值的类型,当返回值为
int时,可省略不写; 3.函数名:遵循标识符的命名规则;同一个函数中函数名
必须唯一;
精选版课件ppt
4
4.形参:只能是变量,每个形参前要有类型名;当定义的 函数没有形参时叫作“无参函数” ;
a 10 20 b
alter(a, b);
printf(“a=%d,b=%d\n”,a,b); x 1200 }
210 y
alter(int x, int y) { int t;
t=x; x=y; y=t; }
总结:形参的值发生 改变,并不能 影响实参。
精选版课件ppt
9
三 函数的返回值
b函数结束
精选版课件ppt
20
main( ) { int x,y,sum;
x=5; y=6; sum=add(x,y); printf(“%d”,sum); }
add(int a ,int b) { int z;
z=a+fun(b); return z; } 运行结果:
41
精选版课件ppt
汉诺塔问题 ( Hanoi)
数调用任意多次。 4. 从用户角度看,函数分为两种:
① 标准函数:即库函数,由系统提供。
② 用户自定义函数:用户自己定义的。 5. 从函数形式看,函数分为两种:
①无参函数。
②有参函数。
精选版课件ppt
3
6.2 函数定义的一般形式
一 函数定义的一般形式
列表
类型标识符 函数名(类型1 形参1,类型2 形参2,…) { 声明部分 语句 }
二 说明:
1.所有函数在定义时都是互相独立的,即不能嵌套定义; 2.类型标识符:说明了函数返回值的类型,当返回值为
int时,可省略不写; 3.函数名:遵循标识符的命名规则;同一个函数中函数名
必须唯一;
精选版课件ppt
4
4.形参:只能是变量,每个形参前要有类型名;当定义的 函数没有形参时叫作“无参函数” ;
a 10 20 b
alter(a, b);
printf(“a=%d,b=%d\n”,a,b); x 1200 }
210 y
alter(int x, int y) { int t;
t=x; x=y; y=t; }
总结:形参的值发生 改变,并不能 影响实参。
精选版课件ppt
9
三 函数的返回值
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)
C语言具有良好的可移植性,可以在不同的 平台上进行开发,使得程序可以方便地从 一个系统移植到另一个系统。
灵活性
底层访问能力
C语言是一种灵活的语言,它提供了多种数 据类型和控制结构,使得程序员可以自由 地表达自己的算法和思路。
C语言可以直接访问计算机底层硬件资源, 如内存、寄存器等,使得它在系统级编程和 嵌入式系统开发中具有独特的优势。
2024/1/30
逐行读写文件
使用fgets()和fputs()函数实现。
随机访问文件
使用fseek()函数实现,可以定位到文件的任 意位置进行读写操作。
30
08
C语言高级特性
2024/1/30
31
预处理指令的使用
01
预处理指令介绍
C语言中的预处理指令是在编译之 前对程序进行处理的指令,以 “#”开头。
2024/1/30
5
C语言的应用领域
系统级编程
C语言在系统级编程领域具有广 泛应用,如操作系统、编译器 、数据库等核心系统软件的开 发。
2024/1/30
嵌入式系统开发
C语言是嵌入式系统开发的首选 语言,如智能家居、智能穿戴 、工业控制等领域。
游戏开发
C语言在游戏开发领域也有广泛 应用,如游戏引擎、游戏逻辑 等模块的开发。
顺序结构
程序按照代码顺序逐行执行
2024/1/30
循环结构
for循环、while循环、dowhile循环,实现重复执行某 段代码
控制语句跳转
break语句、continue语句, 用于改变程序执行流程
10
03
函数与模块化设计
2024/1/30
11
函数的定义与调用
(2024年)C语言程序设计教程完整全套教学课件pptx
示例
实现二维数组的动态内存分配、模拟命令行参数传 递等。
34
07
文件操作与数据处理
2024/3/26
35
文件概述及文件类型指针
文件概述
文件是存储在外部介质上的数据集合, 是程序设计中重要的数据存储和处理 方式。
文件类型指针
C语言中,文件类型指针用于指向文件 的指针变量,通过文件指针可以实现对 文件的读写操作。
2024/3/26
指针定义及本质
指针是一种特殊类型的变量,它存储的是另 一个变量的内存地址,而不是值本身。
指针基本操作
包括指针的赋值、取值、指针算术运算、指 针比较等。
31
指针作为函数参数传递
值传递与地址传递
通过值传递,函数接收参数的副本,对副本的修改不影响原始变量;通过地址传递,函 数直接操作原始变量的内存地址,可实现数据的修改。
介绍C语言编程的基本规范和风格,包括命名规则、 注释规则、缩进和空格的使用等。
2024/3/26
7
02
数据类型、运算符与表达式
2024/3/26
8
基本数据类型
01
整型(int)
02
浮点型(float、 double)
字符型(char)
03
04
布尔型(bool)
2024/3/26
9
变量与常量
变量
2024/3/26
3
C语言概述
C语言的历史与发展
介绍C语言的起源、发展历程以及在 计算机科学领域的重要地位。
C语言与高级语言的关系
探讨C语言与Java、Python等高级语 言之间的联系与区别,以及各自适用 的场景。
C语言的特点与优势
阐述C语言高效、灵活、可移植等特 点,以及在系统级编程、嵌入式开发 等领域的广泛应用。
实现二维数组的动态内存分配、模拟命令行参数传 递等。
34
07
文件操作与数据处理
2024/3/26
35
文件概述及文件类型指针
文件概述
文件是存储在外部介质上的数据集合, 是程序设计中重要的数据存储和处理 方式。
文件类型指针
C语言中,文件类型指针用于指向文件 的指针变量,通过文件指针可以实现对 文件的读写操作。
2024/3/26
指针定义及本质
指针是一种特殊类型的变量,它存储的是另 一个变量的内存地址,而不是值本身。
指针基本操作
包括指针的赋值、取值、指针算术运算、指 针比较等。
31
指针作为函数参数传递
值传递与地址传递
通过值传递,函数接收参数的副本,对副本的修改不影响原始变量;通过地址传递,函 数直接操作原始变量的内存地址,可实现数据的修改。
介绍C语言编程的基本规范和风格,包括命名规则、 注释规则、缩进和空格的使用等。
2024/3/26
7
02
数据类型、运算符与表达式
2024/3/26
8
基本数据类型
01
整型(int)
02
浮点型(float、 double)
字符型(char)
03
04
布尔型(bool)
2024/3/26
9
变量与常量
变量
2024/3/26
3
C语言概述
C语言的历史与发展
介绍C语言的起源、发展历程以及在 计算机科学领域的重要地位。
C语言与高级语言的关系
探讨C语言与Java、Python等高级语 言之间的联系与区别,以及各自适用 的场景。
C语言的特点与优势
阐述C语言高效、灵活、可移植等特 点,以及在系统级编程、嵌入式开发 等领域的广泛应用。
c语言函数教案 ppt课件
p1
a
&a
5
调swap:
p2
b
&b
9
p1
a
scanf("%d,%d",&a,&b);
&a
9
printf(“a=%d,b=%d\n”,a,b); 交换:
printf(“s:\n”);
p2
b
s);
&b
5
printf(”a=%d,b=%d\n",a,b);
}
返回:
a 9
b 5
2021/3/26
c语言函数教案 ppt课件
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); }
max(int x, int y) { int z;
z=x>y?x:y;
你现在所处的位置在:首页C语言教学幻灯片版第六章 函数
c语 言嵌套函调数用教案
C规定:函数定义不可嵌套,但可以嵌套调用函数
main( ) 调用函数a 结束
a函数
调用函数bb函数 Nhomakorabea2021/3/26
c语言函数教案 ppt课件
18 18
你现在所处的位置在:首页C语言教学幻灯片版第六章 函数
c语言函数教案
调f2
调f1
C编译系统对递归函数的自调用次数没有限制 每调用函数一次,在内存堆栈区分配空间,用于存放函数变量、
返回值等信息,所以递归次数过多,可能引起堆栈溢出
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课件第7章 函数
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
问题的提出
《三国演义》中有这样一段描写:
–懿问曰:“孔明寝食及事之烦简若何?”使
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
-
提纲
11
5.2.1 函数
C语言中用函数实现子程序设计思想。较大的C语 言应用程序,往往是由多个函数组成的(用户自定义 函数或标准库函数),每个函数完成明确的功能;
每一个函数应该只完成单一的预定好的任务,并且 函数名能有效地反映函数完成的任务;如果不能选择 简洁的函数名,那可能函数完成的功能太多,建议拆 分成几个较小的函数。
8
•5.1 子程序设计
三. 引入子程序的目的 1. 程序“复用”,避免在程序中使用重复代码; 2. 结构化程序设计的需要: 自顶向下、逐步细化,将复杂问题分解为相对 简单的子问题,这些子问题用子程序实现,从 而提高主程序结构的清晰性和易读性。 3.使程序的调试和 维护变得更加容易。
9
5.1 子程序设计
-
提纲
13
5.2.2 函数的定义
• 函数设计的要求: – 明确该函数的功能; – 定义该函数的接口(即函数头,包括函数名、 参数和返回值) – 定义该函数的功能实现部分
14
5.2.2 函数的定义
函数定义的格式:
返回值类型 函数名( 参数列表 ) /*接口定义部分*/
2(所数(列(假的3(型(将定(能型但4(数调(型不、、据类接表123定实定又31简如假 , 要 一用1;2)23参))))、或返)))){}类型收定其现义无定并和致函;洁:数参如如如回指如rr函r部成r型,的义为eerr返将返,数、see果列数果果tteeq值返果tt数分vuu声即参为iuttu语u回“回则;n函ouu能参rr表列函不rar与回不类i无tnn名rr使n数vd明类nr值返值以数句nn数语语表数列o语反e。语给指型rr、是,iee型不是回的返(d句返1句句声不若出t映t函明句返upui[形;返。值类回in,,rr返回r的的明接参n出数返中ni回tn式回tn如型但表型值语则数回型值语一功了收数t/调回返函值f任为*,最函句等达说类值据i(表般 能句在 任的n功用值回表数何:数)。最t类好式明型类最达格:调何类者类p值值能达的将,型好明”一为r型好式式返型用参(的型i表式返则实不n功也确的致准明:回函数,t即;结,达参回返(是)能现明指值。(v;确调数,编函进果编o式一回数v确定。带如io部指数用时则译d行个值的译的i2d)定参给果…功分函器函参,类不类类器类义数…数数就*。/]
四. 子程序设计原则 高内聚:功能相对独立和完整; 低耦合:与外界的关系尽量松散, 不要太紧密,使其能方便地被重用;
需要合理地设计子程序参数和子程序执行的局 部环境 来达到以上目标。 五. 子程序在C语言中的实现机制
C语言中的函数机制
10
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 内部函数和外部函数
判断素数的 子程序
子程序很重要的特点: 调用者只需要关心子 程序接口,不必了解 子程序内部实现细节。
可以设计子程序isPrim,用于判断一个整数是否是素数; 子程序reverse ,用于计算一个整数- 的逆数;
6
5.1 子程序设计
二.子程序的控制和调用机制
主程序 (主控模块)
通过子程序名进行调 用;
调用时需要传递一些 供子程序计算和处理 的数据(参数);
子程序执行完成后需 要返回处理结果。
调用 返回
调用 返回
调用 返回
子程序1
子程序2
...
子程序n
返回
调用
主程序
调用 返回
调用 返回
子程序
①
②子程序1.1
③..④.
子程序
子程序1.n
⑧ ⑨
⑤ ⑦⑥
7
5.1 子程序设计
numß 1000;
返回值
子程序名 参数
C标准库提供了丰富的函数集,能够完成常用的数 学计算、字符串操作、输入/输出等有用操作,程序员 可以直接使用、从而减少工作量;
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 内部函数和外部函数
5
5.1 子程序设计
numß 1000;
num≤9999 判断num是否素数
Y
num是素数 N
计算num的逆数reverseNum
调用 调用
判断素数的
子程序 isPrim
计算逆数的 子程序
reverse
判断reverseNum是否素数
reverseNum是
Y
素数 N
输出num
num=num+1
调用
num≤9999 判断num是否素数
flag=isPrim(num)
调用
判断素数的
子程序
Y
num是素数 N
计算num的逆数reverseNum
判断reverseNum是否素数
reverseNum是
Y
素数 N
flag=isPrim(reverseNum)
调用
判断素数的 子程序
输出num
num=num+1
3
5.1 子程序设计
numß 1000; num≤9999
判断num是否素数
Y
num是素数 N
计算num的逆数reverseNum
判断reverseNum是否素数
reverseNum是
Y
素数 N
输出num
num=num+1
求可逆素数
-
• 本程序中判断素数的代码 会出现两次;
• 判断素数、求整数逆数这 两个功能是独立的功能, 且在多个程序中都有可能 用到: – 求一个整数的逆数:该 功能在判断一个整数是 否回文数中也被用到; – 判断一个数是否素数: 该功能在对整数进行素 数分解中用到。
4
5.1 子程序设计
• 能否将完成上述独立功能的代码包装成一个单 元,并且可以供其他代码来调用?--答案是可 以使用子程序
一. 子程序的定义 子程序是封装并给以命名的一段程序代码,这 段程序代码完成子程序所定义的功能,可供调 用。 封装:调用者只需要关心代码能完成什么功能, 如何调用代码(即子程序接口),而不需要关 心代码的内部实现。
第五章 函数
1
5.1 子程序设计 5.2 函Байду номын сангаас 5.3 头文件 5.4 函数应用举例 5.5 变量作用域 5.6 变量的存储类别 5.7 内部函数和外部函数
-
提纲
2
5.1 子程序设计
• 编写程序,求所有四位可逆素数 ,所谓可逆素 数是这么一种素数,它的逆数也是素数。 包含的主要功能: – 判断一个数是否素数。 – 求一个整数的逆数。如1234的逆数是4321。
提纲
11
5.2.1 函数
C语言中用函数实现子程序设计思想。较大的C语 言应用程序,往往是由多个函数组成的(用户自定义 函数或标准库函数),每个函数完成明确的功能;
每一个函数应该只完成单一的预定好的任务,并且 函数名能有效地反映函数完成的任务;如果不能选择 简洁的函数名,那可能函数完成的功能太多,建议拆 分成几个较小的函数。
8
•5.1 子程序设计
三. 引入子程序的目的 1. 程序“复用”,避免在程序中使用重复代码; 2. 结构化程序设计的需要: 自顶向下、逐步细化,将复杂问题分解为相对 简单的子问题,这些子问题用子程序实现,从 而提高主程序结构的清晰性和易读性。 3.使程序的调试和 维护变得更加容易。
9
5.1 子程序设计
-
提纲
13
5.2.2 函数的定义
• 函数设计的要求: – 明确该函数的功能; – 定义该函数的接口(即函数头,包括函数名、 参数和返回值) – 定义该函数的功能实现部分
14
5.2.2 函数的定义
函数定义的格式:
返回值类型 函数名( 参数列表 ) /*接口定义部分*/
2(所数(列(假的3(型(将定(能型但4(数调(型不、、据类接表123定实定又31简如假 , 要 一用1;2)23参))))、或返)))){}类型收定其现义无定并和致函;洁:数参如如如回指如rr函r部成r型,的义为eerr返将返,数、see果列数果果tteeq值返果tt数分vuu声即参为iuttu语u回“回则;n函ouu能参rr表列函不rar与回不类i无tnn名rr使n数vd明类nr值返值以数句nn数语语表数列o语反e。语给指型rr、是,iee型不是回的返(d句返1句句声不若出t映t函明句返upui[形;返。值类回in,,rr返回r的的明接参n出数返中ni回tn式回tn如型但表型值语则数回型值语一功了收数t/调回返函值f任为*,最函句等达说类值据i(表般 能句在 任的n功用值回表数何:数)。最t类好式明型类最达格:调何类者类p值值能达的将,型好明”一为r型好式式返型用参(的型i表式返则实不n功也确的致准明:回函数,t即;结,达参回返(是)能现明指值。(v;确调数,编函进果编o式一回数v确定。带如io部指数用时则译d行个值的译的i2d)定参给果…功分函器函参,类不类类器类义数…数数就*。/]
四. 子程序设计原则 高内聚:功能相对独立和完整; 低耦合:与外界的关系尽量松散, 不要太紧密,使其能方便地被重用;
需要合理地设计子程序参数和子程序执行的局 部环境 来达到以上目标。 五. 子程序在C语言中的实现机制
C语言中的函数机制
10
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 内部函数和外部函数
判断素数的 子程序
子程序很重要的特点: 调用者只需要关心子 程序接口,不必了解 子程序内部实现细节。
可以设计子程序isPrim,用于判断一个整数是否是素数; 子程序reverse ,用于计算一个整数- 的逆数;
6
5.1 子程序设计
二.子程序的控制和调用机制
主程序 (主控模块)
通过子程序名进行调 用;
调用时需要传递一些 供子程序计算和处理 的数据(参数);
子程序执行完成后需 要返回处理结果。
调用 返回
调用 返回
调用 返回
子程序1
子程序2
...
子程序n
返回
调用
主程序
调用 返回
调用 返回
子程序
①
②子程序1.1
③..④.
子程序
子程序1.n
⑧ ⑨
⑤ ⑦⑥
7
5.1 子程序设计
numß 1000;
返回值
子程序名 参数
C标准库提供了丰富的函数集,能够完成常用的数 学计算、字符串操作、输入/输出等有用操作,程序员 可以直接使用、从而减少工作量;
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 内部函数和外部函数
5
5.1 子程序设计
numß 1000;
num≤9999 判断num是否素数
Y
num是素数 N
计算num的逆数reverseNum
调用 调用
判断素数的
子程序 isPrim
计算逆数的 子程序
reverse
判断reverseNum是否素数
reverseNum是
Y
素数 N
输出num
num=num+1
调用
num≤9999 判断num是否素数
flag=isPrim(num)
调用
判断素数的
子程序
Y
num是素数 N
计算num的逆数reverseNum
判断reverseNum是否素数
reverseNum是
Y
素数 N
flag=isPrim(reverseNum)
调用
判断素数的 子程序
输出num
num=num+1
3
5.1 子程序设计
numß 1000; num≤9999
判断num是否素数
Y
num是素数 N
计算num的逆数reverseNum
判断reverseNum是否素数
reverseNum是
Y
素数 N
输出num
num=num+1
求可逆素数
-
• 本程序中判断素数的代码 会出现两次;
• 判断素数、求整数逆数这 两个功能是独立的功能, 且在多个程序中都有可能 用到: – 求一个整数的逆数:该 功能在判断一个整数是 否回文数中也被用到; – 判断一个数是否素数: 该功能在对整数进行素 数分解中用到。
4
5.1 子程序设计
• 能否将完成上述独立功能的代码包装成一个单 元,并且可以供其他代码来调用?--答案是可 以使用子程序
一. 子程序的定义 子程序是封装并给以命名的一段程序代码,这 段程序代码完成子程序所定义的功能,可供调 用。 封装:调用者只需要关心代码能完成什么功能, 如何调用代码(即子程序接口),而不需要关 心代码的内部实现。
第五章 函数
1
5.1 子程序设计 5.2 函Байду номын сангаас 5.3 头文件 5.4 函数应用举例 5.5 变量作用域 5.6 变量的存储类别 5.7 内部函数和外部函数
-
提纲
2
5.1 子程序设计
• 编写程序,求所有四位可逆素数 ,所谓可逆素 数是这么一种素数,它的逆数也是素数。 包含的主要功能: – 判断一个数是否素数。 – 求一个整数的逆数。如1234的逆数是4321。