定义函数:
1.划分代码到不同的函数中是由您来决定的,但在逻辑上,通常是根据每个函数执行一个特定的任务来进行的。
2.调用函数 函数名(参数值);
3.执行顺序:从main中开始,在main中结束
4.函数不能嵌套定义,可以嵌套使用
5.可以有多个return,也可以没有
#include<stdio.h>
double y(double x)
{
//编写函数y时,可直接用return,记得要写return
return x*x+7*x-4;
}
int main()
{
//y(1.5)为函数调用
//将1.5赋给y函数中的x
printf("x\ty\n%.2f\t%.2f\n",1.5,y(1.5));
}
//求y(-10)-y(10)的值,步长为1
#include<stdio.h>
double y(double x)
{
//编写函数y时,可直接用return,记得要写return
return x*x+7*x-4;
}
int main()
{
//注意定义数的数据类型是int还是double
int i;
printf("x\ty\n");
for(i=-10;i<=10;i=i+1)
printf("%d\t%.2f\n",i,y(i));
}
//
#include<stdio.h>
double y(double x)
{
return (x+1)+(x+1);
}
int main()
{
double i;
printf("x\ty\n");
for(i=-1;i<=1;i=i+0.1)
printf("%.2f\t%.2f\n",i,y(i));
}
//求1/1,1/(1+2),1/(1+2+3),1/(1+2+3+4)...
#include<stdio.h>
//累加功能
int y(double n)
{//记得在main中为n指定一个数,不然没有输出
int i,sum=0;
for(i=1;i<=n;i++)
sum+=i;
return sum;
}
int main()
{
double s=0;
int i,n;
scanf("%d",&n);
for(i=1;i<=n;i++)
s+=1.0/y(i);
printf("%.2f\n",s);
}
#include<stdio.h>
//最大值功能
int max(int x,int y)
{
return x>y?x:y;
}
int main()
{
int n1,n2,n3;
n1=6;
n2=8;
n3=0;
//max(int x,int y)和max(n3,max(n1,n2)的参数要对应
//先执行max(6,8)
//再执行max(0,8))
//结果为8
printf("%d\n",max(n3,max(n1,n2)));
}
//计算cos(x)的泰勒展开式
//=1-x*x/2+x*x*x*x/4的阶乘+...
#include<stdio.h>
double fact(int n)
{
int i;
double s=1;
for(i=1;i<=n;i++)
s*=i;
return(s);
}
//计算x的n次方
double xn(double x,int n)
{
int i;
double s=1;
for(i=1;i<=n;i++)
s*=x;//累乘x
return s;
}
double funcos(double x,double e)
{
int flag=1,i=1;
double s=0;
double item;
item=xn(x,0)/fact(0);//分子和分母结合
while(item>=e)//e为误差
{
s+=flag*item;
flag=-flag;//一正一负循环
item=xn(x,2*i)/fact(2*i);
i++;
}
return s;
}
int main()
{
printf("%f\n",funcos(3.1415926,0.0000001));
}
#include<stdio.h>
//实现累加的功能
int fact(int n)
{
int i,sum=0;
for(i=1;i<=n;i++)
sum+=i;
return sum;
}
int main()
{//进入fact,将5传值给n,然后进行运算
printf("%d\n",fact(5));//结果为15
}
/*用函数输出完数*/
#include<stdio.h>
int isPerfect(int n)
{
int i,sum=0;
for(i=1;i<n;i++)
{//将所有因子相加
if(n%i==0)
sum+=i;
}
//如果数=所有因子相加,则返回1
if(sum==n)
return 1;
else
return 0;
}
int main()
{
int n;
int a,b;
//输入判断的数从a到b
scanf("%d%d",&a,&b);
for(n=a;n<=b;n++)
{//调用函数 函数名(参数)
if(isPerfect(n))
printf("%d\n",n);
}
return 0;
}
//递归-累加到5
#include<stdio.h>
int f(int n)
{
if(n==1)
return 1;
else
return n+f(n-1);
}
int main()
{//结果为15
int s;
s=f(5);//n赋值为5
printf("%d\n",s);
}
递归小练习
例1
求f(5)的值:答案为8
#include<stdio.h>
int main()
{
printf("%d",f(5));
}
int f(int k)
{
if(k==0||k==1)
return 1;//f(1)=f(0)=1
else
return f(k-1)+f(k-2);
}
分析:先从要求的函数展开到x=1(已知),然后从最下层算到最上层。
例二
下列函数调用f(2,‘1’,‘2’,‘3’)的结果是 1->3#1->2#3->2#
void f(int n,char a,char b,char c)
{
if(n==1)
printf("%c->%c#",a,b);
else
{
f(n-1,a,c,b);
printf("%c->%c#",a,b);
f(n-1,c,b,a);
}
}