(2)函数的返回值 16 函数的返回值是通过 return语句带回到主调函数的 return语句格式: return(表达式;或 return表达式; 或 return; 功能:终止函数的运行,返回主调函数,若有返 回值,将返回值带回主调函数。 说明: ①若函数没有返回值, return语句可以省略 ② return语句中的表达式类型一般应和函数的类 型一致,如果不一致,系统自动将表达式类型转 换为函数类型。 2005年3月
2005年3月 16 函数的返回值是通过return语句带回到主调函数的 如果不一致,系统自动将表达式类型转 换为函数类型
例78】计算并输出圆的面积 s(int r) ireturn 3.14rro 自动转换 man 为int型 i int rarea; scanf(od", &r) 程序运行情况如下 printf("%dn", S(r); 12 思考 若要得到单精废实型的圆面积,程冷泫如何修改 2005年3月
2005年3月 17 思考: 若要得到单精度实型的圆面积,程序应如何修改 程序运行情况如下: 2 12
72.4对被调函数的声明和函数原型 18 变量要先定义后使用, oid swap(int x, int y 函数也如此。即被调函数的 定义要出现在主调函数的定main() 义之前。如sWap函数: 也是整型)的定义出现在主}ap(a,b); 允许整型函数(且参数 SW 调函数之后。如max函数 main( 如果非整型函数在主词Cc=mx(a,b) 函数之后定义,则应在主调 函数中或主调函数之前对被 max(int x,int y 调函数进行声明。 2005年3月
2005年3月 18 void swap(int x, int y) { …} main( ) { … swap(a,b); }
对被调函数进行声明的一般形式10 函数类型函数名(参数类型1参数名1,…,) 或函数类型函数名(参数类型1,参数类型2,…); 第二种形式省略了参数名,此种形式也称为函数的原型。 思考 以下哪种情况需要在主调函数中对被调函数声明 >被调函数定义在前,主调函数定义在后。 主调函数定义在前,被调函数定义在后,且被调 函数的类型不是整型的。 被调函数定义在后,但被调函数的类型是整型。 2005年3月
2005年3月 19 函数类型 函数名(参数类型1 参数名1,…); 或 函数类型 函数名(参数类型1,参数类型2,…); 第二种形式省略了参数名,此种形式也称为函数的原型
【例79】计算并输出两个数的和、差、积、商。 main i void calc(float x, float y, char opr); float a, b: char opr; printf("liNput expression: 对被调函 scanf(%of%c%f", &a, &opr, &b); 数的声明 calc(a, b, opr); void calc(float x, float y, char opr) i switch(opr) f case +'e printf( %5.2f%oc%05.2f=%6.2f\n", x, opr, y, x+y); return; case - printf(%5.2f%c%05.2f%06.2f\n",, opr,y, x-y);return; case * printf( %5.2f%c%5.2f-906.2fn",x, opr, ],x*y); return; case printf(%05 default printf( Operator err! n);) 2005年3月
2005年3月 20 main( ) { void calc(float x,float y,char opr); float a,b; char opr; printf("\nInput expression:"); scanf("%f%c%f" ,&a,&opr,&b); calc(a,b,opr); } void calc(float x,float y,char opr) { switch(opr) { case '+':printf("%5.2f%c%5.2f=%6.2f\n" ,x,opr,y,x+y);return; case '-':printf("%5.2f%c%5.2f=%6.2f\n" ,x,opr,y,x-y);return; case '*':printf("%5.2f%c%5.2f=%6.2f\n" ,x,opr,y,x*y);return; case '/':printf("%5.2f%c%5.2f=%6.2f\n" ,x,opr,y,x/y);return; default :printf("Operator err! \n"); } } 对被调函 数的声明