㈠ c語言課程的總結
1.先學習C語言的基礎知識。現在正在學C語言的在校學生可以直接進入第2步學習。
2.按照《C語言程序設計入門學習六步曲》進行上機練習。
3.在上機練習時要養成良好的編程風格。點擊查看C語言的編程風格
4.積極參加C、C++興趣小組,養成和老師與同學交流習慣,從而相互收益。有時別人不經意的一句話可能使你茅塞頓開--「一句話點醒夢中人」。
5.及時總結自己的學習經驗,養成寫C語言日記的習慣。軟體有編程日記功能。
6.從網上或教材上找一個自己感興趣的題目(選題時根據自己的能力,可先易後難,培養自己的成就感,如果有了成就感,即使再苦再累還是感覺C語言學習是一件快樂的事,同學們喜歡打游戲,經常通宵達旦地玩游戲也樂而不疲就是這個道理)進行實戰訓練,提高自己的C語言綜合應用能力。
7. 由於C語言靈活、強大,初學者要全面地掌握它是不可能的,因此在學習C語言的過程中,不要在細枝末節上浪費精力(比如++、--用於表達式的計算,實際上是沒有意義的),但一定要熟練掌握C語言的流程式控制制語句、數組、函數、指針等基礎知識的應用,為學習面向對象程序設計打下堅實的基礎。如果這些知識你學不好,要後續學習好C++、可視化的程序設計Visual C++或C++Builder就像空中樓閣,是不現實的。
C語言程序設計入門學習六步曲
筆者在從事教學的過程中,聽到同學抱怨最多的一句話是:老師,上課我也能聽懂,書上的例題也能看明白,可是到自己動手做編程時,卻不知道如何下手。發生這種現象的原因有三個:
一、所謂的看懂聽明白,只是很膚淺的語法知識,而我們編寫的程序或軟體是要根據要解決問題的實際需要控製程序的流程,如果你沒有深刻地理解C語言的語句的執行過程(或流程),你怎麼會編寫程序解決這些實際問題呢?
二、用C語言編程解決實際問題,所需要的不僅僅是C語言的編程知識,還需要相關的專業知識。例如,如果你不知道長方形的面積公式,即使C語言學得再好你也編不出求長方形的面積的程序來。
三、C語言程序設計是一門實踐性很強的課程,「紙上談兵」式的光學不練是學不好C語言的。例如,大家都看過精彩自行車雜技表演,假如,你從來沒有騎過自行車,光聽教練講解相關的知識、規則、技巧,不要說上台表演、就是上路你恐怕都不行。
出現問題原因清楚了,那麼如何學習呢?請你看【C語言學習六步曲】
在程序開發的過程中,上機調試程序是一個不可缺少的重要環節。「三分編程七分調試」,說明程序調試的工作量要比編程大得多。這里以如何上機調試C程序來說明C語言的學習方法。
第一步、驗證性練習
在這一步要求按照教材上的程序實例進行原樣輸入,運行一下程序是否正確。在這一步基本掌握C語言編程軟體的使用方法(包括新建、打開、保存、關閉C程序,熟練地輸入、編輯C程序;初步記憶新學章節的知識點、養成良好的C語言編程風格)。
初學者最容易犯的錯誤是:
1、沒有區分開教材上的數字1和字母l,字母o和數字0的區別,造成變數未定義的錯誤。另一個易錯點是將英文狀態下的逗號,分號;括弧()雙引號""輸入出入成中文狀態下的逗號,分號;括弧(),雙引號「」造成非法字元錯誤。
2、C語言初學者易犯語法錯誤:使用未定義的變數、標示符(變數、常量、數組、函數等)不區分大小寫、漏掉「;」、「{」與「}」、「(」與「)」不匹、控制語句(選擇、分支、循環)的格式不正確、調用庫函數卻沒有包含相應的頭文件、調用未C聲明的自定義函數、調用函數時實參與形參不匹配、數組的邊界超界等。
3、修改C語言語法錯誤時要注意以下兩點:
(1)、由於C語言語法比較自由、靈活,因此錯誤信息定位不是特別精確。例如,當提示第10行發生錯誤時,如果在第10行沒有發現錯誤,從第10行開始往前查找錯誤並修改之。
(2)、一條語句錯誤可能會產生若干條錯誤信息只要修改了這條錯誤,其他錯誤會隨之消失。特別提示:一般情況下,第一條錯誤信息最能反映錯誤的位置和類型,所以調試程序時務必根據第一條錯誤信息進行修改,修改後,立即運行程序,如果還有很多錯誤,要一個一個地修改,即,每修改一處錯誤要運行一次程序。
第二步、照葫蘆畫瓢
在第一步輸入的C程序的基礎上進行試驗性的修改,運行一下程序看一看程序結果發生了什麼變化,分析結果變化的原因,加深新學知識點的理解。事實上這和第一步時同步進行的,實現「輸入」加深知識的記憶,「修改」加深對知識的理解。記憶和理解是相輔相成的,相互促進。
例如:將最簡單的Hello World!程序
#include "stdio.h"
int main()
{
printf("Hello World!\n");
return 0;
}
中的
printf("Hello World!\n");
中的Hello World!改成你的姓名,運行一下程序,看有什麼變化?
再如求1+2+3...+100的和的程序
#include <stdio.h>
main()
{
int i,sum=0;
for(i=1;i<=100;i++)
{
sum=sum+i;
}
printf("sum=%d\n",sum);
}
第1次將for(i=1;i<=100;i++)中的100改成50,運行一下程序,看有什麼變化?
第2次將for(i=1;i<=100;i++)中的i++改成i=i+2,運行一下程序,看有什麼變化?
找出程序結果變化的原因,就加深了對C語句的理解。
第三步、不看教材看是否能將前兩步的程序進行正確地輸入並運行。
在這一步要求不看教材,即使程序不能運行,看能否將其改正,使其能正確運行。目的是對前兩步的記憶、理解進一步強化。
第四步、增強程序的調試能力
在教材中每章都有C語言初學者易犯的錯誤,按照易出錯的類型,將教材中的正確的程序改成錯誤的程序,運行一下程序,看出現的錯誤信息提示,並記下錯誤信息,再將程序改成正確的,運行一下程序。這樣反復修改,就能夠學習C語言程序發生錯誤的原因和修改錯誤的能力。
注意:每次只改錯一個地方,目的是顯示發生該錯誤的真正原因,避免一次改動多個地方,搞清發生錯誤的真正原因,切記!!!!
注意:上機調試程序時要帶一個記錄本,記下英文錯誤提示信息和解決該錯誤問題的方法,積累程序調試經驗,避免在編程犯同樣的錯誤,切記!!!!。
例如,將Hello World程序中語句
printf("Hello World!\n");
中的;改成中文的分號;
運行一下程序,看有什麼結果?
調試程序是一種實踐性很強的事,光紙上談兵是是沒用的,就像游泳運動員只聽教練講解示範,而不親自下水練習,是永遠學不會游泳的。
即使在優秀的程序員編寫程序也會犯錯誤的,可能事最低級的語法錯誤,但他能快速發現錯誤並改正錯誤,而我們C語言初學者面對錯誤提示,不知道發生了什麼錯誤,如何改正,這就事差別。
第五步、研究典型的C語言程序,提高程序設計能力
C語言初學者遇到最多的困惑是:上課也能聽懂,書上的例題也能看明白,可是到自己動手做編程時,卻不知道如何下手。發生這種現象的原因是:所謂的看懂聽明白,只是很膚淺的語法知識,而沒有深刻地理解C語言的語句的執行過程(或流程)。
計算機是按照人的指令(編寫的程序)去執行的,如果不知道這些C語句在計算機中是如何執行的,你怎麼回靈活運用這些知識去解決實際問題呢?
解決問題的方法是要先理解C語言各種語句的流程(即計算機是如何執行這些語句的過程),然後研讀現成C語言經典程序,看懂別人事如何解決問題的,以提高自己的程序設計能力。
第六步、研究課程設計源成序,提高C語言的綜合應用能力.
㈡ 討論學習C語言演算法的心得
關鍵是:存在 對比 客觀 簡化 實踐
存在:演算法中存在什麼,目的是什麼,怎麼實現的,必要的話可以了解一下何人發明的,因為經典演算法的設計者本身都是著作等身的,由此你可以通過「存在」了解一個事實:演算法不是孤立的,是新和舊之間的更替。
對比:對比類似和不同演算法,同在哪裡,不同在哪裡,以及這些差異導致了什麼結果,過程有什麼差異,這個過程為什麼會導致那個結果。
客觀:不憑空臆測,演算法本身有什麼思想以及借用了什麼數學思想實現不能扭曲,以及何種狀態適合這樣的演算法。
簡化:當你深刻了解演算法的本質(通過推導、證明和實際運用和改進),就不可避免的要把不同演算法有機的結合在一起,不是線性的也不是單純的組合,而是從內涵和外延的角度站在不同的立場把演算法劃分成不同的層次,每個層次什麼時候運用。
簡化操作往往要運用一些更加直觀的快速的方法:聯想。
關於聯想,通常,你需要在思考線性表的時候想到一串隔開的紙帶,當細化到鏈表還是順序表時,需要加以限制為是否可隨機存取還是順序存取。
演算法本身都可以通過數據結構表現得很清晰,這時候運用演算法的時候,就可以脫離實際的ADT載體。
分類討論以及回溯通常要結合樹去分析,就一目瞭然。
字元串處理以及跟優先順序和記憶索引等問題通常要結合棧結構去設計演算法。
路徑問題結合圖結構設計演算法。
當然,要加深對C語言演算法的設計能力,需要從最根源出發:實踐。
有專門的機構提供了實踐平台,檢驗你設計的演算法是否高效。
可以去搜索ACM POJ ZOJ 等關鍵字,找到相關的演算法在線競賽網站,從最基本的題開始訓練。
另外,好的書籍是成功的一半:
《演算法導論》 (雖然名為導論,但是演算法著作中最權威也最有深度的一本書)
《數據結構(C語言)》(嚴蔚敏的著作,一般重點高校使用,雖然比較抽象,但比較簡化)
《演算法與數據結構(C語言)》(電子科技出版社,對演算法的實際實現講的比較透徹)
Finally,you need 'coding' and programming again and again.
㈢ 求C語言的學習心得 或者 方法總結 什麼的
* 掌握C語言的基本語法和規定。 * 掌握程序設計基本演算法和思路,開拓思路, * 提高上機操作能力,掌握上機調試程序的方法 * 培養自學能力,強調自主學習。 * 養成良好的程序設計習慣。 通過總結多年的教學經驗,總結學生在學習過程中具有規律性的特點,可以發現,在本課程學習過程中學生經常出現下面這些問題: * 注重理論學習,忽視上機編程實踐,造成"只能用筆在紙上編程"的奇怪現象。特別是一些女同學,一到機器前面就手忙腳亂,如果程序再出現錯誤,就更不知道該如何查找錯誤,如何排除錯誤了。 *入門時自以為難度大,產生畏難情緒,總是怕,最後因為怕學不好而導致沒有學好。 *前期沒有抓緊,希望通過突擊完成課程學習。本課程要靠平時的積累,幾乎不能靠臨時突擊,由於前面基礎補扎實,到了後面已經無法彌補。 *太注重學習語句的語法規定,忽視了對編程的思路和方法的訓練。有些同學再學習結束的感覺就是:對每一個語句的語法和每一條規定都明白,就是面對實際問題的時候不知道該如何思考,該如何編程。 *急於求成,總想編寫綜合性的程序,忽視基本概念,忽視基本功的訓練和練習。在編寫程序中發現問題,一追根源,全是概念或基礎問題。 1.不要看到別人的回復第一句話就說:給個代碼吧!你應該想想為什麼。當你自己想 出來再參考別人的提示,你就知道自己和別人思路的差異。 2.初學者請不要看太多太多的書那會誤人子弟的,先找本系統的學,很多人用了很久 都是只對部分功能熟悉而已,不系統還是不夠的。 3.看幫助,不要因為很難而自己是初學者所以就不看;幫助永遠是最好的參考手冊, 雖然幫助的文字有時候很難看懂,總覺得不夠直觀。 4.不要被對象、屬性、方法等詞彙所迷惑;最根本的是先了解最基礎知識。 5.不要放過任何一個看上去很簡單的小問題--他們往往並不那麼簡單,或者可以引伸 出很多知識點;不會舉一反三你就永遠學不會。 6.知道一點東西,並不能說明你會寫腳本,腳本是需要經驗積累的。 7.學腳本並不難,JSP、ASP、PHP等等也不過如此--難的是長期堅持實踐和不遺餘力的博覽 群書; 8.看再多的書是學不全腳本的,要多實踐 9.把時髦的技術掛在嘴邊,還不如把過時的技術記在心裡; 10.學習腳本最好的方法之一就是多練習; 11.在任何時刻都不要認為自己手中的書已經足夠了; 12.看得懂的書,請仔細看;看不懂的書,請硬著頭皮看; 13.別指望看第一遍書就能記住和掌握什麼--請看第二遍、第三遍; 14.請把書上的例子親手到電腦上實踐,即使配套光碟中有源文件; 15.把在書中看到的有意義的例子擴充;並將其切實的運用到自己的工作中; 16.不要漏掉書中任何一個練習--請全部做完並記錄下思路; 17.當你用腳本到一半卻發現自己用的方法很拙劣時,請不要馬上停手;請盡快將余 下的部分粗略的完成以保證這個代碼的完整性,然後分析自己的錯誤並重新編寫和工 作。 18.別心急,寫腳本確實不容易;水平是在不斷的實踐中完善和發展的; 19.每學到一個腳本難點的時候,嘗試著對別人講解這個知識點並讓他理解----你能 講清楚才說明你真的理解了; 20.記錄下在和別人交流時發現的自己忽視或不理解的知識點; 21.保存好你做過的所有的源文件----那是你最好的積累之一; 22.對於網路,還是希望大家能多利用一下,很多問題不是非要到論壇來問的,首先 你要學會自己找答案,比如google、網路都是很好的搜索引擎,你只要輸入關鍵字就 能找到很多相關資料,別老是等待別人給你希望,看的出你平時一定也很懶! 23.到一個論壇,你學會去看以前的帖子,不要什麼都不看就發帖子問,也許你的問 題早就有人問過了,你再問,別人已經不想再重復了,做為初學者,誰也不希望自己 的帖子沒人回的。 24.雖然不是打擊初學者,但是這句話還是要說:論壇論壇,就是大家討論的地方, 如果你總期望有高手總無償指點你,除非他是你親戚!!討論者,起碼是水平相當的 才有討論的說法,如果水平真差距太遠了,連基本操作都需要別人給解答,誰還跟你 討論呢。能找到很多相關資料,別老是等待別人給你希望,看的出你平時一定也很懶! 25.到一個論壇,你學會去看以前的帖子,不要什麼都不看就發帖子問,也許你的問 題早就有人問過了,你再問,別人已經不想再重復了,做為初學者,誰也不希望自己 的帖子沒人回的。 26.雖然不是打擊初學者,但是這句話還是要說:論壇論壇,就是大家討論的地方, 如果你總期望有高手總無償指點你,除非他是你親戚!!討論者,起碼是水平相當的 才有討論的說法,如果水平真差距太遠了,連基本操作都需要別人給解答,誰還跟你 討論呢。 別做浮躁的人 浮躁的人容易問:我到底該學什麼;----別問,學就對了; 浮躁的人容易問:JS有錢途嗎;----建議你去搶銀行; 浮躁的人容易說:我要中文版!我英文不行!----不行?學呀! 浮躁的人分兩種:只觀望而不學的人;只學而不堅持的人; 浮躁的人永遠不是一個
㈣ C語言實訓心得
通過這次C語言實訓,提高了我掌握和利用C語言進行程設計的能力, 而且進一步理解和運用結構化程設計的思想和方法。初步掌握了開發一個小型實用系統的基本方法。學會了調試一個較長程序的基本方法。學會了利用流程圖或N-S圖表示演算法。掌握了書寫程設計開發文檔的能力.為以後的實訓打下堅實的基礎。
㈤ C語言學完後的心得體會
1.編程模型
所有計算機均由兩種元素組成:代碼和數據.精確的說,有些程序是圍繞著"什麼正在發生"而編寫,有些則是圍繞"誰正在受影響"而編寫的.
第一種編程方式叫做"面向過程的模型",按這種模型編寫的程序以一系列的線性步驟(代碼)為特徵,可被理解為作用於數據的代碼.如 C 等過程化語言.
第二種編程方式叫做"面向對象的模型",按這種模型編寫的程序圍繞著程序的數據(對象)和針對該對象而嚴格定義的介面來組織程序,它的特點是數據控制代碼的訪問.通過把控制權轉移到數據上,面向對象的模型在組織方式上有:抽象,封裝,繼承和多態的好處.
2.抽象
面向對象程序設計的基本要素是抽象,程序員通過抽象來管理復雜性.
管理抽象的有效方法是使用層次式的分類特性,這種方法允許用戶根據物理含義分解一個復雜的系統,把它劃分成更容易管理的塊.例如,一個計算機系統是一個獨立的對象.而在計算機系統內部由幾個子系統組成:顯示器,鍵盤,硬碟驅動器,DVD-ROM,軟盤,音響等,這些子系統每個又由專門的部件組成.關鍵是需要使用層次抽象來管理計算機系統(或其他任何復雜系統)的復雜性.
面向對象程序設計的本質:這些抽象的對象可以被看作具體的實體,這些實體對用來告訴我們作什麼的消息進行響應.
/* (我的理解)
*計算機是一個實體,我要輸入字元,顯示器顯示出來,那麼
*計算機(對象).輸入(鍵盤屬性).顯示(顯示方法)
*使用分層來引用,操作.而不用管計算機內部如何處理.
*只要有計算機對象,它就能響應我的操作,而我敲鍵盤,
*計算機對象就把這個消息傳給屏幕,屏幕顯示.
*/
計算機對象包含了它所有的屬性,以及操作,這就是面向對象程序設計的三大原則之一:封裝.
3.封裝
封裝是一種把代碼和代碼所操作的數據捆綁在一起,使這兩者不受外界干擾和誤用的機制.封裝可被理解為一種用做保護的包裝器,以防止代碼和數據被包裝器外部所定義的其他代碼任意訪問.對包裝器內部代碼與數據的訪問通過一個明確定義的介面來控制.封裝代碼的好處是每個人都知道怎樣訪問代碼,進而無需考慮實現細節就能直接使用它,同時不用擔心不可預料的副作用.
在JAVA中,最基本的封裝單元是類,一個類定義著將由一組對象所共享的行為(數據和代碼).一個類的每個對象均包含它所定義的結構與行為,這些對象就好象是一個模子鑄造出來的.所以對象也叫做類的實例.
在定義一個類時,需要指定構成該類的代碼與數據.特別是,類所定義的對象叫做成員變數或實例變數.操作數據的代碼叫做成員方法.方法定義怎樣使用成員變數,這意味著類的行為和介面要由操作實例數據的方法來定義.
由於類的用途是封裝復雜性,所以類的內部有隱藏實現復雜性的機制.所以JAVA中提供了私有和公有的訪問模式,類的公有介面代表外部的用戶應該知道或可以知道的每件東西.私有的方法數據只能通過該類的成員代碼來訪問.這就可以確保不會發生不希望的事情.
4.繼承
繼承是指一個對象從另一個對象中獲得屬性的過程.是面向對象程序設計的三大原則之二,它支持按層次分類的概念.例如,波斯貓是貓的一種,貓又是哺乳動物的一種,哺乳動物又是動物的一種.如果不使用層次的概念,每個對象需要明確定義各自的全部特徵.通過層次分類方式,一個對象只需要在它的類中定義是它成為唯一的 各個屬性,然後從父類中繼承它的通用屬性.因此,正是由於繼承機制,才使得一個對象可以成為一個通用類的一個特定實例.一個深度繼承的子類將繼承它在類層次中的每個祖先的所有屬性.
繼承與封裝可以互相作用.如果一個給定的類封裝了某些屬性,它的任何子類將會含有同樣得屬性,另加各個子類所有得屬性.這是面向對象程序在復雜性上呈線性而非幾何增長的一個重要概念.新的子類繼承其所有祖先的所有屬性.子類和系統中的其他代碼不會產生無法預料的交互作用.
5.多態
多態是指一個方法只能有一個名稱,但可以有許多形態,也就是程序中可以定義多個同名的方法,用"一個介面,多個方法"來描述.可以通過方法的參數和類型引用.
6.封裝,繼承,多態的組合使用
在由封裝,繼承,多態所組成的環境中,程序員可以編寫出比面向過程模型更健壯,更具擴展性的程序.經過仔細設計的類層次結構是重用代碼的基礎.封裝能讓程序員不必修改公有介面的代碼即可實現程序的移植.多態能使程序員開發出簡潔,易懂,易修改的代碼.例如:汽車
從繼承的角度看,駕駛員都依靠繼承性來駕駛不同類型(子類)的汽車,無論這輛車是轎車還是卡車,是賓士牌還是菲亞特牌,駕駛員都能找到方向盤,手剎,換檔器.經過一段時間駕駛後,都能知道手動檔與自動檔之間的差別,因為他們實際上都知道這兩者的共同超類:傳動裝置.
從封裝的角度看,駕駛員總是看到封裝好的特性.剎車隱藏了許多復雜性,其外觀如此簡單,用腳就能操作它.發動機,手剎,輪胎大小的實現對與剎車類的定義沒有影響.
從多態的角度看,剎車系統有正鎖反鎖之分,駕駛員只用腳踩剎車停車,同樣的介面可以用來控制若干種不同的實現(正鎖或反鎖).
這樣各個獨立的構件才被轉換為汽車這個對象的.同樣,通過使用面向對象的設計原則,程序員可以把一個復雜程序的各個構件組合在一起,形成一個一致,健壯,可維護的程序
㈥ c語言實訓心得3000字
你可以這樣寫:
下面是我的實訓心得:
一、明確學習目的
學習編程對大多數IT業人員來說都是非常有用的。學編程,做一名編程人員,從個人角度講,可以解決在軟體使用中所遇到的問題,改進現有軟體,可以為自己找到一份理想的工作添加重要得砝碼,有利於在求職道路上謀得一個好的職位;從國家的角度,可以為中國的軟體產業做出應有的貢獻,一名優秀的程序員永遠是被爭奪的對象。學習編程還能鍛煉思維,使我們的邏輯思維更加嚴密;能夠不斷享受到創新的樂趣,將一直有機會走在高科技的前沿,因為程序設計本身是一種創造性的工作。知識經濟時代給我們帶來了無限的機會,要想真正掌握計算機技術,並在IT行業里干出一番事業來,有所作為,具有一定的編程能力是一個基本條件和要求。
二、打好基礎
學編程要具備一定的基礎,總結之有以下幾方面:
1、數學基礎 從計算機發展和應用的歷史來看計算機的數學模型和體系結構等都是有數學家提出的,最早的計算機也是為數值計算而設計的。因此,要學好計算機就要有一定的數學基礎,出學者有高中水平就差不多了。
2、邏輯思維能力的培養學程序設計要有一定的邏輯思維能力,「邏思力」的培養要長時間的實踐鍛煉。要想成為一名優秀的程序員,最重要的是掌握編程思想。要做到這一點必須在反復的實踐、觀察、分析、比較、總結中逐漸地積累。因此在學習編程過程中,我們不必等到什麼都完全明白了才去動手實踐,只要明白了大概,就要敢於自己動手去體驗。誰都有第一次。有些問題只有通過實踐後才能明白,也只有實踐才能把老師和書上的知識變成自己的,高手都是這樣成材的。
三、注意理解一些重要概念
一本程序設計的書看到的無非就是變數、函數、條件語句、循環語句等概念,但要真正能進行編程應用,需要深入理解這些概念,在理解的基礎上應用,不要只簡單地學習語法、結構,而要吃透針這些語法、結構的應用例子,做到舉一反三,觸類旁通。
四、掌握編程思想
學習一門語言或開發工具,語法結構、功能調用是次要的,最主要是學習它的思想。關鍵是學一種思想,有了思想,那麼我們就可以觸類旁通。
五、多實踐、多交流
掌握編程思想必須在編程實際工作中去實踐和體會。編程起步階段要經常自己動手設計程序,具體設計時不要拘泥於固定的思維方式,遇到問題要多想幾種解決的方案。這就要多交流,各人的思維方式不同、角度各異,各有高招,通過交流可不斷吸收別人的長處,豐富編程實踐,幫助自己提高水平。親自動手進行程序設計是創造性思維應用的體現,也是培養邏輯思維的好方法。
六、養成良好的編程習慣
編程入門不難,但入門後不斷學習是十分重要的,相對來說較為漫長。在此期間要注意養成一些良好的編程習慣。編程風格的好壞很大程度影響程序質量。良好的編程風格可以使程序結構清晰合理,且使程序代碼便於維護。如代碼的縮進編排、變數命令規則的一致性、代碼的注釋等。
七、上網學編程
在網上可以學到很多不同的編程思想、方法、經驗和技巧,有大量的工具和作品及相關的輔導材料供下載。
八、加強計算機理論知識的再學習
學編程是符合「理論→實踐→再理論→再實踐」的一個認識過程。一開始要具有一定的計算機理論基礎知識,包括編程所需的數學基礎知識,具備了入門的條件,就可以開始編程的實踐,從實踐中可以發現問題需要加強計算機理論知識的再學習。程序人人皆可編,但當你發現編到一定程度很難再提高的時候,就要回頭來學習一些計算機科學和數學基礎理論。學過之後,很多以前遇到的問題都會迎刃而解,使人有豁然開朗之感。因此在學習編程的過程中要不斷地針對應用中的困惑和問題深入學習數據結構、演算法、計算機原理、編譯原理、操作系統原理、軟體工程等計算機科學的理論基礎和數理邏輯、代數系統、圖論、離散數學等數學理論基礎知識。這樣經過不斷的學習,再努力地實踐,編程水平一定會不斷提高到一個新高度。
㈦ c語言實驗報告心得
c語言實驗心得:
1、只有頻繁用到或對運算速度要求很高的變數才放到data區內,如for循環中的計數值。
2、其他不頻繁調用到和對運算速度要求不高的變數都放到xdata區。
3、常量放到code區,如字型檔、修正系數。
4、邏輯標志變數可以定義到bdata中。
在51系列晶元中有16個位元組位定址區bdata,其中可以定義8*16=128個邏輯變數。這樣可以大大降低內存佔用空間。定義方法是: bdata bit LedState;但位類型不能用在數組和結構體中。
5、data區內最好放局部變數。
因為局部變數的空間是可以覆蓋的(某個函數的局部變數空間在退出該函數是就釋放,由別的函數的局部變數覆蓋),可以提高內存利用率。當然靜態局部變數除外,其內存使用方式與全局變數相同;
6、確保程序中沒有未調用的函數。
在Keil C里遇到未調用函數,編譯器就將其認為可能是中斷函數。函數里用的局部變數的空間是不釋放,也就是同全局變數一樣處理。這一點Keil做得很愚蠢,但也沒辦法。
7、如果想節省data空間就必須用large模式。
將未定義內存位置的變數全放到xdata區。當然最好對所有變數都要指定內存類型。
8、使用指針時,要指定指針指向的內存類型。
在C51中未定義指向內存類型的通用指針佔用3個位元組;而指定指向data區的指針只佔1個位元組;指定指向xdata區的指針佔2個位元組。如指針p是指向data區,則應定義為: char data *p;。還可指定指針本身的存放內存類型,如:char data * xdata p;。其含義是指針p指向data區變數,而其本身存放在xdata區。
以前沒搞過C51,大學時代跟單片機老師的時候也是搗鼓下匯編,現在重新搞單片機,因為手頭資料不多,找到一些C51的程序,發現裡面有這些關鍵字,不甚明了,沒辦法只好找了下,發現如下描述:
從數據存儲類型來說,8051系列有片內、片外程序存儲器,片內、片外數據存儲器,片內程序存儲器還分直接定址區和間接定址類型,分別對應code、data、xdata、idata以及根據51系列特點而設定的pdata類型,使用不同的存儲器,將使程序執行效率不同,在編寫C51程序時,最好指定變數的存儲類型,這樣將有利於提高程序執行效率(此問題將在後面專門講述)。與ANSI-C稍有不同,它只分SAMLL、COMPACT、LARGE模式,各種不同的模式對應不同的實際硬體系統,也將有不同的編譯結果。
在51系列中data,idata,xdata,pdata的區別
data:固定指前面0x00-0x7f的128個RAM,可以用acc直接讀寫的,速度最快,生成的代碼也最小。
idata:固定指前面0x00-0xff的256個RAM,其中前128和data的128完全相同,只是因為訪問的方式不同。idata是用類似C中的指針方式訪問的。匯編中的語句為:mox ACC,@Rx.(不重要的補充:c中idata做指針式的訪問效果很好)
xdata:外部擴展RAM,一般指外部0x0000-0xffff空間,用DPTR訪問。
pdata:外部擴展RAM的低256個位元組,地址出現在A0-A7的上時讀寫,用movx ACC,@Rx讀寫。這個比較特殊,而且C51好象有對此BUG,建議少用。但也有他的優點,具體用法屬於中級問題,這里不提。
三、有關單片機ALE引腳的問題
"單片機不訪問外部鎖存器時ALE端有正脈沖信號輸出,此頻率約為時鍾振盪頻率的1/6.每當訪問
外部數據存儲器是,在兩個機器周期中ALE只出現一次,即丟失一個ALE脈沖."這句話是不是有毛
病.我覺得按這種說法,應該丟失3個ALE脈沖才對,我一直想不通是怎麼回事,希望大蝦們幫幫我.
小弟感激涕零.
答:
其他所有指令每6個機器周期發出一個ALE,而MOVX指令佔用12個機器周期只發出一個ALE
四、如何將一個INT型數據轉換成2個CHAR型數據?
經keil優化後,char1=int1/256,char2=int1%256或char1=int1>>8,char2=int1&0x00ff效率是一樣的。
五、在KEIL C51上模擬完了,怎樣生成HEX文件去燒寫??
右鍵點項目中Target 1,選第二個,在OUTPUT中選中CREAT HEX
六、typedef 和 #define 有何不同??
typedef 和 #define 有何不同》》》 如
typedef unsigned char UCHAR ;
#define unsigned char UCHAR ;
typedef命名一個新的數據類型,但實際上這個新的數據類型是已經存在的,只不過是定義了
一個新的名字.
#define只是一個標號的定義.
你舉的例子兩者沒有區別,但是#define還可以這樣用
#define MAX 100
#define FUN(x) 100-(x)
#define LABEL
等等,這些情況下是不能用typedef定義的
七、請問如何設定KELC51的模擬工作頻(時鍾)
用右鍵點擊左邊的的target 1,然後在xtal一欄輸入
八、不同模塊怎樣共享sbit變數,extern不行?
把SBIT定義單獨放到一個.H中,每個模塊都包含這個.h文件
九、C51中對於Px.x的訪問必須自己定義嗎?
是的。
如sbit P17 = 0x97;即可定義對P1.7的訪問
十、SWITCH( )語句中表達式不可以是位變數對嗎?
可以用位變數:
#include
#include
void main()
{
bit flag;
flag=0;
switch(flag)
{
case '0':{printf("0\n");break;}
case '1':{printf("1\n");break;}
default:break;
}
}
bit 變數只有兩種狀態,if 語句足夠啦,!!!
十一、const常數聲明占不佔內存???
const 只是用來定義「常量」,所佔用空間與你的定義有關,如:
const code cstStr[] = {"abc"};
佔用代碼空間;而如:
const char data cstStr[] = {"abc"};
當然佔用內存空間。
另外,#define 之定義似乎不佔用空間。
十二、philips的單片機P89C51RD+的擴展RAM在C51中如何使用?
試一試將auxr.1清0,然後在c語言中直接聲明xdata類型的變數
十三、BUG of Keil C51
程序中用如下語句:
const unsigned char strArr[] = {"數學"};
結果發現strArr[] 內容為 {0xCA,0xD1,0xA7},真奇怪!
凡是有0xfd,則會通通不見了,所以只能手工輸入內碼了,例如 uchar strArr[]=
{0xCA,0xfd,0xd1,0xa7}(用Ultraedit會很方便)。
十四、Keil C51中如何實現代碼優化?
菜單Project下Option for target "Simulator"的C51.
看到Code optimization了嗎?
十五、請教c的!和 ~ 符號有甚區別??
!是邏輯取反,~是按位取反。
十六、c51編程,讀埠,還要不要先輸出1?
我怎麼看到有的要,有的不要,請高手給講講,到底咋回事?謝了
要輸出1的,除非你能保證之前已經是1,而中間沒有輸出過其他值。
十七、當定時器1(T1)用於產生波特率時,P3^5還是否可以用作正常的I/O口呢?
p3.5完全可以當普通的io使用
十八、C51中 INT 轉換為 2個CHAR?
各位高手:
C51中 INT 轉換為 CHAR 如何轉換諸如:
X = LOW(Z);
Y = HIGH(Z);
答:
x=(char)z;
y=(char)(z>>8);
十九、如果我想使2EH的第7位置1的話,用位操作可以嗎?
現在對位操作指令我一些不太明白請各位多多指教:
如 SETB 07H 表示的是20H.7置1,對嗎?(我在一本書上是這么看到的)
那麼如果我想使2EH的第7位置1的話,象我舉的這個例子怎麼表示呢?謝謝!
SETB 77H
setb (2eh-20h)*8+7
20h-2fh每位元組有8個可位操作(00h-7fh),其它RAM不可位直接操作
二十、char *addr=0xc000 和char xdata *addr=0xc000有何區別?
char *addr=0xc000;
char xdata *addr=0xc000;
除了在內存中佔用的位元組不同外,還有別的區別嗎?
char *addr=0xc000; 是通用定義,指針變數 addr 可指向任何內存空間的值;
char xdata *addr=0xc000; 指定該指針變數只能指向 xdata 中的值;
後一種定義中該指針變數(addr)將少佔用一個存儲位元組。
uchar xdata *addr=0xc000;指針指向外ram;
如果:data uchar xdata *addr=0xc000;指針指向外ram但指針本身存在於內ram(data)
中
以此類推可以idata uchar xdata *addr=0xc000;pdata uchar xdata *addr=0xc000;
data uchar idata *addr=0xa0;.........
二十一、while(p1_0)的執行時間?
假設,P1_0為單片機P1口的第一腳,請問,
while(P1_0)
{
P1_0=0;
}
while(!P1_0)
{
P1_0=1;
}
以上代碼,在KEIL C中,需要多長時間,執行完。能具體說明while(P1_0)的執行時間嗎?
模擬運行看看就知道了,
我模擬了試了一下,約14個周期
二十二、怎樣編寫C51的watchdog程序?
各位大蝦,我用KEIL C51 編寫了一個帶外部開門狗的程序,可程序無法運行起來,經過查
找,發現程序在經過C51編譯後,在MAIN()函數的前部增加了一端初始化程序,等到進入
主程序設置開門狗時,開門狗已經時間到,將我的程序復位了,請問我怎樣才能修改這一端
初始花程序,使他一運行,就設置開門狗?
可以在startup.a51中加入看門狗刷新指令,當然用匯編,然後重新編譯startup.a51
,將他和你的程序連接即可。新的startup.a51會自動代替系統默認的啟動模塊。
二十三、keil C51 怎樣把修改的startup.a51 加到工程文件中
直接加入即可
注意不要改動?STACK,?C_START,?C_STARTUP等符號。startup.a51直接加入項目,不用修改也可。可在內面自己修改匯編的一些限制或堆棧指針。
二十四、關於波特率的設置
我在設定串口波特率時發現一個問題:在晶體震盪器為11.0592MHz時,若設9600BPS的話,
TH1=0XFD,TL1=0XFD,而要設19200BPS的話,TH1、TL1有否變化,如果沒變,為什麼?
如果變了,又為什麼?(因為我看書上倆個是一樣的),希望大家點撥。
答:
當電源控制寄存器(PCON)第BIT7(SMOD)為1時波特率加倍。
TH1和TL1的值不變.
二十五、如何在C中聲明保留這部分RAM區不被C使用?
我不知道在C源程序中怎麼控制這個,但在匯編程序中加入下面一段就行:
DSEG AT 20H
AA: DS 10
這樣C51就不會佔用20H--29H了
或者在c51里這樣定義:
uchar data asm_buff[10] _at_ 0x20;
二十六、問浮點運算問題
我在用C51時發現它對傳遞浮點參數的個數有限制,請問:
1)參數是以全局變數的形式傳遞的,請問以全局變數的形式傳遞的參數也有限制嗎?
2)這種傳遞浮點參數的限制有多少呢?
3)float*float的結果是float類型還是double類型?能否直接賦值給float類型的變數?
答:
由於KEIL C51的參數傳遞是通過R0-R7來傳遞的,所以會有限制。
不過KEIL提供了一個編譯參數,可以支持更多參數的傳遞。具體
的內容見KEIL的PDF文檔。
我建議你把多個要傳遞的參數定義到指針或結構體中去,傳遞參
數通過指針或結構進行,這樣好一些。
第3個問題回答是YES,你自己試試不就知道了。
二十七、如何在某一個地址定義ram
用_at_ 命令,這樣可以定位靈活一點的地址
uchar xdata dis_buff[16] _at_ 0x6020 ;//定位RAM
將dis_buff[16]定位在0x6020開始的16個位元組
二十八、keil c中,用什麼函數可以得到奇偶校驗位?
例如32位數據,將四個位元組相互異或後檢查P即可,若耽心P被改變,可用內嵌匯編。
#include
unsigned char parity(unsigned char x){
x^=x;
if(P)return(1);
else return(0);
}
unsigned char parity2(unsigned int x){
#pragma asm
mov a,r7
xrl ar6,a
#pragma endasm
if(P)return(1);
else return(0);
}
㈧ c語言學習總結300字
1.最初接觸C語言時要弄清楚各種變數的定義方法,特別是常用的類型,int、float、char等等,還要掌握各種類型的輸入、輸出格式。這一步做到後,上機就沒有多大的問題了。
2.在對函數的學習過程中,一定要弄明白函數的作用和具體格式。值得強調的是在寫循環程序時,一定要弄清楚循環的條件。
3.對每一個知識點,都應該立即編出對應的程序,有時可能還會有語法錯誤,碰到更好的方法也可以試一下,很多時候你想想代碼怎麼寫和你真的寫出來了是有很大的差距的。
4.學習時一定有很多疑惑的,要及時弄清楚。
5.找一本好的課本,我並不推薦譚浩強的《C語言程序設計》,因為這本書把知識點講的太細碎太理論。我推薦《c語言程序設計:現代方法》這本書,書中奧妙非凡,值得深讀體驗。
6.不要認為上課認真聽課有用,寫程序不可能從課堂上學會太多的,偉大的程序員或者是很多的黑客,不是老師教出來的,你的有自己的想法自己的思路自己的,學習一門語言才有用,也才會得到別人傳教不了的東西。
㈨ C語言學習方法和心得
1、學習C語言,要從入門到精通,需要讀哪些書(從簡單的到難的排序,越詳細越好,最好都能注釋下選擇這本書的理由)?
入門階段:還是老譚那本。
理由:雖然不能說它寫得有多好,但是你現在要做的是入門,要快速的掌握c的基本語法,這本書很好理解,能夠讓你在最短的時間內大致掌握這門語言的概更。
第二階段:《c程序設計語言》(The C Programming Language)和《C語言解惑》(The C puzzle book)
理由:《the c programming language》號稱c語言聖經。其實它也只是一本介紹基礎語法的書,不做入門教程是因為對於初學者來說,它難度稍大,之所以推薦,是因為它能讓你---系統而嚴密的---把C語言知識構架整理一遍。《c語言解惑》,系統的整理了c語法中容易讓你產生迷惑或容易犯錯的地方(如a+++++b等),這時候你才算真正開始學習c語言了.(以上兩本現在出重印了,應該在書店可以買到)
第三階段:《C陷阱與缺陷》(C Traps and Pitfalls)和《高質量c/c++編程指南》
理由:《c陷阱與缺陷》是讓對c的理解有質變得一本書,如如何理解(*(void(*)())0)()等問題,我的感覺是看完這本書讓我真正從小菜鳥變成了老菜鳥。《高質量...》,終於有一本國產的了,呵呵,我認為這本書是把你從土匪變成正規軍的最好指南,該書涉及編程風格、效率、重載、健壯性等一些列之前很難注意的問題。(以上兩本《c陷阱...》已絕版,不過網上可以下載到中英文版,《高質量...》本身就是網路書,很容易找到)
其它推薦書:《c專家編程》《c和指針》
說實話這兩本書我並沒有看過(或看完),但有口皆碑,都是經典之作,不過都已經絕版,仔細找找網上有下載的。
2、有哪些好的C語言練習(越難的越好)?
對語言本身的練習其實就是你對它的理解,用得多了,注意得多了,自然就ok了。其它思維上的練習主要是演算法和數據結構方面的,嚴老的《數據結構題集(C語言版)》如果你能做完就相當了不起了。
3、要學精C語言,還要具備哪些條件?
其實c語言也只是一個工具而已,就像鋤頭一樣,你每天挖地鋤田自然就精通它了。只要不是白痴,應該都沒有問題。
4、C語言學完後接下去要學哪些語言好?
這個我就沒有資格回答了,因為除了少量匯編和c++,我大部分只用到了c,不過也許是一脈相承的c++吧。c是面向過程的語言,學習c++面向對象的思想。