當前位置:首頁 » 編程語言 » c語言論文

c語言論文

發布時間: 2022-12-26 08:29:16

『壹』 求c語言的貪吃蛇畢業論文、畢業設計

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <time.h>
const int H = 8; //地圖的高
const int L = 16; //地圖的長
char GameMap[H][L]; //游戲地圖
int key; //按鍵保存
int sum = 1, over = 0; //蛇的長度, 游戲結束(自吃或碰牆)
int dx[4] = {0, 0, -1, 1}; //左、右、上、下的方向
int dy[4] = {-1, 1, 0, 0};
struct Snake //蛇的每個節點的數據類型
{
int x, y; //左邊位置
int now; //保存當前節點的方向, 0,1,2,3分別為左右上下
}Snake[H*L];
const char Shead = '@'; //蛇頭
const char Sbody = '#'; //蛇身
const char Sfood = '*'; //食物
const char Snode = '.'; //'.'在地圖上標示為空
void Initial(); //地圖的初始化
void Create_Food(); //在地圖上隨機產生食物
void Show(); //刷新顯示地圖
void Button(); //取出按鍵,並判斷方向
void Move(); //蛇的移動
void Check_Border(); //檢查蛇頭是否越界
void Check_Head(int x, int y); //檢查蛇頭移動後的位置情況
int main()
{
Initial();
Show();
return 0;
}
void Initial() //地圖的初始化
{
int i, j;
int hx, hy;
system("title 貪吃蛇"); //控制台的標題
memset(GameMap, '.', sizeof(GameMap)); //初始化地圖全部為空'.'
system("cls");
srand(time(0)); //隨機種子
hx = rand()%H; //產生蛇頭
hy = rand()%L;
GameMap[hx][hy] = Shead;
Snake[0].x = hx; Snake[0].y = hy;
Snake[0].now = -1;
Create_Food(); //隨機產生食物
for(i = 0; i < H; i++) //地圖顯示
{
for(j = 0; j < L; j++)
printf("%c", GameMap[i][j]);
printf("\n");
}

printf("\n小小C語言貪吃蛇\n");
printf("按任意方向鍵開始游戲\n");

getch(); //先接受一個按鍵,使蛇開始往該方向走
Button(); //取出按鍵,並判斷方向
}
void Create_Food() //在地圖上隨機產生食物
{
int fx, fy;
while(1)
{
fx = rand()%H;
fy = rand()%L;

if(GameMap[fx][fy] == '.') //不能出現在蛇所佔有的位置
{
GameMap[fx][fy] = Sfood;
break;
}
}
}
void Show() //刷新顯示地圖
{
int i, j;
while(1)
{
_sleep(500); //延遲半秒(1000為1s),即每半秒刷新一次地圖
Button(); //先判斷按鍵在移動
Move();
if(over) //自吃或碰牆即游戲結束
{
printf("\n**游戲結束**\n");
printf(" >_<\n");
getchar();
break;
}
system("cls"); //清空地圖再顯示刷新吼的地圖
for(i = 0; i < H; i++)
{
for(j = 0; j < L; j++)
printf("%c", GameMap[i][j]);
printf("\n");
}

printf("\n小小C語言貪吃蛇\n");
printf("按任意方向鍵開始游戲\n");
}
}
void Button() //取出按鍵,並判斷方向
{
if(kbhit() != 0) //檢查當前是否有鍵盤輸入,若有則返回一個非0值,否則返回0
{
while(kbhit() != 0) //可能存在多個按鍵,要全部取完,以最後一個為主
key = getch(); //將按鍵從控制台中取出並保存到key中
switch(key)
{ //左
case 75: Snake[0].now = 0;
break;
//右
case 77: Snake[0].now = 1;
break;
//上
case 72: Snake[0].now = 2;
break;
//下
case 80: Snake[0].now = 3;
break;
}
}
}
void Move() //蛇的移動
{
int i, x, y;
int t = sum; //保存當前蛇的長度
//記錄當前蛇頭的位置,並設置為空,蛇頭先移動
x = Snake[0].x; y = Snake[0].y; GameMap[x][y] = '.';
Snake[0].x = Snake[0].x + dx[ Snake[0].now ];
Snake[0].y = Snake[0].y + dy[ Snake[0].now ];
Check_Border(); //蛇頭是否越界
Check_Head(x, y); //蛇頭移動後的位置情況,參數為: 蛇頭的開始位置
if(sum == t) //未吃到食物即蛇身移動哦
for(i = 1; i < sum; i++) //要從蛇尾節點向前移動哦,前一個節點作為參照
{
if(i == 1) //尾節點設置為空再移動
GameMap[ Snake[i].x ][ Snake[i].y ] = '.';

if(i == sum-1) //為蛇頭後面的蛇身節點,特殊處理
{
Snake[i].x = x;
Snake[i].y = y;
Snake[i].now = Snake[0].now;
}
else //其他蛇身即走到前一個蛇身位置
{
Snake[i].x = Snake[i+1].x;
Snake[i].y = Snake[i+1].y;
Snake[i].now = Snake[i+1].now;
}

GameMap[ Snake[i].x ][ Snake[i].y ] = '#'; //移動後要置為'#'蛇身
}
}
void Check_Border() //檢查蛇頭是否越界
{
if(Snake[0].x < 0 || Snake[0].x >= H
|| Snake[0].y < 0 || Snake[0].y >= L)
over = 1;
}
void Check_Head(int x, int y) //檢查蛇頭移動後的位置情況
{

if(GameMap[ Snake[0].x ][ Snake[0].y ] == '.') //為空
GameMap[ Snake[0].x ][ Snake[0].y ] = '@';
else
if(GameMap[ Snake[0].x ][ Snake[0].y ] == '*') //為食物
{
GameMap[ Snake[0].x ][ Snake[0].y ] = '@';
Snake[sum].x = x; //新增加的蛇身為蛇頭後面的那個
Snake[sum].y = y;
Snake[sum].now = Snake[0].now;
GameMap[ Snake[sum].x ][ Snake[sum].y ] = '#';
sum++;
Create_Food(); //食物吃完了馬上再產生一個食物
}
else
over = 1;
}

『貳』 我要計算機畢業論文

計算機網路安全及防範技術

摘 要 主要闡述計算機信息網路攻擊和入侵的特點、方法以及其安全防範手段。
關鍵詞 計算機網路安全 防範技術

