Chap 5 函数 5.1 计算圆柱体积 5.2 使用函数编写程序 5.3 变量与函数.

Slides:



Advertisements
Similar presentations
1 、谁能说说什么是因数? 在整数范围内( 0 除外),如果甲数 能被乙数整除,我们就说甲数是乙数的 倍数,乙数是甲数的因数。 如: 12÷4=3 4 就是 12 的因数 2 、回顾一下,我们认识的自然数可以分 成几类? 3 、其实自然数还有一种新的分类方法, 你知道吗?这就是我们今天这节课的学.
Advertisements

第五节 函数的微分 一、微分的定义 二、微分的几何意义 三、基本初等函数的微分公式与微分运算 法则 四、微分形式不变性 五、微分在近似计算中的应用 六、小结.
2.8 函数的微分 1 微分的定义 2 微分的几何意义 3 微分公式与微分运算法则 4 微分在近似计算中的应用.
2.5 函数的微分 一、问题的提出 二、微分的定义 三、可微的条件 四、微分的几何意义 五、微分的求法 六、小结.
第8章 函数 信息管理系.
第五章 函数 本章学习重点:  函数的定义与函数声明;  函数的调用;  函数的嵌套调用与递归调用;  数组作为函数参数;
“八皇后”问题 崔萌萌 吕金华.
C++中的声音处理 在传统Turbo C环境中,如果想用C语言控制电脑发声,可以用Sound函数。在VC6.6环境中如果想控制电脑发声则采用Beep函数。原型为: Beep(频率,持续时间) , 单位毫秒 暂停程序执行使用Sleep函数 Sleep(持续时间), 单位毫秒 引用这两个函数时,必须包含头文件
第8讲 函数 8.1 函数的定义与调用 8.2 函数的参数 8.3 函数重载与递归 8.4 标识符作用域与变量的存储特性.
4.3函数 4.3.1函数的概念及定义 1、函数的概念: 可以被其它程序调用具有 特定功能的一段相对独立的 程序(模块),称函数。
第八章 函数 §8.1 概述 一个较大程序一般分为若干个程序模块,每一个模块实现一个特定的功能。所有的高级语言中都有子程序的概念,在C中子程序就是函数。 一个C程序可由一个主函数和若干个函数构成,由主函数调用其它函数,其它函数也可以相互调用.
Do.For.While.正三角.倒正三角.倒九九乘法表
第3章 顺序结构程序设计 本章要点: 格式化输出函数──printf() 格式输入函数——scanf() 字符输出函数——putchar()
第 四 章 循环结构 while语句 do {} while 语句 break和continue语句
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
Chap 10 函数与程序结构 10.1 函数的组织 10.2 递归函数 10.3 宏定义 10.4 编译预处理.
C语言程序设计基础 刘新国.
If … else 選擇結構 P27.
Chap 2 用C语言编写程序 2.1 在屏幕上显示 Hello World! 2.2 求华氏温度 100°F 对应的摄氏温度
第七章 函数 目录 有参的加法函数的开发 函数定义的一般形式 函数参数和函数的值 函数的调用
第7章 函 数 本章要点: C语言程序结构和特点 函数的定义 函数的返回值与函数的类型 函数的调用及参数的传递关系 函数的嵌套与递归
走进编程 程序的顺序结构(二).
辅导课程六.
第7章 函 数 为什么要使用函数? 函数定义、调用、声明 局部变量和全局变量 变量的存储类别 内部函数和外部函数 函数的嵌套调用和递归调用
第7章 编译预处理 本章要求: 本章重点: 本章难点: 掌握用#define定义无参数宏和带有参数宏定义和调用方法;
函数.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
Chap 3 分支结构 3.1 简单的猜数游戏 3.2 四则运算 3.3 查询自动售货机中商品的价格.
C语言 程序设计基础与试验 刘新国、2012年秋.
第7章 用函数实现模块化程序设计 7.1为什么要用函数 7.2怎样定义函数 7.3调用函数 7.4对被调用函数的声明和函数原型
第五章 函 数. 第五章 函 数 教学目标 (1) 了解函数在程序设计中的作用; (2) 掌握函数的定义方法; (3) 掌握函数调用和参数传递的机制和方法; (4) 了解变量的作用域和生存期的概念。
第一章 函数 函数 — 研究对象—第一章 分析基础 极限 — 研究方法—第二章 连续 — 研究桥梁—第二章.
第七章 函数 西安工程大学.
第七章 函数及变量存贮类型 7.1 函数基础与C程序结构 7.2 函数的定义和声明 7.3 函数的调用 7.4 函数的嵌套与递归
第七章 操作符重载 胡昊 南京大学计算机系软件所.
Chap 2 用C语言编写程序 2.1 在屏幕上显示 Hello World! 2.2 求华氏温度 100°F 对应的摄氏温度
第一章 函数与极限.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
1.3 C语言的语句和关键字 一、C语言的语句 与其它高级语言一样,C语言也是利用函数体中的可执行 语句,向计算机系统发出操作命令。按照语句功能或构成的不 同,可将C语言的语句分为五类。 goto, return.
EBNF与操作语义 请用扩展的 BNF 描述 javascript语言里语句的结构;并用操作语义的方法描述对应的语义规则
$9 泛型基础.
THE C PROGRAMMING LANGUAGE
第7章 函 数 7.1 函数的定义与调用 7.2 函数的嵌套调用与递归调用 7.3 数组作为函数参数 7.4 内部变量与外部变量
C语言程序设计.
Introduction to the C Programming Language
C语言程序设计 教案 崔武子制作
Chap 10 函数与程序结构 10.1 函数的组织 10.2 递归函数.
目录 7.1 用户自定义函数的种类 7.2 函数的定义 7.3 被调函数的声明 7.4 函数的调用 7.5 函数的嵌套调用
指標
Chap 5 函数 5.1 计算圆柱体积 5.2 使用函数编写程序 5.3 变量与函数.
Chap 5 函数 5.1 计算圆柱体积 5.2 数字金字塔 5.3 复数运算.
7.1 C程序的结构 7.2 作用域和作用域规则 7.3 存储属性和生存期 7.4 变量的初始化
第五章 函 数 要点:掌握函数的定义,函数的原形,函数的返回值,函数的调用,函数的形式参数和实际参数之间的关系;掌握函数重载的使用方法,关键字inline的含义与使用,掌握变量的作用域与生存期,了解函数的作用域。
第4章 Excel电子表格制作软件 4.4 函数(一).
第七单元 应用函数程序设计 从现在开始,将详细讲述C语言的方方面面。第一章中的所有疑惑,都将一一消灭。
第九节 赋值运算符和赋值表达式.
第二章 类型、对象、运算符和表达式.
Introduction to the C Programming Language
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
第7章 模板 陈哲 副教授 南京航空航天大学 计算机科学与技术学院.
第7章 用函数实现模块化程序设计 7.1为什么要用函数 7.2怎样定义函数 7.3调用函数 7.4对被调用函数的声明和函数原型
本节内容 C语言的汇编表示 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
本节内容 动态链接库 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
基本知识 数据类型、变量、常量、运算符.
C++语言程序设计 C++语言程序设计 第十章 多态 第十一组 C++语言程序设计.
C/C++基礎程式設計班 C語言入門、變數、基本處理與輸入輸出 講師:林業峻 CSIE, NTU 3/7, 2015.
第二次课后作业答案 函数式编程和逻辑式编程
计算机编程 信息管理与工程学院 2014年9月.
C++语言程序设计 C++语言程序设计 第二章 基本数据类型与表达式 第十一组 C++语言程序设计.
Presentation transcript:

Chap 5 函数 5.1 计算圆柱体积 5.2 使用函数编写程序 5.3 变量与函数

本章要点 怎样定义函数?如何调用函数?如何声明函数? 什么是函数的参数?在函数调用时,参数是如何传递的? 在使用函数的过程中,要注意哪些问题?怎样确定函数的参数? 如何使用局部变量和全局变量? 什么是静态变量?

5.1 计算圆柱体积 5.1.1 程序解析 5.1.2 函数的定义 5.1.3 函数的调用

5.1.1 程序解析-计算圆柱体积 例5-1 输入圆柱体的高和半径,求圆柱体积,volume=π*r2*h。 5.1.1 程序解析-计算圆柱体积 例5-1 输入圆柱体的高和半径,求圆柱体积,volume=π*r2*h。 要求定义和调用函数cylinder (r, h )计算圆柱体的体积。

例5-1源程序 /* 计算圆柱体积 */ #include <stdio.h> int main( void ) { double height, radius, volume; double cylinder (double r, double h); /* 函数声明*/ printf ("Enter radius and height: "); scanf ("%lf%lf", &radius, &height); /* 调用函数,返回值赋给volume */ volume = cylinder (radius, height ); printf ("Volume = %.3f\n", volume); return 0; }

例5-1源程序 Enter radius and height: 3.0 10 Volume = 282.743 /* 定义求圆柱体积的函数 */ double cylinder (double r, double h) { double result; result =3.1415926 * r * r * h; /* 计算体积 */ return result; /* 返回结果 */ }

