c语言第八章 函数
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
教学进程
8.2
函数的调用
【练习题 】
用函数实现求两个实数的和。
#include <stdio.h> void main() /*主调函数*/ { float add(float x, float y); /*函数声明*/ float a,b,c; printf("Please enter a and b:"); scanf("%f,%f",&a,&b); c=add(a,b); 因函数声明与函数首 printf("sum is %f\n",c); 部一致,故把函数声 } 明称为函数原型。 float add(float x,float y) /*被调函数首部*/ { float z; z=x+y; 用函数原型来声明函数,能减少 return(z); 编写程序时可能出现的错误。 }
教学进程
8.2.3 函数的调用
定义函数时,函数名后括号中的变量称为形式参数,即形参。 定义函数时,函数名后括号中的变量称为形式参数,即形参。 在主函数中调用函数时,函数名后括号中的表达式称为实际 参数,简称实参。
【例 】 输入两个整数,要求用一个函数求出其中的大者,并 在主函数中输出此数。
教学进程
a
b
c
d
e
f
教学进程
运行结果: 【例】 函数调用的简单例子。
**************** How do you do! ****************
/*主调函数*/ /*主调函数* #include <stdio.h> void main() { void printstar(); printstar(); void print_message(); print_message(); printstar(); print_message(); printstar(); }
● 如果省略函数的类
型标识符,则默认为 是int型。 int型。 默认为整型,可以省略 ● 主调函数通过参数 接受主调函数传递 向被调函数传递数据。 过来的数据
z=x>y? x: y; return (z); }
返回到调用处
教学进程
8.2
函数的定义的一般形式
函数的定义
●
在定义C 在定义C函数时要注意以下几点:
函数的声明
int max(int x, int y);
教学进程
8.3
函数的嵌套调用 ● 8.3.1被调用的函数体中调用另一个函数。 void a(); void b(); void main() { a(); } void a() { b(); } void b() {; }
一个C程序的执行是从程序的main函数开始,到main函数结束。
在文件开头先对函数 作了声明。
教学进程
本次课学到了什么? 什么是函数? 用来完成一定功能的一段程序。 函数的定义 类型标识符 函数名( 形式参数列表) 函数名( 形式参数列表) { 函数体 } 函数的调用 1. 函数语句: 2. 函数表达式: 3.函数参数:
printf_star(); printf_star(); c=max(a,b); c=max(a,b); printf(“%d”, max(a,b)); c=max(a,b); printf(“%d”, c);
教学进程
函数的基本概念
● 在C语言中,从用户的角度看,函数分为以下两种: 语言中,从用户的角度看,函数分为以下两种: ● 标准库函数
例如 scanf()、printf()、fabs()、sqrt()、 scanf()、printf()、fabs()、sqrt()、 exp()、sin()、 exp()、sin()、cos()
●
● ●
教学进程
函数的定义
● 如果"形参表列"中有多个形式参数,则它们之间要用","分隔。 如果"形参表列"中有多个形式参数,则它们之间要用" ● 如果形参表中有多个形参,即使它们的类型是相同的,在形参
表中也只能逐个进行说明。
double max(double a,double b) a, {…}
}
实参,将其值 传递给形参
}
else z=y; return z;
教学进程
函数原型声明的两种形式为:
函数类型 函数名(形参类型1 形参名1,形参类型2 形参名2,…); 函数名(形参类型1 形参名1,形参类型2 形参名2 …);
int max(int x, int y); int max(int , int );
{ ifreturn (x>y ? x:y); (x>y) return x; else return y; }
/*定义函数max_4*/ /*函数max原型声明*/
/*调用函数max,求a、b中的大者存入m*/ 求m、c中的大者存入m*/ 求m、d中的大者存入m*/
m=max( max( ( max(a,b) ,c ) ,d); m=max(m,c); /*
教学进程
8.2
函数的调用
被调函数出现在主调函数之前时,不必作函数原型声明。 #include <stdio.h> float add(float x,float y) /*被调函数首部*/ { float z; z=x+y; return(z); } void main() /*主调函数*/ { float a,b,c; printf("Please enter a and b:"); scanf("%f,%f",&a,&b); c=add(a,b); printf("sum is %f\n",c); }
/*调用函数max_4*/
教学进程
函数的嵌套调用
int max_4(int a,int b,int c,int d) { int max(int a,int b); int m; m=max (a,b); m=max(m,d); return (m); } int max(int x,int y)
●用户自己定义的函数
● 在C语言中,从函数的形式看,函数分为两类: 语言中,从函数的形式看,函数分为两类: ● 无参函数
主调函数不向被调函数传递数据。 用来执行指定的一组操作,一般不返回值。
● 有参函数
主调函数通过参数向被调函数传递数据。 一般执行被调函数会得到一个返回值,供主调函数使用。
教学进程
8.2
教学进程
8.2
函数的定义的一般形式
函数的定义
8.2.3 怎样定义有参函数 定义有参函数的一般形式为: 类型标识符 函数名( 形式参数列表) 函数名( 形式参数列表) {
指定函数返回值 的类型
函数体 }
例
有几个参数,应 逐个分别写出 int max(int x, int y) { int z;
/*声明部分*/
该程序包含两个函数:主函数main和被调用函数max
#include <stdio.h> <stdio. void main ( ) { int max(int x,int y ); int a,b,c; scanf("%d%d",&a,&b); ,&a,&b); c=max(a,b); c=max(a
●
函数类型标识符,它表示返回的函数值的类型。 在C语言中还可以定义无类型(即void类型)的函数,这 语言中还可以定义无类型(即void类型)的函数,这 种函数不返回函数值,只是完成某种功能。 如果省略函数的类型标识符,则默认为是int型。 如果省略函数的类型标识符,则默认为是int型。 函数中返回语句的形式为 return(表达式);或 return 表达式; return(表达式) 其作用是将表达式的值作为函数值返回给调用函数。其中表 达式的类型应与函数类型一致。
教学进程
函数的嵌套调用
【例】
输入4个整数,找出其中最大的数。用函数的嵌 套调用来处理。
分析: 在主函数中调用一个max_4函数来求4个整数中的最大 数。然后在max_4函数中再调用一个max函数来求2个整 数中的最大数。最后在主函数中输出结果。 编写程序如下:
lude <stdio.h> void main() { int max_4(int a,int b,int c,int d); /*函数max_4原型声明*/ int a,b,c,d,max; printf("Please enter 4 interger numbers:"); scanf("%d%d%d%d",&a,&b,&c,&d); max=max_4(a,b,c,d); printf("max=%d \n",max); }
被调函数出现在主调 函数之前。
教学进程
8.2
函数的调用
若在文件开头(所有函数之前),对本文件中所用到的函数 进行了声明,则不必在各函数中对其所调用的函数再作声明 #include <stdio.h> float add(float x, float y); /*函数声明*/ void main() /*主调函数*/ { float a,b,c; printf("Please enter a and b:"); scanf("%f,%f",&a,&b); c=add(a,b); printf("sum is %f\n",c); } float add(float x,float y) /*被调函数首部*/ { float z; z=x+y; return(z); }
教学进程
8.2.3 函数的调用
函数调用的一般形式
函数名( 函数名( ) 函数名(实参表列) 函数名(实参表列)
print_star(); sub(a, b);
注意
● 如果是调用无参函数,参数表列可以没有,但括号不能省 ● 若实参表列包含多个实参,其间用逗号分隔 ● 实参与形参应个数相等、对应位置类型匹配 ● 实参与形参按顺序对应,向形参传递数据
函数的定义和调用
函数的定义
8.2.1 为什么要定义函数
C语言规定,程序中用到的所有函数,都必须 “先定义,后使用”。 定义是为了使系统能按照定义时的类型、名字等 进行编译。 库函数是由编译系统事先定义好的,存放在相关 的头文件中。使用时只要用#include命令将有关的头 文件包含进来即可。 库函数只提供了最基本、最常用的一些函数,不 包括解决具体问题的特定函数,需要用户自己定义。
/*被调函数*/ /*被调函数* void printstar( ) /*无参函数*/ /*无参函数* { printf("****************\ printf("****************\n"); } void print_message( ) /*无参函数*/ /*无参函数* { printf(" How do you do!\n"); do!\ }
/* 对被调用函数的声明*/ 对被调用函数的声明* /* 定义三个整型变量 */ 形参,接受实 参传递的值 /* 从键盘输入a与b的值 */ 从键盘输入a /*调用max(int 将得到的结果值赋给变量c*/ /*调用函数,将得到的结果值赋给变量c*/ int 函数, x,int y)
{ int printf(“max= %d\n”,c); /* 输出 z;的值*/ c); c的值* if (x>y) z=x;
教学进程
8.2
函数的定义的一般形式
函数的定义
8.2.2 怎样定义无参函数 定义无参函数的一般形式为: 类型名 函数名( ) 函数名( {
指定函数返回值 的类型
函数体 }
没有参数,所以 称为无参函数
void printstar( ) /*无参函数*/ /*无参函数* { printf("****************\ printf("****************\n"); }
第
八 章 函数
第
8章
函数调用
8.4 数组作为函数参数 8.5 变量的作用域和生存期 8.6 内部函数与外部函数 本章小结
8.1 函数概述 8.2 函数的定义和调用 8.3 函数的嵌套调用和 递归调用
8.1
函数概述
函数就是用来完成一定功能的一段程序。 在C语言中,往往把程序需要实现的一些功能分别编写成若 干个函数,然后把它们有机地组合成一个完整的程序。 在设计较大的程序时,一般将其分为若干个程序模块,每个 模块用来实现一定的功能。在C 模块用来实现一定的功能。在C语言中,模块的功能是由函数来 完成的。 main
/*
/*返回m值便是4个中的大者*/
/*定义函数max_2*/ /* 函数返回值是x和y中的大者 */