1 計算機網路安全的含義
計算機網路安全的具體含義會隨著使用者的變化而變化,使用者不同,對網路安全的認識和要求也就不同。例如從普通使用者的角度來說,可能僅僅希望個人隱私或機密信息在網路上傳輸時受到保護,避免被竊聽、篡改和偽造;而網路提供商除了關心這些網路信息安全外,還要考慮如何應付突發的自然災害、軍事打擊等對網路硬體的破壞,以及在網路出現異常時如何恢復網路通信,保持網路通信的連續性。
從本質上來講,網路安全包括組成網路系統的硬體、軟體及其在網路上傳輸信息的安全性,使其不致因偶然的或者惡意的攻擊遭到破壞,網路安全既有技術方面的問題,也有管理方面的問題,兩方面相互補充,缺一不可。人為的網路入侵和攻擊行為使得網路安全面臨新的挑戰。
2 計算機網路攻擊的特點
計算機網路攻擊具有下述特點:①損失巨大。由於攻擊和入侵的對象是網路上的計算機,所以一旦他們取得成功,就會使網路中成千上萬台計算機處於癱瘓狀態,從而給計算機用戶造成巨大的經濟損失。如美國每年因計算機犯罪而造成的經濟損失就達幾百億美元。平均一起計算機犯罪案件所造成的經濟損失是一般案件的幾十到幾百倍。②威脅社會和國家安全。一些計算機網路攻擊者出於各種目的經常把政府要害部門和軍事部門的計算機作為攻擊目標,從而對社會和國家安全造成威脅。③手段多樣,手法隱蔽。計算機攻擊的手段可以說五花八門。網路攻擊者既可以通過監視網上數據來獲取別人的保密信息;也可以通過截取別人的帳號和口令堂而皇之地進入別人的計算機系統;還可以通過一些特殊的方法繞過人們精心設計好的防火牆等等。這些過程都可以在很短的時間內通過任何一台聯網的計算機完成。因而犯罪不留痕跡,隱蔽性很強。④以軟體攻擊為主。幾乎所有的網路入侵都是通過對軟體的截取和攻擊從而破壞整個計算機系統的。它完全不同於人們在生活中所見到的對某些機器設備進行物理上的摧毀。因此,這一方面導致了計算機犯罪的隱蔽性,另一方面又要求人們對計算機的各種軟體(包括計算機通信過程中的信息流)進行嚴格的保護。
3 計算機網路中的安全缺陷及產生的原因
網路安全缺陷產生的原因主要有:
第一,TCP/IP的脆弱性。網際網路的基石是TCP/IP協議。但不幸的是該協議對於網路的安全性考慮得並不多。並且,由於TCP/IP協議是公布於眾的,如果人們對TCP/IP很熟悉,就可以利用它的安全缺陷來實施網路攻擊。
第二,網路結構的不安全性。網際網路是一種網間網技術。它是由無數個區域網所連成的一個巨大網路。當人們用一台主機和另一區域網的主機進行通信時,通常情況下它們之間互相傳送的數據流要經過很多機器重重轉發,如果攻擊者利用一台處於用戶的數據流傳輸路徑上的主機,他就可以劫持用戶的數據包。
第三,易被竊聽。由於網際網路上大多數數據流都沒有加密,因此人們利用網上免費提供的工具就很容易對網上的電子郵件、口令和傳輸的文件進行竊聽。
第四,缺乏安全意識。雖然網路中設置了許多安全保護屏障,但人們普遍缺乏安全意識,從而使這些保護措施形同虛設。如人們為了避開防火牆代理伺服器的額外認證,進行直接的PPP連接從而避開了防火牆的保護。
4 網路攻擊和入侵的主要途徑
網路入侵是指網路攻擊者通過非法的手段(如破譯口令、電子欺騙等)獲得非法的許可權,並通過使用這些非法的許可權使網路攻擊者能對被攻擊的主機進行非授權的操作。網路入侵的主要途徑有:破譯口令、IP欺騙和DNS欺騙。
口令是計算機系統抵禦入侵者的一種重要手段,所謂口令入侵是指使用某些合法用戶的帳號和口令登錄到目的主機,然後再實施攻擊活動。這種方法的前提是必須先得到該主機上的某個合法用戶的帳號,然後再進行合法用戶口令的破譯。獲得普通用戶帳號的方法很多,如: 利用目標主機的Finger功能:當用Finger命令查詢時,主機系統會將保存的用戶資料(如用戶名、登錄時間等)顯示在終端或計算機上;利用目標主機的X.500服務:有些主機沒有關閉X.500的目錄查詢服務,也給攻擊者提供了獲得信息的一條簡易途徑;從電子郵件地址中收集:有些用戶電子郵件地址常會透露其在目標主機上的帳號;查看主機是否有習慣性的帳號:有經驗的用戶都知道,很多系統會使用一些習慣性的帳號,造成帳號的泄露。
IP欺騙是指攻擊者偽造別人的IP地址,讓一台計算機假冒另一台計算機以達到矇混過關的目的。它只能對某些特定的運行TCP/IP的計算機進行入侵。IP欺騙利用了TCP/IP網路協議的脆弱性。在TCP的三次握手過程中,入侵者假冒被入侵主機的信任主機與被入侵主機進行連接,並對被入侵主機所信任的主機發起淹沒攻擊,使被信任的主機處於癱瘓狀態。當主機正在進行遠程服務時,網路入侵者最容易獲得目標網路的信任關系,從而進行IP欺騙。IP欺騙是建立在對目標網路的信任關系基礎之上的。同一網路的計算機彼此都知道對方的地址,它們之間互相信任。由於這種信任關系,這些計算機彼此可以不進行地址的認證而執行遠程操作。
域名系統(DNS)是一種用於TCP/IP應用程序的分布式資料庫,它提供主機名字和IP地址之間的轉換信息。通常,網路用戶通過UDP協議和DNS伺服器進行通信,而伺服器在特定的53埠監聽,並返回用戶所需的相關信息。DNS協議不對轉換或信息性的更新進行身份認證,這使得該協議被人以一些不同的方式加以利用。當攻擊者危害DNS伺服器並明確地更改主機名—IP地址映射表時,DNS欺騙就會發生。這些改變被寫入DNS伺服器上的轉換表。因而,當一個客戶機請求查詢時,用戶只能得到這個偽造的地址,該地址是一個完全處於攻擊者控制下的機器的IP地址。因為網路上的主機都信任DNS伺服器,所以一個被破壞的DNS伺服器可以將客戶引導到非法的伺服器,也可以欺騙伺服器相信一個IP地址確實屬於一個被信任客戶。
5 常見的網路攻擊及其防範對策
5.1 特洛伊木馬
特洛伊木馬程序技術是黑客常用的攻擊手段。它通過在你的電腦系統隱藏一個會在Windows啟動時運行的程序,採用伺服器/客戶機的運行方式,從而達到在上網時控制你電腦的目的。
特洛伊木馬是夾帶在執行正常功能的程序中的一段額外操作代碼。因為在特洛伊木馬中存在這些用戶不知道的額外操作代碼,因此含有特洛伊木馬的程序在執行時,表面上是執行正常的程序,而實際上是在執行用戶不希望的程序。特洛伊木馬程序包括兩個部分,即實現攻擊者目的的指令和在網路中傳播的指令。特洛伊木馬具有很強的生命力,在網路中當人們執行一個含有特洛伊木馬的程序時,它能把自己插入一些未被感染的程序中,從而使它們受到感染。此類攻擊對計算機的危害極大,通過特洛伊木馬,網路攻擊者可以讀寫未經授權的文件,甚至可以獲得對被攻擊的計算機的控制權。
防止在正常程序中隱藏特洛伊木馬的主要方法是人們在生成文件時,對每一個文件進行數字簽名,而在運行文件時通過對數字簽名的檢查來判斷文件是否被修改,從而確定文件中是否含有特洛伊木馬。避免下載可疑程序並拒絕執行,運用網路掃描軟體定期監視內部主機上的監聽TCP服務。
5.2 郵件炸彈
電子郵件炸彈是最古老的匿名攻擊之一,通過設置一台機器不斷的大量的向同一地址發送電子郵件,攻擊者能夠耗盡接受者網路的帶寬,占據郵箱的空間,使用戶的存儲空間消耗殆盡,從而阻止用戶對正常郵件的接收,防礙計算機的正常工作。此種攻擊經常出現在網路黑客通過計算機網路對某一目標的報復活動中。
防止郵件炸彈的方法主要有通過配置路由器,有選擇地接收電子郵件,對郵件地址進行配置,自動刪除來自同一主機的過量或重復的消息,也可使自己的SMTP連接只能達成指定的伺服器,從而免受外界郵件的侵襲。5.3 過載攻擊
過載攻擊是攻擊者通過伺服器長時間發出大量無用的請求,使被攻擊的伺服器一直處於繁忙的狀態,從而無法滿足其他用戶的請求。過載攻擊中被攻擊者用得最多的一種方法是進程攻擊,它是通過大量地進行人為地增大CPU的工作量,耗費CPU的工作時間,使其它的用戶一直處於等待狀態。
防止過載攻擊的方法有:限制單個用戶所擁有的最大進程數;殺死一些耗時的進程。然而,不幸的是這兩種方法都存在一定的負面效應。通過對單個用戶所擁有的最大進程數的限制和耗時進程的刪除,會使用戶某些正常的請求得不到系統的響應,從而出現類似拒絕服務的現象。通常,管理員可以使用網路監視工具來發現這種攻擊,通過主機列表和網路地址列表來分析問題的所在,也可以登錄防火牆或路由器來發現攻擊究竟是來自於網路外部還是網路內部。另外,還可以讓系統自動檢查是否過載或者重新啟動系統。
5.4 淹沒攻擊
正常情況下,TCP連接建立要經歷3次握手的過程,即客戶機向主機發送SYN請求信號;目標主機收到請求信號後向客戶機發送SYN/ACK消息;客戶機收到SYN/ACK消息後再向主機發送RST信號並斷開連接。TCP的這三次握手過程為人們提供了攻擊網路的機會。攻擊者可以使用一個不存在或當時沒有被使用的主機的IP地址,向被攻擊主機發出SYN請求信號,當被攻擊主機收到SYN請求信號後,它向這台不存在IP地址的偽裝主機發出SYN/消息。由於此時主機的IP不存在或當時沒有被使用所以無法向主機發送RST,因此,造成被攻擊的主機一直處於等待狀態,直至超時。如果攻擊者不斷地向被攻擊的主機發送SYN請求,被攻擊主機就會一直處於等待狀態,從而無法響應其他用戶的請求。
對付淹沒攻擊的最好方法是實時監控系統處於SYN-RECEIVED狀態的連接數,當連接數超過某一給定的數值時,實時關閉這些連接。
參考文獻
1 胡道元.計算機區域網〔M〕.北京:清華大學出版社,2001
2 朱理森,張守連.計算機網路應用技術〔M〕.北京:專利文獻出版社,2001
3 劉佔全.網路管理與防火牆〔M〕.北京:人民郵電出版社,1999

