慈继阁小说网 > 文学电子书 > C语言程序设计 >

第14章

C语言程序设计-第14章

小说: C语言程序设计 字数: 每页4000字

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!



在主调函数中调用某函数之前应对该被调函数进行说明(声明),这与使用变量之前要先进行变量说明是一样的。在主调函数中对被调函数作说明的目的是使编译系统知道被调函数返回值的类型,以便在主调函数中按此种类型对返回值作相应的处理。
其一般形式为:
  类型说明符 被调函数名(类型 形参,类型 形参…);  
或为:
  类型说明符 被调函数名(类型,类型…);  
括号内给出了形参的类型和形参名,或只给出形参类型。这便于编译系统进行检错,以防止可能出现的错误。
例8。1 main函数中对max函数的说明为:
int max(int a;int b);
或写为:
  int max(int;int);
C语言中又规定在以下几种情况时可以省去主调函数中对被调函数的函数说明。
1)  如果被调函数的返回值是整型或字符型时,可以不对被调函数作说明,而直接调用。这时系统将自动对被调函数返回值按整型处理。例8。2的主函数中未对函数s作说明而直接调用即属此种情形。
2)  当被调函数的函数定义出现在主调函数之前时,在主调函数中也可以不对被调函数再作说明而直接调用。例如例8。1中,函数max的定义放在main 函数之前,因此可在main函数中省去对max函数的函数说明int max(int a;int b)。
3)  如在所有函数定义之前,在函数外预先说明了各个函数的类型,则在以后的各主调函数中,可不再对被调函数作说明。例如:
char str(int a);
float f(float b);
main()

 ……

char str(int a)

 ……

float f(float b)

 ……

其中第一,二行对str函数和f函数预先作了说明。因此在以后各函数中无须对str和f函数再作说明就可直接调用。
4)  对库函数的调用不需要再作说明,但必须把该函数的头文件用include命令包含在源文件前部。
8。5  函数的嵌套调用
C语言中不允许作嵌套的函数定义。因此各函数之间是平行的,不存在上一级函数和下一级函数的问题。但是C语言允许在一个函数的定义中出现对另一个函数的调用。这样就出现了函数的嵌套调用。即在被调函数中又调用其它函数。这与其它语言的子程序嵌套的情形是类似的。其关系可表示如图。
图表示了两层嵌套的情形。其执行过程是:执行main函数中调用a函数的语句时,即转去执行a函数,在a函数中调用b 函数时,又转去执行b函数,b函数执行完毕返回a函数的断点继续执行,a函数执行完毕返回main函数的断点继续执行。
【例8。4】计算s22
本题可编写两个函数,一个是用来计算平方值的函数f1,另一个是用来计算阶乘值的函数f2。主函数先调f1计算出平方值,再在f1中以平方值为实参,调用 f2计算其阶乘值,然后返回f1,再返回主函数,在循环程序中计算累加和。
long f1(int p)

int k;
long r;
long f2(int);
kp*p;
rf2(k);
return r;

long f2(int q)

long c1;
int i;
   for(i1;i  从程序中可以看出;move函数是一个递归函数,它有四个形参n;x;y;z。n表示圆盘数,x;y;z分别表示三根针。move函数的功能是把x上的n个圆盘移动到z上。当n1时,直接把x上的圆盘移至z上,输出x→z。如n1则分为三步:递归调用move函数,把n1个圆盘从x移到y;输出x→z;递归调用move函数,把n1个圆盘从y移到z。在递归调用过程中nn1,故n的值逐次递减,最后n1时,终止递归,逐层返回。当n4 时程序运行的结果为:
input number:
4
the step to moving 4 diskes:
a→b
a→c
b→c
a→b
c→a
c→b
a→b
a→c
b→c
b→a
c→a
b→c
a→b
a→c
b→c
8。7  数组作为函数参数
数组可以作为函数的参数使用,进行数据传送。数组用作函数参数有两种形式,一种是把数组元素(下标变量)作为实参使用;另一种是把数组名作为函数的形参和实参使用。
1。  数组元素作函数实参
数组元素就是下标变量,它与普通变量并无区别。 因此它作为函数实参使用与普通变量是完全相同的,在发生函数调用时,把作为实参的数组元素的值传送给形参,实现单向的值传送。例5。4说明了这种情况。
【例8。7】判别一个整数数组中各元素的值,若大于0 则输出该值,若小于等于0则输出0值。编程如下:
void nzp(int v)

if(v》0)
  printf(〃%d 〃;v);
else
  printf(〃%d 〃;0);

main()

int a'5';i;
printf(〃input 5 numbersn〃);
for(i0;i

返回目录 上一页 下一页 回到顶部 0 0

你可能喜欢的