C 语言是结构化语言,它的主要结构成分是函数。函数被作为一种构件,用以完成程序中的某个具体功能。函数允许一个程序的各个任务被分别定义和编码,使程序模块化。本章介绍 C 语言函数的设计,如何用函数分解程序的各个功能,如何使用函数构成模块化程序,以及代码复用的基本思想。
函数说明 与 返回值
函数的一般形式如下:
类型说明符 函数名(参数表) 参数说明段 { 函数体 }
1 函数的类型说明
函数的类型说明符可以是任何数据类型,包括空值型 void,即不使用 return 语句返回任何数据。默认情况下,函数被自动说明为整型。函数必须在第一调用前定义,这样编译器才能找到该函数。前置函数类型说明被称为 函数原型。
#include <stdio.h> #include <stdlib.h>
#define PI 3.141593 float cylinder_area(float, float); // 函数的类型说明,函数原型
int main() { float r, h, s; // r圆半径,h高,s面积 puts("请输入圆柱的半径和高:"); if (scanf("%f,%f", &r, &h) == 2) { s = cylinder_area(r, h); // 调用函数 cylinder_area(),返回值到变量s printf("\n该圆柱体的表面积为:%f\n", s); } else { puts("您输入的数据格式不合法!"); }
return EXIT_SUCCESS; }
float cylinder_area(float r, float h) { float cd_area; cd_area = 2 * (PI * r * r) + (2 * PI * r * h);
return cd_area; }
设计函数时需要注意数据类型的匹配关系,函数的类型说明符必须与 return 语句返回的数据类型相同,函数的参数说明必须与参数的数据类型相同,否则会造成编译错误。
2 返回语句
函数的返回语句 return 有 2 个作用:其一,结束当前函数,调用者获得程序控制权;其二,将计算结果传递给调用者。
函数的结束有 2 种情况,一是函数体内所有的代码执行完毕,二是 return 语句被执行。
C语言函数的参数和返回值
函数的参数
函数的参数分为形参和实参。形参出现在函数定义中,在整个函数体内都可以使用,离开该函数则不能使用。实参出现在函数调用中。
形参和实参的功能是作数据传送,发生函数调用时,实参的值会传送给形参。
形参和实参有以下几个特点: 1) 形参变量只有在函数被调用时才分配内存单元,在调用结束时,立刻释放所分配的内存单元。因此,形参只有在函数内部有效,不能在函数外部使用。
2) 实参可以是常量、变量、表达式、函数等,无论实参是何种类型的数据,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使实参获得确定值。
3) 实参和形参在数量上、类型上、顺序上必须严格一致,否则会发生“类型不匹配”的错误。
函数调用中发生的数据传送是单向的,只能把实参的值传送给形参,而不能把形参的值反向地传送给实参。 因此在函数调用过程中,形参的值发生改变,而实参中的值不会变化。
【示例】计算 1+2+3+...+(n-1)+n 的值。
#include <stdio.h> int sum(int n){ int i; for(i=n-1; i>=1; i--){ n+=i; } printf("The inner n = %d\n",n); return n; } int main(){ int n, total; printf("Input a number: "); scanf("%d",&n); total = sum(n); printf("The outer n = %d \n", n); printf("1+2+3+...+(n-1)+n = %d\n", total); return 0; }
运行结果: Input a number: 100? The inner n = 5050 The outer n = 100 1+2+3+. ..+(n-l)+n = 5050
通过 scanf 输入 n 的值,作为实参,在调用 sum 时传送给形参量 n。
注意:本例中形参变量和实参变量的名称都是 n,但这是两个不同的量,各自的作用域不同,下节将会讲解。
在mian函数中用printf 语句输出一次n值,这个n值是实参n的值。在函数sum中也用printf 语句输出了一次n值,这个n值是形参最后取得的n值。
从运行情况看,输入n值为100,即实参n的值为100,把此值传给函数sum时,形参n的初值也为100,在执行函数过程中,形参n的值变为5050。函数运行结束后,输出实参n的值仍为100。可见实参的值不随形参的变化而变化。
函数的返回值 函数的值(或称函数返回值)是指函数被调用之后,执行函数体中的程序段所取得的值,可以通过return语句返回。
return语句的一般形式为:
return 表达式;
或者:
return (表达式);
例如:
return max; return a+b; return (100+200);
函数中可以有多个 return 语句,但每次调用只能有一个return 语句被执行,所以只有一个返回值。
一旦遇到 return 语句,不管后面有没有代码,函数立即运行结束,将值返回。例如:
int func(){ int a=100, b=200, c; return a+b; return a*b; return b/a; }
返回值始终 a+b 的值,也就是300。
没有返回值的函数为空类型,用void进行说明。例如:
void func(){ printf("Hello world!\n"); }
一旦函数的类型被定义为 void,就不能再接受它的值了。例如,下面的语句是错误的:
int a = func();
为了使程序有良好的可读性并减少出错, 凡不要求返回值的函数都应定义为空类型。
|