C 函数的定义与调用及例题

一,函数的定义与调用

· 在C语言中,函数(Function)是一个处理过程,即一段程序的工作放在函数中进行,函数结束时可以携带或不带处理结果。
· C语言程序处理过程全部都是以函数形式出现,最简单的程序至少也有一个main函数。
·从使用的角度看:标准函数(库函数)、用户自定义函数。

1 函数的定义
(1)函数的类型
·无参函数:函数的定义无参数说明
void wellcom( )
{
printf(“wellcom into C world!”);
}

·有参函数:定义的参数有一个或一个以上的参数
int max (int x,int y)
{
int z;
z = x > y ? x : y;
return( z );
}

·空函数:当定义的函数既无参数也无执行语句。空函数被调用时,什么也不做立即返回其调用函数。
(2).函数定义的一般形式
函数类型 函数名( 类型名 形式参数1,… )
{
内部变量说明语句
执行语句序列
}
2.函数各部分作用
(1)函数的类型
函数的类型即函数的返回值类型。若函数不提供返回值,则可定义其类型为: void。
(2) 函数名
函数名又称函数标识符。遵循C语语言标识符的规定;函数名要反映函数完成的功能。
(3)参数
参数在函数名后( )内,由一个或多个变量和类型组成。参数中的变量称为形式参数, 简称形参。必须指定类型。若没有形参,则称为无参函数,其后“( )”不能省略。
3.函数体
函数体包括变量定义和执行语句序列。体现函数要完成的功能,一般有返回语句。返回语句是通过return语句带回到main主调函数。
return 语句格式:
return (表达式); 或 return 表达式 ; 或 return;
功能:终止函数的运行,将返回值带回主调函数。
① 若函数没有返回值,return语句可以省略。
② return返回值类型和函数类型一致。
2.函数的调用
调用原则:主函数main调用其它函数,其它函数也可相互调用;如果是先调用,后定义,那么在调用之前要先行声明。
函数的声明 :
一般形式:
函数类型 函数名(类型1 参数名1,
                类型2 参数名2,…… );
例:int max (int x, int y, int z);
函数的调用 :
一般形式如下:
                函数名(参数名1,参数名2,…… );
例:y=max(x, y, z);
调用语句:c=max (a,b);
定义语句:int max (int x,int y)
·注意:当实际参数的个数、次序、类型与形式参数的个数、次序、类型不一致时,系统并不提示错误,后果却难以预测。
例:
1,三个数中寻求最大的值
定义的max函数在main的前面就不需要在声明。只需要调用就可以了。
#include <stdio.h>
int max(int a,int b)
{ int y;
y=(a>b)?a:b;
return y;
}
main()
{ int x,y,z,m;
scanf("%d,%d,%d",&x,&y,&z);
m=max(x,y);
printf(“max1=%d\n”,m);
m=max(m,z);
printf(“max2=%d\n”,m);
}
运行结果:
2,4,8
max1=4
max2=8
2,计算x的n次方
#include “stdio.h”
main( )
{ float x, y;
int n;
float power (float x, int n);
scanf("%f,%d", &x, &n);
y=power(x,n);
printf("%8.2f",y );}
float power(float x,int n)
{ int i;
float t=1;
for (i=1;i<=n;i++)
t=t*x;
return t; }
运行结果:
3,3
27.00
3.求1!+2!+3!+…+10!
#include <stdio.h>
long mm(int n)
{ long t=1;
int i;
for (i=1;i<=n;i++)
t=t * i;
return t;
}
main( )
{ int i;
long s=0;
long mm(int n);
for(i=1;i<=10;i++)
s=s+mm(i);
printf("\n%ld",s);
}
运行结果:
4037913

3.参数的传递
·函数的参数分为形式参数和实际参数
·形式参数:
在定义函数时,函数名后面括号中的变量名称为形式参数
·实际参数:
主函数中调用一个函数时,函数名后面括号中的参数称为实际参数
函数参数说明:
·实际参数是有具体的值,形式参数在函数中是变量名,它们类型必须匹配。
·实参与形参的类型必须一致,个数必须相同。
·实参向形参的数据传递是“值传递”,单向传递,只由实参传给形参,而不能由形参传回给实参。
·在函数调用过程中,形参的值如果发生改变,并不会改变实参的值。
例4: 求任意两个整数的阶乘之和。
#include <stdio.h>
main( )
{ int m1,m2;
long result;
long fac(int n); //声明fac函数
scanf("%d,%d",&m1,&m2);
result=fac(m1)+fac(m2); //调用fac函数
printf("%d!+%d!=%ld\n",m1,m2,result);
}
long fac (int n) //定义函数fac,其功能是求n!
{ int i;
long r=1; //注意r的初始化值为1
for(i=1;i<=n;i++)
r=r*i;
return r; //返回结果给result
}
运行结果:
3,4
3!+4!=30

4课后练习
1.有如下程序
int func(int a,int b)
{ return(a+b); }

main( )
{ int x=2,y=5,z=8,r;
r=func(func(x,y),z);
printf(“%\d\n”,r);
}
该程序的输出的结果是 ( C )。
(A) 12 (B) 13 ( C) 14 (D) 15
2.下面程序的输出结果是 (7)
#include <stdio.h>
fun( int x)
{ int p;
if( x== 0||x==1) return(3);
p=x-fun( x-2);
return p;
}

main()
{ printf( “%d\n”, fun(9)); }
3.下面程序的输出是 (9)
long fun5(int n)
{ long s;
if((n == 1)||(n == 2))
s=2;
else
s=n+fun5(n-1);
return(s); }
main()
{ long x;
x=fun5(4);
printf("%ld\n",x); }
4.请读程序:
#include<stdio.h>
func( int a, int b)
{ int c;
c=a+b;
return c; }
main()
{ int x=6, y=7, z=8, r;
r=func(( x–,y==x+y),z–);
printf("%d\n",r); }
上面程序的输出结果是( A )。
(A) 8 (B) 20 © 21 (D) 31

  • 7
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值