前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【C语言】函数和函数递归

【C语言】函数和函数递归

作者头像
YoungMLet
发布2024-03-01 08:54:47
930
发布2024-03-01 08:54:47
举报
文章被收录于专栏:C++/Linux

一、库函数

1. strcpy----字符串拷贝

把arr1的内容拷贝到arr2

代码语言:javascript
复制
	int main()
	{
		char arr1[] = "bit";
		char arr2[] = "########";
		strcpy(arr2, arr1);             
		printf("%s\n",arr2);
		return 0;
	}

2. memset函数

用‘ * '代替arr数组前5个字符

代码语言:javascript
复制
	int main()
	{
		char arr[] = "hello world";
		memset(arr, '*', 5);
		printf("%s\n", arr);
		return 0;
	}

二、自定义函数

2.1 实际参数(实参)

真实传给函数的参数,叫实参

2.2 形式参数(形参)

形式参数是指函数名后括号中的变量,因为形式参数只有在函数被调用的过程中才实例化(分配内 存单元),所以叫形式参数。形式参数当函数调用完成之后就自动销毁了。因此形式参数只在函数中有效。

2.3 写一个函数可以交换两个整型变量的内容

*pa,*pb是形参,需要在函数内改变实参的值的时候应该用传址调用

代码语言:javascript
复制
	void Swap(int *pa,int *pb)                           
	{                                                      
		int tmp = 0;                                            
		tmp = *pa;                                          
		*pa = *pb;                                               
		*pb = tmp;                                               
	}                                                       

&a,&b是实参

代码语言:javascript
复制
	int main()                                             
	{
		int a = 10;
		int b = 20;
		printf("a = %d  b = %d\n", a, b);
		Swap(&a,&b);                                          
		printf("a = %d  b = %d\n", a, b);
		return 0;
	}

注意,如果上面采用传值调用, 不能交换两个变量的值,因为a,b传到x,y时x,y也有自己独立的地址,并没有改变x,y的地址,如:

代码语言:javascript
复制
		  void Swap(int a, int b)
		    {
		    int tmp = 0;
			tmp = a;
			a = b;
			b = tmp;
			}

三、函数的声明和定义

3.1 函数声明:

  1. 告诉编译器有一个函数叫什么,参数是什么,返回类型是什么。但是具体是不是存在,函数 声明决定不了。
  2. 函数的声明一般出现在函数的使用之前。要满足先声明后使用。
  3. 函数的声明一般要放在头文件中的。

3.2 函数定义:

函数的定义是指函数的具体实现,交待函数的功能实现。

四、函数递归

练习1

调用函数自己本身,例如,接受一个整型值(无符号),按照顺序打印它的每一位。 输入:1234,输出1 2 3 4

执行print时会返回执行上一层没有执行完的print

代码语言:javascript
复制
	void print(int n)
	{
		if (n > 9)
		{
			print(n/10);                     
		}
		printf("%d ", n % 10);
	}
	
	int main()
	{
		unsigned int num = 0;
		printf("请输入一个数字:\n");
		scanf("%d", &num);
		print(num);
		return 0;
	}

练习2

编写函数不允许创建临时变量,求字符串的长度

创建临时变量的写法:

代码语言:javascript
复制
	int my_strlen(char *str)
	{
		int count = 0;             //count是临时变量
		while (*str != '\0')
		{
			count++;
			str++;
		}
		return count;
	}
	
	int main()
	{
		char arr[] = "bit";
		int len = my_strlen(arr);
		printf("%d\n",len);
		return 0;
	}

不创建临时变量----递归; 递归的方法–把大事化小,首先把字符串首地址传入函数,然后判断字符不是’ \0 '就调用函数本身

my_strlen(“bit”); 1+my_strlen(“it”); 1+1+my_strlen(“t”); 1+1+1+my_strlen(“t”); 1+1+1+0=3;

代码语言:javascript
复制
	int my_strlen(char* str)
	{                                                                                     
		if (*str != '\0')                                                                  
			return 1 + my_strlen(str + 1);       //此处str+1是地址,要传到函数去                
		else                                                                              
			return 0;                                                                    
	}                                                                                    
	
	int main()
	{
		char arr[] = "bit";
		int len = my_strlen(arr);
		printf("len = %d\n", len);
		return 0;
	}

练习3

求n的阶乘。(不考虑溢出)

代码语言:javascript
复制
	int function(int n)
	{
		if (n != 0)
			return n * function(n - 1);
		else
			return 1;
	}
	
	int main()
	{
		int n = 0;
		printf("请输入一个数:\n");
		scanf("%d", &n);
		int ret = function(n);
		printf("ret = %d\n", ret);
		return 0;
	}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-01-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、库函数
    • 1. strcpy----字符串拷贝
      • 2. memset函数
      • 二、自定义函数
        • 2.1 实际参数(实参)
          • 2.2 形式参数(形参)
            • 2.3 写一个函数可以交换两个整型变量的内容
            • 三、函数的声明和定义
              • 3.1 函数声明:
                • 3.2 函数定义:
                • 四、函数递归
                  • 练习1
                    • 练习2
                      • 练习3
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档