C语言CPU——函数

函数是C语言的基本模块,通过对函数模块的调用实现特定的功能。

A>函数避免了过长的main函数

B>使代码更美观

C>是可读性更强!

博文内容

函数的理解

函数的定义——调颜料

函数的参数——元素

参数中的函数——回调函数

函数的进阶——递归

原色红白黑——库函数

综合的运用


#函数的 基础知识

  • 函数的理解

 函数并不只是数学那样的函数,一个值对另一个值的映射。在C语言里通俗的理解,函数就像是各种颜色。你可以通过不同颜色绘画一幅美丽的画。各种各样的颜色组成各种各样的画。对于函数的不同运用组成不同的程序。画图的颜料可以自己调。那么函数也可以自己定义。当然C语言里也有自己的库函数。是那些牛逼的大佬写的,可以我们调用头文件直接调用,方便快捷。就像一开始的红白蓝绿黑的基础颜色。

  • 函数的定义——调颜料

类型 + 函数命(随意定义) + 代码块 + 返回值

//C语言
//example
<1>int <3>example_c (<2>) {
     <代码块>
    <4>return 0;
}
//<1>这是类型。例如:char , int , void
//<2>这里是函数名称。随自己的兴趣
//<3>这里是形参。
//<4>这里是返回值
  • 函数的参数——元素

形参:函数括号里的参数。

实参:定义的变量。实实在在的存在,定义即分配空间。

调用:调用函数,就是使用函数。就是往画图里上色,每个地方的颜色要对应,头发是黑色,嘴巴是红色等。对于函数,对应的形参类型必须对应相应的实参类型。

//C语言
//例子
int example_c2(int num,int num1){//num   num1   形参
           int sum=0;
           sum=num+num1;
           return sum;  
}
void main(){
int x=2;//实参
int y=2;//实参
int temp=example(num,num1);
printf("两个数的和是:%d\n",temp);
}

 !!!注意!!!
 
一定要先定义或者声名,才能调用函数。就像颜色都没有,怎么上色。
函数对形参的改变是不会对实参进行改变的。

//c语言

void change(int a)//a是形参
{
       a += 1;
}

int main()
{
    int b = 3;//b是实参
    change(b);

}
//这里的 change(b);执行是这样
//    change(int a = b)
//    后面就是对 a 进行操作。这里是创建了一个临时变量。在change()调用完了,a也就销毁了
  • 参数中的函数——回调函数

当函数作为参数传给另一个函数的时候,这个成为参数的函数,就是回调函数。当然这个参数一定是是个指针。这只是函数指针在作祟…………。函数指针
来认识认识回调函数。

首先我们需要先定义一个类型,也就是一个函数指针类型。当然这个类型根据函数类型和函数参数列表进行区分。
它有两种实现方法:
《1》typedef 返回值类型 (*指针类型名称)(参数列表)
          —返回值类型:这是函数的返回值类型。是函数指针指向的函数的返回值类型
          —指针类型名称:我们定义的一个类型名称,如:int,char
如:
//返回值是char,参数列表是int和char
typedef char(*p_fun3)(int,char);
  《2》返回值类型 (*指针名称) (参数列表)
         
—返回值类型:指向的函数的返回值类型
------------------------------------------------------------------------------------------------------------------------------
总结:这样指针就可以根据参数列表和返回值不同来区分不同的函数。用typedef是因为我们用类型来定义一个函数指针。
          上面《1》是定义一个指针类型,然后在定义一个指针,《2》是直接定义一个指针

例子1:《1》
//函数返回值是char,参数列表是int和char的函数指针
typedef char(*p_fun3)(int, char);
//定义一个函数,它的返回值是char,参数列表是int和char
char fun3(int a, char c)
{
    printf("回调~~%d    %c\n",a,c);
    return c;
 }
//我们在另一个函数中把函数当成参数
void runx( int x, char c,p_fun3 fun)
{
    fun(x, c);
}
int fun(int x)
{
    printf("%d\n", x);
    return 0;
}
int main()
{
    runx(1, 'c', fun3);
    system("pause");
    return 0;
}
例子2:《2》
//函数返回值是int,参数列表是int
int (*p_fun)(int) =NULL
//对应的函数
int fun(int x)
{
    printf("%d\n", x);
    return 0;
}
int main()
{
     p_fun = &fun;//这里可以直接写成 run = fun;它会隐式类型转换
    p_fun(3);
   // 或者
   //(*p_fun)(3);
    system("pause");
    return 0;
}

  • 函数的进阶——递归

  • 》》》定义

递归的含义就是早函数体内调用自身。递归就像领导兴师问罪,领导找到班主任,班主任找到班长,班长找到学生,问请情况,依次返回,最后从领导那里完成整个解决的方式。

  • 》》》条件

存在限制条件,当满足这个限制条件的时候,递归便不再继续。
每次递归调用之后越来越接近这个限制条件

  • 》》》举例
//C语言

//错误的例子

int error(int x){
int y=0;
int z=error(y);   //没有出口,将不会停止
return z;
}

//正确的例子

int true(int x){
if(x==0){
retutn 0;
}
x--;
retutn true(x)+1;
}

  • 》》》运用

》》》递归实现函数实现n^k

//c语言
int power(int n,int pow) {
	if (pow==0) {
		return 1;
	}
	if (pow>=1) {
		if (pow==1) {
			return n;
		}
		return n*power(n,pow-1);
	}
	return 0;
}

》》》递归方式实现打印一个整数的每一位

//c语言
void print_x(int n) {
	if (n>=10){
		print_x(n/10);
	}
	printf("%d  ", n % 10);
}

》》》递归求第n个斐波那契数。

//c语言
int findX(int x) {
	if (x<3) {
		return 1;
	}
	else {
		return findX(x-1) + findX(x-2);
	}
}

》》》递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和

//c语言
int sum(int num) {
	if (num<10) {
		return num;
	}
	else {
		return sum(num/10)+num%10;
	}
}

》》》递归求字符串长度

//C语言
int recursive(char* str) {
	if (*str == '\0') {
		return 0;
	}
	else {
		return 1 + recursive(str+1);
	}
}
//非递归
int not_recursive(char* str) {
	char* p=str;
	int num = 0;
	while (*p!='\0') {
		++num;
		*p++;
	}
	return num;
}
  • 原色红白黑——库函数

  • 》》》库函数

大佬们写的函数

在写程序的时候,我们可以直接调用,实现不同的功能。正如使用原色红白黑等调出各种各样的颜色然后绘画出美丽的画卷。

  • 》》》常规
  1. strlen()=====>字符串长度——<string.h>
  2. Sleep()=====>睡眠函数,延迟输出——<windows.h>
  3. ststem()====>系统函数——<stdlib.h>
  4. printf()=====>输出函数——<stdio.h>
  5.                           ……
  6.                           ……
  • 》》》提示

                  库函数的使用和头文件参考

                 >>>>>>>>>>>>>请点击我

  • 》》》运用
//C语言
#include<stdio.h>
void main(){
printf("hello worldd");
}
  • 下面是调用的一个具体的综合的运用

                                                                                                                     请点击我

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值