实参和形参间的数据传递【例7.2】输入两个整数,要求输出其中值较大者。要求用函数来找到大数#include<stdio.h>intmax(intx.inty)//定义max函数,有两个参数int main()//对max函数的声明int z;1/定义临时变量zint max(int x,int y);3int a,b,c;z=x>y?xy.//把x和y中大者赋给zprintf("pleaseentertwointegernumbers:")://提示输入数据retum(z)://把z作为max函数的值带回main函数scanf(%d.%d",&a.&b)://输入两个整数1CAWINDOWSsystem32)cmd.exe口c=max(a.b)//调用max函数,有两个实参。大数赋给变量cleaseentertwo integernumbers:12,-34printf("maxis%d/n".c)://输出大数caxis_12请按任意键继续retum 0:)定义函数,名为max,函数类型为int。指定两个形参x和y.形参的类型为int。(main函数)c=max(a.b)主函数中包含了一个函数调用max(a.b)。max后面括号内的a和b是实参。a和bintmax(intx.inty)(max函数)是在main函数中定义的变量,x和y是函数max的形式参数。通过函数调用,在intz:两个函数之间发生数据传递,实参a和b的值传递给形参x和y,在max函数中把z=x>y?xy.x和y中的大者赋给变量z.z的值作为函数值返回main函数,赋给变量c。retum(z):在调用函数过程中发生的实参与形参间的数据传递称为虚实结合
实参和形参间的数据传递 【例7.2】输入两个整数,要求输出其中值较大者。要求用函数来找到大数。 #include <stdio.h> int main() { int max(int x,int y); //对max函数的声明 int a,b,c; printf("please enter two integer numbers:"); //提示输入数据 scanf("%d,%d",&a,&b); //输入两个整数 c=max(a,b); //调用max函数,有两个实参。大数赋给变量c printf("max is %d\n",c); //输出大数c return 0; } int max(int x,int y) //定义max函数,有两个参数 { int z; //定义临时变量z z=x>y?x:y; //把x和y中大者赋给z return(z); //把z作为max函数的值带回main函数 } 定义函数,名为max,函数类型为int。指定两个形参x和y,形参的类型为int。 主函数中包含了一个函数调用max(a,b)。max后面括号内的a和b是实参。a和b 是在main函数中定义的变量,x和y是函数max的形式参数。通过函数调用,在 两个函数之间发生数据传递,实参a和b的值传递给形参x和y,在max函数中把 x和y中的大者赋给变量z,z的值作为函数值返回main函数,赋给变量c。 c=max(a,b); (main函数) int max(int x,int y) (max函数) { int z; z=x>y?x:y; return(z); } 在调用函数过程中发生的实参与形参间的数据传递称为“虚实结合
函数调用的过程(1)在定义函数中指定的形参,在未出现函数调用时,它们并不占内存中的存储单元。在发生函数调用时函数的形参才被临时分配内存单元。(2)将实参的值传递给对应形参。(3)在执行函数期间,由于形参已经有值,就可以利用形参进行有关的运算。(4)通过return语句将函数值带回到主调函数。应当注意返回值的类型与函数类型一致。如果函数不需要返回值,则不需要return语句。这时函数的类型应定义为void类型。(5)调用结束,形参单元被释放。注意:实参单元仍保留并维持原值,没有改变。如果在执行一个被调用函数时,形参的值发生改变,不会改变主调函数的实参的值。因为实参与形参是两个不同的存储单元。实参向形参的数据传递是值传递”,单向传递,只能由实参传给形参,而不能由形参传给实参。实参和形参在内存中占注意有不同的存储单元,实参无法得到形参的值
函数调用的过程 (1) 在定义函数中指定的形参,在未出现函数调用时,它们并不占内存中的存储单元。在发生函数调用时, 函数的形参才被临时分配内存单元。 (2) 将实参的值传递给对应形参。 (3) 在执行函数期间,由于形参已经有值,就可以利用形参进行有关的运算。 (4) 通过return语句将函数值带回到主调函数。应当注意返回值的类型与函数类型一致。如果函数不需要返 回值,则不需要return语句。这时函数的类型应定义为void类型。 (5) 调用结束,形参单元被释放。注意: 实参单元仍保留并维持原值,没有改变。如果在执行一个被调用函 数时,形参的值发生改变,不会改变主调函数的实参的值。因为实参与形参是两个不同的存储单元。 注意 • 实参向形参的数据传递是“值传递”,单向传递,只能由实参传给形参,而不能由形参传给实参。实参和形参在内存中占 有不同的存储单元,实参无法得到形参的值
函数的返回值通常,希望通过函数调用使主调函数能得到一个确定的值,这就是函数值(函数的返回值)。(1)函数的返回值是通过函数中的return语句获得的。一个函数中可以有一个以上的return语句,执行到哪一个return语句,哪一个return语句就起作用。return语句后面的括号可以不要,如returnz:与"return(z):"等价。return后面的值可以是一个表达式。intintmax (float x, floaty)//函数值为整型(2)函数值的类型。函数值的类型在定义函数时指定。charletter(charc1,charc2)//函数值为字符型doublemin(intx,inty)//函数值为双精度型(3)在定义函数时指定的函数类型一般应该和return语句中的表达式类型一致。如果函数值的类型和return语句中表达式的值不一致,则以函数类型为准。对数值型数据,可以自动进行类型转换。即函数类型决定返回值的类型。(4)对于不带回值的函数,应当用定义函数为oid类型”(或称空类型”)。这样,系统就保证不使函数带回任何值,即禁止在调用函数中使用被调用函数的返回值。此时在函数体中不得出现return语句
函数的返回值 (1) 函数的返回值是通过函数中的return语句获得的。一个函数中可以有一个以上的return语句,执行到哪 一个return语句,哪一个return语句就起作用。return语句后面的括号可以不要,如 “return z; ”与 “return(z);”等价。return后面的值可以是一个表达式。 (2) 函数值的类型。函数值的类型在定义函数时指定。 (3) 在定义函数时指定的函数类型一般应该和return语句中的表达式类型一致。 如果函数值的类型和return语句中表达式的值不一致,则以函数类型为准。对数值型数据,可以自动进行 类型转换。即函数类型决定返回值的类型。 (4) 对于不带回值的函数,应当用定义函数为 “void类型 ”(或称 “空类型 ”)。这样,系统就保证不使 函数带回任何值,即禁止在调用函数中使用被调用函数的返回值。此时在函数体中不得出现return语句。 通常,希望通过函数调用使主调函数能得到一个确定的值,这就是函数值(函数的返回值)。 int max (float x,float y) //函数值为整型 char letter (char c1,char c2) //函数值为字符型 double min (int x,int y) //函数值为双精度型
函数的返回值(例7.3】将例7.2稍作改动,将在max函数中定义的变量z改为float型函数返回值的类型与指定的函数类型不同,分析其处理方法。#include<stdio.h>int max(floatx,floaty)tint main()float z;intmax(floatx,floaty)//z为实型变量floata,b:z=x>y?xy:int c;return(z):scanf("%f.%f"&a,&b):c=max(a,b):C:WINDOWSisystem32/cmd.exe口Xprintf("max is %d\n",c);十return 0:]青按在意键继续max函数的形参是float型,实参也是float型,在main函数中输入给a和b的值是1.5和2.6。在调用max(a.b)时,把a和b的值1.5和2.6传递给形参x和y。执行函数max中的条件表达式2=x>y?xy使得变量z得到的值为2.6。现在出现了矛盾:函数定义为int型而retum语句中的z为float型,要把z的值作为函数的返回值,二者不一致。怎样处理呢?按赋值规则处理,先将z的值转换为int型,得到2,它就是函数得到的返回值。如果将main函数中的c改为float型,用%f格式符输出,输出2.000000。因为调用max函数得到的是int型,函数值为整数2
函数的返回值 【例7.3】将例7.2稍作改动,将在max函数中定义的变量z改为float型。 函数返回值的类型与指定的函数类型不同,分析其处理方法。 max函数的形参是float型,实参也是float型,在main函数中输入给a和b的值是1.5和2.6。在调用max(a,b)时,把a和b的值1.5和2.6 传递给形参x和y。执行函数max中的条件表达式“z=x>y?x:y”,使得变量z得到的值为2.6。现在出现了矛盾: 函数定义为int型, 而return语句中的z为float型,要把z的值作为函数的返回值,二者不一致。 怎样处理呢?按赋值规则处理,先将z的值转换为int型,得到2,它就是函数得到的返回值。 如果将main函数中的c改为float型,用%f格式符输出,输出2.000000。因为调用max函数得到的是int型,函数值为整数2。 #include <stdio.h> int main() { int max(float x,float y); float a,b; int c; scanf("%f,%f",&a,&b); c=max(a,b); printf("max is %d\n",c); return 0; } int max(float x,float y) { float z; //z为实型变量 z=x>y?x:y; return(z); }
对被调用函数的声明和函数原型在一个函数中调用另一个函数(即被调用函数)需要具备如下条件(1)首先被调用的函数必须是已经定义的函数(是库函数或用户自己定义的函数)。(2)如果使用库函数,应该在本文件开头用#include指令将调用有关库函数时所需用到的信息“包含”到本文件中来。(3)如果使用用户自己定义的函数,而该函数的位置在调用它的函数(即主调函数)的后面(在同一个文件中),应该在主调函数中对被调用的函数作声明(declaration)。声明的作用是把函数名、函数参数的个数和参数类型等信息通知编译系统,以便在遇到函数调用时,编译系统能正确识别函数并检查调用是否合法
对被调用函数的声明和函数原型 在一个函数中调用另一个函数(即被调用函数)需要具备如下条件: (1) 首先被调用的函数必须是已经定义的函数(是库函数或用户自己定义的函数)。 (2) 如果使用库函数,应该在本文件开头用#include指令将调用有关库函数时所需用到的信息 “包含”到本文件中来。 (3) 如果使用用户自己定义的函数,而该函数的位置在调用它的函数(即主调函数)的后面(在 同一个文件中),应该在主调函数中对被调用的函数作声明(declaration)。声明的作用是把函数 名、函数参数的个数和参数类型等信息通知编译系统,以便在遇到函数调用时,编译系统能正 确识别函数并检查调用是否合法