C语言笔记

举报
牛小牛 发表于 2022/04/15 23:21:12 2022/04/15
【摘要】 C语言笔记

链式访问

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


int main()
{

	int len = 0;
	//1
	len = strlen("abc");
	printf("%d\n", len);
	//2
	printf("%d\n", strlen("abc"));
	return 0;
}

练习:

以下代码输出值是多少?

int main()
{

	printf("%d", printf("%d", printf("%d",43)));
	return 0;
}

答案;4321

函数的声明与定义

函数的声明一般放在.h头文件中,函数调用可以放在.c源文件中。函数要满足先声明后使用。

函数的递归

递归函数是“自己调用自己”的函数,可以采用直接或间接调用方式。间接递归意味着函数调用另一个函数(然后可能又调用第三个函数等),最后又调用第一个函数。因为函数不可以一直不停地调用自己,所以递归函数一定具备结束条件。递归的主要思考方式在于:把大事化小。

递归的必要条件:

1.存在限制条件,当满足这个限制条件时,递归便不再继续。

2.每次递归调用之后越来越接近这个限制条件。


练习:

接受一个整型值(无符号),按照顺序打印它的每一位。例如:输入123,输出:1 2 3 

参考代码:


void print(int n)
{
	if (n > 9)
	{
		print(n / 10);
	}
	printf("%d ", n % 10);
}
int main()
{
	unsigned int num = 0;
	scanf("%d", &num);
	print(num);
	return 0;
}

练习2:

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

/*int my_strlen(char* str)
{
	int count = 0;
	while (*str != '\0')
	{
		count++;
		str++;
	}
	return count;
 }8*/


int my_strlen(char* arr)
{
	if (*str != '\0')
		return 1 + my_strlen(str + 1);
	else
		return 0;
}

int main()
{
	char arr[] = "bit";
	int len = my_strlen(arr);//arr'是数组,数组传参,传过去的不是整个数组,而是第一个元素的地址
	printf("len = %d\n", len);

	return 0;
}

递归与迭代

描述第n个斐莫那切数列

int Fib(int n)
{
	if (n <= 2)
		return 1;
	else
		return Fib(n - 1) + Fib(n - 2);
}

int main()
{
	int n = 0;
	int ret = 0;
	scanf("%d", &n);
	//TDD-测试驱动开发
	ret = Fib(n);
	printf("ret = %d\n", ret);

return 0;
}

函数递归的经典题目(感兴趣可自主研究)

1.汉诺塔问题

2.青蛙跳台阶问题

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。