在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);
代码语言:javascript复制#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: %dn", c);
return 0; // 直接结束程序
}
代码语言:javascript复制#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: %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;
}
代码语言:javascript复制#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("%dn", num);
return 0;
}
2.c
代码语言:javascript复制#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("0t");
}
}
void gear(int a,int b){
int c;
return c;
}
void stuff_it(double a,double *b){
return *b=a;
}
代码语言:javascript复制#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("最大值是:%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
代码语言:javascript复制#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("输出结果:%.6fn",sum);
return 0;
}
代码语言:javascript复制#include<stdio.h>
#include <strings.h>
#include <string.h>
void link(char a[],char b[]) {
// strlen(): 获取指定字符串的长度(不含'