ans_函数调用.doc_第1页
ans_函数调用.doc_第2页
ans_函数调用.doc_第3页
ans_函数调用.doc_第4页
ans_函数调用.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

函数间的调用关系:由主函数调用其他函数,其他函数也可以互相调用。同一个函数可以被一个或多个函数调用任意多次。函数间可以互相调用,但不能调用main函数。main函数是系统调用的。在定义函数时是分别进行的,是互相独立的。一个函数并不从属于另一函数,即函数不能嵌套定义。#include void f2();void f1();void f2() void f1() printf(1n); f1(); printf(2n);main() f1(); f2(); getch(); C语言规定,在程序中用到的所有函数,必须“先定义,后使用”。定义函数包括以下几个内容:指定函数的名字,以便以后按名调用。指定函数的类型,函数值的类型。指定函数的参数的名字和类型,以便在调用函数时向它们传递数据。对无参函数不需要这项。指定函数应当执行什么操作,也就是函数是做什么的,即函数的功能。 (int ,int ) /* 不能写成 int , */ ;/ *函数体中的声明部分*?; return(); 关于形参与实参的说明:形参并不占内存中的存储单元。实参可以是常量、变量或表达式,例如:max(,);实参向形参的数据传递是单向“值传递”,只能由实参传给形参,而不能由形参传回来给实参。在调用函数时,给形参分配存储单元,并将实参对应的值传递给形参,调用结束后,形参单元被释放,实参单元仍保留并维持原值。函数的返回值说明:一个函数中可以有一个以上的return语句,执行到哪一个return语句,哪一个语句起作用。如return (z); 或return z;如果函数值的类型和return语句中表达式的值不一致,则以函数类型为准。不带返回值的函数,应当用“void”定义函数为“无类型”(或称“空类型”)。此时在函数体中写成return;或不出现return语句。 函数的“定义”和“声明”不是一回事。 函数的定义是指对函数功能的确立,包括指定函数名,函数值类型、形参及其类型、函数体等,它是一个完整的、独立的函数单位。 函数的声明的作用则是把函数的名字、函数类型以及形参的类型、个数和顺序通知编译系统,以便在调用该函数时系统按此进行对照检查。它不包含函数体。 # include void main() float add(float x, float y); *对被调用函数add的声明* float a,b,c; scanf(f,f,a,b); cadd(a,b); printf(sum is f n,c);float add(float ,float ) *函数首部* float ; /* 函数体 */ z; return(z); (1)如果被调用函数的定义出现在主调函数之前,可以不必加以声明。 (2) 如果已在文件的开头(在所有函数之前),已对本文件中所调用的函数进行了声明,则在各函数中不必对其所调用的函数再作声明 。 函数的嵌套调用(调用函数过程中,又调用另一个函数;不允许嵌套定义)递归函数(直接或间接地调用该函数本身):#include int age(int ) *求年龄的递归函数* int ; * 用作存放函数的返回值的变量 * if() ; else (); return();void main() printf(,age(3); 数组元素可以作为函数的实参,与用变量作实参一样,是单向传递,即“值传送”方式。 用数组名作函数参数,此时形参应当用数组名或用指针变量 ,传递的是数组首元素的地址。在一个函数内部定义的变量是内部变量,它只在本函数范围内有效,也就是说只有在本函数内才能使用它们,在此函数以外是不能使用这些变量的。这称为“局部变量”。 不同函数中可以使用相同名字的变量,它们代表不同的对象,互不干扰。形式参数也是局部变量。在一个函数内部,可以在复合语句中定义变量,这些变量只在本复合语句中有效(而不在整个函数内有效),这种复合语句也称为“分程序”或“程序块”。函数之外定义的变量称为外部变量,外部变量是全局变量(也称全程变量),它的有效范围为从定义变量的位置开始到本源文件结束。 在各个函数执行时都可能改变外部变量的值,程序容易出错。因此,要限制使用全局变量。局部变量的存储类别:auto变量: 调用该函数时系统会给它们分配存储空间,在函数调用结束时就自动释放这些存储空间,因此这类局部变量称为自动变量。(auto可以省略,默认情况下)静态局部变量:当函数中的局部变量的值在函数调用结束后不消失而保留原值时,该变量称为静态局部变量。用关键字static进行声明。(对静态局部变量是在编译时赋初值的,即只赋初值一次,在程序运行时它已有初值。以后每次调用函数时不再重新赋初值而只是保留上次函数调用结束时的值。)#include void main()int fac(int ); int ; for(;) printf(%!=,fac();int fac(int )static int ; /* 去掉static? */ *; return(); 寄存器变量( register):允许将局部变量的值放在CPU中的寄存器中,需要用时直接从寄存器取出参加运算,不必再到内存中去存取。由于对寄存器的存取速度远高于对内存的存取速度,因此这样做可以提高执行效率。(P194 7.9.2之后的内容不涉及。)1. #include int fun(int x, int y) x=2;y=x+y;return (y);void main() int i=3,j=4; j=fun(i,j); /* 去掉j= ? */ printf(“%d %d”,i,j);则程序的运行结果为 3 6 2、下列程序的运行结果是_2_#include int fun(int n) int s; if (n=1|n=2) s=2; else s=n-fun(n-1); return s;void main() printf(“%dn”,fun(5); getch();3. #include int X1=0,X2=0; /* X1和X2都是全局变量 */int a() int X2; X1=1; X2=2; /* X1是全局变量,X2是局部变量 */ void main() int X1=3; a();printf(%d %dn,X1,X2);/* 输出结果是3 0*/ /* X1是局部,X2都是全局变量 */ getch();4main函数中输入整型数组(数组长度可以是小于20的正整数),调用max_min函数(将数组中最大的元素与第一个元素交换,最小的元素与最后一个元素交换),接着在main函数中输出该数组。如:输入5 4 3 2 1 10 9 8 7 6 输出 10 4 3 2 6 5 9 8 7 1#include void max_min(int a,int n) int i,t,max,min; max=min=0 ; for(i=0;in;i+) if ( amaxai ) max=i; t=a0; a0=amax; amax=t; for(i=0;iai ) min=i; t=amin; amin=an-1; an-1=t; void main() int i,m,n,t,a20; scanf(%d,&n); for (i=0;in;i+) scanf(%d,&ai); max_min( a,n ); for (i=0;in;i+) printf(%d ,ai); getch();5编程练习:输入两个两位数的正整数a、b,调用函数fun实现:将a、b合并成一个整数放在c中,并返回(合并的方式是:将a数的十位和个位依次放在c数的千位和十位上,b数的十位和个位依次放在c数的个位和百位上)。#include int fun(int a,int b) int a_up,a_low

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论