当前位置:首页 » 编程语言 » 状态机c语言编程

状态机c语言编程

发布时间: 2022-05-09 01:51:52

‘壹’ c语言程序设计例如一个信息管理系统(同时保存输入的信息),如何在完成子版块后返回到菜单

同鞋,你的描述让我有点懵逼,不过今天调bug比较郁闷,换换头脑尝试解答一下看的懂的部分……

关于return 和 exit 的区别:

exit是一个系统函数,功能是退出当前进程。return 是一个关键字,配合函数使用,代表返回,并不一定是退出。

你描述返回主菜单的意思,让人无法理解,但是菜单之间的切换方法很多,最常见的方法是使用状态机,具体可以网络搜索一下相关知识。

这里简单的给个伪代码:


enumMENU_ITEM
{
EXIT=0,
MAIN,
ITEM1,
ITEM2
};

MENU_ITEMmenu()
{
//一些逻辑
...

//跳转到1
returnITEM2;
}

MENU_ITEMmenu1()
{
//一些逻辑
...

//跳转到主菜单
returnMAIN;
}

MENU_ITEMmenu2()
{
//一些逻辑
...

//退出
returnEXIT;
}


voidmain()
{
MENU_ITEMchoose=EXIT;

scanf("%d",&choose);

while(choose)
{
caseMAIN:
//输出主菜单
choose=menu();
break;


caseITEM1:
//输出功能1
choose=menu1();
break;


caseITEM2:
//输出功能2
choose=menu2();
break;
}
}

‘贰’ 如何用c语言实现:a,b,c三个事件,依次进行,每到a时就执行事件1,再到b,再执行事件1,再c,再事件1.

典型的状态机结构,可以去网上找找有关的资料,大概的结构像这样

enum { state_A, state_B, state_C } state = state_A;

while(1)
{
switch ( state )
{
case state_A:
if ( event_A ) // 这里也可以用switch
{
action_1(); // 在某状态下发生某事件执行某个动作,并转入下个状态
state = state_B;
}
else if ( event_B )
{

}
else
{

}
break;
case state_B:
... ...
}

}

根据你的问题补充,可以这样划分状态
准备轮询1号机,等待1号机应答(已经轮询1号机,但1号机未应答),准备轮询2号机,等待2号机应答,准备轮询3号机,等待3号机应答,
或者分成3个状态加一个标志,
轮询1号机,轮询2号机,轮询3号机,加一个有无应答标志,
其实这两种分法没有本质区别。
程序框架大概的样子是这样
switch ( state )
case 准备轮询1号机:
发送轮询1号机的命令
state = 等待1号机的应答;
break;
case 等待1号机的应答;
判断1号机的应答状态,可能是正确、错误、超时,分别处理,并设置状态
正确:
state = 准备轮询2号机
错误:
state = 准备轮询1号机,重试
超时:
state = 准备轮询1号机,重试,具体做什么可以很灵活

‘叁’ C语言作业C/C++数学词法分析器。最好是用状态机做的,没有也没关系,我给出状态机的图,和分析器的线路图

我记得有个神奇的东西叫做bison&flex
嘛……只是这么一说你可以自己慢慢研究……
用来做作业好像不太道德啊=w=

‘肆’ 用单片机C语言怎么写用状态机实现按键控制LED灯闪烁这个程序

#include<STC12C52.H>

#defineucharunsignedchar

#defineuintunsignedint

sbitkey=P1^2;

sbitp1_6=P1^6;

voiddelay(uchardelay_time)

{

ucharn;

uintm;

for(n=0;n<delay_time;n++)

{

for(m=0;m<10000;m++);

}

}

voidkeyscan()

{

if(key==0)

{

delay(5);

if(key==0)

while(!key)

{

p1_6=0;

delay(20);

p1_6=1;

delay(20);

}

}

}

voidmain()

{

WDT_CONTR=0x3C;

while(1)

{

keyscan();

WDT_CONTR=0x3C;

}

}

这个功能可以用中断来实现,当然,现在我写的这个也可以实现。由于你用的晶振频率不知道,所以你自己修改一下延时时间,再把头文件改一下,就可以了,我试验了,可以实现改功能。

‘伍’ C语言状态机 swtich 按键切换问题。连键

如果想它停止继续判断,在要停止的语句后面加一个break就行了

‘陆’ 怎么用c语言写状态机呀请举例说明

c语言写状态机之前:
1、确定一共有多少种状态,这里的状态有开和关,细分还有say thankyou 和警告
2、确定状态之间的迁移条件

如果按照四种状态:开、关、说谢谢、警告,那么这四种状态之前的迁移条件很明显了
分两个函数:
1、检查是否需要迁移状态;
2、迁移状态.
遍历各种状态检查是否有状态需要发生迁移.一般用一个switch将各种状态列出,然后在各种状态里面用if检查是否需要迁移状态,如果需要迁移,做好标记.
再次遍历各种状态,检查哪些状态做了标记,迁移到新状态,并做相应的操作,比如进入关的时候,做关门动作。

