模块化程序设计与函数
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
a)被调用函数已经存在。若是库函数,系统已 经定义,否则需要用户自己定义。
b)在主调函数中对被调用函数先声明,然后才 能调用。
9.2 函数的定义与调用
三、函数的调用
2)函数的声明方式 类型声明的一般形式为:
类型名 函数名(类型名,类型名…); 类型名 函数名(类型名 参数名 ,类型名 参 数名2…);
} 程序运行结果如下:
**************
* How do you do! *
**************
9.2 函数的定义与调用
一、函数的定义
1.无参函数定义的一般形式: 类型名 函数名( ) { 声明部分; 执行部分;
} 无参函数没有参数,因此,函数首部的 “参数定义表”可以缺省(但括号不能缺 省)。
(5) 当一个C源程序由多个函数构成时,必须有 一个唯一的main()函数。main()函数在源程序 中的位置可以任意,程序的执行总是从main() 函数开始,最终从main()函数结束。
9.2 函数的定义与调用 /*再次调用fun1()函数*/
无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值,以便把这些值传送给形参。
} int max(int n1,int n2) /*定义max()函数*/ { return (n1>n2?n1:n2);
} 程序运行情况如下:Input two integer numbers:
12 ,34↙
max=34
9.1 模块化程序设计与函数
[例9.2]输出一个文本信息框。
void 5]求两数中较大数。
int max(int x, int y)
{ if(x>y) return x; else return y;
}
main( )
{ int a, b, c;
scanf(“%d%d”,&a,&b);
c=max(a,b);
/*printf(“max=%d\n”,max(a,b));
其中,参数的“参数名”可以缺省。
函数原型与函数定义的首部是一致的,各参 数的顺序也必须与函数首部定义的一致。但函 数声明是单独作为一条说明语句,因此其末尾 必须有分号(;)。
9.2 函数的定义与调用
三、函数的调用
说明:
(1)C语言规定,在以下三种情况下,可以省去 对被调用函数的声明:
如果函数的值是整型或字符型,可以不必声 明。
scanf(“%d%d%d”,&a,&b,&c); d=max(max(a,b),c); /*调用语句在实参表中*/ printf(“max=%d\n”,d); }
9.2 函数的定义与调用
三、函数的调用
3.对被调用函数的声明 1)对被调用函数的声明
C程序中的一个函数要调用另一个函数时必须 具备以下两个条件:
swap(a,b); printf("a=%d,b=%d\n",a,b); } 程序运行结果如下:
a=10, b=20
9.2 函数的定义与调用
二、函数的参数与函数的返回值
2.函数的返回值与函数类型 函数的返回值就是调用函数求得的函数值。
1)函数返回值与return语句 函数的返回值是通过函数中的return语句来获
9.2 函数的定义与调用
三、函数的调用
2.函数调用的方式 (1)当为void类型时,其调用只能单独 作为一个语句出现; (2)当函数类型不为void型时,函数的 调用可以出现在同类型常量可以出现的任 何地方,如:表达式,输出表,实参表中 等。但不能出现在输入表和形参表中。
9.2 函数的定义与调用
/*定义fun1()函数*/
{ printf("* * * * * * * * * * * * * *\n");
}
void fun2 ( )
/*定义fun2()函数*/
{ printf("* How do you do! *\n");
}
main()
{ fun1(); fun2(); fun1();
/*调用fun1()函数*/ /*调用fun2()函数*/ /*再次调用fun1()函数*/
9.1 模块化程序设计与函数
[例9.1]定义一个函数,用于求两个数中的大数。
main() { int max(int n1,int n2); /*声明max()函数*/
int num,num1,num2; printf("Input two integer numbers:\n"); scanf("%d,%d",&num1,&num2); num=max(num1,num2); /*调用max()函数*/ printf("max=%d\n", num);
(1) 全局变量可加强函数模块之间的数据联系,但又使这些函数依赖于这些全局变量,因而使得这些函数的独立性降低。
6f \n”,pi);
1!+2!+…+10!=4037914
2 函数的定义与调用
一、函数的定义
float cal( float e )
9.2 函数的定义与调用
二、函数的参数与函数的返回值
[例9.3]求两数中值较大的一个数。
二、函数的参数与函数的返回值 /*调用max()函数*/
类型名 函数名(类型名,类型名…); 其执行过程是:执行main()函数中调用f1()函数的语句时,即转去执行f1()函数;
/*声明max()函数*/
如果在所有函数定义之前,在函数外部(例如源文件开始处)预先对各个被调用函数进行了声明,则在主调函数中可缺省对被调用函数的
(3) 实参对形参的数据传送是单向的值传递,即只能 把实参的值传送给形参,而不能把形参的值反向地传送 给实参。
9.2 函数的定义与调用
二、函数的参数与函数的返回值
[例9.4]分析以下程序能否交换主函数中 a 与 b 的 值。
void swap(int x, int y) { int t;
t=x; x=y; y=t; } main() { int a=10; b=20;
*/ /*调用语句在表达式,或输出表中*/
printf(“max=%d\n”,c);
}
9.2 函数的定义与调用
三、函数的调用
[例9.6]求三个数中较大数。 int max(int x, int y) { if(x>y) return x;
else return y; } main( ) { int a, b, c,d;
1.形参与实参的参数传递 声明。
2 函数的定义与调用 三、函数的调用
return s; for( i=1;
形参在函数首部定义,必须是变量形式,
在复合语句中定义的自动变量,其生存期为该复合句被执行期间。
只能在该函数体内使用。 7]由键盘输入三个整数,输出绝对值最大者
(2)当函数类型不为void型时,函数的调用可以出现在同类型常量可以出现的任何地方,如:表达式,输出表,实参表中等。
数名、函数值的类型、函数参数及其函数体等, 它是一个完整的、独立的函数单位。在一个程 序中,一个函数只能被定义一次,而且是在其 他任何函数之外进行的。
函数声明则是把函数的名称、函数值的类型、 参数的个数、类型和顺序通知编译系统,以便 在调用该函数时系统对函数名称正确与否、参 数的类型、个数及顺序是否一致等进行对照检 查。
int max(int x, int y) { if(x>y) return x;
else return y;
}
main( )
{ int a, b, c;
scanf(“%d%d”,&a,&b);
c=max(a,b);
printf(“max=%d\n”,c);
} 运行结果:
23 45
max=45
9.2 函数的定义与调用
一份,传送给被调用函数的形参变量,从 在一个函数(包括main()函数)内部或复合句内部定义的变量称为局部变量。
extern 类型名 全局变量1 ,全局变量2…; 关于形参与实参的说明:
而实现主调函数向被调用函数的参数传递。 类型名 函数名(类型名,类型名…);
{ float cal(float);
当对被调用函数的定义出现在主调函数之前时, 可以缺省对被调用函数的声明。
如果在所有函数定义之前,在函数外部(例如 源文件开始处)预先对各个被调用函数进行了声 明,则在主调函数中可缺省对被调用函数的声 明。
9.2 函数的定义与调用
三、函数的调用
(2) 函数定义和函数声明是两个不同的概念。 函数定义是对函数功能的确立,包括定义函
自定义函数说明部分定义的参数称为形式 参数,简称形参。
主调函数提供的参数称为实际参数,简称 实参。
函数若无返回值,则其首部的类型标识符 用“void”表示。
9.2 函数的定义与调用
一、函数的定义
说明: (1) 除main()函数外,函数名和形参名都是由
用户命名的标识符,要求符合标识符的命名规则。 (2) 函数定义不允许嵌套。在C语言中,所有
实参在函数调用表达式中提供,可以是 5 变量的存储类别
二、局部变量的存储方式 { int y,z;
表达式形式。 int max(int x, int y)
{ int max;
for (i=1;
函数调用时,主调函数把实参的值复制 常用的办法是加条件判断,满足某种条件后就不再作递归调用,然后逐层返回。
printf("Input two integer numbers:\n");
得的。 格式:return 表达式; 或 return (表达式); 或 return ;
功能:返回主调函数,并将“表达式”的值带回 给主调函数。
9.2 函数的定义与调用
二、函数的参数与函数的返回值
2)函数类型
函数类型就是函数定义首部的类型名所定义的 类型,也就是函数返回值的类型。因此,在定义 函数时,无返回值函数的类型定义为void,有返 回值函数的类型应与return语句中返回值表达式 的类型一致。
函数(包括主函数main( ))都是平行的。在一个函 数的函数体内,不能再定义另一个函数,即不能 嵌套定义。
(3) 可以定义空函数。所谓空函数,是指既无 参数又无函数体的函数。
9.2 函数的定义与调用
一、函数的定义
其一般形式为:void 函数名( ) {}
(4) 在旧版本的C语言中,参数定义表允许放在 函数首部的第二行单独指定。
9.2 函数的定义与调用
一、函数的定义
2.有参函数定义的一般形式: 类型名 函数名(类型名 参数名1,类型名 参
数名2,...,) { 说明部分;
执行部分;
} 有参函数在其参数定义表中定义了所需
的每一个参数的类型和名称。每一个参数 单独定义,参数定义之间用逗号隔开。
9.2 函数的定义与调用
一、函数的定义
第九章 函数
9.1 模块化程序设计与函数
在C程序设计中,子程序的作用是用函数来完 成的。一个C程序一般由多个函数组成,其中必 须有一个且仅有一个名为main的主函数,其余 为被main函数或其它函数调用的函数,无论 main函数位于程序中什么位置, C程序总是从 main函数开始执行。main函数可调用其它函数 来实现所需的功能。
二、函数的参数与函数的返回值
关于形参与实参的说明:
(1) 实参可以是常量、变量、表达式、函数等。无论实 参是何种类型的量,在进行函数调用时,它们都必须具 有确定的值,以便把这些值传送给形参。因此,应预先 用赋值、输入等方法,使实参获得确定的值。
(2) 形参变量只有在被调用时,才分配存储单元,调 用结束后,即刻释放所分配的存储单元。因此,形参只 有在该函数内有效。调用结束,返回主调函数后,则不 能再使用该形参变量。
9.2 函数的定义与调用
三、函数的调用
(3) 对库函数的调用不需要声明,但必须 把该库函数的头文件用 #include 命令包 含在源文件开始处。
9.2 函数的定义与调用
三、函数的调用
[例9.7]由键盘输入三个整数,输出绝对值最大者 #include “math.h” main( ) { int a, b, c, max;
当有返回值函数的类型定义与ruturn语句中表 达式的类型不一致时,则以函数类型定义为准。 对于数值型数据,系统能自动进行类型转换,否 则,按出错处理。如果缺省函数类型定义,则系 统一律按整型处理。
9.2 函数的定义与调用
三、函数的调用
1.函数调用的一般形式 函数调用的一般形式为:
函数名( 实际参数表) 调用无参函数时,缺省实际参数表,但圆括号 不能省略。 实际参数表中的参数可以是常量、变量或表达 式。如果实参不止一个,则相邻实参之间用逗号 分隔。实参的个数、类型和顺序,应该与被调用 函数的形参所要求的个数、类型和顺序一致。
b)在主调函数中对被调用函数先声明,然后才 能调用。
9.2 函数的定义与调用
三、函数的调用
2)函数的声明方式 类型声明的一般形式为:
类型名 函数名(类型名,类型名…); 类型名 函数名(类型名 参数名 ,类型名 参 数名2…);
} 程序运行结果如下:
**************
* How do you do! *
**************
9.2 函数的定义与调用
一、函数的定义
1.无参函数定义的一般形式: 类型名 函数名( ) { 声明部分; 执行部分;
} 无参函数没有参数,因此,函数首部的 “参数定义表”可以缺省(但括号不能缺 省)。
(5) 当一个C源程序由多个函数构成时,必须有 一个唯一的main()函数。main()函数在源程序 中的位置可以任意,程序的执行总是从main() 函数开始,最终从main()函数结束。
9.2 函数的定义与调用 /*再次调用fun1()函数*/
无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值,以便把这些值传送给形参。
} int max(int n1,int n2) /*定义max()函数*/ { return (n1>n2?n1:n2);
} 程序运行情况如下:Input two integer numbers:
12 ,34↙
max=34
9.1 模块化程序设计与函数
[例9.2]输出一个文本信息框。
void 5]求两数中较大数。
int max(int x, int y)
{ if(x>y) return x; else return y;
}
main( )
{ int a, b, c;
scanf(“%d%d”,&a,&b);
c=max(a,b);
/*printf(“max=%d\n”,max(a,b));
其中,参数的“参数名”可以缺省。
函数原型与函数定义的首部是一致的,各参 数的顺序也必须与函数首部定义的一致。但函 数声明是单独作为一条说明语句,因此其末尾 必须有分号(;)。
9.2 函数的定义与调用
三、函数的调用
说明:
(1)C语言规定,在以下三种情况下,可以省去 对被调用函数的声明:
如果函数的值是整型或字符型,可以不必声 明。
scanf(“%d%d%d”,&a,&b,&c); d=max(max(a,b),c); /*调用语句在实参表中*/ printf(“max=%d\n”,d); }
9.2 函数的定义与调用
三、函数的调用
3.对被调用函数的声明 1)对被调用函数的声明
C程序中的一个函数要调用另一个函数时必须 具备以下两个条件:
swap(a,b); printf("a=%d,b=%d\n",a,b); } 程序运行结果如下:
a=10, b=20
9.2 函数的定义与调用
二、函数的参数与函数的返回值
2.函数的返回值与函数类型 函数的返回值就是调用函数求得的函数值。
1)函数返回值与return语句 函数的返回值是通过函数中的return语句来获
9.2 函数的定义与调用
三、函数的调用
2.函数调用的方式 (1)当为void类型时,其调用只能单独 作为一个语句出现; (2)当函数类型不为void型时,函数的 调用可以出现在同类型常量可以出现的任 何地方,如:表达式,输出表,实参表中 等。但不能出现在输入表和形参表中。
9.2 函数的定义与调用
/*定义fun1()函数*/
{ printf("* * * * * * * * * * * * * *\n");
}
void fun2 ( )
/*定义fun2()函数*/
{ printf("* How do you do! *\n");
}
main()
{ fun1(); fun2(); fun1();
/*调用fun1()函数*/ /*调用fun2()函数*/ /*再次调用fun1()函数*/
9.1 模块化程序设计与函数
[例9.1]定义一个函数,用于求两个数中的大数。
main() { int max(int n1,int n2); /*声明max()函数*/
int num,num1,num2; printf("Input two integer numbers:\n"); scanf("%d,%d",&num1,&num2); num=max(num1,num2); /*调用max()函数*/ printf("max=%d\n", num);
(1) 全局变量可加强函数模块之间的数据联系,但又使这些函数依赖于这些全局变量,因而使得这些函数的独立性降低。
6f \n”,pi);
1!+2!+…+10!=4037914
2 函数的定义与调用
一、函数的定义
float cal( float e )
9.2 函数的定义与调用
二、函数的参数与函数的返回值
[例9.3]求两数中值较大的一个数。
二、函数的参数与函数的返回值 /*调用max()函数*/
类型名 函数名(类型名,类型名…); 其执行过程是:执行main()函数中调用f1()函数的语句时,即转去执行f1()函数;
/*声明max()函数*/
如果在所有函数定义之前,在函数外部(例如源文件开始处)预先对各个被调用函数进行了声明,则在主调函数中可缺省对被调用函数的
(3) 实参对形参的数据传送是单向的值传递,即只能 把实参的值传送给形参,而不能把形参的值反向地传送 给实参。
9.2 函数的定义与调用
二、函数的参数与函数的返回值
[例9.4]分析以下程序能否交换主函数中 a 与 b 的 值。
void swap(int x, int y) { int t;
t=x; x=y; y=t; } main() { int a=10; b=20;
*/ /*调用语句在表达式,或输出表中*/
printf(“max=%d\n”,c);
}
9.2 函数的定义与调用
三、函数的调用
[例9.6]求三个数中较大数。 int max(int x, int y) { if(x>y) return x;
else return y; } main( ) { int a, b, c,d;
1.形参与实参的参数传递 声明。
2 函数的定义与调用 三、函数的调用
return s; for( i=1;
形参在函数首部定义,必须是变量形式,
在复合语句中定义的自动变量,其生存期为该复合句被执行期间。
只能在该函数体内使用。 7]由键盘输入三个整数,输出绝对值最大者
(2)当函数类型不为void型时,函数的调用可以出现在同类型常量可以出现的任何地方,如:表达式,输出表,实参表中等。
数名、函数值的类型、函数参数及其函数体等, 它是一个完整的、独立的函数单位。在一个程 序中,一个函数只能被定义一次,而且是在其 他任何函数之外进行的。
函数声明则是把函数的名称、函数值的类型、 参数的个数、类型和顺序通知编译系统,以便 在调用该函数时系统对函数名称正确与否、参 数的类型、个数及顺序是否一致等进行对照检 查。
int max(int x, int y) { if(x>y) return x;
else return y;
}
main( )
{ int a, b, c;
scanf(“%d%d”,&a,&b);
c=max(a,b);
printf(“max=%d\n”,c);
} 运行结果:
23 45
max=45
9.2 函数的定义与调用
一份,传送给被调用函数的形参变量,从 在一个函数(包括main()函数)内部或复合句内部定义的变量称为局部变量。
extern 类型名 全局变量1 ,全局变量2…; 关于形参与实参的说明:
而实现主调函数向被调用函数的参数传递。 类型名 函数名(类型名,类型名…);
{ float cal(float);
当对被调用函数的定义出现在主调函数之前时, 可以缺省对被调用函数的声明。
如果在所有函数定义之前,在函数外部(例如 源文件开始处)预先对各个被调用函数进行了声 明,则在主调函数中可缺省对被调用函数的声 明。
9.2 函数的定义与调用
三、函数的调用
(2) 函数定义和函数声明是两个不同的概念。 函数定义是对函数功能的确立,包括定义函
自定义函数说明部分定义的参数称为形式 参数,简称形参。
主调函数提供的参数称为实际参数,简称 实参。
函数若无返回值,则其首部的类型标识符 用“void”表示。
9.2 函数的定义与调用
一、函数的定义
说明: (1) 除main()函数外,函数名和形参名都是由
用户命名的标识符,要求符合标识符的命名规则。 (2) 函数定义不允许嵌套。在C语言中,所有
实参在函数调用表达式中提供,可以是 5 变量的存储类别
二、局部变量的存储方式 { int y,z;
表达式形式。 int max(int x, int y)
{ int max;
for (i=1;
函数调用时,主调函数把实参的值复制 常用的办法是加条件判断,满足某种条件后就不再作递归调用,然后逐层返回。
printf("Input two integer numbers:\n");
得的。 格式:return 表达式; 或 return (表达式); 或 return ;
功能:返回主调函数,并将“表达式”的值带回 给主调函数。
9.2 函数的定义与调用
二、函数的参数与函数的返回值
2)函数类型
函数类型就是函数定义首部的类型名所定义的 类型,也就是函数返回值的类型。因此,在定义 函数时,无返回值函数的类型定义为void,有返 回值函数的类型应与return语句中返回值表达式 的类型一致。
函数(包括主函数main( ))都是平行的。在一个函 数的函数体内,不能再定义另一个函数,即不能 嵌套定义。
(3) 可以定义空函数。所谓空函数,是指既无 参数又无函数体的函数。
9.2 函数的定义与调用
一、函数的定义
其一般形式为:void 函数名( ) {}
(4) 在旧版本的C语言中,参数定义表允许放在 函数首部的第二行单独指定。
9.2 函数的定义与调用
一、函数的定义
2.有参函数定义的一般形式: 类型名 函数名(类型名 参数名1,类型名 参
数名2,...,) { 说明部分;
执行部分;
} 有参函数在其参数定义表中定义了所需
的每一个参数的类型和名称。每一个参数 单独定义,参数定义之间用逗号隔开。
9.2 函数的定义与调用
一、函数的定义
第九章 函数
9.1 模块化程序设计与函数
在C程序设计中,子程序的作用是用函数来完 成的。一个C程序一般由多个函数组成,其中必 须有一个且仅有一个名为main的主函数,其余 为被main函数或其它函数调用的函数,无论 main函数位于程序中什么位置, C程序总是从 main函数开始执行。main函数可调用其它函数 来实现所需的功能。
二、函数的参数与函数的返回值
关于形参与实参的说明:
(1) 实参可以是常量、变量、表达式、函数等。无论实 参是何种类型的量,在进行函数调用时,它们都必须具 有确定的值,以便把这些值传送给形参。因此,应预先 用赋值、输入等方法,使实参获得确定的值。
(2) 形参变量只有在被调用时,才分配存储单元,调 用结束后,即刻释放所分配的存储单元。因此,形参只 有在该函数内有效。调用结束,返回主调函数后,则不 能再使用该形参变量。
9.2 函数的定义与调用
三、函数的调用
(3) 对库函数的调用不需要声明,但必须 把该库函数的头文件用 #include 命令包 含在源文件开始处。
9.2 函数的定义与调用
三、函数的调用
[例9.7]由键盘输入三个整数,输出绝对值最大者 #include “math.h” main( ) { int a, b, c, max;
当有返回值函数的类型定义与ruturn语句中表 达式的类型不一致时,则以函数类型定义为准。 对于数值型数据,系统能自动进行类型转换,否 则,按出错处理。如果缺省函数类型定义,则系 统一律按整型处理。
9.2 函数的定义与调用
三、函数的调用
1.函数调用的一般形式 函数调用的一般形式为:
函数名( 实际参数表) 调用无参函数时,缺省实际参数表,但圆括号 不能省略。 实际参数表中的参数可以是常量、变量或表达 式。如果实参不止一个,则相邻实参之间用逗号 分隔。实参的个数、类型和顺序,应该与被调用 函数的形参所要求的个数、类型和顺序一致。