c语言07第7章 函 数

合集下载

第7章 用户自定义函数

第7章 用户自定义函数
返回本章首页
7.2 函数的定义
1.无参函数的定义
无参函数的定义形式为: 类型标识符 函数名() {
声明部分 执行部分 }
1)函数首部
类型标识符和函数名为函数首部。 (1)类型标识符指明了本函数返回值的类型。无参函数可以带 回或不带回函数值,但一般以不带回函数值的居多,此时函数 类型声明符可以写为void。
返回本章首页
7.5 函数的嵌套调用
C语言允许在一个函数的定义中出现对另一个函数的调用。 这样就出现了函数的嵌套调用,即在被调函数中又调用其它函数。 b函数⑤①⑨结束a函数③调用b函数⑦②⑧④⑥main函数图7_3 函数嵌套调用a函数 例如:图7_3中执行main函数中调用a函数的语句时,即转去执 行a函数,在a函数中调用b函数时,又转去执行b函数,b函数执 行完毕返回a函数的断点继续执行,a函数执行完毕返回main函 数的断点继续执行。
返回本章首页
7.2 函数的定义
3.带返回值的函数定义
带返回值的函数,函数体的执行部分必须通过return语句 给函数返回指定类型的值。
return语句的一般形式为: return 表达式; 或者为: return (表达式);
该语句的功能是计算表达式的值,并将该值返回给主调 函数。在函数中允许有多个return语句,但每次调用只能有一个 return语句被执行,因此只能返回一个函数值。在定义函数时指 定的函数类型一般应该和return语句中的表达式类型一致;如果 函数值的类型和return语句中表达式的值不一致,则以函数类型 为准。
#include<stdio.h> long f1(int p) { int k,r=0;
int f2(int); for(k=1;k<=p;k++)r=r+k; return f2(r); }

第7章 函数

第7章  函数

第七章 函 数学习和解题要点1.函数的概念和作用函数:是具有一定功能的一个程序块;是C 语言的基本组成单位。

要求掌握函数定义方法,有关函数类型和返回值的相关知识。

要会调用函数,并能处理函数嵌套、递归调用的相关问题。

1) 函数的参数,返回数值(示意图):2.函数的定义存储类型 (返回的)数据类型 函数名(形参说明语句序列) (注:此地分不能有分号) {函数内用的变量说明序列;(临时工作单元) 可执行语句序列;(包括 return(表达式)语句) }函数的返回值一般是通过 return 语句获得的。

返回的数据类型说明一般应该和return 语句中的表达式类型一致,若不一致则以数据类型说明为准。

如函数中没有 return 语句或 return ;函数无返回值,返回一个用户很难确定的值。

说明:函数的数据类型:int char short long float double *类型。

缺省为 int 型。

不返回值为 void 型。

函数的存储类型:内部函数 本文件内有效 static外部函数 可被其他文件函数调用 extern3.函数调用:函数名(实参表)可以为独立语句:函数名(实参表); 表达式中:变量=函数名(实参表)+其他式;实参表与形参表的对应一般要做到三个一致:个数一致类型一致(在学指针时,指针变量和地址对应)次序一致实参都应该己预先说明的,并有确定的值。

一般,函数都应先定义后调用。

对函数返回值是 int 或 char 的可先调用后定义。

如果非int 或 char型的函数一定要先调用后定义,则在函数调用语句前先作一个“申明”,申明的方法是相当于把函数头部抄一遍,加一个分号:存储类型(返回的)数据类型函数名(形参表);(注:此地分号不可少) 4.函数调用的数据传递把实参数据复制给形参,形参变量内数据变化不影响实参--值调用。

main(){ int a=45,b=50;c=max(a,b);}int max(int x,int y){ .............}把实参的地址传给形参,这时形参变量应为指针变量,因此形参实参共用一个内存位置,形参值的变化也即实参值的变化--地址调用(名调用)。

第7章 函数与预处理命令

