李晨晨的嵌入式学习 DAY10

今天主要学习了如何设计函数对以前的问题求解,C语言程序内存区域,函数的递归调用

一,设计函数对以前问题求解

1.闰年每个月有几天问题:

被调函数1:求闰年有哪些
被调函数2:打印出从开始到结束所有的闰年

被调函数3:打印输入的年月的每一天的数字

改进后

assert函数:如果输入值不在这个范围内,那么直接中止函数运行并且输出时报告

输入月份为18后报错

主调函数:

2.素数的查找

被调函数1:素数有哪些

如果找到了一个数能被整除,证明他不是素数。回复return 0

如果没有找到证明他是素数,回复return 1。程序继续执行

被调函数2:打印出从开始到结束所有的素数

素数要大于2,如果开始值小于2,则return一个负数

主函数

将被调函数2的值赋值给参数ret,如果ret的值 < 0,则证明被调函数2开始值 < 2了,输出error。

反之输出正确的值。

2.双胞胎素数:被调函数2 改为

3.回文数查找

被调函数1:找出回文数

被调函数2:打印出从开始到结束所有的回文数

原理同素数被调函数2一样 小于1输出负值给主函数

主函数

直接输出即可

二,递归调用

在调用一个函数的过程中又出现直接或间接的调用该函数本身,称为函数的递归调用。

1.累乘法

如图,在此函数中被调函数是他自己本省身

主函数直接输出

2.斐波那契数列求第n项

同上,fib函数中还有个fib函数

主函数直接输出

2.斐波那契数列前n项求和

加一个被调函数即可

3.汉诺塔解法

注意;递归调用函数及其占用栈区,在嵌入式中一般不使用。

三,C语言程序内存区域

1.栈区(保护现场)

遵循FILO,即先进后出原则

栈区:栈区是用来存放局部变量的,比如函数内部定义的int a,int b,const int a,char p,char arr[ ],还有函数的形参等等都是存放在栈区。栈区的数据由编译器管理,调用完之后就自动释放,压栈,出栈。先进后出的原则,比如当你执行到函数调用的时候,编译器会先把下一条代码的地址压入栈中,再把你调用的那个函数里的一些局部变量,形参啊等等压入栈中,等你函数调用执行完毕。栈就会把你调用的这个函数之前压入栈的变量和形参全部清除出栈,之后根据下一条代码的地址,接着执行程序,以后的程序也都是这么执行。栈区是有大小的,一般是1M左右,所以别定义太大的数组。

c语言程序只做值传递,传参自右向左

...........................................................................................................................................................今天的学习到此结束,明天见。

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值