『叄』 計算機專業的基於C語言的圖書管理系統的設計與實現 論文開題報告

這個圖書管理系統有詳細要求嗎?

可以發給我看看 我做

『肆』 球一份關於單片機或c語言的論文!2000字左右的

一·基於MSP430 單片機的電源監控管理系統(單片機論文)

引言
大功率直流開關電源由PFC 和DC-DC 變換器組成,為了提高可靠性,並能夠對其進行離線或遠程監控管理,在開關電源模塊內設置監控管理系統。該系統對電源故障類進行監控,對電源輸出的電壓電流進行自動設定和調節,通過串列通信介面,與遠程中心監控站進行遠程監控和管理,這一功能在通信系統基站供電系統中尤為重要。本文提出了一種基於MSP430單片機的電源監控管理系統的設計和實現。

1 系統結構和硬體電路設計
系統的整體設計結構如圖1所示。本系統採用的核心晶元為TI公司推出16位系列單片機MSP430。MSP430具有集成度高,外圍設備豐富,超低功耗等優點。單片集成了多通道12bit的A/D轉換、片內精密比較器、多個具有PWM功能的定時器、片內USART、看門狗定時器、片內數控振盪器(DCO)、大量的I/O埠以及大容量的片內存儲器,採用串列在線編程方法,單片可以滿足絕大多數的應用需要。 MSP430的這種高集成度使應用人員不必在介面、外接I/O及存儲器上花太多的精力,而可以方便的設計真正意義上的單片系統,在許多領域得到了廣泛的應用。下面介紹該系統可以實現的功能和基於MSP430F149的電控系統的設計。

1.1 系統功能:
a.開機控制。上電後,單片機開始工作,按下電源鍵,點亮指示燈後,將電網220V接入PFC,開關電源啟動工作,然後接於負載。
b.電壓設定和調節。用單片機A/D口採集開關電源的輸出電壓值,並顯示於液晶屏上,通過單片機控制數字電位計調節輸出電壓值,實現自動調節;或者通過鍵盤的左右鍵選出電壓調節頁面,用上下鍵進行手動調節;也可以通過通信介面實現遠程調節。

c.電流調節。多台開關電源並聯使用時,要求各台電源的負載電壓相等。單片機A/D口採集轉換成電壓值的負載電流值,通過通信口得到各台電流值,取電流平均值,控制數字電位計調節輸出電壓,使輸出負載電流達到平均值;或者通過鍵盤的左右鍵選出電流調節頁面,用上下鍵進行手動調節。