第7章 函数与预处理命令
类型省略时 默认为int 类型
例如:求两个数的最大值。 int max(int x,int y) { int z; 没有形式参数 z = x > y ? x : y; 为无参函数 return( z ); }
龙诚数码:
9
形参也可以这样定义 int max(x,y) int x,y; { int z; z = x > y ? x : y; return( z ); }
龙诚数码:
【例7.1】求一个整数的立方。
int cube (int x) /* 函数定义 */ { return (x * x * x); } main( ) 程序的执行总是 { int f, a; 从main函数开始 printf("\nEnter an integer number:"); scanf("%d", &a); 函数调用 f = cube (a); printf("%d * %d * %d = %d\n", a, a, a, f); 程序运行情况如下: } Enter an integer number:2 2*2*2=8
a=9,b=5
14
龙诚数码:
2.函数的类型与函数的返回值
15
【例7.6】输出两个数中的大数。 ⑴ 函数的类型 max(int x,int y) 说明: { int z; ①函数的类型 z=x>y?x:y; 决定了函数返 return (z); /* 返回z的值 */ 回值的类型。 } 若省略函数的 main( ) 类型,系统默 { int a,b,c; 认其为int型。 scanf("%d,%d",&a,&b); ②无返回值的 c=max(a,b); 函数应将其类 printf("max is %d\n",c); 型定义为void } (空)类型。

第7章函数

第7章函数

7.4 函数参数传递和函数的值
• 函数的参数分为形参和实参两种。形参出现在函数 定义中,在整个函数体内都可以使用,离开该函数 则不能使用。实参出现在主调函数中,进入被调函 数后,实参变量也不能使用。
• 形参和实参的功能是传送数据。当发生函数调用时, 主调函数把实参的值传送给被调函数的形参,从而 实现主调函数向被调函数的数据传送。这样的参数 传递方式叫做“数值传递”,简称“值传递”。
函数调用过程中,若形参的值发生改变,不会影响实参中的 值发生变化。
【例7.5】编程求n+(n-1)+(n-2)+…+1的和。 #include <stdio.h> void s(int n) void main() 程序运行过程与结果为: {int i; {int n; input number n: for(i=n-1;i>=1;i--) printf("input number n\n"); 5↙ n=n+i; scanf("%d",&n); ********* printf("n=%d\n",n); } printf("*********\n"); /*调用函数s之前,输出n值*/ n=5 printf("n=%d\n",n); /*调用函数s之前,输出n值*/ ********* printf("*********\n"); /*在函数s内部,输出n值*/ n=15 void s(int); ********* /*调用前,说明函数s*/ s(n); n=5 /*调用函数s之后,输出n值*/ printf("*********\n"); ********* printf("n=%d\n",n); /*调用函数s之后,输出n值*/ printf("*********\n"); }

计算机二级C语言第七章函数

计算机二级C语言第七章函数
正确答案:B 【解析】形式参数简称形参,就是在定义函数时给出的参数,它可以是任意合法的数据类型;实际参数简称实参,是在调 用函数时传递给函数的确定的数据,它的类型应该与对应的形参类型一致,可以是常量、变量或表达式,选项A、C、D 正确;选项B中,常量、表达式不能作为右值,所以形参不能是常量、表达式,错误;本题答案为B。
C.int fun(int a[], int *, int);
D.int fun(int [], int *, int);
正确答案:A 【解析】C语言中,函数声明的函数名、返回值类型和参数列表必须与函数定义相同,其中参数列表中可以省略参 数名。题意中,fun()函数返回整型,三个参数分别是:整型指针、整型指针、整型,选项A中,第一个参数应该是 整型指针类型,第二个参数也应该是指针类型,错误;其他选项都正确,本题答案为A。
函数说明的一般形式如下: 类型名 函数名(参数类型1,参数类型2,……) 如: double sum( double, double );
也可采用下面的形式: 类型名 函数名(参数类型1 参数名1,参数类型2 参数名2,……) 如: double sum( double p, double q );
正确答案:A 【解析】数学库中定义了函数的名称、参数个数与类型、返回值类型与具体的函数体,A选项正确。编译预处理时, 预处理程序将查找指定的被包含文件,并将其复制到#include命令出现的位置上,B、C选项错误。不引用 math.h文件,文件编译时,编译器无法识别没有被定义的sin函数,D选项错误。
关于C语言函数说明的位置,以下叙述正确的是( ) A.在函数说明之后对该函数进行调用,编译时不会出现错误信息 B.函数说明可以出现在源程序的任意位置,在程序的所有位置对该函数的调用,编译时都不会出现错误信息 C.函数说明只能出现在源程序的开头位置,否则编译时会出现错误信息 D.函数说明只是为了美观和编译时检查参数类型是否一致,可以写也可以不写

