栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

函数(二)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

函数(二)

嵌套调用
#include
	void new_line()
	{
		printf ("hehe n");
	}
	void three_line()
	{
		 int i = 0;
		 for ( i = 0; i <3; i++)
		 {
		 	new_line();
		 }
	}
	
	int main()
	{
		three_line();
		return 0 ;
	}

我们连续调用两个我们所设置的函数,打印hehe   以及   循环3次

main调用 three_line  three_line里调用new_line,但注意,两个函数是并列的,可以嵌套调用,但不能嵌套定义

链式访问

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

#include
#include

int main()
{
	// int len strlen("abc")能够求出他的长度 
	// printf ("%dn",len); 会打印出3,也就他的长度
   // 合成一句  printf("%dn",strlen("abc")),我们把strlen的返回值作为printf的参数,这就是链式访问 
   
   
   printf("%d",printf("%d",printf("%d",43)));
   
   return 0 ;

}

我们会打印出 4 3 2 1 这是怎么一回事?

printf 返回的是个数(字符)

 里面的printf 输出43,所以第二个打印出来就是两个字符 2 ; 第一个打印出来的就是一个字符 1

函数的声明和定义

#include
//函数申明一下,我们就知道有这个函数就不会再次出错了
int add(int x,int y);
// 声明,但是我不屑,我放在后面写 
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d",&a,&b);
	int ret  = add(a,b);
	printf("%dn",ret);
	
}
//先想好咋用,再想怎么去实现 
//函数的定义
int add (int x , int y )
{
	int z = x + y;
	return z;
// 我们把add 放前面就不会出现警告或者错误,也就是我们的函数未定义 
}

为什么拆分头文件和源文件?

举个例子

nb的程序员,自己写了个软件库,想卖钱,想卖多份,但他不想让别人看到源代码,不让别人改,这样他把他的代码拆成两部分,把实现写到一个,把源文件写到另一个,这样卖头文件(说明书),你就可以使用这个函数,但是你不知道他是咋写的(源文件就是我们的流程)

#pragma comment(lib,"add .lib")

//导入静态库

!!!函数递归

1.什么是递归?

——大事化小。函数调用自身的编程技巧

最简单的递归

//最简单的递归
#include
int main()
{
	printf ("hehen");
	main();
	
	return 0;
 } 

递归到函数崩溃了,就停止了,但是这样的写法本身就是错误的,但确实是递归                     stack overflow(栈溢出)

再举个例子

//输入一串数,按顺序输入每一位  无符号 
 void Print(unsigned int n ) // n =1234
 {
 	// 用 1234/ + 1234%10 
 	if (n > 9)
	 {
	 	 Print ( n /10); // 123
	 	 
	  }
	  printf("%d ",n % 10);//4
 }
#include
int main()
{
	unsigned int num = 0;
	scanf("%u",&num);
	Print(num); 
	 } 
	 
	 

如果我输入的是  123  

1. 递  我们输入 123 ,Print 把123 递 给我们 Print 函数,因为大于 9 所以我们进行第一次运算,算出是12,但是我们  if  里面还是 Print 所以又回来 到 if ,所以 if 往下 ,他 又会进行 这下我们就是 1 ,这个时候我们就不会再 if 了 我们就会输入 1_

2.归  当我们的1输入完后,接下来就到归了,我们就会进行 12%10 算出 2_,我们调用完后,我们就会再归一次,就是 123 ,来一次 123%10 就是3_ ,然后回到我们最开始的函数 ,打印出来

再来个例子

#include
void test()
{
	 printf("hehen");
}

int main()
{
	printf("hehen");
	test();
	printf("hehen");
	return 0;
	  }	  

 我们调用出去,执行完后,会再次回到我们使用的地方,进行运算,所以开始的程序我们的 123是在后面Print 都执行完后回来执行的、

          我们的递归必须要有条件,每一次函数调用都会在内存的栈区申请一块空间,所以我们让他有限制的递归

          条件要有用,让递归后接近限制条件

   (1.存在条件  2.接近条件) 

#include
int my_strlen(char* s)
{
	int count = 0;
	while (*s != '')//用while才可以进行循环计算 
	{
		count++;
		s++;
	}
	return count;
	//相当与输出个数 
}
int main()
{
	//求字符串长度
	char arr[] = "abc"
		//数组名是数组首元素的地址 
		int len = my_strlen(arr);
	printf("%dn", len);
	return 0;
}

不同的定义我们跳过的数字不同

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/510967.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号