當前位置:首頁 » 編程語言 » 狀態機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函數在被觸發的情況下調用運轉函數,觸發條件有:投幣,人進入。

熱點內容
自動配置代理什麼意思 發布:2025-05-11 07:16:51 瀏覽:992
notepad編寫php 發布:2025-05-11 07:10:50 瀏覽:863
茄子快傳的文件夾 發布:2025-05-11 07:04:30 瀏覽:733
手機指紋密碼如何更換 發布:2025-05-11 07:02:22 瀏覽:121
java存儲資料庫 發布:2025-05-11 07:01:33 瀏覽:176
辦理ca的初始密碼是多少 發布:2025-05-11 06:54:55 瀏覽:424
忘記伺服器地址 發布:2025-05-11 06:54:51 瀏覽:243
傳奇qf腳本 發布:2025-05-11 06:35:21 瀏覽:449
我的世界等價交換伺服器地址 發布:2025-05-11 06:34:49 瀏覽:434
ftp傳圖失敗 發布:2025-05-11 06:34:47 瀏覽:857