C语言程序设计_课件_第七章(适于清华谭浩强版)

C语言程序设计_课件_第七章(适于清华谭浩强版)

注意:
(1) return(表达式); 和return 表达式;都 是正确的。 (2) 带返回值的函数只能返回一个值。 (3) 在函数定义时,允许使用多个return语句, 但是应尽量在末尾使用一个return语句。 (4) return语句中的表达式与函数的返回值类 型不匹配时,以函数定义时的返回类型为准。

问题的提出 函数基础 函数的定义 函数说明 函数调用 参数传递 程序举例 递归调用 变量的存储类别
7.1 问题的提出
例6.20它可以解决的问题有: ①输入若干个学生的姓名、某课程的期中 和期末成绩,并计算每个学生的总评成绩; ②计算总评成绩的分数段情况; ③输出所有学生的姓名、期中、期末和总 评成绩; ④查询某个学生的总评成绩。
函数调用时需要传递数据。调用函数要将 实参的值传送给被调用函数的形参。 若函数定义首部是 double power(double x,int n) /*函数定义 */ 调 用 形 式 是 可 以 是 power(y,m) , 也 可 以 是 power(3.0,5)。 其中,x和n是形式参数,y和m是实际参数,3.0 和可以是一个变量 名,因为变量名也构成一个表达式,形式参数只 能是变量名。当实际参数是变量名时,它与形参 的名称既可以相同,也可以不同,只是要注意, 在函数定义内部应该使用形参的名称。 (2) 实际参数与形式参数的参数个数、数据类型 和顺序都应该一致,如果数据类型不一致,系统 将按照自动转换规则进行转换。
7.3 函数的定义
7.3.1 函数的定义形式 在C语言中函数定义的形式有两种。
第一种:
函数返回值的数据类型说明 函数名称(带有类型说明的参数表)
{
函数内部数据说明; 语句;
}
第二种:

C语言程序设计基础 第7章

C语言程序设计基础 第7章

模块化程序设计的基本要点是贯彻“自顶向下,逐步细 化”的思想方法,即将一个复杂功能的编程问题,划分成若 干个功能相对简单的子问题。这种划分可以逐层进行,直到 便于编程为止。在C语言中,一个模块的功能由一个函数来 实现。顶层函数是主函数main( )。功能模块与C语言函数的 关系如图7.1所示。
图7.1 模块与函数
第7章 函数——模块化程序设计方法的实现
7.1 模块化程序设计方法与函数 7.2 函数的定义 7.3 函数的调用 7.4 函数调用的条件与函数声明 7.5 函数的嵌套调用和递归调用 7.6 变量的作用域与函数间的数据传递 7.7 用函数实现模块化程序设计 实训任务十三 熟悉函数的功能及其使用方法 实训任务十四 学习模块化程序设计的方法
② 函数功能实现部分,是一个程序段,要依据实现某 种功能的算法进行设计。
③ 函数体最后使用一个“return(返回值);”语句,括 号中的返回值是一个需传带给主调函数的数据对象。如果没 有返回值,可以不要这个语句。VC++ 6.0系统中提倡在 main( )函数体后使用一个“return 0;”语句,表示正常返 回系统,否则会出现警告。如果函数体仅是一对花括号,没 有任何语句,就是空函数。空函数一般是无参函数。
7.2 函 数 的 定 义
怎样定义函数?定义函数要考虑哪些问题?
定义函数要解决两个方面的问题:一是函数间的接口问 题,二是功能实现问题。接口问题包括如何被上层函数调用 ,调用时需传递什么数据,调用返回时需传带什么数据。功 能实现问题就是如何实现模块的过程算法。
函数定义的一般形式为
基类型符 函数名(类型符形式参数 1,类型符形式参数 2,…) {
函数体内数据对象定义或声明部分; 函数功能实现部分; return(返 回值); }

C语言程序设计知识点—第7章 函数