d.故障報警。單片機通過光電耦合器檢測到各項輸入輸出故障時,揚聲器產生蜂鳴,相應的報警燈閃爍,並在液晶屏上顯示故障類型及處理方法。

e.監測。單片機A/D口對電網電壓,輸出電壓,輸出電流進行採集測量,當出現超限時進行報警。

f.通信。包括單片機與各台開關電源間的通信和單片機與中心監控站的通信。

1.2 電壓調節電路
電壓調節電路由單片機、數字電位計X9313和可調分流基準晶元TL431組成,其電路原理圖如圖2所示。Xicor9313是固態非易失性電位器,可用作數字控制的微調電位器。TL431是TI生產的一個有良好的熱穩定性能的三端可調分流基準源,它的輸出電壓用兩個電阻就可以任意地設置到從VREF(2.5V)到36V范圍內的任何值。工作時,單片機的一個IO控制INC計數輸入腳,為其提供計數脈沖,此輸入端為下降沿觸發。另一個IO控制U/D升降輸入端,當U/D為高電平時,X9313內部計數器進行加法計數,VW端的輸出電壓上升,由於VW接地,使VH端電壓降低,而TL431的REF輸出端電壓為恆定的2.5V,從而使Vcc處輸出電壓升高;同理當U/D為低電平時,Vcc處輸出電壓降低,這樣就實現了電壓輸出調節。

1.3 模擬數據採集
MSP430F149內嵌入一個高精度的,具有采樣與保持功能的12位ADC轉換模塊,內部提供各種采樣與保持時鍾源。MSP430有8個外部輸入通道可選, 最高采樣速度可達200KHZ,並且還內置溫度感測器,可以測量晶元內的溫度,如果測量溫度高於或低於預設的溫度是,可以通過外接部件顯示告警信息,同時具有6種可編程選擇的內部參考電壓。該轉換模塊為一些需要模擬量採集的場合提供了便利。我們選擇的參考電壓是0~2.5V,這樣MSP430F149的AD解析度就是2.5/4096 = 0.61V左右。由於輸入的模擬電壓量較高,不能直接與單片機的ADC采樣埠相連,因此用串聯一個滑動變阻器的方法進行了降壓處理,成功解決了上述問題。

1.4 人機對話設計
系統的人機操作界面由液晶顯示屏、指示燈和鍵盤組成。液晶選用的是基於T6963C 的液晶模塊YM12864。鍵盤採用的是3×3 的陣列接法,系統採用了圖形用戶界面,操作簡單易行,顯示實用美觀。工作時,液晶屏可以實時顯示採集到的電網電壓、輸出電壓、輸出電流及各種報警信息,操作相應鍵盤可以進行顯示頁面的切換,對輸出電壓,輸出電流進行自動、手動及遠程式控制制調節。當有報警信息產生時,相應得指示燈會閃爍警示,同時與單片機連接的揚聲器會產生報警蜂鳴聲,以提醒操作人員做出相應的處理。

2 系統軟體設計
430 支持匯編語言和C 語言兩種語言編程,因此可以在一個工程文件中同時用兩種語言,使用匯編語言,便於在調試時尋找邏輯和指令的聯系及地址的定位正確與否。使用C 語言進行編程大大減少了工作量,編好後的程序可讀性好,易於修改和維護。開發工具使用IARSystems 公司的IAR Embedded Workbench,它集成了編輯、編譯、鏈接、下載與在線調試(Debug)等多種功能,使用方便,並具備高效的C 語言編譯能力。

考慮到軟體開發效率及可維護性,系統軟體設計遵循模塊化的編程思想,將系統功能劃分為幾個相對獨立的功能模塊。它們包括:液晶顯示模塊、AD 轉換模塊、按鍵監測響應模塊、報警監測響應模塊、電壓電流調節模塊、數據處理模塊、通信模塊。每個模塊都要進行獨立的測試,最後結合到一起。整個系統的軟體流程圖如圖3 所示。

按鍵監測模塊是其中的重要組成部分,它控制著AD轉換的啟動,顯示頁面的切換,及電壓電流的自動調節,手動調節,遠程調節的啟動和切換。報警監測模塊對開關電源的保護起著至關重要的作用,它實時的監測著開關電源是否出現故障,當發生輸入電壓過壓,輸入電壓欠壓,PFC故障時應切斷總電源,當發生輸出電壓過壓,輸出電壓欠壓,模塊過熱,及IPM保護故障時應關斷DC-DC變換器。
在對各模塊進行整合時,要注意各中斷之間的沖突。由於在MSP430 的中斷優先順序中,ADC12 采樣轉換中斷優先順序高於TIMERA 中斷,因此當在響應TIMERA 中斷的過程中會執行ADC12 采樣轉換中斷,或者TIMERA 的中斷響應被迫延遲,這樣就會影響在TIMERA中斷中執行的報警監測響應程序,不能達到對開關電源故障類的實時檢測。在本系統中,利用按鍵控制ADC12 采樣轉換中斷的啟動和關閉,從而解決中斷沖突。

3 結論
本文在基於MSP430F149電源監控管理系統的設計和實現的基礎上對MSP430的系統設計做了討論,提出並解決了在設計中出現的問題。本文作者的創新點:利用MSP430的系統結構簡單,外圍電路少,效率高的特點,設計實現了簡潔直觀、使用方便、操作全程漢字提示、監控能力強、運行穩定、安全可靠的電源監控管理系統,大大降低了成本,取得了相當可觀的經濟效益,滿足實際需求。

二·C語言論文:

嵌入式以門檻高,入門難的方式攔截了無數的學者。然而單片機作為嵌入式的入門課,如何以一種正確的方法學習單片機將關繫到是否能學習好嵌入式。
縱所周知,學習嵌入式先玩ptotel,再做單片機。Protel簡單的來說就是一個做PCB板的純英文的軟體。學習ptotel前必需具備一定的電路基礎和英語能力,電路基礎我想大部分同學都是有的,而英語這一塊卻是許多人所頭疼的。這對英語基礎差的同學是一種打擊,再者如果毅力不強,我想你是自學不下去的。毅力是學任何東西所必需的一種能力、素質,是一種遇挫折而不言敗的決心。
不管學的是protel還是單片機,首先要找一個能夠指導你的人。何謂指導,指導並不是說他要一步一步地教你去做,而是一個在關鍵時刻能夠為你指出一條道路的人。
我認為學習嵌入式方法最重要,在學protel和單片機之前應該想辦法了解關於學習它們的方法。比如說protel吧,許多人理科的學生都是以一種純理解的角度去學的,畫一個導線、元件問一下為什麼要這樣畫,生成網路表也追根溯源地問個網路表的由來。其實許多東西只是懂用就行,理論的東西懂得再多不懂用也是枉然的。
所以學習protel有地方不懂你就問你的指導員,有許多的東西是規定死了的,不是你想半天一夜就可以為你而改變的。這不同於軟體設計,軟體設計在你的苦思之下也許可以找到另一種更好的方法。

