對於任意給定的字串w(w不含空格),程式設計模擬turing機un+1的執行過程,要求輸出從開始執行起的每一步驟的結果。
turing機un+1的定義:
00→00r
01→11r
10→01stop
11→11r
#include #include #include #include int main()
if(flag == 0&&a[i] == '1') //01→11r
if(flag == 1&&a[i] == '0') //10→01stop
if(flag == 1&&a[i] == '1') //11→11r
} printf("the result of un+1 is %s\n",a);
clock_t endtime = clock();
printf("the time spent by this program is:%fs.\n",double(endtime - starttime) / clocks_per_sec);
system("pause");
return 0;
}
1、除錯
(1)輸入資料1010110。
(2)進行第一步運算:01→11r,結果為1010110。
(3)進行第二步運算:11→11r,結果為:1010110。
(4)進行第三步運算:10→01stop,結果為:1110110。
(5)輸出turing機un+1的結果:1110110。
2、測試
測試**:
clock_t starttime = clock();
............
clock_t endtime = clock();
printf("the time spent by this program is:%fs.\n",double(endtime - starttime) / clocks_per_sec);
system("pause");
測試截圖:
3、執行結果
五、經驗歸納
1、求字元陣列長度
strlen()函式求出的字串長度為有效長度,既不包含字串末尾結束符『\0』;sizeof()操作符求出的長度包含字串末尾的結束符『\0』;當在函式內部使用sizeof()求解由函式的形參傳入的字元陣列的長度時,得到的結果為指標的長度,既對應變數的位元組數,而不是字串的長度,此處一定要小心。
2、測試**
clock_t 在源**中我們可以看到,它的型別為長整形(long)。
clock()函式返回程式執行起(一般為程式的開頭),處理器時鐘所使用的時間(ms)。
clocks_per_sec數值上等於1000。
為了獲取 cpu 所使用的秒數,需要除以 clocks_per_sec。
定義個開始時間和結束時間,要測試的程式就放在這兩段**中間。
double(endtime - starttime) / clocks_per_sec 得到的就是程式執行的秒數。
C語言實驗1
實驗結論 總體來說,本次上機實驗較為順利,基本上出現的錯誤就是少符號之類的小問題,所以挑一些我覺得有收穫的方面寫在部落格上 1.2的練習印象比較深刻,因為這是我在電腦上嘗試著去敲完執行的第乙個 當時是在剛開始學c語言,照著書敲完一串 以後以為自己萬無一失了,一按編譯執行結果下面提示框居然說error...
C語言實現簡單的ATM機功能
6 模擬 atm機取款的過程 1 定義兩個能儲存 5個整形數的陣列,乙個用於儲存 5個人的卡號,乙個用於儲存對應卡號的密碼。2 判斷輸入的卡號是否在陣列中。3 如果在陣列中就讓輸入密碼,判斷是否和卡號對應的密碼匹配。4 判斷密碼,24小時內只允許輸入3次 錯誤的密碼。輸入錯誤應該提示還剩下的輸入次數...
自我複製機(C語言實現版)
剛看了北大劉田老師講的遞迴定理,忍不住好奇心,用c語言實現了他講的自我複製機。其中為了模擬圖靈機的可改變的輸入帶,我用了sprintf函式,使用字元陣列input來暫時儲存帶上的內容,方便改變。這裡,轉義字元是乙個大坑,所以我用deal字元陣列,來解決轉義字元的問題。實際上input和deal陣列裡...