典型的状态机结构:
enum { state_A, state_B, state_C } state = state_A;

while(1)
{
switch ( state )
{
case state_A:
if ( event_A ) // 这里也可以用switch
{
action_1(); // 在某状态下发生某事件执行某个动作,并转入下个状态
state = state_B;
}
else if ( event_B )
{

}
else
{

}
break;
case state_B:
... ...
}

}

‘柒’ 如何提高单片机,

单片机控制大部分是面向硬件的,关于这些物理硬件的控制,最重要的就是调节速度和精度,表现在单片机内部算法上,我认为就是时间和空间的合理运用,而这些对算法的要求是什么呢,或者说作为单片机开发者来说,应该怎么样考虑自己的单片机程序呢?

第一,程序结构

我知道你肯定不会想去仔细研究数据结构,那太抽象了。在这里我直接告诉你,基于“状态机”的程序结构更加适合单片机,确切的说是有限状态机。状态机编程技术将直接促使你解决程序的时间问题,并且程序结构可大可小,普通状态机和层次式状态机能让你对绝大多数项目手到擒来。当然状态机编程技术也是需要学习的,但这比你直接去学数据结构要轻松的多。

第二,使用适合的算法

我们编程时要明白一个道理,再多复杂的算法也不能证明你的程序是一个好程序,那什么才是呢?是简洁明了和可靠稳定。大道至简放在编程上不是一句空话,同样一个冒泡排序算法,有的人写出来死板的很,有的人却能独具效率,这是对算法的理解高度不同。我认为与其学习更为复杂的控制算法,不如加深自己对现有算法的理解。通样的PID算法程序,有的人能加上积分分离,有的人能用上环境自适应,这里面差别不可谓不大啊。

最后希望你能早日从自己的工作中形成自己独到的理解,精益求精。

‘捌’ C语言 我是初学者

函数,或者说子程序,追求的效果是高内聚、低耦合。简单点说,最好是一个子程序只完成一个功能。具体的细节,软件工程里面对这个问题有相关讨论。

初学者,可以试着这样做:
首先,把很长的主函数划分成几个子程序,分的生硬一点也没关系。
然后,试着给每个子程序起一个名字,尽量做到名符其实。
回过头来,用这几个子程序的名字去写主程序,看主程序是否看起来还算合理。如果看着哪里不舒服,就试着倒回去重新划分、重新起名。多来几次,逐渐调整,最后你会觉着主程序看起来舒服多了,因为你的逻辑结构变得清晰了。
注意,最终的主程序,我们把它称为程序的构架,它可能是一个超级循环,也可能是一个状态机,也可能是别的什么结构,比如,我们通常称Windows程序的构架是事件驱动的构架,按键、鼠标都是事件。当然,设计一个好的构架不是一个简单的事,事实上,这应该是系统分析人员应该考虑的,这需要经验,海量的经验,经过实践检验的经验。

初学者,只要记住一个大的原则,一个子程序只完成一个功能。

‘玖’ C语言 状态机代码 怎么写

刚好前段时间写了一个简单协议的状态机,代码就不写了,说一下大概吧
1、确定一共有多少种状态,这里的状态有开和关,细分还有say thankyou 和警告
2、确定状态之间的迁移条件

如果按照四种状态:开、关、说谢谢、警告,那么这四种状态之前的迁移条件很明显了

分两个函数:1、检查是否需要迁移状态;2、迁移状态。
遍历各种状态检查是否有状态需要发生迁移。一般用一个switch将各种状态列出,然后在各种状态里面用if检查是否需要迁移状态,如果需要迁移,做好标记。
再次遍历各种状态,检查哪些状态做了标记,迁移到新状态,并做相应的操作,比如进入关的时候,做关门动作

刚才忘记说了,还有一个运转状态机函数,main函数在被触发的情况下调用运转函数,触发条件有:投币,人进入。

热点内容
sql插入两张表 发布:2025-05-11 09:55:33 浏览:758
日本编程语言 发布:2025-05-11 09:53:52 浏览:844
手机店设置的初始密码一般是多少 发布:2025-05-11 09:33:15 浏览:402
昂科威选择哪个配置 发布:2025-05-11 09:25:50 浏览:36
怎么解决安卓视频全屏卡顿 发布:2025-05-11 09:14:55 浏览:726
汇编从编译到执行 发布:2025-05-11 09:09:04 浏览:258
安卓系统低版本如何升级 发布:2025-05-11 09:04:44 浏览:252
认证类型加密算法 发布:2025-05-11 08:58:35 浏览:562
android停靠 发布:2025-05-11 08:42:23 浏览:647
超时代加密 发布:2025-05-11 08:41:29 浏览:781