C语言完整函数教程PPT课件
合集下载
C语言函数详解PPT课件
![C语言函数详解PPT课件](https://img.taocdn.com/s3/m/a0461ceddaef5ef7bb0d3c36.png)
使用库函数应注意的问题: 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课件
![《C语言函数》PPT课件](https://img.taocdn.com/s3/m/6d7a7b895ef7ba0d4b733b4a.png)
#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课件
![C语言(函数)ppt课件](https://img.taocdn.com/s3/m/e93ba9b0a58da0116c17497b.png)
} 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语言函数》课件
![《C语言函数》课件](https://img.taocdn.com/s3/m/385cf33e178884868762caaedd3383c4bb4cb4dc.png)
总结词
文件操作函数用于创建、打开、读取、写入和关闭文件等 操作。
要点二
详细描述
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课件
![C语言( 函数) ppt课件](https://img.taocdn.com/s3/m/2c8e91f208a1284ac850438b.png)
思考: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课件
![C语言详细教程(完整版)ppt课件](https://img.taocdn.com/s3/m/1253675410a6f524cdbf8500.png)
C语言有很多种,如:Microsoft C、Turbo C、
Quick C、Borland C++、Visual C等。本课程通
.
过Turbo C的环境来学习C语言。
C Programming Language
三、C程序格式和结构特点
例1.1 第一个程序 Hello,World!
/* example1.1 The first C Program*/
– 答疑时间:星期四 12:00~13:30 – 地点:鉴主-12楼-计算机技术研究所 – 第6周到第18周
考试
. C Programming Language
上机安排
地点:南湖计算中心机房
时间:待定 上机内容:随教学进度根据配套的实验书( 上机调试每次课堂作业) 要求:
• 所有作业必须独立完成
• 作业必须经上机调试通过
. C Programming Language
开始
N=0
N<10吗?
Y
输入 X
X>=0吗? N N=N+1
N
结束
Y 输出 X
[例1.4] 输入10个数,求它们的平均值。
N=0, SUM=0 当N<10 输入X SUM=SUM+X N=N+1 AVER=SUM/10 输出AVER的值
. C Programming Language
定点法
数制转换
数值数据:二进制
浮点法
数据
西文:ASCII
非数值数据:编码 汉字:国标码
. C Programming Language
图形:……
有符定点整数
ds dn dn-1 dn-2 ……..
C语言完整函数教程PPT课件
![C语言完整函数教程PPT课件](https://img.taocdn.com/s3/m/45d13e39172ded630b1cb6ec.png)
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语言函数》PPT课件](https://img.taocdn.com/s3/m/85ee262a6bec0975f565e269.png)
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课件(2024)
![C完整精华版ppt课件(2024)](https://img.taocdn.com/s3/m/27b4e0cced3a87c24028915f804d2b160a4e8652.png)
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
函数的定义与调用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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 内部函数和外部函数
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
第五章 函数
1
5.1 子程序设计 5.2 函数 5.3 头文件 5.4 函数应用举例 5.5 变量作用域 5.6 变量的存储类别 5.7 内部函数和外部函数
-
提纲
2
5.1 子程序设计
• 编写程序,求所有四位可逆素数 ,所谓可逆素 数是这么一种素数,它的逆数也是素数。 包含的主要功能: – 判断一个数是否素数。 – 求一个整数的逆数。如1234的逆数是4321。
-
提纲
13
5.2.2 函数的定义
• 函数设计的要求: – 明确该函数的功能; – 定义该函数的接口(即函数头,包括函数名、 参数和返回值) – 定义该函数的功能实现部分
14
5.2.2 函数的定义
函数定义的格式:
返回值类型 函数名( 参数列表 ) /*接口定义部分*/
2(所数(列(假的3(型(将定(能型但确4(数调(型不型、、1接据2表3定类定又定实31简如1;2假)2,用3要一转参))))、返))或)){}收类定其型义无的现定;并函和致换洁:数参如如如回指如rr函成值部rr的型义为,ee返将数返,rr)、see果列 数 果 果。tteeq值返果tt;分v数uu声参 为 即iuttu语u回“;回则no函能uurr表列函不参ra类回不与r无itnn名rrn数使vd明类rn值返值以数句nn语语表数列o数语反e。r型给指r语、,是iee型不是回的返(d句若句返句声不出1tt映函明句返upu形[i;返。值类回in,,rr返r的回的明接参n出数返n中i回tn式回nt如但型表型值则语回数型语一值功了收数t调回/返函值f任为*函,句最等达说类值据i(般 表 能句在任的n功用值回表何数:数)。类最t好式明型类最格达:调何类者类值p值能达的将,型好明”一为r型好式式返用参型(的型表i式返则实不n功也确的致准明:回函数,t即结,达;回返参是()能现明指值。(v确;调数,编函进果编一式回ov数确定。带如io部指数用时则译d行个值的译i的2d)定参给果功…分函函参器,类不类类器类义数…数数就*。/]
判断素数的 子程序
子程序很重要的特点: 调用者只需要关心子 程序接口,不必了解 子程序内部实现细节。
可以设计子程序isPrim,用于判断一个整数是否是素数; 子程序reverse ,用于计算一个整数- 的逆数;
6
5.1 子程序设计
二.子程序的控制和调用机制
主程序 (主控模块)
通过子程序名进行调 用;
调用时需要传递一些 供子程序计算和处理 的数据(参数);
子程序执行完成后需 要返回处理结果。
调用 返回
调用 返回
调用 返回
子程序1
子程序2
...
子程序n
返回
调用
主程序
调用 返回
调用 返回
子程序
①
②子程序1.1
③..④.
子程序
子程序1.n
⑧ ⑨
⑤ ⑦⑥
7
5.1 子程序设计
numß 1000;
返回值
子程序名 参数
3
5.1 子程序设计
numß 1000; num≤9999
判断num是否素数
Y
num是素数 N
计算num的逆数reverseNum
判断reverseNum
素数 N
输出num
num=num+1
求可逆素数
-
• 本程序中判断素数的代码 会出现两次;
• 判断素数、求整数逆数这 两个功能是独立的功能, 且在多个程序中都有可能 用到: – 求一个整数的逆数:该 功能在判断一个整数是 否回文数中也被用到; – 判断一个数是否素数: 该功能在对整数进行素 数分解中用到。
四. 子程序设计原则 高内聚:功能相对独立和完整; 低耦合:与外界的关系尽量松散, 不要太紧密,使其能方便地被重用;
需要合理地设计子程序参数和子程序执行的局 部环境 来达到以上目标。 五. 子程序在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 内部函数和外部函数
4
5.1 子程序设计
• 能否将完成上述独立功能的代码包装成一个单 元,并且可以供其他代码来调用?--答案是可 以使用子程序
一. 子程序的定义 子程序是封装并给以命名的一段程序代码,这 段程序代码完成子程序所定义的功能,可供调 用。 封装:调用者只需要关心代码能完成什么功能, 如何调用代码(即子程序接口),而不需要关 心代码的内部实现。
8
•5.1 子程序设计
三. 引入子程序的目的 1. 程序“复用”,避免在程序中使用重复代码; 2. 结构化程序设计的需要: 自顶向下、逐步细化,将复杂问题分解为相对 简单的子问题,这些子问题用子程序实现,从 而提高主程序结构的清晰性和易读性。 3.使程序的调试和 维护变得更加容易。
9
5.1 子程序设计
-
提纲
11
5.2.1 函数
u C语言中用函数实现子程序设计思想。较大的C语言 应用程序,往往是由多个函数组成的(用户自定义函 数或标准库函数),每个函数完成明确的功能;
u每一个函数应该只完成单一的预定好的任务,并且函 数名能有效地反映函数完成的任务;如果不能选择简 洁的函数名,那可能函数完成的功能太多,建议拆分 成几个较小的函数。
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
第五章 函数
1
5.1 子程序设计 5.2 函数 5.3 头文件 5.4 函数应用举例 5.5 变量作用域 5.6 变量的存储类别 5.7 内部函数和外部函数
-
提纲
2
5.1 子程序设计
• 编写程序,求所有四位可逆素数 ,所谓可逆素 数是这么一种素数,它的逆数也是素数。 包含的主要功能: – 判断一个数是否素数。 – 求一个整数的逆数。如1234的逆数是4321。
-
提纲
13
5.2.2 函数的定义
• 函数设计的要求: – 明确该函数的功能; – 定义该函数的接口(即函数头,包括函数名、 参数和返回值) – 定义该函数的功能实现部分
14
5.2.2 函数的定义
函数定义的格式:
返回值类型 函数名( 参数列表 ) /*接口定义部分*/
2(所数(列(假的3(型(将定(能型但确4(数调(型不型、、1接据2表3定类定又定实31简如1;2假)2,用3要一转参))))、返))或)){}收类定其型义无的现定;并函和致换洁:数参如如如回指如rr函成值部rr的型义为,ee返将数返,rr)、see果列 数 果 果。tteeq值返果tt;分v数uu声参 为 即iuttu语u回“;回则no函能uurr表列函不参ra类回不与r无itnn名rrn数使vd明类rn值返值以数句nn语语表数列o数语反e。r型给指r语、,是iee型不是回的返(d句若句返句声不出1tt映函明句返upu形[i;返。值类回in,,rr返r的回的明接参n出数返n中i回tn式回nt如但型表型值则语回数型语一值功了收数t调回/返函值f任为*函,句最等达说类值据i(般 表 能句在任的n功用值回表何数:数)。类最t好式明型类最格达:调何类者类值p值能达的将,型好明”一为r型好式式返用参型(的型表i式返则实不n功也确的致准明:回函数,t即结,达;回返参是()能现明指值。(v确;调数,编函进果编一式回ov数确定。带如io部指数用时则译d行个值的译i的2d)定参给果功…分函函参器,类不类类器类义数…数数就*。/]
判断素数的 子程序
子程序很重要的特点: 调用者只需要关心子 程序接口,不必了解 子程序内部实现细节。
可以设计子程序isPrim,用于判断一个整数是否是素数; 子程序reverse ,用于计算一个整数- 的逆数;
6
5.1 子程序设计
二.子程序的控制和调用机制
主程序 (主控模块)
通过子程序名进行调 用;
调用时需要传递一些 供子程序计算和处理 的数据(参数);
子程序执行完成后需 要返回处理结果。
调用 返回
调用 返回
调用 返回
子程序1
子程序2
...
子程序n
返回
调用
主程序
调用 返回
调用 返回
子程序
①
②子程序1.1
③..④.
子程序
子程序1.n
⑧ ⑨
⑤ ⑦⑥
7
5.1 子程序设计
numß 1000;
返回值
子程序名 参数
3
5.1 子程序设计
numß 1000; num≤9999
判断num是否素数
Y
num是素数 N
计算num的逆数reverseNum
判断reverseNum
素数 N
输出num
num=num+1
求可逆素数
-
• 本程序中判断素数的代码 会出现两次;
• 判断素数、求整数逆数这 两个功能是独立的功能, 且在多个程序中都有可能 用到: – 求一个整数的逆数:该 功能在判断一个整数是 否回文数中也被用到; – 判断一个数是否素数: 该功能在对整数进行素 数分解中用到。
四. 子程序设计原则 高内聚:功能相对独立和完整; 低耦合:与外界的关系尽量松散, 不要太紧密,使其能方便地被重用;
需要合理地设计子程序参数和子程序执行的局 部环境 来达到以上目标。 五. 子程序在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 内部函数和外部函数
4
5.1 子程序设计
• 能否将完成上述独立功能的代码包装成一个单 元,并且可以供其他代码来调用?--答案是可 以使用子程序
一. 子程序的定义 子程序是封装并给以命名的一段程序代码,这 段程序代码完成子程序所定义的功能,可供调 用。 封装:调用者只需要关心代码能完成什么功能, 如何调用代码(即子程序接口),而不需要关 心代码的内部实现。
8
•5.1 子程序设计
三. 引入子程序的目的 1. 程序“复用”,避免在程序中使用重复代码; 2. 结构化程序设计的需要: 自顶向下、逐步细化,将复杂问题分解为相对 简单的子问题,这些子问题用子程序实现,从 而提高主程序结构的清晰性和易读性。 3.使程序的调试和 维护变得更加容易。
9
5.1 子程序设计
-
提纲
11
5.2.1 函数
u C语言中用函数实现子程序设计思想。较大的C语言 应用程序,往往是由多个函数组成的(用户自定义函 数或标准库函数),每个函数完成明确的功能;
u每一个函数应该只完成单一的预定好的任务,并且函 数名能有效地反映函数完成的任务;如果不能选择简 洁的函数名,那可能函数完成的功能太多,建议拆分 成几个较小的函数。