C语言程序设计知识点—第7章 函数
C 语言程序设计知识点
第 7 章:函数
主讲教师:杨剑
1. 本章目标
熟练掌握函数的定义与调用方法 理解函数的定义、声明和调用的区别 理解函数原型、实参、形参和函数的返回值 了解函数的嵌套调用和递归调用的方法 掌握数组做为函数参数的使用方法 理解变量的作用域和存储方法
2. 函数机制的优点
~6~
C 语言程序设计知识点
主讲教师:杨剑
[练习]若各选项中所用变量已正确定义,函数 fun 中通过 return 语句返回一个函数值,
以下选项中错误的程序是( )
A.main()
{……x=fun(2,10); ……}
float fun(int a,int b){……}
B.float fun(int a,int b){……}
int data; scanf(“%d”,&data); printf(“%d”,add(data)); return 0;
~5~
C 语言程序设计知识点
主讲教师:杨剑
} int add(____②_____) {
int i,sum=0; for(i=1;i<=n;i++)
sum=sum+i; _______③__________ } 答案: ①int add(int); ②int n ③retrun sum;
{
printf(“%d\n”,F(3+5));
}
[练习]程序运行后的输出结果是( )
A.192 B.29
C.25
D.编译出错
答案:D
在 C 语言中,函数返回值的类型最终取决于( )
A.函数定义时在函数首部所说明函数类型
B.return 语句中表达式值的类型 C.调用函数时主调函数所传递的实参类型

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语言_7函数

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语言谭版)函数

第七章(c语言谭版)函数

调用a