單片機嘛,不得不承認中國沒一本單片機好書。我學習單片機的時候看過的單片機書有七本,大多數都是不盡人意的。在這里我冒昧地說:中國人寫書確實缺乏一點「讀者至上」的原則。我所看過的單片機書我想有很多都是以他的角度去寫的,沒有幾個人是站穩在讀者的角度上寫的。書上的章節注釋極不清楚,許多重要的地方都是沒有說明的,說句不好聽的話,作者似乎以為讀者的水平也像他一樣高。而外國人的書呢,同樣的書,同樣的知識點,有同樣的中國人的書的兩三倍那麼厚,這是為什麼。這是因為外國人的書點點滴滴都是面向著讀者的。注釋、說明、總結應有盡有。所以,我在這里發表一個也許同胞會扔雞蛋到我身上的觀點,那就是:不管學什麼,優先選擇外文翻譯書,或是純英文書。得到一本好書對我們的影響極為巨大。這一部分我用一句話來總結就是:中國人的書適合教學,而外國人的書不僅適合教學還適合自學。

中國人的單片機書往往都是先介紹單片機的內部結構、中斷,定時器,然後再到I/O口。一開始就讓我們學習單片機內部結構,中斷、定時器的內部結構和原理,把我們弄得一塌糊塗的時候再和我們講例子,怎樣去操作實驗板。如果自學的話我想許多同學是學不下去的,幹嘛要把非得把單片機的內部結構像解剖學一樣弄個徹底才實踐去應用它呢?即使你把單片機全解剖清楚了還是不會用你手中的這塊實驗板的。我覺得如果在學單片機之前沒有學過匯編語言就直接用C語言學的話,即使學完了單片機,對單片機的內部結構和單片機的工作原理也是不清楚的。學了匯編之後再學單片機的話效果將會好得多,所以不要心急,有些東西是急不來的。
所以我認為學習單片機要在實踐中學習,先實踐再去了解它的結構和原理,如果你實在不能了解它的結構和原理那也無所謂的,只要你懂得用就可以了!(沒學過匯編的只能這么說了)
我們可以先從 I/O口學習,看一些例子燒錄些程序,再看一下現象,之後再嘗試了解一下所要用到的單片機的內部結構,最後在這個現象的知識基礎上,編一個自己想要的程序、現象出來。這樣學習的話既不無聊,成就感也有了。為什麼有些人可以把學習當一種快樂,而許多人在唉聲嘆氣,我想有一部分是出自這個原因。
不同的實驗板有不同的PCB圖,所以I/O的操作也是有所不同的。不過操作的原理都是一樣的,有些同學可能會抱怨教程里的實驗板和自己手中的實驗板不同,這是大可不必多慮的。I/O這一步在調試中看現象的理念很重要,比如改變一個語句會產生何種現象,為什麼會產生,這些都是要在調試中掌握的。
中斷的學習方法也是類似的,先實踐發現有陌生的地方就去查看相應的寄存器,等實現了自己想要的現實再慢慢地解剖一下單片機的寄存器,這樣學起來會更有意義,記得更牢。中斷也沒復雜的東西的,只不過學幾個中斷函數,優先順序之類的。有一定C語言基礎的同學在優先順序這一塊可以聯系C語言中運算符的優先順序,我相信有了C語言基礎定義一兩個中斷函數也不是什麼問題了的。
我學過的單片機的內容在我文檔的實例之中,實例的數量不多,但這些都是直接點擊單片機知識點的。隨著我的學習漸漸地深入後我再把我實現過的東西寫入實例之中吧。

希望對你有所幫助,祝成功!

『伍』 C語言的用途,定位及特點(論文)

1.2 C 語言的特點
C 語言發展如此迅速, 而且成為最受歡迎的語言之一, 主要因為它具有強大的
功能。許多著名的系統軟體, 如DBASE Ⅲ PLUS、DBASE Ⅳ 都是由C 語言編寫的。
用C 語言加上一些匯編語言子程序, 就更能顯示C 語言的優勢了, 象PC- DOS 、
WORDSTAR等就是用這種方法編寫的。歸納起來C 語言具有下列特點:
1. C是中級語言
它把高級語言的基本結構和語句與低級語言的實用性結合起來。C 語言可以象
匯編語言一樣對位、位元組和地址進行操作, 而這三者是計算機最基本的工作單元。
2. C是結構式語言
結構式語言的顯著特點是代碼及數據的分隔化, 即程序的各個部分除了必要的
信息交流外彼此獨立。這種結構化方式可使程序層次清晰, 便於使用、維護以及調
試。C 語言是以函數形式提供給用戶的, 這些函數可方便的調用, 並具有多種循
環、條件語句控製程序流向, 從而使程序完全結構化。
3. C語言功能齊全
C 語言具有各種各樣的數據類型, 並引入了指針概念, 可使程序效率更高。另
外C 語言也具有強大的圖形功能, 支持多種顯示器和驅動器。而且計算功能、邏輯
判斷功能也比較強大, 可以實現決策目的。
4. C語言適用范圍大
C 語言還有一個突出的優點就是適合於多種操作系統, 如DOS、UNIX,也適用於
多種機型。

『陸』 為什麼要學習c語言論文

C的主要設計是生成可移植代碼,同時保持性能並最小化佔用空間(CPU時間,內存使用,磁碟I / O等)。這對於操作系統,嵌入式系統或性能很重要的其他程序(「高級」介面會影響性能)非常有用。使用C,可以相對容易地保持對給定行真正做的事情的心理描述,因為大多數事情都是在代碼中明確寫出來的。C為低級應用程序提供了很大的代碼庫。它是UNIX的「本機」語言,使其具有靈活性和可移植性。它是一種穩定而成熟的語言,不太可能在很長一段時間內消失,並且已被移植到大多數(如果不是全部)平台。
一個有力的原因是內存分配。與大多數編程語言不同,C允許程序員直接寫入內存。C中的關鍵結構(如結構,指針和數組)旨在以高效,與機器無關的方式構造和操作內存。特別是,C可以控制數據結構的內存布局。此外,動態內存分配在程序員的控制之下(這也意味著內存釋放必須由程序員完成)。像Java和Perl 這樣的語言使程序員不必管理內存分配和指針的大部分細節(內存泄漏除外)和一些其他形式的超額內存使用)。這很有用,因為在構建高級程序時處理內存分配是一個高度容易出錯的過程。但是,在處理低級代碼(例如控制設備的操作系統部分)時,C提供了統一,干凈的界面。大多數其他語言都不存在這些功能。
雖然Perl,PHP,Python和Ruby可能功能強大,並且支持C中默認未提供的許多功能,但它們通常不是用自己的語言實現的。相反,大多數此類語言最初依賴於使用C(或其他高性能編程語言)編寫,並且需要將它們的實現移植到新平台才能使用它們。
與所有編程語言一樣,無論您是否想要選擇C而不是其他高級語言都是一個意見問題,技術和業務要求都可以決定所需的語言。

