第七章函数分类
一、函数分类
1、主函数main() { }
2、库函数scanf printf getchar putchar sqrt pow(x,y) fabs
只知道功能是什么就可以,不用具体的了解内部结构。#include “math.h”
#include “ctype.h”字符函数
#include “string.h”字符串函数
#include “stdio.h”输入输出函数
#include “stdlib.h”动态分配和随机函数
3、自定义函数
用户根据自己的需要定义的函数,称为自定义函数,具体功能是完成一个操作/计算。
C程序的基本组成单位是函数。
一个可以执行程序,可以由多个函数组成,不管有多少的函数,总是从主函数开始执行,在主函数结束程序。
double sum(double x,double y)
{double z;
z=x+y;
return z;}
main()
{double a,b,c;
scanf(“%lf%lf”,&a,&b);3.4 5.9
c=sum(a,b);
printf(“%lf”,c);
}
二、自定义函数的定义
1、格式:
函数返回值的类型函数名(类型名形式参数1,类型名形式参数2,……..) 函数首部{定义部分
执行部分
} 函数体
int sum(int x,int y)形式参数
{int z;
z=x+y;
return z;}
说明:1)函数返回值的类型int(可以省略) float double char void(无值型)
2) 函数名是用户根据自己的需要定义的名字,见名知义.
3)( )不能省略,可以为空.为形式参数.个数应该和实际参数个一致.类型一致.
4){}为函数体,定义部分和执行部分.
void fun(int x,int y)
{if(x>y) return x;
else return y;
}
main()
{int x,y;
scanf(“%d%d”,&x,&y);
printf(“%d”, fun(x,y););
}
三、函数的调用
格式1:函数做为表达式的一部分出现.
max=fun(x,y);
printf(“%d ”, fun(x,y));
格式2:函数做为一条独立语句出现.
printf(“%d ”,a);
四、函数的返回值
格式: 1) return 表达式
2)return (表达式)
3)return ;
4)没有return
说明,一个函数中可以有多个return,不管有几个return,只有一个执行.
注意:1)函数必须选定义,后使用.返回值是int 或char 时除外.
2)若函数的定义位置在main()的下面,应该在main()上给该函数进行说明.
double fun(double a,double b)
double fun(double a,double b);
double fun(double x,double y);
double fun(double,double);
fun(int a,int b)
{int t;
t=a;a=b;b=t;
}
a b
a b
main()
{int a,b;
scanf(“%d%d”,&a,&b);
fun(a,b);
printf(“%d%d”,a,b);
}
7.4
int func(int a 13,int b 8)
{c=a+b;return c;}
main()
{int x=6,y=7,z=8,r;
r=func((x--,y++,5+8),z--);
printf(“%d\n”,r);
}
7.9
double sub(double x,double y,double z) {y=y-1.0;z=z+x;return z;}
main()
{double a=2.5,b=9.0;
Printf(“%f\n”,sub(b-a,a,a));
7.10
int fun2(int a,int b)
{int c;
c=(a*b)%3;return c;22*38 }
int fun1(int a 11,int b 19) {int c;
a+=a; 22
b+=b;38
c=fun2(a,b);
return c*c;
}
main()
{int x=11,y=19;
printf(“%d\n”,fun1(x,y)); }
int float double char sum(int a, int b) {return a+b;}
main() 入口
{int x=1,y=3,z;
z=sum(x,y);实际参数
printf(“%d”,z);
}出口
7.7
double f(int n) 2
{int i;double s;
s=1.0;
for(i=1;i<=n;i++) s+=1.0/i; i=2 s=2.5
return s;
}
main()
{int i,m=3;double a=0.0;
for(i=0;i printf(“%f\n”,a); } i=0 a=a+f(0)=0.0+1.0=1.0 i=1 a=a+f(1)=1.0+2.0=3.0 i=2 a=a+f(2)=3.0+2.5=5.5 i=3 7.8 unsigned fun6(unsigned num 26) {unsigned k=1; do {k*=num%10;num/=10;}k=12;num=0; while(num); return k; } main() {unsigned n=26; printf(“%d \n”,fun6(n)); } 7.12 x y 23 double fun(double x 2,int y 3) {int i;double z=1.0; for(i=1;i<=y;i++) z=z*x; return z; } I=4 i<=3 z=8 ∑==n k k s 0! s=0!+1!+2!+….+n ! long f(int n) {int i;long s; s=1; for(i=1;i<=n;i++) s=s*i; return s; } main() {long s;int k,n; scanf(“%d”,&n);10 s=0; for(k=0;k<=n;k++) s=s+f(k); printf(“%ld \n”,s); } 通项式 +-+-=4*3*23*221x x x x x x f