调用b

}
}
}
例: 用弦截法求方程的根。
x3–5x2+16x–80=0 方法如下: (1) 取两个不同点x1、x2,如果f(x1)和f(x2)符号相反, 则(x1,x2)区间内必有一个根。如果f (x1)与f (x2)同 符号,则应改变x1、x2,直到f (x1)、f (x2)异号为 止。注意x1、x2的值不应差太大,以保证(x1, x2) 区间只有一根。
float x1, x2; { int i; float x, y, y1; y1=f(x1); do { x=xpoint(x1, x2);
y=f(x);
if (y*y1>0) /*f(x)与f(x1)同符号。*/ {y1=y; x1=x;} else x2=x; } while (fabs(y)>=0.0001); return (x); }
个return.
返回值类型为函数类型。 一般return中的返
回值类型应与函数定义时的类型一致, 不一致时,
以函数定义类型为准。
5. 调用函数应对被调用函数的返回值类型作出说 明:(函数名相当于一变量,但应有所区别)
类型符 函数名( );
它不同于函数的定义(功能定义) 例: 求二实数之和 main ( ) { float add( ); float a, b, c;
hanoi(n, one, two, three)
表示n个盘子从one塔借助于two塔(空)移至three塔。 调用时塔用字符常量'A' ,' B ', ' C '表示。
§7.5 数组作为函数参数
分为两种情况: 1. 数组元素作为实参

计算机等级考试 C语言 第7章C语言 函数

计算机等级考试 C语言 第7章C语言 函数

/* 函数功能: 用迭代法计算n!
返回值函数类入型口参数:函整数型名变说量n明表示阶乘的形阶参数表,函
函数返回值: 函返数回的n!功的能值
数入口
*/
long Fact(int n) /* 函数定义 *函/ 数内部可以定义
{
只能自己使用的变
int i;
量,称内部变量
long result = 1;
for (i=2; i<=n; i++)
2/51
问题的提出
此前,我们所有的代码基本上都是放在main函 数中,这对于一个小的问题来说没问题,但如 果一个问题较大,里面涉及到成百上千个变量 ,将所有代码放在main函数里面显然是非常糟 糕的事情。
我们可以将一个大的问题分解成一个一个的小 问题,每个小问题放在一个函数里面,最后在 main函数里整合。这种思想实际上就是所谓的 “分而治之”。
printf("Input data error!\n"); } else {
for(i=2;i<=n;i++) {

result*=i;
2019/9/10
} return result; } }
25/51
防御性程序设计(Defensive Programming)
但是输入-1后,会输出 :
Input data error!
int i; long result=1; for(i=2;i<=n;i++) {
result*=i; } return result; }
int main() { int m; long ret;
printf("input m:"); scanf("%d",&m); ret=Fact(m); printf("%d!=%d\n",m,ret); return 0; }

C语言习题(7)

C语言习题(7)

C语言习题(7)第7章函数一.填空题1.C语言中从函数的形式分可分为无参函数和。

2.在C语言中,一个自定义函数一般由两部分组成,它们是函数首部和。

3.从用户使用角度看,函数有两种:标准函数和。

4.若一个函数不需要形参,则在定义该函数时应使形参表为空或者放置一个标识符。

5.有函数调用fun1(x+y, (y,z), 10, fun((x,y-1))); 函数fun1有个参数。

6.已知函数定义:void dothat(int n, double x) { …… },其函数声明的两种写法为_________________________,_________________________。

7.C语言变量按其作用域分为和;按其生存期分为___________和。

8.C语言变量的存储类别有,,和。

9.凡在函数中未指定存储类别的局部变量,其默认的存储类别为。

10.在一个C程序中,若要定义一个只允许本源程序文件中所有函数使用的全局变量,则该变量需要定义的存储类别为。

11.C语言中,形式参数的缺省存储类型是。

12.C语言中,若为指定函数是内部函数或外部函数,则默认该函数是。

二.选择题1.以下正确的说法是___________。

A)用户若需要调用标准库函数,调用前必须重新定义B)用户可以重新定义标准库函数,如若此,该函数将失去原有定义C)系统不允许用户重新定义标准库函数D)用户若需要使用标准库函数,调用前不必使用预处理命令将该函数所在的头文件包含编译,系统会自动调用。

2.以下正确的函数定义是___________。

A)double fun(int x, int y); B)int fun(int x,y){ z=x+y ; return z ; } { int z ; return 3;}C)double fun (x,y) D)double fun (int x, int y){ int x, y ; double z ; { double z ; z=x+y;z=x+y ; return z ; } return z ; }3.C语言中,简单变量做实参和形参时,以下正确的说法是___________。

高树芳C语言程序设计--第七章

高树芳C语言程序设计--第七章
[解决方案] 一行需要两个函数。一个函数显 示星号左面的空格,一个函数显示星号。
程序代码
11
7.2函数的定义、声明和调用
相关知识:
1.有参、无返回值函数的定义 2.有参、无返回值函数的调用 3.有参、无返回值函数的声明
12
7.2函数的定义、声明和调用
案例7-4 求组合数
[案例任务]
键盘输入m和n两个整数, 计算并显示下面的组合数, C 要求运用函数编程。
n m m! n! (m-n)!
[解决方案] 定义一个求阶乘的函数。它有一个 形参,而且有返回值。
程序代码
13
7.2函数的定义、声明和调用
[课堂训练7-2]
修改案例7-3的主函数,使之显示一个与案例7-3 形状相似的倒三角“*”号图案(要求显示4行)。
14
7.2函数的定义、声明和调用
相关知识: 1.有参、有返回值函数的定义 2.有参、有返回值函数的调用 3.无参、有返回值函数的调用
15
7.2函数的定义、声明和调用
案例7-5
显示100~200间的素数
[案例任务]
参照案例5-9判断素数程序,将其改造成一个函数如 prime,其功能是对给定的整数x,判断它是否是素数,如 是则返回1,不是则返回0。然后利用下面给出的主函数 调用函数prime ,显示100至200之间的全部素数。
[解决方案] 设计一个函数用于判断一个整数是
案例7-2 用函数实现简易菜单 [案例任务]
对案例5-3进行简化和改造。要求循环显示菜单并等 待用户选择,然后显示用户选择了第几项功能,如选 择0则结束程序。要求用函数实现菜单的显示内容。
[解决方案]定义无形参、无返回值的函数显示菜单。
程序代码

C语言第7章 函数

C语言第7章 函数

函数的 参数?
int main() {
int a=12, b=24; … printf("%d\n", Average(a, b)); … return 0; }
int Average(int x, int y) {
int result;
result = (x + y) / 2;
return result; }
C语言程序设计
22/114
7.3.1 函数调用
每次执行函数调用时
现场保护并为函数的内部变量(包括形参)分配内存 把实参值复制给形参,单向传值(实参形参) 实参与形参数目一致,类型匹配(否则类型自动转换)
int main()
{

int a=12, b=24,ave;

ave = Average(a, b);
21
1*2
3 (1*2)
(1*2)*3
}
4 (1*2*3)
(1*2*3)*4
return result;
……

}
n (1*2*3*4*…)
(1*2*3*4*…)*n
C语言程序设计
监视窗(Watches)
26/114
7.3.2函数原型
第7章 函数
函数原型(Function Prototype)
调用函数前先声明返回值类型、函数名和形参类型
Function Call?
int main() {
int a=12, b=24, ave; … ave = Average(a, b); … return 0; }
int Average(int x, int y) {
int result;

《C语言程序设计》课件 《C语言程序设计》课件 第7章 函数的使用

《C语言程序设计》课件 《C语言程序设计》课件 第7章 函数的使用
各种自定义函数
<<C语言程序设计>>
电脑模块化组装
模块化程序
Page 4
7.1 为什么使用函数
【例7-1】打印输出如下所示超市购物小票的票头
某某超市欢送您 *****************************
*
分析
1、第一行为欢送词,自定义一个函数print_welcome来实 现欢送词的输出功能 2、第二行为一定数量的“*〞号,自定义一个函数 print_star来实现 “*〞号的输出功能
第7章 函数的使用
<<C语言程序设计>> 课程
<<C语言程序设计>>
Page 1
主要内容
1 为什么使用函数 2 函数的根本使用 3 函数递归调用 4 用带参数的宏定义代替公式型函数 5 函数和变量的作用域及存储类型
<<C语言程序设计>>
Page 2
问题引入
数学函数sqrt()、字符串处理函数strlen() 等。这些具有通 用功能的函数称之为标准库函数,是由C语言开发环境提供, 标准库函数给编程带来了极大的方便。
形式参数 实际参数
<<C语言程序设计>>
Page 17
7.3 函数的调用
函数调用的形式
函数名(参数表) – 对实参的要求
• 实参个数和形参个数相等。 • 实参的类型要和形参的类型一
致。 • 被调用函数无形参,实参表是
空的,但括号不能省略。
main( ) { int a=1,b=3,c;
函数调用
c=max(a,b);
{ int n=1, i; for(i=1;i<=a;i++) n=n*i; return n;

c语言第七章PPT课件

c语言第七章PPT课件

{ float z;
z=x+y;
return (z);
共 71 页 第 21 页
}
第21页/共70页
3. 函数声明和函数定义的区别
函数声明的作用是把函数的名字、函数类型以 及形参的类型、个数和顺序通知编译系统,以便在调 用该函数时系统按此进行对照检查。
函数定义是指对函数功能的确立,包括指定函 数名、函数值类型、形参及其类型、函数体等,它是 一个完整的、独立的函数单位。
[例7-2]
}
形参变量的说明
(现代形式) int max ( x, y)
int max (int x,int y) { int z; z=x>y?x : y; return z; }
int x,y; { int z;
形参变量的说明 (传统形式)
z=x>y?x : y;
return z;
}
共 71 页 第 7 页
用户定义函数: 形式
无参函数 有参函数 空函数
共 71 页 第 2 页
第2页/共70页
函数示例
[7-1] 输入三个整数,计算它们的和并输出运算结果。
main( )
{ int a, b, c, sum ;
scanf("%d,%d,%d",&a,&b,&c);
sum=add(a,b,c); printf(" sum= %d\n",sum); }
}
形参:通知系统 要预留内存位置.
把函数的 结果赋给函数名
实参:在运行时把 值传给函数.
共 71 页 第 14 页
第14页/共70页
数据在函数间的传递
main()
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
main() {
int x,y,sum;
scanf("%d,%d",&x,&y); sum=x+y; printf("sum=%d\n",sum); }
对比例7-2和例7-3,我们不难发现:完整源程序强调程序的完整性,包括了声 明部分、输入部分、处理部分、输出部分;而函数只是一段能实现某一功能 的独立性代码,它强调具体功能的实现过程,忽略其他细节,如,功能的关 键代码sum=a+b;在两个实例中一样。 被调函数一般将输入部分放在主调函数中,函数通过形参提供接口,间接输入 值,如例7-2中的函数sum_int只知道计算x与y的和,但x与y值具体是多少, 函数在定义时根本不知道,只有到函数调用时才知道。通过实参将值传给形 参,可以提高函数的通过性和灵活性。
(1) 从函数定义的角度,函数可分为库函数和用户定义函数两种。 (2) 从有无返回值的角度,函数可分为有返回值函数和无返回值函 数两种。 (3) 从主调函数和被调函数之间数据传送的角度,函数可分为无参 函数和有参函数两种。 C语言程序设计实用教程与实训
第7章 函

7.2 函数的定义
在C语言中,所有函数的定义是平行的,不能嵌套定义函数。
C语ቤተ መጻሕፍቲ ባይዱ程序设计实用教程与实训
第7章 函

被调函数的处理结果,一般也不直接输出,而是通过return语句返回给主调函 数,由主调函数来处理。
通过以上分析,我们可以总结出下列函数定义的实用方法:
(1) 根据设计要求(题目要求)确定函数的功能。
(2) 选择实现函数功能的数学公式或实现算法。 (3) 确定所需的数据及其类型。
调用(即使用函数)的函数必须存在,即只能调用函数已经定义好的函数。 以 前学过的函数都可以直接调用,因为系统已经预定义好。在函数定 义时所带的参数称为形参,形参类似于集成块的接口。在函数调用时所 带的参数称为实参,实参值是函数真正处理的数据对象,实参类似于集 成块的输入值。
函数还有一点也完全类似于集成块。在外界,它们是封闭的,相当于 一个黑盒子。函数与集成块的比较如图7-1所示。
C语言程序设计实用教程与实训
第7章 函

7.3 函数的调用
7.3.1 函数的调用 函数调用的一般形式:函数名(实际参数表)
说明: (1) 对无参函数调用时,则没有实际参数表。 (2) 实际参数表中的参数可以是常数、变量或其他构造类型 的数据及表达式,各实参之间用逗号分隔。
在C语言中,可以用以下几种方法调用函数。
第7章 函 数
7.1 7.2 7.3 7.4 7.5 7.6 7.7 函数概述 函数的定义 函数的调用 函数的嵌套与递归调用 数组作为函数的参数 局部变量与全局变量 变量的存储类别
C语言程序设计实用教程与实训
第7章 函

本章要点

函数概念与分类 掌握函数的定义与调用方法 函数的参数与返回值 变量的生存期与作用域。
所需数据:3个整数。
确定形参:3个整数,需要外界输入,全部确定为形参。 函数值:最大值,类型为整型(函数内定义临时变量)。 函数名:max_int。
函数代码:
int max_int(int x,int y,int z) { int max; max=x; if(max<y) max=y; if(max<z) max=z; return max; }
void p_star() { printf("***************\n");
}
C语言程序设计实用教程与实训
第7章 函

7.2.2 有参函数的定义
有参函数定义的一般形式: 类型说明符 函数名(形参表) { 类型说明 执行语句 } 说明: (1)有参函数相对于无参函数,增加了形参表,形参可以是各种类型的变 量,各参数之间用逗号隔开。 (2)形参有其对应的类型,必须在定义时声明,形参的定义一般在形参表 中直接进行。 【例7-2】 编一个函数,求两个整数的和。
/*功能函数*/
/*两个case共用一组语句*/
C语言程序设计实用教程与实训
第7章 函

7.3.3 函数间数据传递 函数间数据传递的过程:
(1) 函数调用时,主调函数中的实参,将值传递给被调函数的 对应的形参。 (2) 处理。 被调函数对传入的值,按函数的设计要求对数据进行加工
(3) 被调函数处理完成后,将处理结果通过return语句返回给 主调函数。 图7.2所示是以例7-6为例,说明函数间数据传递的全过程,图中对主 程序进行了适当处理。
7.2.1 无参函数的定义 1. 无参函数定义的一般形式
类型说明符 函数名() { 类型说明 执行语句 } 说明: (1) 类型说明符和函数名(还包括形参表)称为函数头。 (2) 类型说明符,指明函数值的类型,即函数返回值的类型,如果没 有指明类型,则系统默认为int型,而不是空类型,如果明确要求是无 返回值,应将类型设为void。
C语言程序设计实用教程与实训
第7章 函

函数调用时会涉及到两个函数,一个主调函数,一个被调函数。函数A 调用函数B,则函数A称为主调函数,函数B称为被调函数。
注意:main函数只能做主调函数。被调函数执行完后,向主调函数返回 一个执行结果,称为函数返回值,函数返回值类似于集成块的输出值。
在C语言中,可从不同的角度对函数进行分类。
若输入3和5,则程序的输出结果为 *************** sum=8 *************** 例7-1和例7-2已分别定义了p_star和sum_int两个被调函数,本例只给出 主调函数main。上机调试时,可将这3个函数放在一个源文件中。
C语言程序设计实用教程与实训
第7章 函

7.3.2 函数原型说明
(3) 注意,函数说明之后要加分号。
如例7-2定义的sum_int函数,其原型可以为: int sum(int ,int);或sum_int(int a,int b) ;
C语言程序设计实用教程与实训
第7章 函 数 一般情况下,都要求对函数进行说明,但C语言中,又规定在以下几种情况时,可 以省去在主调函数中对被调函数的函数说明而直接调用: (1)如果被调函数的返回值是整型或字符型。 (2)当被调函数的函数定义出现在主调函数之前时。 (3)如在所有函数定义之前,在函数外预先说明了该函数。 【例7-7】 输入一个学生成绩,显示他的等级,用函数实现。转换规则:90~100为 A等,80~89为B等,70~79为C等,60~69为D等,0~59为 E等。 main() /*主函数*/ { char grade; int score; char s_c_g(int s); scanf("%d",&score); if(score>100||score<0) printf("data error\n"); else { grade=s_c_g(score); /*函数调用。成绩转换为等级*/ printf ("score:%d--->grade:%c\n", score, grade); } } C语言程序设计实用教程与实训
(4) 如果数据需要输入(如果函数的功能本来就是实现数据的输入除外), 则用形参来实现,其他变量(一般为临时变量)在函数内定义。
(5) 确定函数的返回值及其类型(一般先用临时变量保存函数返回值)。
(6) 确定函数名,可以提前确定。
(7) 整理、完善以上各部分设计,完成函数设计。 (8) 将函数设计,用C语言的函数定义语法表示出来,得到完整的函数代 码。
函数说明与函数定义不同,它不涉及函数具体功能。它只说明函数的函数名、 函数形参个数和类型、返回值的类型,这种形式称为函数原型说明。 函数原型的说明形式:
类型说明符 被调函数名(类型 形参,类型 形参,……);
或为 类型说明符 被调函数名(类型,类型,……);
说明:
(1) 括号内可给出形参的类型和形参名,也可只给出形参类型。 (2) 函数说明时形参名可与函数定义时的形参名同名,也可不同名。
C语言程序设计实用教程与实训
第7章 函

(3)函数名是由用户定义的标识符,函数名后有一对空括号(括号不能少), 其中无参数。 (4){}中的内容称为函数体,它一般包含声明部分和执行部分。 (5)函数的返回值由return语句返回。
2. return语句
return语句的一般语法为: return (表达式); 或 return 表达式; 。 【例7-1】 定义一个打印一行星号的无参函数。
函数代码: float c_area(int r) { float area,pi=3.14; area=pi*r*r; return area; }
C语言程序设计实用教程与实训
第7章 函

【例7-5】 设计一个函数,求3个整数中的最大值。
设计过程:
函数功能:选出3个整数的最大值。 实现方法:先假定第1个最大,再与其后各个数逐个比较验证。
C语言程序设计实用教程与实训
第7章 函

例7-4】 设计一个函数,求圆的面积(半径为整数)。
设计过程:
函数功能:计算圆面积。 数学公式:圆周率乘以半径的平方。 所需数据:浮点型圆周率,整型半径。 确定形参:半径需要外界输入,确定为形参,圆周率在函数内定义。 函数值:面积,类型为浮点型(函数内定义临时变量)。 函数名:c_area。
int sum_int(int x,int y) /*求和的两个数,由实参传递过来*/ { int sum; sum=x+y; return sum; /*返回两数之和*/ } C语言程序设计实用教程与实训
第7章 函

7.2.3 函数设计的实用方法
相关文档
最新文档