『柒』 中職學校的C語言教學

中職學校的C語言教學

論文摘要:隨著我國經濟的不斷發展,計算機專業畢業生有很廣闊的就業市場,然而計算機行業人才濟濟,就業競爭激烈,中職學校的計算機專業學生就不能局限於一些常用的應用軟體的學習,C語言的學習顯得尤為重要。本文主要淺談了中職學校的C語言教學體會。

論文關鍵詞:中職學生;C語言;教學目標

為拓展中職學生的就業渠道,C語言課程的學習必不可少。C程序設計是計算機應用人員應掌握的基本功,是計算機軟體開發的入門語言,主要培養學生演算法設計的基本思想和程序設計的基本技能。下面我就談一下幾年來C語言教學的一些體會。

一、培養學習興趣

興趣是入門教育的關鍵.培養學習興趣很重要。由於多數中職學生沒有接觸過計算機語言.因此需要培養他們的學習興趣。針對中職學生基礎不扎實及本課程枯燥深奧的特點。教師應採取多媒體教學,向學生展示一些趣味性的問題並演示實用性的程序,想方設法吸引學生。如給學生講解“水仙花數、猴子吃桃、翻譯密碼、判斷素數”等問題,並讓學生用編程軟體解決這些問題,同時運行C程序,使學生在親身實踐中體會到樂趣;另外,可以通過一些影片向學生介紹一些lT人士的經歷和成功經驗,增強學生學習C語言的信心和動力。

二、選擇適合中職教育的教材與教學方式。合理設置教學目標

中職學生普遍基礎知識不扎實。所以教材內容要強調基礎性,語言表達力求通俗淺顯易懂,以程序設計為主線,以編程應用為驅動,通過案例和問題引出知識重點,重點講解程序設計的思想和方法,穿插講解相關的語言知識,使教學效果既有深度又有廣度,選擇的教材盡量符合初學者的要求。

