實驗1、命令解釋程序的編寫算法
專業:商業軟件工程 班級:商軟2班 姓名:甘佳萍 學號:201406114207編程
1、 實驗目的數組
(1)掌握命令解釋程序的原理;函數
(2)掌握簡單的DOS調用方法;測試
(3)掌握C語言編程初步。ui
2、 實驗內容和要求編碼
實驗內容:根據教師指定的實驗課題,完成設計、編碼、測試工做。spa
實驗要求:編寫相似於DOS,UNIX的命令行解釋程序命令行
(1)自行定義系統提示符設計
(2)自定義命令集(8-10個)
(3)用戶輸入HELP以查找命令的幫助
(4)列出命令的功能,區份內部仍是外部命令
(5)用戶輸入QUIT退出
(6)內部命令有dir, cd, md, rd, cls, date, time, ren, copy等。
3、 實驗方法、步驟及結果測試
1. 源程序名:壓縮包文件(rar或zip)中源程序名yy.c
可執行程序名:yy.exe
2. 原理分析及流程圖
主要整體設計問題。
(包括存儲結構,主要算法,關鍵函數的實現等)
存儲結構:
char cmd[30][30]={"dir","cd","md","rd","cls","date","time","ren", "copy","quit","help"};
char cmd2[30][30]={"DIR","CD","MD","RD","CLS","DATE","TIME","REN","COPY","QUIT","HELP"}; char str[10];
主要算法:
if(strcmp(str,cmd[i])==0)
或else if(strcmp(str,cmd[i])!=0)
關鍵函數:
main()
3. 主要程序段及其解釋:
實現主要功能的程序段,重要的是程序的註釋解釋。
源程序:
#include<stdio.h> #include<stdlib.h> #include<string.h> main() { /*存放命令提示符的數組*/ char cmd[30][30]={"dir","cd","md","rd","cls","date","time","ren", "copy","quit","help"}; char cmd2[30][30]={"DIR","CD","MD","RD","CLS","DATE","TIME","REN","COPY","QUIT","HELP"}; char str[10]; int i; /*仿照cmd開頭輸出*/ printf("Microsoft Windows XP [版本 5.1.2600]\n<c>版權全部 1985-2001 Microsoft Corp.\n"); /*判斷命令的類型及功能*/ while(1) { printf("\nC:\\Documents and Settings\\hskd:>"); gets(str); //從鍵盤輸入 for(i=0;i<20;i++){ { if(strcmp(str,cmd[0])==0||strcmp(str,cmd2[0])==0) { system("dir"); //dir命令 break; } else if(strcmp(str,cmd[1])==0||strcmp(str,cmd2[1])==0) { printf("%s",cmd[1]); printf("\t類型:內部命令\n"); printf("\t顯示當前目錄的名稱或將其更改\n"); printf("\n"); break; } else if(strcmp(str,cmd[2])==0||strcmp(str,cmd2[2])==0) { printf("%s",cmd[2]); printf("\t類型:內部命令\n"); printf("\t建立目錄。\n"); printf("\n"); break; } else if(strcmp(str,cmd[3])==0||strcmp(str,cmd2[3])==0) { printf("%s",cmd[3]); printf("\t類型:內部命令\n"); printf("\t刪除目錄。\n"); printf("\n"); break; } else if(strcmp(str,cmd[4])==0||strcmp(str,cmd2[4])==0) { system("cls"); //清屏 break; } else if(strcmp(str,cmd[5])==0||strcmp(str,cmd2[5])==0) { printf("%s",cmd[5]); printf("\t類型:內部命令\n"); printf("\t顯示或設置日期。\n"); printf("\n"); break; } else if(strcmp(str,cmd[6])==0||strcmp(str,cmd2[6])==0) { printf("%s",cmd[6]); printf("\t類型:內部命令\n"); printf("\t顯示或設置系統時間。\n"); printf("\n"); break; } else if(strcmp(str,cmd[7])==0||strcmp(str,cmd2[7])==0) { printf("%s",cmd[7]); printf("\t類型:內部命令\n"); printf("\t重命名文件。\n"); printf("\n"); break; } else if(strcmp(str,cmd[8])==0||strcmp(str,cmd2[8])==0) { printf("%s",cmd[8]); printf("\t類型:內部命令\n"); printf("\t將至少一個文件複製到另外一個位置。\n"); printf("\n"); break; } else if(strcmp(str,cmd[9])==0||strcmp(str,cmd2[9])==0) { return 0; } else if(strcmp(str,cmd[10])==0||strcmp(str,cmd2[10])==0) { printf("類型:外部命令\n"); printf("dir\t內部命令 顯示一個目錄中的文件和子目錄。\n"); printf("cd\t內部命令 顯示當前目錄的名稱或將其更改。\n"); printf("md\t內部命令 建立目錄。\n"); printf("rd\t內部命令 刪除目錄。\n"); printf("cls\t內部命令 清除屏幕。\n"); printf("date\t內部命令 顯示或設置日期。\n"); printf("time\t內部命令 顯示或設置系統時間。\n"); printf("ren\t內部命令 從新命名文件。\n"); printf("copy\t內部命令 將至少一個文件複製到另外一個位置。\n"); printf("help\t外部命令 提供Windows命令的幫助信息。\n"); printf("quit\t外部命令 退出命令解釋程序\n"); printf("\n"); break; } else if(strcmp(str,cmd[i])!=0) { printf("此命令不是內部或外部命令,也不是可運行的程序或批處理文件\n"); printf("\n"); break; } } } } }
4. 運行結果及分析
通常必須配運行結果截圖,結果是否符合預期及其分析。
(截圖需根據實際,截取有表明性的測試例子)
運行結果:
輸入大寫或小寫的DIR,dir後的運行結果即查看目錄
輸入cls後的運行結果即清屏
4、 實驗總結
編寫命令解釋程序的過程有(如解決實際問題)。從解決實際問題的角度,咱們能夠這樣來看:首先要了解這個問題的基本要求,即輸入、輸出、完成從輸入到輸出的要求是什麼;其次,從問題的要害入手,從前到後的解決問題的每一個方面,即從輸入開始入手,着重考慮如何從輸入導出輸出。在這個過程當中,可肯定所需的變量、數組、函數,而後肯定處理的過程--算法。可得出最後的結論,進而完成程序的編寫。通過此次實驗,我對c語言有了深一步的瞭解,同時也初步瞭解了DOS的調用原理,命令解釋程序的工做原理。總的來講這個實驗不是很難,還有這個實驗頗有趣。