求斐波拉契序列和回文数

本文介绍了一个简单的C程序实现斐波拉契数列和判断一个数是否为回文数的方法。通过逐步解析程序代码,帮助读者理解斐波拉契数列的生成原理及回文数的判断逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

# include <stdio.h>
/*
	2014年8月5日14:34:10	
	目的:
	   掌握斐波拉契序列	
*/
int main(void)
{
	int n;//序列中的第几个数
	int n1, n2, n3;//斐波拉契序列中的3个连续数

	n1 = 1;//序列中第一个数初始值
	n2 = 2;//序列中第二个数初始值

	printf(" 请输入你要求的序列");
	scanf("%d", &n);//接受用户输入

/*
试数分析:
	当n = 1时, n3 = 1;
	当n = 2时, n3 = 2; 这个时候才有2个前置数字相加。
	当n = 3时, n3 = n1 + n2; n1 n2 初始值为1 和 2, 1 + 2 = 3, 将n2的值赋给n1,将n3的值赋给n2,n1 = 2, n2 = 3.
	当n = 4时, n3 = n1 + n2 = 3 + 2 = 5; n1 = n2 = 3, n2 = n3 = 5;
	当n = 5时, n3 = n1 + n2 = 3 + 5 = 8; n1 = n2 = 5, n2 = n3 = 8;
	.......

  发现规律了,要想确定n3,必须确定n1和n2,先确定n1,他就是前一次循环的n2,
  而n2就是前一轮循环的n3的值。只要确定这2个数,就可以求出下一轮n3的值。
  不断重复
 */
	if (1 == n)
		n3 = 1;
	else if (2 == n)
		n3 = 2;
	else
	{
	  for (int i = 3; i <= n; i++)
	  {
		n3 = n1 + n2;
		n1 = n2;
		n2 = n3;
	  }
	}

	printf("n3 = %d\n", n3);

	return 0;
}
/*
当n = 5的时候
	在Vc++ 6.0中的输出结果是:
-------------------------------------
请输入你要求的序列5
n3 = 8
-------------------------------------
	总结: 
		1.斐波拉契序列除开始2个数字,(因为无法满足求第3个数字的值),之后都是规律来求的
		2.后面都是不断重复给这3个数赋值的过程。
		3.要求n3,必须知道n1,n2吧,而n1, n2 不就是上一轮的n2,n3么,
		  想通这一点之后,斐波拉契序列就完全没难度了。
 */




# include <stdio.h>
//回文数形式  如: 121  12321 1234321   1331  
//反过来数字不变

// 2014年8月5日13:08:03

//设计程序判断一个数是不是回文数
int main(void)
{
	int val; // 假如用val存放待判断的数字
	int sum = 0;//反过来的那个数
	int m;

	printf(" 请输入你需要判断的数字");
	scanf("%d", &val);

	m = val;
/*
试数分析:
		m = 1234, int sum = sum * 10 + 1234 % 10 = 4, m = 123;
		m = 123, int sum = 4 * 10 + 123 % 10 = 43, m = 12;
		m = 12, int sum = 43 * 10 + 12 % 10 = 432 , m = 1;
		m = 1, int sum = 432 * 10 + 1 % 10 = 4321, m = 0;
		m = 0 退出while循环
*/
	while(m)
	{
		sum = sum * 10 + m % 10;
		m /=10;
	}

	if(sum == val)//如果反过来的数字和原来一样,就YES,否则 NO
		printf("YES\n");
	else				
		printf("NO\n");

	return 0;
}

/*
	在Vc++ 6.0中的输出结果是:
-----------------------------------
请输入你需要判断的数字12321
YES
-----------------------------------
-----------------------------------
请输入你需要判断的数字123
NO
-----------------------------------
	总结:
		sum = sum * 10 + m % 10;
		m /=10;

	1.我们要知道一个十进制的数字对10取模的作用:可以拿到它的个数位的数字
	2.一个int类型十进制数除以10之后再乘以10,就会把那个数个位数丢掉,(因为那部分成为了小数)
	 m每次循环除以10,每次都把个位数丢弃,sum每次通过m取模拿到这个数不同时期各位数数。然后X10
	 因为最先拿到的个位数字X10次数是最多的,它也是sum的最高位数字。
	3.不断重复此过程 ,直到m = 0,退出循环,这样这个数字就反转了,再和原来数字作比较,如果反转之后的
	数字和原来的数字一样大,就表示这个数是回文数,否则,就不是。
	

*/


内容概要:本文详细介绍了如何使用STM32微控制器精确控制步进电机,涵盖了从原理到代码实现的全过程。首先,解释了步进电机的工作原理,包括定子、转子的构造及其通过脉冲信号控制转动的方式。接着,介绍了STM32的基本原理及其通过GPIO端口输出控制信号,配合驱动器芯片放大信号以驱动电机运转的方法。文中还详细描述了硬件搭建步骤,包括所需硬件的选择与连接方法。随后提供了基础控制代码示例,演示了如何通过定义控制引脚、编写延时函数控制电机转动函数来实现步进电机的基本控制。最后,探讨了进阶优化技术,如定时器中断控制、S形或梯形加减速曲线、微步控制及DMA传输等,以提升电机运行的平稳性精度。 适合人群:具有嵌入式系统基础知识,特别是对STM32步进电机有一定了解的研发人员技术爱好者。 使用场景及目标:①学习步进电机与STM32的工作原理及二者结合的具体实现方法;②掌握硬件连接技巧,确保各组件间正确通信;③理解并实践基础控制代码,实现步进电机的基本控制;④通过进阶优化技术的应用,提高电机控制性能,实现更精细平稳的运动控制。 阅读建议:本文不仅提供了详细的理论讲解,还附带了完整的代码示例,建议读者在学习过程中动手实践,结合实际硬件进行调试,以便更好地理解掌握步进电机的控制原理技术细节。同时,对于进阶优化部分,可根据自身需选择性学习,逐步提升对复杂控制系统的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值