函数的嵌套调用
例:求两个数的最小公倍数
分析:两个数公倍数等于这两个数之积再除以这两个数的最大公约数。
两个数最大公约数求法:用大数除以小数,取余,如果余数不为零,则除数变成被除数,余数变为除数,直到余数为0,此时的除数即为最大公约数。
//函数的嵌套使用
#include <stdio.h>
int gongyue(int x,int y)
{
int r,t;
if(x<y)
{
t=x;
x=y;
y=t;
}
while(r=x%y!=0)
{
x=y;
y=r;
}
return y;
}
int lcm(int m,int n)
{
int l;
l=m*n/gongyue(m,n);
return l;
}
int main()
{
int a,b,l;
printf("put two numcers:");
scanf("%d%d",&a,&b);
l=lcm(a,b);
printf("lcm=%d",l);
}
如果不先定义函数,也可以在主函数使用之前调用一下所定义的函数,也就是可以写成下面这种形式:
...
int lcm(int,int)
int gongyue(int,int)
int main()
.
.
.
不同函数定义可以使用不同的字符表示,对函数本身并无影响。
函数的递归使用
例:求一个数的阶乘
int jiecheng(int n)
{
if(n==0||n==1)
return 1;
return n*jiecheng(n-1);
}
int main()
{
int n;
scanf("%d",&n);
printf("%d!=%d",n,jiecheng(n));
}
3.求平均数
题目描述 输入一组整数,编写函数filter求出它们的平均值,并输出所有大于平均值的数。
输入格式 第一行,一个正整数n,表示一共输入n个数字(n<=100)
第二行,n个整数
输出格式 第一行,一个浮点数average,表示n个数的平均值(保留两位小数)
第二行,所有大于平均值的整数,每个数用空格隔开
输入示例 10
1 2 3 4 5 6 7 8 9 0
输出示例 4.50
5 6 7 8 9
#include <stdio.h>
#define N 100
int filter(int a[],int);
int main()
{
int a[N],n,t;
scanf("%d",&n);
printf("\n");
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
filter(a,n);
}
int filter(int a[],int n)
{
int i;
int t=0;
for( i=0;i<n;i++)
t+=a[i];
double aver=double(t)/n;
printf("%.2f\n",aver);
for (int i = 0; i < n; i++)
{
if (a[i] > aver)
printf("%d",a[i]);
}
}
写这个题是想说,在定义变量时,尽量为其赋初值,否则可能编译达不到我们想要的结果。另外就是注意函数数组的定义与引用。