函数的嵌套调用:函数内调用函数
#include <stdio.h>
int gcd(int n1, int n2);
int lcm(int n1, int n2);
int main()
{
int num1,num2;
int iGcd, iLcm; //最大公约数和最小公倍数
printf("please input two numbers:");
scanf("%d%d",&num1,&num2);
iGcd=gcd(num1, num2);
iLcm=lcm(num1,num2);
printf("the gcd is: %d\n",iGcd);
printf("the lcm is: %d\n",iLcm);
return 0;
}
int gcd(int n1, int n2)
{
int r;
while(n2!=0)/*利用辗除法,直到n2为0为止*/
{
r=n1%n2;
n1=n2;
n2=r;
}
return n1;
}
int lcm(int n1, int n2)
{
return n1*n2*gcd(n1, n2);
};
用弦截法求解方程
/*用弦截法求方程f(x)=x^3-5x^2+16x-80=0的根。*/
#include <stdio.h>
#include <math.h>
double f(double); //函数声明
double xpoint(double, double); //函数声明
double root(double, double); //函数声明
int main( )
{
double x1,x2,f1,f2,x;
do
{
printf("input x1,x2:");
scanf("%lf %lf", &x1, &x2);
f1=f(x1);
f2=f(x2);
}
while(f1*f2>=0); //保证f(x1)和f(x2)异号,(x1,x2)间有根
x=root(x1,x2);
printf("A root is %.5f\n", x);
return 0;
}
/*
功能:求(x1, x2)区间方程的实根
参数:两个浮点型值,表示x轴上两点,由主调函数保证f(x1)和f(x2)是异号
返回值:方程的根
*/
double root(double x1, double x2)
{
double x,y,y1;
y1=f(x1);
do
{
x=xpoint(x1,x2);
y=f(x);
if (y*y1>0)
{
y1=y;
x1=x;
}
else
x2=x;
}
while(fabs(y)>=0.00001);
return x;
}
/*
功能:求(x1, f(x1))和(x2, f(x2))的连线与x轴的交点x
参数:两个浮点型值,表示x轴上两点
返回值:交点的x轴坐标
*/
double xpoint(double x1, double x2)
{
double x;
x=(x1*f(x2)-x2*f(x1))/(f(x2)-f(x1));
return x;
}
/*
功能:求函数f(x)=x3-5x2+16x-80的值
参数:一个浮点型数,表示x轴上的一点
返回值:给定函数的值
*/
double f(double x)
{
double y;
y=x*x*x-5*x*x+16*x-80;
return y;
}