传送门“函数”

时间:2021-07-23 00:54:34

传送门“函数”今日份学习“函数”

本文简介:

了解C语言中的函数,如何有条理的使用创建函数,分别对函数的调用函数的嵌套调用函数的链式访问函数的递归函数的迭代进行一个概念性的了解。

一,函数

此函数非彼函数,不是跟数学函数一样,它被创造是计算机用来专门完成某个事情的,举个????:我们所熟悉的函数“printf”它就是专门的输出函数,将我们想的输出的数据打印到屏幕上。

分类:
????库函数:C语言本身所提供的函数(“printf”,"scanf","strcpy","rand","srand".......)

简单的介绍几个:

strcpy()函数,实现字符串拷贝

结构:传送门“函数”

   ????返回字符地址 ????拷贝字符串的目的地????拷贝字符的源地址

举个????:

#include<stdio.h>
#include<string.h>
int main()
{
char arr1[]="abcd";
char arr2[10];
strcpy(arr2,arr1);//将arr1的内容拷贝到arr2中
printf("arr2:%s",arr2); //打印arr2是否拷贝成功
return 0;
}

传送门“函数”感觉是不是很方便

memset()函数,将字符串前面N个字符设置成特定的值

结构:传送门“函数”

   ????返回空指针  ????要改的字符串????设为什么字符????设置多少

????:

#include<stdio.h>
#include<string.h>
int main()
{
char arr1[] = "abcdefg";
memset(arr1,'i',4);//将arr1中前4个字符都设置为'i'
printf("arr1:%s\n", arr1); //看是否为打印成"iiiiefg"
return 0;
}

传送门“函数”

是不是感觉很好玩~

当然除了C语言库中自带的函数,我们自己也可以创建函数供我们使用。

????自定义函数:我们自己创建的函数

创建函数的格式:ret-type fun-name(paral)

     ????返回值  ????函数名  ????函数参数

 ????:创建加法函数 

int ADD(int x,int y)
{
int z=x+y;
return z;
}

测试一下:

#include<stdio.h>
#include<string.h>
int ADD(int x,int y)//自定义的加法函数
{
int z=x+y;
return z;
}
int main()
{
int a=10;
int b=20;
int c=0;
c=ADD(a,b);//将a,b的值传过去
printf("a+b=%d\n",c);
return 0;
}

传送门“函数”看起来很好用????

概括:

ADD(a,b);//这里是函数的实参,将a,b的值进行传输
int ADD(int x,int y)这里是函数的行参,用x,y分别接收a,b的值

实参:真实传给函数的参数:常量,变量,表达式,函数且具有确定的值

形参:接收实参的变量。

注意事项:

函数的实参只会将值进行传导给函数的形参,而形参只是实参的一份临时拷贝并不会改变实参原来的值。

函数的调用:

1.传值调用:将实参的值给形参,同时开辟一个新的内存地址,对形参改变不会改变实参

2.传址调用:将实参的地址给形参且改变形参相当于改变实参

????:传值调用

#include<stdio.h>
#include<string.h>
void change(int x)//改变一个值
{
return x=0;//将值变为0
}
int main()
{
int a=10;
change(a);//将a的值传过去
printf("a=%d\n",a);
return 0;
}

传送门“函数”传值并没有改变a的值

????:传址调用

#include<stdio.h>
#include<string.h>
void change(int* x)//改变一个值
{
*x=0;//将值变为0
}
int main()
{
int a=10;
change(&a);//将a的值传过去
printf("a=%d\n",a);
return 0;
}

传送门“函数”传址改变了a的值

✨指针变量使用自增自减时要考虑其优先级

✨函数设计时单一且干净

✨当函数传值是数组时,它只传该实参数组的首个元素的地址,且形参类型必须为指针接收,

✨在调用数组一定要注意,随然函数内可以依次访问数组中的内容,但如果计算该数组形参的大小时,计算的只是该第一个元素的大小。

函数的嵌套调用:

函数和函数之间可以随机组合:

#include<stdio.h>
void add2(void)
{
printf("hello world");
}
void add1(void)
{
add2();
}
void add(void)
{
add1();
}
int main()
{
add();
}

传送门“函数”套娃????

函数的链式访问:

把一个函数的返回值作为另外一个函数的参数

????:

#include<stdio.h>
#include<string.h>
int main()
{
printf("%d\n",strlen("abc"));
printf("%d",printf("%d",printf("%d",printf("%d",8765))));
}

传送门“函数”"printf"函数的返回值为函数内字符个数

✨函数的定义要把自定义函数写在main函数前面(函数声明)

✨函数的声明尽量放入头文件中

传送门“函数”传送门“函数”传送门“函数”传送门“函数”

函数的递归:

程序调用自身的编程技巧称为“函数递归”,工作核心是“大事化小”

递归的两个必要条件:

✨存在限制条件,当满足这个限制条件时候递归不再继续

✨没次递归调用时候越来越接近这个限制条件

注意事项:用递归写代码需要考虑是否栈溢出(stack overflow)

????:输入1234 屏幕输出4 3 2 1用递归实现

#include<stdio.h>
void print(int x)
{

printf("%d ",x%10);
if(x>10)//限制条件
print(x/10);//逐渐接近
}
int main()
{
int x=0;
scanf("%d",&x);
print(x);
}
函数的迭代

在C语言中,函数迭代是指使用循环结构来多次调用同一个函数,并且每次调用该函数时都传递不同的参数。这样可以重复执行一段代码,直到满足某个条件为止。函数迭代通常使用for或while语句来实现。

????:

#include <stdio.h>

int factorial(int n) {
int result = 1;
for (int i = 1; i <= n; i++) {
result *= i;
}
return result;
}

int main() {
int n = 5;
int result = factorial(n);
printf("%d! = %d\n", n, result);
return 0;
}

factorial函数使用循环结构来迭代调用自身,以计算n的阶乘。循环从1开始,一直累乘到n,最终返回计算结果。

经典算法题:斐波那契数,汉诺塔,青蛙跳台。

结束语:

人生没有彩排,每天都是现场直播。珍惜每一天,抓住每一个机会。

传送门“函数”加油各位!!!