在C语言知识体系中,
数据类型 ---》 点
运算符 ---》 线
逻辑结构 ---》 面
函数 ---》 体
=========================== 1.函数(Function)的含义 ===========================
C语言中的函数分类:
- 系统函数(预定义函数,编程者直接使用即可)自定义函数(编程者根据需要,自行编写)
- 主函数main(程序的入口)功能函数(子函数)
// 子函数作用:计算2个数的和
int func_sum(int n1, int n2)
{
int n3 = n1+n2;
return n3; // 结束当前函数,返回调用处
}
// int:返回值。
// func_sum:函数名
// (int n1, int n2):形参列表(形式参数)
// {...}:函数体
备注:
- 如果需要使用系统函数,可以查看他们的帮助手册:man手册
(一般函数位于第2本,或第3本)
可使用man -f printf,查看当前函数位于哪本手册。
=========================== 2.自定义函数的使用 ===========================
一般形式:
备注:
- 返回值 + 函数名 + 形参列表,共同组成了函数头。形参只对函数内有效。如果实际情况下,子函数不需要传参,或者不需要返回值
返回值、形参列表中,可以使用空类型 void
- 如果出现下列警告:
出现原因:隐式声明。
解决方法:在使用前进行函数声明。
出现原因:红框内的函数未定义。
解决方法:把缺失的函数编写完成即可。
出现原因:缺失了分号;
=========================== 3.递归函数===========================
特点:
- 自己调用自己。递归函数一般来说,代码量很少,但是功能非常强大。适用场景:
- 结束条件算式的前一式和后一式存在等式关系。
例子:阶乘问题。
5! = 5*4*3*2*1
6! = 6*5*4*3*2*1 = 6*5!
a.结束条件
func_jc(1) = 1 --->当n等于1时,结果直接返回1
b.算式的前一式和后一式存在等式关系。
6! = 6*5!
func_jc(6) = 6*func_jc(5);
结论---> func_jc(n) = n*func_jc(n-1);
#include// 子函数作用:计算2个数的和 int func_sum(int n1, int n2) { int n3 = n1+n2; return n3; // 结束当前函数,返回调用处 } // int:返回值。 // func_sum:函数名 // (int n1, int n2):形参列表(形式参数) // {...}:函数体 int main() { int a=100, b=200; int c = func_sum(a, b); // 子函数的调用。(a, b)称为实参的传参(实际参数的传递) printf("c: %dn", c); return 0; // 直接结束程序 }
#include// 函数的声明 // 传递1个int,计算它平方,返回int int func_square(int a); // 传递2个int,计算他们的差值,返回int int func_sub(int a, int b); // 打印函数 void func_print(void); int main() { func_print(); int a=10, b=5; // int c1 = func_square(a); // int c2 = func_square(b); // int c = func_sub(c1, c2); // printf("square: %dn", c); int c = func_sub(func_square(a), func_square(b)); printf("square: %dn", c); return 0; } // 打印函数 void func_print(void) { printf("hellon"); printf("hellon"); printf("hellon"); printf("hellon"); printf("hellon"); printf("hellon"); printf("hellon"); printf("hellon"); } // 传递1个int,计算它平方,返回int int func_square(int a) { return a*a; } // 传递2个int,计算他们的差值,返回int int func_sub(int a, int b) { return a-b; }
#include// 递归计算传参的阶乘 int func_jc(int n) { // a.结束条件 if(n == 1) return 1; // b.算式的前一式和后一式存在等式关系。 return n*func_jc(n-1); } int main() { int a = 4; int num = func_jc(a); printf("%dn", num); return 0; }
2.c
#includevoid donut(int a); void gear(int a,int b); void stuff_it(double a,double *b); int main() { int a,b; double c; double *d; donut( a); gear( a, b); stuff_it(c,&c); return 0; } void donut(int a){ for (int i = 0; i < a; i++) { printf("0t"); } } void gear(int a,int b){ int c; return c; } void stuff_it(double a,double *b){ return *b=a; }
#includevoid max( int a,int b ,int c) { int max; if(a>b){ max=a; if(a>c) max=a; else max=c; } if(b>c){ max=b; if(b>a) max=b; else max=a; } if(c>a){ max=c; if(c>b) max=c; else max=b; } printf("最大值是:%dn",max); } int main() { printf("输入3个整型数"); int a,b,c; scanf("%d%d%d",&a,&b,&c); max(a,b,c); printf("n"); return 0; }
4.c
#includefloat my_power(float a,int b) { int sum1 = 1; float sum2 = 1.0; if( b > 0 ) { for( int i = 0; i < b; i++ ) { sum1 *= a; } return sum1; } else if( b == 0) return 1; else { for( int i = 0; i < -b ; i++) { sum2 *= (float)1.00 / a; } return sum2; } } int main() { int N; float a,sum; printf("输入mypower(___,___)内两个数n"); scanf("%f %d", &a, &N); sum = my_power(a,N); printf("输出结果:%.6fn",sum); return 0; }
#include#include #include void link(char a[],char b[]) { // strlen(): 获取指定字符串的长度(不含' ') char t[strlen(a)-1 + strlen(b) +1]; // 去掉'n' 加上' ' int i; for(i=0; i 6.c
#include#include void Fibonacci(int n){ int a = 1; int b = 1; int c = 0; printf("Fibonacci:n"); for (int i = 0; i < n - 2;i++) { c = a + b; a = b; b = c; printf("%dt", c); } } int main() { int n ; printf("输入一个数计算Fibonaccin"); scanf("%d", &n);while(getchar()!='n'); Fibonacci(n); printf("n"); return 0; } 7.c
#includevoid remoSpace(char character[]); int main() { printf("请输入带空格的字符串:"); char character[120]; fgets (character , 50 , stdin); remoSpace(character); printf("%s",character); return 0; } void remoSpace(char character[]) { int i = 0, j = 0; for( i = 0;character[i] != ' ';i++) { if(character[i] == ' ') { for( j = i; character[j] != ' '; j++) { character[j] = character[j+1]; } i--; } } }



