(2)函数的返回值 16 函数的返回值是通过 return语句带回到主调函数的 return语句格式: return(表达式)或 return表达式; 或 return 功能:终止函数的运行,返回主调函数,若有返 回值,将返回值带回主调函数。 说明: ①若函数没有返回值, return语句可以省略 ② return语句中的表达式类型一般应和函数的类 型一致,如果不一致,系统自动将表达式类型转 换为函数类型 2005年3月
2005年3月 16 函数的返回值是通过return语句带回到主调函数的 功能:终止函数的运行,返回主调函数,若有返 回值,将返回值带回主调函数。 说明: ① 若函数没有返回值,return语句可以省略。 ② return语句中的表达式类型一般应和函数的类 型一致,如果不一致,系统自动将表达式类型转 换为函数类型。 ⑵ 函数的返回值 return 语句格式: return (表达式); 或 return 表达式 ; 或 return;
例78】计算并输出圆的面积。 s(int r) freturn 3. 14r*ro 自动转换 mant 为int型 f int r area; scanf(ood", &r) 程序运行情况如下: printf("%d\",s(r);12 思考 若要得到单精度实型的圆面积,程库液如何修改 2005年3月
2005年3月 17 【例7.8】计算并输出圆的面积。 s(int r) { return 3.14*r*r;} main( ) { int r,area; scanf("%d",&r); printf("%d\n",s(r)); } 自动转换 为int型 思考: 若要得到单精度实型的圆面积,程序应如何修改 程序运行情况如下: 2 12
72.4对被调函数的声明和函数原型 18 变量要先定义后使用, 函数也如此。即被调函数的 oid swap(int x, int y 定义要出现在主调函数的定min( 义之前。如sWap函数: 自。 也是整型)的定义出现在主/Wap(a2b); 允许整型函数(且参数 调函数之后。如max函数 main( 如果非整型函数在主训 c=max (a, b); 函数之后定义,则应在主调 函数中或主调函数之前对被 max(int x,int y)) 调函数进行声明 2005年3月
2005年3月 18 7.2.4 对被调函数的声明和函数原型 变量要先定义后使用, 函数也如此。即被调函数的 定义要出现在主调函数的定 义之前。如swap函数: 允许整型函数(且参数 也是整型)的定义出现在主 调函数之后。如max函数: 如果非整型函数在主调 函数之后定义,则应在主调 函数中或主调函数之前对被 调函数进行声明。 void swap(int x, int y) { …} main( ) { … swap(a,b); } main( ) { … c=max(a,b); } max(int x,int y) { …}
对被调函数进行声明的一般形式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( InInput expression: ) 对被调函 scanf(%of%oc%of, &a, &opr, &b); 数的声明 calc(a, b opr); void calc(float x, float y, char opr) i switch(opr) i case +' printf(%5. 2f%c%5.2f%6.2f\n" x, opr,, x+y);return; case - printf(%5.2f%c%05.2f=%6.2fn",x, opry, x-y);return; case * printf(%5.2f%c%05.2f=%6.2f\n",x, opr y,x*y);return; case / printf( %5.2f%c%5.2f%6.2fn",x, opry, x/y);return; default: printf( "Operatorerr! In");) 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"); } } 对被调函 数的声明 【例7.9】计算并输出两个数的和、差、积、商