在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 <stdio.h> // 子函数作用:计算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: %d\n", c); return 0; // 直接结束程序 }
#include <stdio.h> // 函数的声明 // 传递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: %d\n", c); int c = func_sub(func_square(a), func_square(b)); printf("square: %d\n", c); return 0; } // 打印函数 void func_print(void) { printf("hello\n"); printf("hello\n"); printf("hello\n"); printf("hello\n"); printf("hello\n"); printf("hello\n"); printf("hello\n"); printf("hello\n"); } // 传递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 <stdio.h> // 递归计算传参的阶乘 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("%d\n", num); return 0; }
2.c
#include<stdio.h> void 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("0\t"); } } void gear(int a,int b){ int c; return c; } void stuff_it(double a,double *b){ return *b=a; }
#include<stdio.h> void 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("最大值是:%d\n",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
#include <stdio.h> float 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("输出结果:%.6f\n",sum); return 0; }
#include<stdio.h> #include <strings.h> #include <string.h> void link(char a[],char b[]) { // strlen(): 获取指定字符串的长度(不含'\0') char t[strlen(a)-1 + strlen(b) +1]; // 去掉'\n' 加上'\0' int i; for(i=0; i<strlen(a)-1; i++) { t[i] = a[i]; } int j; for(j=0; j<strlen(b)+1; j++, i++) { t[i] = b[j]; } printf("合并后: %s", t); } int main() { char a[100],b[100]; printf("输入第一个字符串\n"); fgets(a, 100, stdin); //scanf("%s",&a); printf("输入第二个字符串\n"); // scanf("%c",&b); fgets(b, 100, stdin); // printf("%s",b); link(a,b); return 0; }
6.c
#include <stdio.h> #include <stdlib.h> 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("%d\t", c); } } int main() { int n ; printf("输入一个数计算Fibonacci\n"); scanf("%d", &n);while(getchar()!='\n'); Fibonacci(n); printf("\n"); return 0; }
7.c
#include <stdio.h> void 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] != '\0';i++) { if(character[i] == ' ') { for( j = i; character[j] != '\0'; j++) { character[j] = character[j+1]; } i--; } } }