C語言最主要的教學方式除了教師上課就是讓學生上機實踐。這是很重要的`一個環節。教師講得再好。學生感覺“能看懂”“能聽懂”。卻不動手實踐,仍然掌握不了知識,更談不上運用。在上機過程中,學生可以進一步理解和掌握課堂所講知識,許多不清楚或不理解的問題通過上機操作可迎刃而解。在組織學生上機實踐過程中。教師要適當地設計一些難度適中的作業,激發學生開動腦筋,讓學生自己在有目的的情況下,去尋找解決的方法,讓其真正當學習的主人,最大限度地激勵學生的學習積極主動性。總之。我們應當十分重視動手編寫程序和上機運行程序。

教學目標是學生學習的目的。教學目標的定位,要根據教學對象的特點而定。就中職學生而言,教學目標是提高分析問題、解決問題的能力。重點分析程序設計過程,形成程序設計過程理念。能夠讀程序。編寫一些簡單程序,培養學生良好的編程習慣,逐步提高學生編程能力。C語言的學習只是程序設計的開端,所以我們教師不要設置好高鶩遠的教學目標。

三、分組教學,培養自學能力。注重培養團隊合作精神

由於中職學生自主學習能力、自控能力沒有大學生強,所以中職學生很容易失去上機興趣,也就達不到上機實踐的目的。為此,教師可適當轉變上機實踐的形式:以小組形式上機實踐。上機前分配給每個學習小組不同的學習任務。組長負責分工.讓本組學生利用課余時間去思考、查詢收集資料,上機時各組分別完成相應任務。然後相互演示成果,分析優劣利弊,再互換任務,最後討論編程體會,取長補短。在此過程中教師適當指導,主要過程可由學生自行解決,讓學生在切磋的過程中自主學習並且培養團結合作的精神。

四、激勵式教學。適當引入考核機制,啟發學生求知慾

在教學中培養學生創造力需要用考核這個手段來激勵、鼓舞學生,考核應從兩個方面入手,可採用“問題式”“階段式的辦法。“問題式”就是根據學生課堂所學知識,在上機實踐課時,讓學生獨立解決一個實際應用題、完成一個小游戲等。“階段式”就是把一個階段所學知識進行一次考核,但知識點不宜過多。有了考核機制.就能最大限度地激勵學生的學習潛能。

五、課後及時反饋,逐步改進教學方案和方法

要想提升教學業務水平,提高教學效果,就必須聽取多方面的建議與意見。首先要經常聽聽學生的心聲。學生就是上帝。學生的需求就是我們的追求與目標。其次來自教研組和教學檢查組。教研組和教學檢查組的意見具有指導作用。最後是來自企業調研。為了防止知識陳舊過時.我們教師可以通過暑期去軟體公司工作實踐和調研.了解他們的需求,切合實際需要.重新修改教學方案,讓學生能學以致用。

以上是本人在中職學校擔任計算機C語言課程教學的一些體會,我會在以後的教學中細心觀察,不斷地去探索研究.不斷豐富教學經驗,為中職教育事業貢獻一份力量。

論文相關查閱: 畢業論文範文 、 計算機畢業論文 、

『捌』 計算機專業C與C++程序設計研究論文

計算機專業C與C++程序設計研究論文

摘要 :首先介紹了目前高校計算機學院C族語言相關程序設計課程的建設狀況。然後從C族語言的相互衍生關系出發,提出了在高校計算機課程體系中去除C語言的基礎課程,將其綜合成一門C++程序設計課程來供學生學習,並對課程內容、參考教材和課時安排上給出了自己的建議。

關鍵詞 :C語言;C++語言;程序設計

高校的C族語言教學總是按照先學C語言,再學C++的順序進行,這種學習順序隨著C++標準的不斷升級改革後變得越來越不適用。早期的C++屬於多面性語言,即可以像C一樣進行模塊化的面向過程的編程設計,也可以像Java一樣進行抽象的面向對象程序設計。那時的教學者考慮的是學生應當從較為便於理解的面向過程的編程思路入門學習C語言編程,然後在熟練了面向過程的編程方式後再從C語言延伸到C++,轉而學習面向對象的程序設計。可是隨著面向對象的程序設計在應用市場上佔領了絕對的主導地位後,再讓學生從面向過程著手就等於是浪費學習時間。加上C++和C兩門語言的初級語法思想是完全一致的,開設兩門課程浪費了學時,也耽誤後續更重要的核心課程的學習。

1程序設計語言C與C++的比較

1.1C與C++的共性。一般簡要的介紹是把C++當作C的加強版,這種認知當然是錯誤的,C++語言的設計者在設計之初為了保障自家語言會受到開發者的關注,所以兼容了的C的語法,這就自然使得C++可以使用C的編程方式進行程序設計,所以也導致了很多人對這兩種語言的關系產生了錯誤的認知。同時由於C語言本身設定上的優越性,所以C++在進行自我定義的時候也沿用了C語言很多優良的性質。基礎數據結構一致,C與C++的基礎數據類型都是以變數和常量作為基本屬性劃分,類型上有字元型、整型、長整型、單精度浮點型和雙精度浮點型,不過C++額外增設了布爾型。復合型數據結構上也都同時具有數組、多維數組、結構體、枚舉類型和共同體,但是C++增設了字元串類型以替代C語言中的字元數組,功能上更加強大,也更加便捷。在語法方面,聲明、賦值、循環、選擇的結構和實現都是一致的,並且C++雖然提倡使用類和對象的概念去設計程序結構,可也同樣支持函數體結構的程序設計結構。並且C語言中函數的賦值都是間接調用,在使用C語言函數時總是會在指針上出現各種紕漏,但是C++的函數體可以使用引用參數,這就使得C++的函數體比之C的更加好用。總的說來就是,C++標准下用戶可以完全使用C語法進行編程而不會出現任何BUG,同時C++自身的優越設定和標准使得其設計能力比C要強大數倍,是目前市場上大型程序開發的首選語言。

1.2C與C++的不同。上一節介紹了C++和C的.基礎語法上的區別,這些區別都是C++的作者在C的基礎之上修訂而來的結果,是為了讓C++標准下得面向過程的程序設計比之單純的C更加便捷方便。但是C++的誕生伊始,就是一門向上使用面對對象的程序設計思想的高級編程語言。它的封裝性、繼承性、多態性和對象唯一性才是C++成為強大高級語言的重要原因,這些特性都是C語言不可能擁有的。所以C能夠實現的程序,C++能夠實現並且實現的更為方便,C不能實現的程序,C++同樣可以實現。

1.3C++的特色。承接上一節,C++和C之間最大的不同,也是C++自身最值得誇耀的特性,就是面向對象程序設計思想。這種思想使得C++語言設計出來的程序,變成了類和對象的有機結合,這種結合的代碼比之面向過程的函數體架構的代碼更加易讀,共同開發起來容易上手,後續的維護者也不用費更多的腦筋去理解前人的代碼含義。而類和對象的設計思路,使得開發者合作時相互之間的工作變的更為獨立,雙方之間只需要知道對方所寫的類實現的功能和包含的數據就行。這種特性我們稱之為良好的封裝性,開發者之間不需要去知道對方的代碼是如何實現,甚至在此之上還可以保證良好的代碼健壯性。因為類的引入,更先進的作用域機制也被引入進來,類的書寫者往往會將自己類中的數據進行嚴格的作用域限定,防止其他合作者擅自去修改和使用自己類中的數據。合作者想要知道類中的數據或者使用類中的數據,只能通過類的書寫者定義的帶有檢查機制的方法才行。這樣會使得很多人合作開發的大型項目的穩定性和安全性比之用C語言開發時再上一個台階。同時類的概念中還有一個先進的設定就是繼承性,並且由這個繼承性還延伸出了介面的概念。有了可以繼承的介面和類,那麼開發者在對程序進行迭代的瀑布開發流程時,就可以很好的使用自己曾經開發的源代碼,或者借用其他項目的源代碼,因為只要學會科學的使用繼承機制,就不僅僅是節約程序員的代碼時間,也減少了程序員在回顧曾經代碼時發生的錯誤和歧義。而與繼承機制配合使用的是多態性,曾經C語言中定義的函數,其靈活度非常差,特定的函數只能滿足特定程序定義的需求,想要重用曾經的源代碼是幾乎不可能的事情。我們剛才提到的繼承機制使得C++開發者復用源代碼成為了一種習慣,但是復用時不可避免的修改問題又擺到了檯面上,多態機制順應而生了。多態機制使得類不僅可以繼承其他類,將父類的數據和方法都在本類體中自如的使用,同時還可以用本類中新的定義和代碼去覆蓋父類中的數據定義和方法。這就讓程序員變的更加自由,想用父類的數據和方法時就去繼承,但是不想全部使用時就加上多態機制去覆蓋。這樣代碼之間的重復利用率變得十分客觀,節約了大量的開發時間和開發成本。

2程序設計語言C與C++開設建議

C++課程的內容應當如下安排:第一部分,教授C++的基礎語法,讓學生可以編寫出在DOS命令行下輸入輸出的程序,了解編程的基本概念和思想。並且這時應當同時進行C和C++的雙向語法教學,為日後學生進入高年級後的方向選擇打下基礎。此部分使用半個學期最為適宜,並且此時並不灌輸學生何為面向對象何為面向過程,而主在讓學生使用基礎語法進行最基本的編程探索。第二部分,在學生有了基礎編程知識後,將數據結構的內容放入課程中去,用半學期的時間教授學生用C++實現的各類常見數據結構。並且結合實際開發項目中的代碼作為閱讀補充,讓學生明白數據結構的知識對程序開發的意義,然後將簡化後的小項目作為課堂的主要內容,用實際的代碼讓學生去理解那些枯燥的數學定理和概念。而且在實現數據結構的過程中,必然會面對一些更為高級的C++語法和概念。總的來說,用大一上的一個學期讓學生對於基礎編程有了良好的認知和深入,是十分值得和有效的。第三部分,在學生有了數據結構的基礎和C++的基本語法掌握後,應當面對一些實際的開發項目和問題。當然實際的問題還是需要老師進行簡化,其主要目的是讓學生掌握C++的高級特性和實際軟體開發的過程與思路,並且想學生傳授基礎的演算法。這一部分較為困難,應當使用一個學期讓學生慢慢的掌握和熟悉。第四部分,在學生算是對C++語言和數據結構與演算法都有了基礎的入門後,再進行課堂教學意義就不大了,應當再大二上學期開設一門課程設計實驗課,讓學生完成幾個難度從小到大的項目,循序漸進的掌握基本的實際開發技巧和思維。

參考文獻

[1]羅莉.計算機程序設計的多應用型開發與實現[J].產業與科技論壇,2015(14):54-55.

[2]鄧薇,何錇,錢俊彥,等.深度優先的多基因表達式程序設計[J].模式識別與人工智慧,2013(9):819-828.

[3]宛西原,汪霞.非計算機本科專業計算機程序設計課程的改革思考[J].計算機工程與科學,2014(z1):56-59.

;

『玖』 C語言畢業設計

//實現計算機功能的程序 a program which can work the functions as a computer.
#include <stdio.h>//頭文件
#include <conio.h>
void menu();//聲明部分
void add();
void sub();
void mul();
void div();
void remain();
void add_n_to_m();
void factor();
main()
{
int i;
while(1)
{
system("cls");//清屏功能
menu();
printf("choose function:");
scanf("%d",&i);
switch(i)
{
case 1:add();getch();break;//調用部分
case 2:sub();getch();break;
case 3:mul();getch();break;
case 4:div();getch();break;
case 5:remain();getch();break;
case 6:add_n_to_m();getch();break;
case 7:factor();getch();break;
case 8: exit(0);break;
}
}
}
//以下是自己定義的函數
void menu()//菜單
{
printf("+====my counter===+\n");
printf("+功能如下: +\n");
printf("+ 1.加法 +\n");
printf("+ 2.減法 +\n");
printf("+ 3.乘法 +\n");
printf("+ 4.除法 +\n");
printf("+ 5.求余 +\n");
printf("+ 6.從n到m的和+\n");
printf("+ 7.階乘 +\n");
printf("+ 8.退出 +\n");
printf("+=================+\n");
}
void add()//加法運算
{
double a,b;
printf("input two numbers:");
scanf("%lf%lf",&a,&b);
printf("%lf+%lf=%lf\n",a,b,a+b);
}
void sub()//減法運算
{
double a,b;
printf("input two numbers:");
scanf("%lf%lf",&a,&b);
printf("%lf-%lf=%lf\n",a,b,a-b);
}
void mul()//乘法運算
{
double a,b;
printf("input two numbers:");
scanf("%lf%lf",&a,&b);
printf("%lf*%lf=%lf\n",a,b,a*b);
}
void div()//除法運算
{
double a,b;
printf("input two numbers:");
scanf("%lf%lf",&a,&b);
if(b==0)//被除數不能為0
printf("error\n");
else
printf("%lf/%lf=%lf\n",a,b,a/b);
}
void remain()//求余運算
{
int a,b;
printf("input two numbers:");
scanf("%d%d",&a,&b);
if(b==0)//被除數不能為0
printf("error\n");
else
printf("%d%%%d=%d\n",a,b,a%b);
}
void add_n_to_m()//累加
{
int m,n,i=0,s=0;
printf("input n and m:");
scanf("%d%d",&n,&m);
if(n>m) printf("error.\n");//條件限制
else
{
for(i=n;i<=m;i++)
s+=i;
printf("%d+...+%d=%d\n",n,m,s);
}
}
void factor()//階乘
{
int n,i,s;
printf("input a number:");
scanf("%d",&n);
if(n<=0) printf("error.\n");//條件限制
else
{
for(i=1,s=1;i<=n;i++)
s*=i;
printf("%d!=%d\n",n,s);
}
}

『拾』 C語言遺傳演算法在求解TSP問題 畢業論文+源代碼



摘要
I
Abstract
II


1
第一章
基本遺傳演算法
2
1.1
遺傳演算法的產生及發展
3
1.2
基本原理
3
1.3
遺傳演算法的特點
3
1.4
基本遺傳演算法描述
5
1.5
遺傳演算法構造流程
6
第二章
遺傳演算法的實現技術
6
2.1
編碼方法
7
2.1.1
二進制編碼
7
2.1.2
格雷碼編碼
7
2.1.3
符點數編碼
8
2.1.4
參數編碼
8
2.2
適應度函數
10
2.3
選擇運算元
10
2.4
交叉運算元
10
2.4.1
單點交叉運算元
10
2.4.2
雙點交叉運算元
11
2.4.3
均勻交叉運算元
11
2.4.4
部分映射交叉
11
2.4.5
順序交叉
12
2.5
變異運算元
12
2.6
運行參數
12
2.7
約束條件的處理方法
13
2.8
遺傳演算法流程圖
14
第三章
遺傳演算法在TSP上的應用
15
3.1
TSP問題的建模與描述
15
3.2
對TSP的遺傳基因編碼方法
16
3.3
針對TSP的遺傳操作運算元
17
3.3.1
選擇運算元
17
3.3.1.1
輪盤賭選擇
17
3.3.1.2
最優保存策略選擇
17
3.3.2
交叉運算元
20
3.3.2.1
單點交叉
20
3.3.2.2
部分映射交叉
21
3.3.3
變異運算元
23
3.4
TSP的混和遺傳演算法
26
第四章
實例分析
27
4.1
測試數據
27
4.2
測試結果
27
4.3
結果分析
27


TSP
(Traveling
Salesman
Problem)旅行商問題是一類典型的NP完全問題,遺傳演算法是解決NP問題的一種較理想的方法。文章首先介紹了基本遺傳演算法的基本原理、特點及其基本實現技術;接著針對TSP
問題,論述了遺傳演算法在編碼表示和遺傳運算元(包括選擇運算元、交叉運算元變異運算元這三種運算元)等方面的應用情況,分別指出幾種常用的編碼方法的優點和缺點,並且結合TSP的運行實例詳細分析了基本遺傳演算法的4個運行參數群體大小、遺傳演算法的終止進化代數、交叉概率、變異概率,對遺傳演算法的求解結果和求解效率的影響,經過多次的測試設定出了它們一組比較合理的取值。最後,簡單說明了混合遺傳演算法在求解TSP問題中的應用並對遺傳演算法解決TSP問題的前景提出了展望。
關鍵詞:TSP
遺傳演算法
遺傳運算元
編碼
@@@需要的話按我的名字找我吧

熱點內容
數字化儲存與編譯是什麼 發布:2025-05-18 02:56:55 瀏覽:216
個人網站模板源碼 發布:2025-05-18 02:51:17 瀏覽:489
主伺服器ip地址 發布:2025-05-18 02:46:29 瀏覽:855
電腦配置太低玩不了絕地求生怎麼辦 發布:2025-05-18 02:38:39 瀏覽:796
存儲過程怎麼出錯了 發布:2025-05-18 02:37:16 瀏覽:367
32寸演算法 發布:2025-05-18 02:22:14 瀏覽:743
寶塔資料庫備份 發布:2025-05-18 02:14:18 瀏覽:192
安卓商店下載的光遇是什麼服 發布:2025-05-18 02:13:38 瀏覽:31
網頁挖礦源碼 發布:2025-05-18 02:13:34 瀏覽:307
centosftp伺服器設置參數 發布:2025-05-18 02:12:55 瀏覽:216