第9章 函数
1.函数
典型的ANSI C函数定义形式:
返回类型 名称 (形参声明列表)
函数体
使用一个函数应该以下三个:
函数原型:例 int strbar(char a); 后面应该加上“ ; ”
函数调用:
函数定义:
传递值:如果要修改主调函数的值,应该使用指针。
返回值类型:如果返回值类型和声明的返回值类型不符,将会被转化
2.递归
定义:函数自己调用自己的调用过程。
用途:
求阶乘:
long rfact(int n) { long ans; if(n==0) ans=1; else ans=n*rfact(n-1); return ans; }
用二进制表示十进制整数
void rfact(int n) { int a; a=n%2; if(n>=2) rfact(n/2); printf("%d",a); return ; }
3.指针
查找地址:&运算符。
间接运算符:* 。
声明指针:
cahr * pi //指向char类型变量的指针
int *pc //指向int类型变量的指针
float *p //指向flaot类型的指针
指针是一种新的数据类型。
普通变量把 值 作为基本量,而将地址作为通过&运算符获得的派生量
指针变量把 地址 作为基本量,而将值作为通过*获得的派生量。
4.编程练习
5.p276页
#include<stdio.h> #include<stdbool.h> void larger(double *n,double *m);//输入两个数,将大值重新赋值给输入 int main (void) { double n,m; while (1) { scanf("%lf%lf",&n,&m); larger(&n,&m); printf("n=%lf,m=%lf\n",n,m); } getchar(); getchar(); return 0; } void larger(double *n,double *m) { if (*n>*m) { *m=*n; } else { *n=*m; } printf("n=%lf,m=%lf\n",*n,*m); return ; }
8.
#include<stdio.h> #include<math.h> double powers(double n,int m); int main (void) { double n; int m; scanf("%lf%d",&n,&m); printf("%.2lf",powers(n,m)); getchar(); getchar(); return 0; } double powers(double n,int m) { double j=1; if (m>0) { for (int i = 0; i <m; i++) { j=n*j; } } else if(m<0) { j=1.0/(powers(n,-m)); } else j=0; return j; }
9.
#include<stdio.h> int Fibonacci(int m); int Fibonacci_1(int m); int main (void) { int m; while (1) { scanf("%d",&m); // Fibonacci(m); Fibonacci_1(m); printf("第%d个fibonacci是%d\n",m,Fibonacci_1(m)); } getchar(); getchar(); return 0; } int Fibonacci(int m) { int f1=1,f2=1,num=0; if (m<3) { num=1; } else { for (int i = 2; i < m; i++) { num=f1+f2; int tmp=f2; f2=f1+f2; f1=tmp; } } return num; } int Fibonacci_1(int m) { int f1=1,f2=1,num=0; if (m>2) { num=Fibonacci_1(m-1)+Fibonacci_1(m-2); } else { num=1; } return num; }