5.1.2 函数的定义 函数是指完成一个特定工作的独立程序模块。 main()也是一个函数,C程序由一个main()或多个函数构成。 5.1.2 函数的定义 函数是指完成一个特定工作的独立程序模块。 库函数:由C语言系统提供定义 如scanf()、printf()等函数 自定义函数:需要用户自己定义 如计算圆柱体体积函数cylinder() main()也是一个函数,C程序由一个main()或多个函数构成。 程序中一旦调用了某个函数,该函数就会完成一些特定的工作,然后返回到调用它的地方。 函数经过运算,得到一个明确的运算结果,并需要回送该结果。例如,函数cylinder()返回圆柱的体积。 函数完成一系列操作步骤,不需要回送任何运算结果。

1.返回运算结果的函数定义 函数返回值的类型 函数类型 函数名(形参表) /* 函数首部 */ { /* 函数体 */ 函数实现过程 double cylinder (double r, double h) { double result; result = 3.1415926 * r * r * h; return result; } 1.返回运算结果的函数定义 函数返回值的类型 没有分号 函数类型 函数名(形参表) /* 函数首部 */ { /* 函数体 */ 函数实现过程 return 表达式; } 只能返回一个值 把函数运算的结果回送给主函数

形参 函数类型 函数名(形参表){ 不能写成 double r, h 函数实现过程 return 表达式; } double cylinder (double r, double h) { double result; result =3.1415926 * r * r * h; return result; } 类型1 参数1 ,类型2 参数2 ,……,类型n 参数n 参数之间用逗号分隔,每个参数前面的类型都必须分别写明

分析函数的定义 函数类型 函数名 形参表 double cylinder (double r, double h) /* 函数首部 */ { /* 函数体,写在一对大括号内 */ double result; result =3.1415926 * r * r * h; /* 计算圆柱体积 */ return result; /* 返回运算结果*/ } 与函数类型一致

2.不返回运算结果的函数定义 void 函数名(参数表) /* 函数首部 */ { /* 函数体 */ 函数实现过程 表示不返回结果 void 函数名(参数表) /* 函数首部 */ { /* 函数体 */ 函数实现过程 return; /* 可以省略return */ } 这类函数通常用于屏幕输出等 不能省略 否则 函数类型被默认定义为int

例5-2 输出5之内的数字金字塔。 1 2 2 3 3 3 4 4 4 4 5 5 5 5 5 /* 输出数字金字塔 */ 例5-2 输出5之内的数字金字塔。 /* 输出数字金字塔 */ #include <stdio.h> int main (void) { void pyramid (int n); /* 函数声明 */ pyramid(5); /* 调用函数,输出数字金字塔 */ return 0; } void pyramid (int n) /* 函数定义 */ int i, j; for (i = 1; i <= n; i++){ /* 需要输出的行数 */ for (j = 1; j <= n-i; j++) /* 输出每行左边的空格 */ printf(" "); for (j = 1; j <= i; j++) /* 输出每行的数字 */ printf(" %d ", i); /* 每个数字的前后各有一个空格 */ putchar ('\n'); 1 2 2 3 3 3 4 4 4 4 5 5 5 5 5

5.1.3 函数的调用 定义一个函数后,就可以在程序中调用这个函数。 5.1.3 函数的调用 定义一个函数后,就可以在程序中调用这个函数。 调用标准库函数时,在程序的最前面用#include命令包含相应的头文件。 调用自定义函数时,程序中必须有与调用函数相对应的函数定义。

1.函数调用的形式和过程 函数名(实参表) 使用返回值: 完成操作: 常量、变量、表达式 使用返回值: volume = cylinder (radius, height ); printf(“%f \n” , cylinder (radius, height )); 完成操作: pyramid(5); 常用于返回结果的函数的调用 常用于void类型函数的调用

函数调用的过程 计算机在执行程序时,从主函数main开始执行,如果遇到某个函数调用,主函数被暂停执行,转而执行相应的函数,该函数执行完后,将返回主函数,然后再从原先暂停的位置继续执行。 函数遇return或最后的大括号,返回主函数

分析函数调用的过程 #include <stdio.h> int main( void ) { double height, radius, volume; double cylinder (double r, double h); printf ("Enter radius and height: "); scanf ("%lf%lf", &radius, &height); volume = cylinder (radius, height ); printf ("Volume = %.3f\n", volume); return 0; } double cylinder (double r, double h) { double result; result =3.1415926 * r * r * h; return result; 调用函数 实参形参 执行函数中的语句 返回调用它的地方

2.参数传递 函数定义时的参数被称为形式参数(简称形参) 函数调用时的参数被称为实际参数(简称实参) 实参形参 double cylinder (double r, double h); 函数调用时的参数被称为实际参数(简称实参) volume = cylinder (radius, height); 实参形参 在参数传递过程中,实参把值复制给形参。 形参和实参一一对应:数量一致,类型一致,顺序一致 形参:变量,用于接受实参传递过来的值 实参:常量、变量或表达式 单向传递

3.函数结果返回 函数返回的两种情况 函数结果返回的形式: 完成确定的运算,有一个运算结果返回给主调函数。 完成指定工作,没有确定的运算结果需返回给主调函数(函数类型void)。 函数结果返回的形式: return 表达式; return (表达式);

【例5-3】定义判断奇偶数的函数even (n) 定义一个判断奇偶数的函数even (n),当n为偶数时返回1,否则返回0。 /* 判断奇偶数的函数 */ int even (int n) /* 函数首部 */ { if(n%2 == 0) /* 判别奇偶数 */ return 1; /* 偶数返回1 */ else return 0; /* 奇数返回0 */ } 如何调用该函数?

只写函数定义中的第1行(函数首部),并以分号结束。 4.函数原型声明 只写函数定义中的第1行(函数首部),并以分号结束。 函数类型 函数名(参数表); double cylinder (double r, double h); void pyramid (int n); 函数必须先定义后调用,将主调函数放在被调函数的后面,就像变量先定义后使用一样。 如果自定义函数在主调函数的后面,就需要在函数调用前,加上函数原型声明。 函数声明:说明函数的类型和参数的情况,以保证程序编译时能判断对该函数的调用是否正确。

5.2 使用函数编写程序 例5-4 输入精度e,使用格里高利公式求π的近似值,精确到最后一项的绝对值小于e。要求定义和调用函数 funpi(e) 求π的近似值。

例5-4 源程序 /* 用格里高利公式计算π的近似值,精度为e */ #include <stdio.h> #include <math.h> int main (void) { double e, pi; double funpi (double e); printf ("Enter e:"); scanf ("%lf", &e); pi = funpi (e); printf ("pi = %f\n", pi); return 0; } Enter e: 0.0001 pi = 3.1418 double funpi (double e) { int denominator, flag; double item, sum; flag = 1; denominator = 1; item = 1.0; sum = 0; while (fabs (item) >= e){ item = flag * 1.0 / denominator; sum = sum + item; flag = -flag; denominator = denominator + 2; } return sum * 4;

例5-5 判断素数的函数 例5-5 求100以内的全部素数,每行输出10个。素数就是只能被1和自身整除的正整数,1不是素数,2是素数。 例5-5 判断素数的函数 例5-5 求100以内的全部素数,每行输出10个。素数就是只能被1和自身整除的正整数,1不是素数,2是素数。 要求定义和调用函数prime (m)判断m是否为素数,当m为素数时返回1,否则返回0。 算法描述:对2~100之间的每个数进行判断,若是素数,则输出该数。 for(m = 2; m <= 100; m++) if (m是素数) printf("%d ", m); prime(m) != 0

例5-5 源程序 int prime (int m) { int i, n; if ( m == 1 ) return 0; #include <stdio.h> #include <math.h> int main(void) { int count, m; int prime (int m); count = 0; for(m = 2; m <= 100; m++){ if ( prime(m) != 0 ){ printf("%6d", m ); count++; if (count %10 == 0) printf ("\n"); } int prime (int m) { int i, n; if ( m == 1 ) return 0; n = sqrt (m); for( i = 2; i <= n; i++) if (m % i == 0){ return 0; } return 1;

5.3 变量与函数 5.3.1 局部变量和全局变量 5.3.2 变量生命周期和静态局部变量

5.3.1 局部变量和全局变量 局部变量 全局变量 在函数内定义的变量(包括形参) 定义在复合语句内的变量 作用范围:本函数内部 定义在复合语句内的变量 作用范围:复合语句内部 全局变量 在函数以外定义的变量,不从属于任一函数。 作用范围:从定义处到源文件结束(包括各函数)

例5-6 在复合语句中定义局部变量。 #include <stdio.h> int main (void) { int a; 4 例5-6 在复合语句中定义局部变量。 #include <stdio.h> int main (void) { int a; a = 1; { /* 复合语句开始 */ int b = 2; b = a + b; a = a + b; } /* 复合语句结束 */ printf ("%d " , a ); return 0; } 4 b:小范围内的临时变量

例5-7 全局变量定义 若局部变量与全局变量同名,局部变量优先 4, 7 #include "stdio.h" 例5-7 全局变量定义 #include "stdio.h" int x; /* 定义全局变量x */ int f( ) { int x = 4; /* x为局部变量 */ return x; } int main(void) int a = 1; x = a; /* 对全局变量 x 赋值 */ a = f( ); /* a的值为4 */ int b = 2; b = a + b; /* b的值为4 */ x = x + b; /* 全局变量运算 */ printf("%d %d" , a, x); return 0; 若局部变量与全局变量同名,局部变量优先 4, 7

变量作用范围示例 x=? a=? b=? b=? x=5 b=6 t=4 a没定义 x=? b=? t=? a=? int x=1; void main( ) { int a=2; …….. { int b=3; ….. } f( ); ……….. int t=4 ; void f( ) { int x=5, b=6; ……. int a=7; x=? a=? b=? b=? x=5 b=6 t=4 a没定义 x=? b=? t=? a=?

5.3.2 变量生命周期和静态局部变量 自动变量(auto): 普通的局部变量 函数调用时,定义变量,分配存储单元。 5.3.2 变量生命周期和静态局部变量 自动变量(auto): 普通的局部变量 int x, y;  auto int x, y; char c1;  auto char c1; 函数调用时,定义变量,分配存储单元。 函数调用结束,收回存储单元。 全局变量:从程序执行开始,到程序的结束,存储单元始终保持。 变量生命周期 变量从定义开始分配存储单元,到运行结束存储单元被回收的整个过程。

存储区 存储类型: 动态存储:自动变量 静态存储:全局变量、静态局部变量 用户存储空间 数 据 区 静态存储区 动态存储区

静态局部变量 static 类型名 变量表 作用范围:局部变量 生命周期:全局变量

例5-9 静态局部变量示例 #include <stdio.h> void fun (int k); 例5-9 静态局部变量示例 #include <stdio.h> void fun (int k); int main (void) { int k; for (k = 1; k <= 3; k++) fun (k); return 0; } void fun(int k) { static int a; printf ("%d, ", a); a += k ; 0,1,3, 静态变量的初值为0 静态变量会记住前一次调用时留下来的值

本章要点 怎样定义函数?如何调用函数?如何声明函数? 什么是函数的参数?在函数调用时,参数是如何传递的? 在使用函数的过程中,要注意哪些问题?怎样确定函数的参数? 如何使用局部变量和全局变量? 什么是静态变量?