當前位置:首頁 » 編程語言 » 有限狀態機c語言
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

有限狀態機c語言

發布時間: 2022-02-15 00:45:20

A. c語言 狀態機代碼 怎麼寫

剛好前段時間寫了一個簡單協議的狀態機,代碼就不寫了,說一下大概吧
1、確定一共有多少種狀態,這里的狀態有開和關,細分還有say thankyou 和警告
2、確定狀態之間的遷移條件

如果按照四種狀態:開、關、說謝謝、警告,那麼這四種狀態之前的遷移條件很明顯了

分兩個函數:1、檢查是否需要遷移狀態;2、遷移狀態。
遍歷各種狀態檢查是否有狀態需要發生遷移。一般用一個switch將各種狀態列出,然後在各種狀態裡面用if檢查是否需要遷移狀態,如果需要遷移,做好標記。
再次遍歷各種狀態,檢查哪些狀態做了標記,遷移到新狀態,並做相應的操作,比如進入關的時候,做關門動作

剛才忘記說了,還有一個運轉狀態機函數,main函數在被觸發的情況下調用運轉函數,觸發條件有:投幣,人進入。

B. C語言狀態機 swtich 按鍵切換問題。連鍵

這是getchar();造成的
你可以這樣寫getchar();
int choice = -1;
do
{
choice = getchar();
}while ('\n' == choice);

試一下這個。

C. C語言中如何控制時間高手進!

這個時間的控制,用MFC可能更容易點,用經典C語言就比較麻煩,1樓說的對,可惜你看不懂.

所以你還是先不要考慮超時的情況,先寫好程序再說

D. gcc中C語言的詞法分析是怎麼做的

已知所有關鍵字,剩下的只是語句和括弧堆棧匹配而已。
大體原理可以參考《編譯原理》的「有限狀態機」。

E. c語言中定義的變數是否有限

變數 要先聲明 後使用。
在一個程序塊中,聲明必須出現在語句之前。

int i,m=0,p=0,q=0;// ① 聲明
scanf("%s",a);// ② 語句
聲明必須出現在語句之前, ①②交換,則次序錯了。

變數的定義是不是可以出現在程序的任意一行?
看你怎樣書寫程序。
預處理行,不好加變數的定義
其它地方,只要能 寫 的地方,就可以寫變數的定義。

例如:
int x;
#include<stdio.h>
#include<stdlib.h>
int y;
void main(){ int i;
i=2;
printf("i=%d\n",i);
}
另外,站長團上有產品團購,便宜有保證

F. 跪求一個C程序代碼實現一個有限自動機,有限自動機要能對CMMB的解復用碼流進行糾錯

#include <stdio.h>#include <string.h>//狀態表相關存儲信息:#define STATE_NUMBER 4 //狀態數目#define CHAR_NUMBER 2 //輸入字元的種類: d 和 .#define DIGIT 0 //輸入數字在狀態表中位於第0列#define DOT 1 //小數點位於狀態表的第1列//State[][]為狀態表,以整數組形式存放,0,1,2,3表示狀態,-1表示沒有此狀態int State[STATE_NUMBER][CHAR_NUMBER] = {{1,-1}, {1,2}, {3,-1}, {3,-1}};int Q[STATE_NUMBER] = {0,1,0,1}; //終態標志:0非終態, //緩沖區://輸入緩沖區:由專門函數操作(ReadALine(),GetChar())#define BUFFER_SIZE 1000 //表達式緩沖區大小char Buffer[BUFFER_SIZE]; //表達式緩沖區,以'\0'表示結束int ipBuffer = 0; //表達式緩沖區當前位置序號char ch; //存放取得的一個字元//函數聲明:bool Run(); //對存儲在緩沖區的一行字元串(以'#'結束)進行運行void Init(); //全局初始化bool ReadALine(); //從鍵盤讀一行(沒有空格),存於表達式緩沖區Buffer[]中char GetChar(); //從緩沖區取一個字元,返回該字元的同時將它存於全局變數ch中//主程序:void main(){ Init(); while(ReadALine()) //讀一行成功,對它進行判斷 { if(Run()) //對該行進行運行,看是否能被接受? printf("接受\n\n"); else printf("不接受\n\n"); }}//對存儲在緩沖區的一行字元串(以'#'結束)進行運行//返回:如果是無符號定點實數,返回true;否則返回:falsebool Run(){ int S=0; //S存放運行時的當前狀態,目前為初態 while(GetChar()!='#') { if(ch >= '0' && ch <= '9') //數字 S = State[S][DIGIT]; //將狀態轉換成輸入數字後的狀態 else if(ch == '.') //小數點 S = State[S][DOT]; //將狀態轉換成輸入小數點後的狀態 else //其他都為非法字元 return false; if(S == -1) //處於非法狀態 return false; } //運行結束,判斷S是否為終態 if(Q[S] == 1) //終態 return true; else //非終態 return false;}//全局初始化void Init(){ //好像無需初始化 printf("程序功能:輸入一個字元串,判斷它是否是無符號定點實數。\n"); printf("======================================================\n\n");} //從鍵盤讀一行(沒有空格),存於表達式緩沖區Buffer[]中,以'#'結束,並置ipBuffer=0;//讀到非空字元串:返回 true;讀到單獨的「#」:返回 falsebool ReadALine(){ int l; printf("請輸入以\"#\"號結束的無空格字元串:"); scanf("%s",Buffer); l = strlen(Buffer); //讀入的字元串的長度 if(l == 0) return ReadALine(); //輸入了空字元串,重新輸入 if(Buffer[0] == '#') return false; //輸入單獨的'#'表示不再輸入 Buffer[l] = '#'; //最後一個字元用結束標記'#'代替(本來是'\0') ipBuffer = 0; //初始化緩沖區指針 return true;}//成功:返回字元;不成功:返回'#'char GetChar(){ if((ch = Buffer[ipBuffer]) != '#') ipBuffer ++; return ch;}

G. 怎麼用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:
... ...
}

}

H. 用單片機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;

}

}

這個功能可以用中斷來實現,當然,現在我寫的這個也可以實現。由於你用的晶振頻率不知道,所以你自己修改一下延時時間,再把頭文件改一下,就可以了,我試驗了,可以實現改功能。

I. C語言(因為輸入文字有限,所以用圖片顯示,請各位大蝦賜教)

#include <stdio.h>
main(){
FILE *fin;
int a[7];
int b[6]={4,5,6,9,10,11};
int sum,i,j;
fin=fopen("abc.txt","r");
while(1){
for (i=0;i<7;i++) if ( fscanf(fin,"%d",&a[i]) ==EOF) {fclose(fin);return 0;};
sum = 0;
for (j=0;j<7;j++) for (i=0;i<6;i++) if (a[j]==b[i]) sum++;
if (sum >= 4) sum=1;else sum=0;
for (i=0;i<7;i++) printf("%d ",a[i]);
printf(",%d\n",sum);
}
fclose(fin);
return 0;
}

J. C語言編寫的有限元程序

可以參看:有限元分析及應用,曾攀,清華大學出版社,2004,p411