#includestdio.h
創(chuàng)新互聯(lián)公司基于成都重慶香港及美國等地區(qū)分布式IDC機房數(shù)據(jù)中心構建的電信大帶寬,聯(lián)通大帶寬,移動大帶寬,多線BGP大帶寬租用,是為眾多客戶提供專業(yè)四川樂山服務器托管報價,主機托管價格性價比高,為金融證券行業(yè)服務器托管,ai人工智能服務器托管提供bgp線路100M獨享,G口帶寬及機柜租用的專業(yè)成都idc公司。
int main()
{
int sum(int);
int factorial(int);
int n,s;
long int p;
printf("請輸入n值:\n");
scanf("%d",n);
s=sum(n);
p=factorial(n);
printf("1+2+3+...+n=%d\n",s);
printf("n!=%ld\n",p);
return 0;
}
int sum(int x)
{
int a=0;
for(int i=0;i=x;i++)
a=a+i;
return a;
}
int factorial(int y)
{
int b=1;
for(int i=1;i=y;i++)
b=b*i;
return b;
}
因為階乘會得到很大的結果,會超出p的范圍,所以n值不能太大,否則階乘沒有結果(或不對),只有加法的結果;
我個人認為函數(shù)這部分的重點給你說下哦:
1.函數(shù)的返回值類型,也就是你函數(shù)return的內(nèi)容的類型,注意如果有多種結束函數(shù)途徑的話一定要有多個return,譬如說
int fun(int x)
{
if(x0)
return 0;
else
return 1;
}
2.函數(shù)形參的傳遞關系,有的可以改變值,有的不可以改變值,也是給你個例子:
void fun1(int x,int *y,int z)
{
x=1;
*y=1;
z=1;
}
如果主函數(shù)有變量int a=b=c=2;fun(a,b,c);的話,那么b和c的值會改變,而a的值不會改變,那是因為:
a并不對變量a所占用內(nèi)存空間的內(nèi)容進行操作。
b是把b變量的內(nèi)存空間地址傳遞進去了,fun函數(shù)直接對b變量所在內(nèi)存空間進行操作,所以b會改變。
至于c,你暫時不用知道,因為形參int c表示的是一個引用,是c++里面會涉及的,你現(xiàn)在用c所以暫時只要知道有這么種方法就可以了。
3.就是注意函數(shù)中變量的存活期,這個說起來有點麻煩,你看下書上關于局部變量和全局變量那部分的內(nèi)容吧,那個說的比較詳細。
C語言程序設計課程是高等院校計算機專業(yè)基礎課程之一,其教學效果直接影響學生在計算機方面的應用。C語言是一門面向過程的、抽象化的通用程序設計語言,廣泛應用于底層開發(fā)。C語言能以簡易的方式編譯、處理低級存儲器。那么要如何寫關于c語言程序設計心得呢?本文是c語言程序設計的心得,僅供參考。
c語言程序設計心得一
在這為期半個月的時間內(nèi),通過我們小組各成員之間的相互討論和合作,我們完成了學生信息管理系統(tǒng)的程序設計,更值得高興的是我們的程序得到了大家的喜愛,在每次的簡報中都得到了較好的成績。
雖然在上個學期中,我們已經(jīng)學習了《C 語言程序設計》這門課,但是我所學的知識最多也就是在做作業(yè)的時候才會用到,平時沒有什么練習的機會,這次的課程設計是我第一次通過自己構思,和同學討論并且不斷查閱資料來設計一項程序。這次設計,不僅鞏固了我以前所學的知識,還讓我對c語言有了更深一步的了解,掌握了更多的技巧和技能。
C語言是計算機程序設計的重要理論基礎,在我們以后的學習和工作中都有著十分重要的地位。要學好這種語言,僅僅學習課本上的知識是不夠的,還要經(jīng)常自己動手,有較強的實踐能力。只有多動手,經(jīng)常編寫程序,才能發(fā)現(xiàn)我們學習上的漏洞和自己的不足,并在實踐中解決這些問題,不斷提高自己轉化知識的能力。
在我們小組有解決不了的問題時,我們會主動查閱相關的資料,或向其他同學詢問,這不僅豐富了我們的知識,還增進了我們同學之間的友誼。為了增大信息的安全性,需要用文件來存儲信息,由于我們在上課時不注重對文件的運用,所以在這方面有較大的困難。我先將書本認認真真地看了一遍,又做了一下課后習題來驗證和增進自己的理解,終于,經(jīng)過我們的不懈努力,我們小組的程序有了突破,成功地實現(xiàn)了用文件來保存并查看學生的信息。
這次設計中,我的收獲還有就是學會了用流程圖來表達自己的想法,并根據(jù)流程圖來逐步實現(xiàn)程序的功能。開始的時候,我畫流程圖很是困難,需要一個多小時才能清楚的根據(jù)自己的想法畫出圖來,后來畫多了,就更加了解它的功能,十分得心應手,能夠比較快而準確的畫出來。
在這次課程設計中,我們首先對系統(tǒng)的整體功能進行了構思,然后用結構化分析 方法 進行分析,將整個系統(tǒng)清楚的劃分為幾個模塊,再根據(jù)每個模塊的功能編寫代碼。而且盡可能的將模塊細分,最后在進行函數(shù)的調(diào)用。我們在函數(shù)的編寫過程中,我們不僅用到了for循環(huán)、while循環(huán)和switch語句,還用到了函數(shù)之間的調(diào)用(包括遞歸調(diào)用)。由于我們是分工編寫代碼,最后需要將每個人的代碼放到一起進行調(diào)試。因為我們每個人寫的函數(shù)的思想不都一樣,所以在調(diào)試的過程中也遇到了困難,但經(jīng)過我們耐心的修改,終于功夫不負有心人,我們成功了!
在參考書上,我們不僅參考了曾經(jīng)學過的高敬陽主編的《c語言程序設計》,還找到了由譚浩強主編的第三版《c語言》進行參考。
當然,我們的程序還有一些不完善的地方,比如說,當輸入的數(shù)據(jù)不符合我們定義的數(shù)據(jù)的格式的時候,程序會出現(xiàn)一些錯誤,有時會出現(xiàn)主菜單的死循環(huán);在一次程序運行中,只能行使一種權限,要想再行使另一種權限,就只能退出程序,然后再運行程序。
三周的小學期即將結束,時間雖短,但是我收獲了很多。最后,謝謝老師和同學們的指導,更要感謝我們小組成員之間的合作與交流。
c語言程序設計心得二
通過本次教師發(fā)展在線的C語程培訓中,我受益匪淺,幾位教授的精彩演講,讓我找到了自己的不足和日后教學中的改革方向和內(nèi)容。同時,也讓我感覺到了,有今天各位教授的良好教學效果,這其中包含了他們的艱辛、背后的大量付出和無私奉獻。
我是一直從事C類語言的教學工作,對C語言的教學已有5年教齡,在這幾年的教學過程中,我們也一直在尋找好的 教學方法 和新的教學理念。通過本次學習,我 總結 要教好《C語言程序設計》這門課,最基本要把握好以下幾個方面:
(一)要重視實踐環(huán)節(jié),上機調(diào)試成績非常重要。
學習一門語言,就是要按照它的語法來編程。要編程,當然就要上機操作來驗證你程序的正確性。所以上機非常重要,通過執(zhí)行你所寫的程序,完成你所寫程序的目標,最終達到你的目的。而且通過執(zhí)行程序,你會發(fā)現(xiàn)程序中的錯誤,從而使你了解你所學知識中的不足,同時,要學會根據(jù)編譯時提示的錯誤來改正程序中發(fā)生的錯誤,以便下次不會再犯同樣的錯誤。
(二)基本語法學習雖然枯草乏味,但是它相當于高樓大廈的一磚一瓦,一定要下硬功夫讓學生掌握熟練。
C語言的語法部分。這部分內(nèi)容是學好C語言的基礎,只有學好了這些語法,才會寫程序,看程序。所以對一個初學者來說,這部分內(nèi)容是非常重要的,所以要扎實地熟悉每一個語法,并能根據(jù)這些語法來編程。
(三)學習要抓住重點,難點部分要多講、多學、多練。
通過這次學習使得我對C語言的重點,難點,以及易出錯的地方把握的更精準了。當然,這只是針對我個人而言。在C語言學習過程,重點就是數(shù)組,指針,以及結構體了。難點也是它們了,不過數(shù)組和結構體還是挺簡單,所以在此主要就指針方面談談自己的看法。
下面談談通過這次學習,結合我們學校的教學情況,打算對該課程的教學進行如下幾個方面的改革:
(一)理論教學內(nèi)容的組織
C語言的重點知識包括:結構化程序設計方法、流程圖的組織、三種程序設計結構、三種基本數(shù)據(jù)類型和三種自定義數(shù)據(jù)類型;難點包括:結構程序設計方法、算法的分析、流程圖的組織與設計、函數(shù)、指針等。
根據(jù)知識內(nèi)容和每年的新學時安排,我們將理論教學內(nèi)容分為授課內(nèi)容和自學內(nèi)容兩 大模塊。
(1)授課內(nèi)容
C語言的授課內(nèi)容分為兩階段:①基礎準備階段 這部分內(nèi)容確保學生“實用、夠用”,主要包括三種基本數(shù)據(jù)類型(只要求掌握常用的int,float,char);三種常用運算符及其表達式(賦值、算術、邏輯(包括關系));三種程序設計結構(順序、選擇、循環(huán))。②實訓項目驅動階段 這部分內(nèi)容主要是“實訓實戰(zhàn)”,主要包括數(shù)組、函數(shù)、指針和結構體。通過第一階段的學習,學生已經(jīng)具備了一些程序設計的基礎知識,在這一階段將通過一個實訓項目的完成來熟悉主要內(nèi)容,同時鞏固第一階段的成果。
(2)自學內(nèi)容
課本中的內(nèi)容上課沒重點介紹或者說就是沒提到的,劃為自學內(nèi)容。但這些內(nèi)容,我們并不是在課堂要求學生回去自學:要求過高,規(guī)矩過多,這樣效果不佳。而是讓學生在實驗中發(fā)現(xiàn)問題后,帶著問題去學習,去找答案。
例:整型 我們只介紹int基本類型,當學生想計算n!時,學生測試5!=120時,他可能會去測試20!、50!,這時,存放階乘的變量Factorial再定義為int,結果就是0了,這時問題就來了,他就會去尋找正確的處理方法(long int)。
(二)實驗教學的安排與設計
教學改革方案確定后,我們對本課程實驗教學上從多方面進行了教學更新。我們考慮到學生處于了解計算機語言及編程的初級階段,有許多最基礎的內(nèi)容有待掌握,所以本課程的實驗教學不太適合完全以項目開發(fā)的形式進行,注重的是加強模塊化實訓。
(1)上好第一節(jié)實驗課
我們常說“上好第一節(jié)課”,那么第一節(jié)實驗節(jié)的重要性也不言而喻。這節(jié)課對培養(yǎng)學生的學習興趣、增強學生的學習信心、鍛煉學生的自主學習等多方面影響很大。
第一次實驗項目是mdash;熟悉Turbo C的運行環(huán)境,主要是掌握一些在TC中的一些鍵盤操作方式。一般是教師給學生提供程序代碼(三個),但我們在學生不知情的情況下,給學生兩個有語法錯誤的和一個正確的程序。這樣,當學生運行正確的程序時,知道計算機可以幫我們處理問題,原來程序就是這樣寫的;當學生運行錯誤的程序,首先他會詫異(老師給的程序原來是錯的),于是要求他們自己修改,尤其是有時一個致命錯誤導致的10多個errors,被學生修改后,沒有了errors或所剩無幾,這時學生表現(xiàn)的很興奮、很有成就感,從而加強了本課程的學習興趣和信心。
(2)分兩階段進行
實驗內(nèi)容與理論教學內(nèi)容相互應,在基礎準備階段,這方面教學方法上主要是加強操練。通過各種大小程序、多重訓練和一個問題的多種解法來加強語法知識點的掌握和訓練,開闊學生編程的思路,掌握編程基礎。同時,在這過程中我們嚴格把關,讓學生課后認真準備,每次進實驗室時,應有寫好的完整代碼,上機調(diào)試,發(fā)現(xiàn)問題同時解決問題,要求認真完成實驗內(nèi)容,并在課后書寫實驗 報告 。鼓勵學生多寫程序,要加強實踐環(huán)節(jié),首先要從量上有個劃分。在實訓項目驅動階段。本階段實訓項目的設計非常重要,原則是既要使學生有切入點能夠動手又要使各章的內(nèi)容之間有聯(lián)系點。
(三)案例教學法
C語言的教學,教師一般受傳統(tǒng)應試 教育 的影響,狠抓理論考試,忽略了程序設計能力的培養(yǎng),把授課重點放在程序設計語言的基本語法的講授和掌握上,所選的編程實例大多用于語法規(guī)則的驗證和說明,僅從程序設計語言的使用這個單一的角度進行教學,而使得大多數(shù)學生在學完本課程后,“吃不透、用不活”,表現(xiàn)為學生在程序調(diào)試時,對程序中出現(xiàn)的邏輯錯誤經(jīng)常不知所措,在開發(fā)較大的應用程序時,不知道如何入手。
采用案例教學法,以程序設計為主線,以編程應用為驅動,通過案例和問題引出教材內(nèi)容,重點講解程序設計的思想和方法,穿插講解相關的語言知識。使教學效果既有深度又有廣度,學生實際動手能力大為增強。
以上是我個人結合我院C語言程序設計的教學情況,自己總結了幾點看法和一些改革 措施 ,拿出來和大家一起分享,請大家多提寶貴意見。通過這次學習,我將會靈活運用幾位教授的教學 經(jīng)驗 ,根據(jù)我院的教學對象,調(diào)整一些上課方法和措施,望能更好的提高教學質量。
c語言程序設計心得三
通過此次C語言程序設計實踐,本人實在是獲益不淺!C語言是上個學期開的課程,所以這個學期并沒怎么看過,當要開始設計的時候,還真不知從哪下手!結果,第一次的上機,我傻坐著不知道該做什么,后來就寫了幾個預處理命令?;厝ヒ院?我想,這樣不行,這樣下去還得了!我就重新復習了一遍我們上個學期學習的內(nèi)容,發(fā)覺自已有許多都遺忘了!特別是有文件的操作,幾乎是一遍空白!溫習過后,開始做題!
一開始做題,也是有點模糊,在指導老師的指導下,我們慢慢的進入狀態(tài),我們做的是一個通訊錄,內(nèi)容包括很多。運用的函數(shù)也是非常的復雜,我們一組有七個人,我分工合作,首先我一起完成了結構題,然后我們一人各負責一個函數(shù)程序的設計,經(jīng)過幾星期的努力,我們完成了大半個程序,但是總是有很多錯誤出現(xiàn),有好多是些小問題,這都是我們粗心大意造成的,所以設計程序一定要仔細,不容一點的馬虎。當然也有大問題,關于文件的操作,是我們最大的問題,不過,我們做好后,經(jīng)過老師的講解和改錯,我們也懂得設計和運用了。同時,也讓我知道了,合作的力量,如果是孤軍奮戰(zhàn)的話,我也不能在規(guī)定時間內(nèi)完成,當然,也多虧老師的指導。
這次設計,讓我重新掌握了C語言,而且還得到了用C語言解決實際問題的寶貴經(jīng)驗!
↓↓↓點擊下一頁還有更多精彩的C語言編程 學習心得 ↓↓↓
在初學C語言的一個學期后,我們進行了C語言實訓階段,嘗試自己編寫一個比較復雜的程序系統(tǒng)。在為期兩周的時間中,我們同組的同學共同的感受是:C語言實訓和平時上課所接觸的程序是有很大不同的,所經(jīng)受的考驗和克服的困難是平時所無法比擬的。好在同組的搭檔們精誠合作,分工明確,有問題共同解決,攻克了C語言實訓的復雜程序。在這里,我作為其中的參與者,自然感觸良多。
剛開始接觸到C的時候,我已經(jīng)學過一些有關VB的內(nèi)容,這個在算法和思維上稍微有點幫助?;叵氡緦W期的學習,首先,最基本的,是C的數(shù)據(jù)格式,讓我們知道整數(shù),浮點數(shù)以及字符常量在C中的運用。然后,在學會了數(shù)據(jù)轉化,以及熟練的可以對各種數(shù)據(jù)處理之后,我開始進行有關數(shù)據(jù)結構,像數(shù)組,結構體等的學習,因為有的東西從現(xiàn)有的知識來看都是非常簡單的,還沒有聯(lián)系到指針等等一些復雜的概念??墒?,僅僅學會這些是遠遠不夠的,C語言中,還有很多更加經(jīng)典、重要、實用的知識。
說說函數(shù)。雖說很多程序語言都有函數(shù)這一內(nèi)容,但我覺得C語言的函數(shù)是最有魅力的了。學習函數(shù)的方法是比較簡單的,只有兩個字“牢記”,即:牢記函數(shù)的功能,牢記函數(shù)的用途以及如何輸入輸出。函數(shù)從本質上講是一段通用程序,用它可以幫助我們節(jié)約很多編程的時間,學習C語言的“高人”都說,一個聰明的編程者在編寫程序前往往總是先找自己所編寫的程序中有多少是可以用函數(shù)來代替的。比如,大家可以作一個比較字符串的實驗,用C語言中的strcmp()函數(shù)只要一句話,而自己編寫的話,30句都很難實現(xiàn),可想而知函數(shù)的實用和快捷。在我們C語言實訓的代碼中,函數(shù)更是得到了充分的應用,可以說,實訓題目的復雜代碼,就是用無數(shù)個函數(shù)的調(diào)用和嵌套積累出來的。
要注意的是,有的同學剛剛開始的時候,都是被一些大的程序激勵的,所以當開始的時候看到繁瑣的數(shù)據(jù)轉化和簡單的算法,都覺得很無聊,都想自己做幾個自己滿意的程序來看看,雖然這種想法很好,但是,我們說,沒有基礎,純粹是搬照一些現(xiàn)成設計方法,是不足取的。要知道,程序設計講究的是個人的思維的,假如剛開始就被一些現(xiàn)成的思想束縛住,以后就會覺得很無趣。
我們知道,指針其實是C語言的靈魂,許多的數(shù)據(jù)結構在我們學到這里之前都可以說是精通了。所以我們的任務就是,讓數(shù)據(jù)結構在指針中運行。當然,剛剛開始接觸到這些新的東西,是一件非常痛苦的事情,所以我們一定要用非常形象的思維去看待指針,不能太固化。所以,新的東西,比如結構體在指針中的表現(xiàn)方法,數(shù)組及多維數(shù)組在結構體中的運用,都一點一點的加了進來,同時豐滿了我們對原來C的數(shù)據(jù)機構,數(shù)據(jù)表示的理解。當我們完成了這三步的學習,我們已經(jīng)可以自豪的說,我們的基礎都扎實了,可以進一步的學習有關算法,設計概念等等深層次的東西了。
但是,指針,結構體,這些太抽象的東西,在學習C語言的時候我們就有點“似懂非懂”,可是在眼下的C語言實訓中,像這么重要的C語言知識,一定要達到能熟練掌握,實際運用的程度。在實訓的大程序中,結構體在指針中的表現(xiàn)方法,數(shù)組及在結構體中的運用等具體的技術環(huán)節(jié),都得到了體現(xiàn),不會指針,我們的工作是沒法展開的。所以,在實訓期間,大家在鞏固基本知識的基礎上,逐塊攻克實訓課題,克服了困難,自信心得到了提高。
最后,談談我們組的程序軟件。商店商品管理系統(tǒng),是一個比較利于應用,解決實際問題,方便實際管理的程序。設計代碼比較復雜,結構比較嚴謹。在程序編寫的1周左右的時間里,組員們遇到了上述的困難,包括程序設計構思,甚至是指針等某些知識點的欠缺,導致的工作中出現(xiàn)的困難。但是,當大家一起團結協(xié)作,解決了這些困難之后,發(fā)現(xiàn)自己也可以編寫復雜的、應用性的程序了,更發(fā)現(xiàn)自己對C語言這門學科的興趣也提高了。
當然,我們編寫的商店商品管理系統(tǒng),還存在很多疏漏和不合理之處。比如,程序復雜冗長,如果時間充裕,我們將在不改變程序運行結果的基礎上,簡化程序,使每一句更加精辟,總體上更加簡化。另外,在程序的外觀上,我們由于時間問題,沒有做更多的修飾,運行起來顯得比較死板、枯燥乏味。如果增添一些色彩和其他效果,我們的程序也許會更加完美。
以上就是我的C語言實訓個人總結
c語言實驗心得:
1、只有頻繁用到或對運算速度要求很高的變量才放到data區(qū)內(nèi),如for循環(huán)中的計數(shù)值。
2、其他不頻繁調(diào)用到和對運算速度要求不高的變量都放到xdata區(qū)。
3、常量放到code區(qū),如字庫、修正系數(shù)。
4、邏輯標志變量可以定義到bdata中。
在51系列芯片中有16個字節(jié)位尋址區(qū)bdata,其中可以定義8*16=128個邏輯變量。這樣可以大大降低內(nèi)存占用空間。定義方法是: bdata bit LedState;但位類型不能用在數(shù)組和結構體中。
5、data區(qū)內(nèi)最好放局部變量。
因為局部變量的空間是可以覆蓋的(某個函數(shù)的局部變量空間在退出該函數(shù)是就釋放,由別的函數(shù)的局部變量覆蓋),可以提高內(nèi)存利用率。當然靜態(tài)局部變量除外,其內(nèi)存使用方式與全局變量相同;
6、確保程序中沒有未調(diào)用的函數(shù)。
在Keil C里遇到未調(diào)用函數(shù),編譯器就將其認為可能是中斷函數(shù)。函數(shù)里用的局部變量的空間是不釋放,也就是同全局變量一樣處理。這一點Keil做得很愚蠢,但也沒辦法。
7、如果想節(jié)省data空間就必須用large模式。
將未定義內(nèi)存位置的變量全放到xdata區(qū)。當然最好對所有變量都要指定內(nèi)存類型。
8、使用指針時,要指定指針指向的內(nèi)存類型。
在C51中未定義指向內(nèi)存類型的通用指針占用3個字節(jié);而指定指向data區(qū)的指針只占1個字節(jié);指定指向xdata區(qū)的指針占2個字節(jié)。如指針p是指向data區(qū),則應定義為: char data *p;。還可指定指針本身的存放內(nèi)存類型,如:char data * xdata p;。其含義是指針p指向data區(qū)變量,而其本身存放在xdata區(qū)。
以前沒搞過C51,大學時代跟單片機老師的時候也是搗鼓下匯編,現(xiàn)在重新搞單片機,因為手頭資料不多,找到一些C51的程序,發(fā)現(xiàn)里面有這些關鍵字,不甚明了,沒辦法只好找了下,發(fā)現(xiàn)如下描述:
從數(shù)據(jù)存儲類型來說,8051系列有片內(nèi)、片外程序存儲器,片內(nèi)、片外數(shù)據(jù)存儲器,片內(nèi)程序存儲器還分直接尋址區(qū)和間接尋址類型,分別對應code、data、xdata、idata以及根據(jù)51系列特點而設定的pdata類型,使用不同的存儲器,將使程序執(zhí)行效率不同,在編寫C51程序時,最好指定變量的存儲類型,這樣將有利于提高程序執(zhí)行效率(此問題將在后面專門講述)。與ANSI-C稍有不同,它只分SAMLL、COMPACT、LARGE模式,各種不同的模式對應不同的實際硬件系統(tǒng),也將有不同的編譯結果。
在51系列中data,idata,xdata,pdata的區(qū)別
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個字節(jié),地址出現(xiàn)在A0-A7的上時讀寫,用movx ACC,@Rx讀寫。這個比較特殊,而且C51好象有對此BUG,建議少用。但也有他的優(yōu)點,具體用法屬于中級問題,這里不提。
三、有關單片機ALE引腳的問題
"單片機不訪問外部鎖存器時ALE端有正脈沖信號輸出,此頻率約為時鐘振蕩頻率的1/6.每當訪問
外部數(shù)據(jù)存儲器是,在兩個機器周期中ALE只出現(xiàn)一次,即丟失一個ALE脈沖."這句話是不是有毛
病.我覺得按這種說法,應該丟失3個ALE脈沖才對,我一直想不通是怎么回事,希望大蝦們幫幫我.
小弟感激涕零.
答:
其他所有指令每6個機器周期發(fā)出一個ALE,而MOVX指令占用12個機器周期只發(fā)出一個ALE
四、如何將一個INT型數(shù)據(jù)轉換成2個CHAR型數(shù)據(jù)?
經(jīng)keil優(yōu)化后,char1=int1/256,char2=int1%256或char1=int18,char2=int10x00ff效率是一樣的。
五、在KEIL C51上仿真完了,怎樣生成HEX文件去燒寫??
右鍵點項目中Target 1,選第二個,在OUTPUT中選中CREAT HEX
六、typedef 和 #define 有何不同??
typedef 和 #define 有何不同》》》 如
typedef unsigned char UCHAR ;
#define unsigned char UCHAR ;
typedef命名一個新的數(shù)據(jù)類型,但實際上這個新的數(shù)據(jù)類型是已經(jīng)存在的,只不過是定義了
一個新的名字.
#define只是一個標號的定義.
你舉的例子兩者沒有區(qū)別,但是#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 變量只有兩種狀態(tài),if 語句足夠啦,!!!
十一、const常數(shù)聲明占不占內(nèi)存???
const 只是用來定義“常量”,所占用空間與你的定義有關,如:
const code cstStr[] = {"abc"};
占用代碼空間;而如:
const char data cstStr[] = {"abc"};
當然占用內(nèi)存空間。
另外,#define 之定義似乎不占用空間。
十二、philips的單片機P89C51RD+的擴展RAM在C51中如何使用?
試一試將auxr.1清0,然后在c語言中直接聲明xdata類型的變量
十三、BUG of Keil C51
程序中用如下語句:
const unsigned char strArr[] = {"數(shù)學"};
結果發(fā)現(xiàn)strArr[] 內(nèi)容為 {0xCA,0xD1,0xA7},真奇怪!
凡是有0xfd,則會通通不見了,所以只能手工輸入內(nèi)碼了,例如 uchar strArr[]=
{0xCA,0xfd,0xd1,0xa7}(用Ultraedit會很方便)。
十四、Keil C51中如何實現(xiàn)代碼優(yōu)化?
菜單Project下Option for target "Simulator"的C51.
看到Code optimization了嗎?
十五、請教c的!和 ~ 符號有甚區(qū)別??
!是邏輯取反,~是按位取反。
十六、c51編程,讀端口,還要不要先輸出1?
我怎么看到有的要,有的不要,請高手給講講,到底咋回事?謝了
要輸出1的,除非你能保證之前已經(jīng)是1,而中間沒有輸出過其他值。
十七、當定時器1(T1)用于產(chǎn)生波特率時,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)(z8);
十九、如果我想使2EH的第7位置1的話,用位操作可以嗎?
現(xiàn)在對位操作指令我一些不太明白請各位多多指教:
如 SETB 07H 表示的是20H.7置1,對嗎?(我在一本書上是這么看到的)
那么如果我想使2EH的第7位置1的話,象我舉的這個例子怎么表示呢?謝謝!
SETB 77H
setb (2eh-20h)*8+7
20h-2fh每字節(jié)有8個可位操作(00h-7fh),其它RAM不可位直接操作
二十、char *addr=0xc000 和char xdata *addr=0xc000有何區(qū)別?
char *addr=0xc000;
char xdata *addr=0xc000;
除了在內(nèi)存中占用的字節(jié)不同外,還有別的區(qū)別嗎?
char *addr=0xc000; 是通用定義,指針變量 addr 可指向任何內(nèi)存空間的值;
char xdata *addr=0xc000; 指定該指針變量只能指向 xdata 中的值;
后一種定義中該指針變量(addr)將少占用一個存儲字節(jié)。
uchar xdata *addr=0xc000;指針指向外ram;
如果:data uchar xdata *addr=0xc000;指針指向外ram但指針本身存在于內(nèi)ram(data)
中
以此類推可以idata uchar xdata *addr=0xc000;pdata uchar xdata *addr=0xc000;
data uchar idata *addr=0xa0;.........
二十一、while(p1_0)的執(zhí)行時間?
假設,P1_0為單片機P1口的第一腳,請問,
while(P1_0)
{
P1_0=0;
}
while(!P1_0)
{
P1_0=1;
}
以上代碼,在KEIL C中,需要多長時間,執(zhí)行完。能具體說明while(P1_0)的執(zhí)行時間嗎?
仿真運行看看就知道了,
我仿真了試了一下,約14個周期
二十二、怎樣編寫C51的watchdog程序?
各位大蝦,我用KEIL C51 編寫了一個帶外部開門狗的程序,可程序無法運行起來,經(jīng)過查
找,發(fā)現(xiàn)程序在經(jīng)過C51編譯后,在MAIN()函數(shù)的前部增加了一端初始化程序,等到進入
主程序設置開門狗時,開門狗已經(jīng)時間到,將我的程序復位了,請問我怎樣才能修改這一端
初始花程序,使他一運行,就設置開門狗?
可以在startup.a51中加入看門狗刷新指令,當然用匯編,然后重新編譯startup.a51
,將他和你的程序連接即可。新的startup.a51會自動代替系統(tǒng)默認的啟動模塊。
二十三、keil C51 怎樣把修改的startup.a51 加到工程文件中
直接加入即可
注意不要改動?STACK,?C_START,?C_STARTUP等符號。startup.a51直接加入項目,不用修改也可??稍趦?nèi)面自己修改匯編的一些限制或堆棧指針。
二十四、關于波特率的設置
我在設定串口波特率時發(fā)現(xiàn)一個問題:在晶體震蕩器為11.0592MHz時,若設9600BPS的話,
TH1=0XFD,TL1=0XFD,而要設19200BPS的話,TH1、TL1有否變化,如果沒變,為什么?
如果變了,又為什么?(因為我看書上倆個是一樣的),希望大家點撥。
答:
當電源控制寄存器(PCON)第BIT7(SMOD)為1時波特率加倍。
TH1和TL1的值不變.
二十五、如何在C中聲明保留這部分RAM區(qū)不被C使用?
我不知道在C源程序中怎么控制這個,但在匯編程序中加入下面一段就行:
DSEG AT 20H
AA: DS 10
這樣C51就不會占用20H--29H了
或者在c51里這樣定義:
uchar data asm_buff[10] _at_ 0x20;
二十六、問浮點運算問題
我在用C51時發(fā)現(xiàn)它對傳遞浮點參數(shù)的個數(shù)有限制,請問:
1)參數(shù)是以全局變量的形式傳遞的,請問以全局變量的形式傳遞的參數(shù)也有限制嗎?
2)這種傳遞浮點參數(shù)的限制有多少呢?
3)float*float的結果是float類型還是double類型?能否直接賦值給float類型的變量?
答:
由于KEIL C51的參數(shù)傳遞是通過R0-R7來傳遞的,所以會有限制。
不過KEIL提供了一個編譯參數(shù),可以支持更多參數(shù)的傳遞。具體
的內(nèi)容見KEIL的PDF文檔。
我建議你把多個要傳遞的參數(shù)定義到指針或結構體中去,傳遞參
數(shù)通過指針或結構進行,這樣好一些。
第3個問題回答是YES,你自己試試不就知道了。
二十七、如何在某一個地址定義ram
用_at_ 命令,這樣可以定位靈活一點的地址
uchar xdata dis_buff[16] _at_ 0x6020 ;//定位RAM
將dis_buff[16]定位在0x6020開始的16個字節(jié)
二十八、keil c中,用什么函數(shù)可以得到奇偶校驗位?
例如32位數(shù)據(jù),將四個字節(jié)相互異或后檢查P即可,若耽心P被改變,可用內(nèi)嵌匯編。
#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語言中函數(shù)實驗心得 c語言實驗心得怎么寫
文章出自:http://jinyejixie.com/article18/dosdgdp.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、網(wǎng)站內(nèi)鏈、ChatGPT、自適應網(wǎng)站、微信公眾號、網(wǎng)站改版
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)