c語言范文
時間:2023-04-07 14:38:03
導語:如何才能寫好一篇c語言,這就需要搜集整理更多的資料和文獻,歡迎閱讀由公務員之家整理的十篇范文,供你借鑒。
篇1
c語言是計算機的高級語言。
高級語言主要是相對于匯編語言而言的,基本脫離了機器的硬件系統(tǒng),用人們更易理解的方式編寫程序。C語言是僅產生少量的機器語言以及不需要任何運行環(huán)境支持便能運行的高效率程序設計語言,能以簡易的方式編譯、處理低級存儲器。
C語言提供了許多低級處理的功能,但仍然保持著跨平臺的特性,以一個標準規(guī)格寫出的C語言程序可在包括一些類似嵌入式處理器以及超級計算機等作業(yè)平臺的許多計算機平臺上進行編譯。
(來源:文章屋網 )
篇2
關鍵詞:C語言;教學方法;思維轉化;啟發(fā)式教學;軟件工程
一、前言
C語言是一種通用性計算機程序設計語言。它兼有匯編語言和高級語言的雙重優(yōu)點,運用它既能編寫操作系統(tǒng)軟件,又能開發(fā)各個領域的應用軟件。C語言的實用性使之成為編程的首選語言。學好了C語言,再進一步深造C++/VC++,JAVA等言語,就有了堅實的基礎。但目前很多學生在學習《C語言程序設計》后,感覺讀程序還湊合,編程則“難于上青天”部分學生甚至毫無編程想法,僅僅是為應付考試而死記硬背,完全背離了高職教育的初衷。因此,如何在C語言教學中啟發(fā)并訓練學生的編程思維,是每個教師應深思的問理。以下是筆者在C語言教學中的一些看法,愿和同行探討。
二、上好第一堂課
如何上好第一堂《C語言程序設計》課是至關重要的。因為學生都是初次接觸C語言,C語言對他們來說是神秘的,“興趣永遠是最好的老師”,有了興趣他們才會積極主動地去學習,所以第一堂課的成功與否直接關系到學生能否對這門課產生興趣,所以我覺得第一堂課應為“趣味C語言導學課”。
(一)程序結果展示,激發(fā)興趣
要激發(fā)學生的興趣。首先要讓大家知道C語言的強大功能,利用它我們能編寫各種軟件,通過幻燈片向學生展示各種結果畫面,例如從50年代玩的搖桿游戲到如今的電腦游戲。相信這時有些學生已經有些“蠢蠢欲動”了。恨不得立刻學好C語言。
(二)強調C語言的重要性
C語言是學生今后學好后繼課程的基礎,比如數據結構。C++,JAVA等。雖然程序設計語言更新很快,但如果真正掌握精了程序設計思想,具備了真正解決實際問題的能力。語言再更新可程序設計的本質不會變。
(三)傳授C語言的學習方法
C語言是一門實踐性課程,要理論結合實踐,加強學生的動手能力,解決問題的能力,在學習方法上給以學生指導,告訴學生如何自學,如何聽課,如何動手實踐,明確一點:“C語言不是看會的,也不是聽會的,而是親自動手實踐練會的”,強調實踐的重要性。
(四)認識C語言的編譯環(huán)境。
在visual studio2005環(huán)境下,舉出幾個簡單的小程序演示給他們看,并逐一講解,引導學生自己去發(fā)現(xiàn)程序中存在的缺陷以及改進的方式。熟悉C語言源程序到可執(zhí)行文件的整個操作流程。讓他們仿照所列舉的幾個程序模仿著編一個小程序。
二、C語言教學方法
(一)抽象思維到形象思維的轉化
讓學習過程變得輕松有趣是激發(fā)學生興趣的關鍵所在,C語言本身是一門極其抽象難懂的學科,把抽象的問題形象化,使本來枯燥無味的C語言變得魅力無限,符合學生的認知規(guī)律,可以收到良好的效果。
(二)采用問題啟發(fā)式授課,激發(fā)自主學習
針對C語言概念多,語法繁的現(xiàn)狀,采用問題啟發(fā)式教學可以將難理解、難記憶的概念和規(guī)則變成一系列時而醒目、時而深奧的問題呈現(xiàn)在課堂教學中,這樣就能把學生的注意力集中起來,學習積極性調動起來,達到師生互動的效果,教師自問自答為主,有問有答,互問互答,改變單調死板、照本宣科的牧師講法。這種啟發(fā)式、討論式、交流式的教法,不僅改變原來的灌輸式,而且增強了學生自主學習的能力。
(三)“引申法”“框架法”和“求異法”相結合
所謂“引申法”是指是結合已經解決的問題,因勢利導,引導學生在此基礎上解決相關聯(lián)的問題。“引申法”可以培養(yǎng)學生在程序設計方面的發(fā)散思維。提高程序設計中的應變能力。問題是活的,但程序是有章可循的。最終使學生明白,語法是有限的,可解決的問題是無限的。只有在分析實際向題的基礎上,以清晰的思路去設計算法,才能舉一反三,以不變應萬變。
“框架法”可培養(yǎng)學生的全局思維和算法的整體設計能力。具體體現(xiàn)在兩方面:一是在學生有了一點編程基礎后要利用偽代碼或流程圖,從算法設計的角度講解編程思路,而不應拘泥于語法細節(jié),不分主次、逐條語句的講解代碼。通過此框架,可使初學者對函數設計的關鍵問題有清晰的認識,利于從統(tǒng)籌全局的角度去考慮問題,體現(xiàn)了程序設計逐步求精的思路。這樣可以層次分明,突出算法設計的關鍵,利于培養(yǎng)學生的編程思路。二是在學習重點章函數時,由于新的算法已很少,主要是學習用函數調用的方法來重新編制以前所熟悉的程序,那么我們可以把著眼點放在函數的設計框架上,體現(xiàn)參數設計、返回值設計等關鍵問題,而無需細講函數體的實現(xiàn)細節(jié)。
“求異法”:一個固定的問題。解決的方法可能不唯一,如果能啟發(fā)學生多角度、多側面去尋求解決問題的辦法,則可激發(fā)學生思考的積極性,提高其學習興致。在C語言中一題多解的情況有很多,有意識地引導新思路,鼓勵新方法,以培養(yǎng)學生在編程中的求異思維,而不是死記硬背,墨守成規(guī)。
(四)理論教學與學生實踐相結合,提高程序調試能力
對程序設計課來說,理論學習和上機要兩手抓,兩手都要抓硬。實驗課不能流于形式,讓學生照抄照搬,甚至身在曹營心在漢。必須給學生思考、創(chuàng)新的啟迪,訓練其實踐能力,實驗課要生動活潑,使學生既掌握書中的重點算法,又有充分的思考空間,讓學生充分體會到頓悟和創(chuàng)造的樂趣。在進行每一部分的學習的時候,都應該配有相應的學生上機實踐的機會。這樣學生既鍛煉了動手能力,又鞏固了所學的知識。還應該讓學生養(yǎng)成上機前分析題目,決定算法與數據結構,并編出程序源代碼的好習慣,這樣在上機時,學生就有的放矢,主要精力放在調式程序上需。對于普遍存在的問題,進行集中提示、講解、演示以增加學生的印象。井及時檢查總結學生上機實驗的完成情況。
(五)在整個教學環(huán)節(jié)中,巧妙地引人軟件工程的基本思想
計算機科學屬工程技術科學,為使學生有良好的編程思維,應注重軟件工程思想的滲透。對軟件生存周期的幾個階段,即問題定義、可行性研究、需求分析、概要設計、詳細設計、編碼、調試、運行與維護,可以通過常規(guī)的C程序設計實例來體現(xiàn),以培養(yǎng)學生編程中的工程思維。這樣并沒有費很大力氣講抽象的概念,卻可培養(yǎng)學生在程序設計中從軟件工程角度去系統(tǒng)分析問題的良好習慣。雖然問題小了些,但“窺一斑而知全局”,經反復強化問題求解中所蘊含的基本思想,將有效地訓練學生程序設計中統(tǒng)籌全局的工程思維能力。
篇3
實驗一 上機操作初步和簡單的C程序設計
一、 實驗目的
1、熟悉C語言運行環(huán)境Turbo C++3.0
2、會簡單的程序調試
3、熟悉C語言各種類型數據的輸入輸出函數的使用方法
4、掌握順序結構程序設計
二、 實驗內容
1、 上機運行本章3個例題,熟悉所用系統(tǒng)的上機方法與步驟。(習題1.7)
2、 編寫一個C程序,輸入a、b、c 3個值,輸出其中最大者。(習題1.6)
3、 設圓半徑r=1.5,圓柱高h=3,求圓周長、圓面積、圓球表面積、圓球體積、圓柱體積。用scanf輸入數據,輸出計算結果,輸出時要求有文字說明,取小數點后2位數字。注意:在Trubo C++ 3.0中不能輸入漢字,只能輸入英文或拼音。(習題4.8)
4、 運行如下程序,寫出運行結果。kt250.com整理該文章,版權歸原作者、原出處所有...
#include
void main()
{
int a=1,b=2;
a=a+b; b=a-b; a=a-b;
printf("%d,%dn",a,b);
}
篇4
關鍵詞:Java
面向對象
c++
編程語言
中國分類號:TP312
文獻標識碼:A
文章編號:1002-2422(2010)03-0088-03
1 Java語言的特點
(1)簡單性
Java繼承了C/C++的語法,丟棄了其中不常用又容易引起混淆的功能,特別是非面向對象的內容,取消了c語言的結構、指針、#define語句、多重繼承、全局變量和函數、GOTO語句、操作符重載和自動類型轉換等等。
(2)面向對象
Java是一種純面向對象的語言,具有封裝、繼承和多態(tài)的特性,無全局變量或函數,可以被用于面向對象這種現(xiàn)代軟件工程。
(3)分布式
Java包括一個支持HTTP和FTP等基于TCP/IP協(xié)議的子庫。因此,Java應用程序可憑借URL打開并訪問網絡上的對象,象本地一樣。
(4)解釋型
Java寫成的源代碼需要被編譯成高階的字節(jié)碼,其與機器架構無關。然后,這種字節(jié)碼在任何Java的運行環(huán)境中由Java虛擬機解釋執(zhí)行。保證了Java與平臺無關性和可移植性。解釋執(zhí)行與及時編譯技術的完美結合,提供了相當高的運算性能。
(5)多態(tài)的支持
Java是一種非常注重對象形態(tài)轉換的語言,所以在編譯時期就會做形態(tài)轉換檢查,在執(zhí)行時期,Java也會做一些形態(tài)上的檢查。
(6)垃圾收集和異常處理
由于Java垃圾收集器會做自動的垃圾收集,這里的垃圾指一些不會被再使用的對象,所以程序設計者不需費心。內存會被自動地管理,Java本身提供了許多面向對象的異常(Exception)處理,所以程序在執(zhí)行時期所發(fā)生的錯誤,都可以由程序自己來處理。
(7)安全性
Java設計時對系統(tǒng)的安全,特別是網絡安全做了周密的考慮。通過字節(jié)碼驗證、內存調用方式、資源使用權限等進行多層次的安全管理。Java被認為是在任何系統(tǒng)上最安全的應用程序之一。
2 Java的技術平臺
Java不僅僅是一種語言,更重要是一種區(qū)別于傳統(tǒng)系統(tǒng),遵循“網絡就是計算機”信條的平臺技術。Java平臺將面向對象系統(tǒng)擴展成包括程序和數據的網絡計算機,而這個平臺的核心就是Java虛擬機。Java虛擬機的概念和實現(xiàn)使Java平臺成為萬能開發(fā)平臺,實現(xiàn)了Java程序“編寫一次,到處運行”。Java虛擬機是一種抽象化的計算機,可以在其上面執(zhí)行Java的字節(jié)碼。其本身的設計原則是“小而簡單”,目的是為了盡可能在所有機器上都能安裝。這樣的精簡原則,使得其能夠在現(xiàn)有的各種平臺上都可以順利執(zhí)行,適合各種網絡的環(huán)境。Java的技術平臺的工作原理:第一步Java用一個編譯器將源程序代碼(.java)轉換成可執(zhí)行程序(.class),Java編譯器生成的是獨立于處理器結構的字節(jié)代碼。第二步字節(jié)代碼用一個Java虛擬機來執(zhí)行,JVM是理想化的Java處理芯片,通常是在軟件上實現(xiàn)而不是在硬件上實現(xiàn)。
3 Java語言和c++語言的比較
c++和Java都屬于雜合語言,允許采用多種編程風格。C++是一種雜合語言,支持與c語言的向后兼容能力。由于C++是c的一個超集,所以包含的許多特性都是c語言不具備的,這些特性使C++在某些地方顯得過于復雜。但在Java中,設計者覺得這種雜合并不象在C++里那么重要。JavB保留了C++的語法,但忽略了資源引用、指針算法、操作符重載等潛在危險,是C/C++的簡化版本。所以Java雖然是從C++衍生出來,Java和C++之間仍存在一些顯著的差異,這些差異代表著技術的極大進步,證明了Java是一種比c++更優(yōu)秀的程序設計語言。從面向對象(00)程序設計的角度,論述一下Java和C++的重要差異:
(1)單根結構
在c++中,可在任何地方啟動一個新的繼承樹,所以最后往往看到包含了大量樹的“一片森林”。在Java中,采用了一種單根式的分級結構,因此所有對象都是從根類統(tǒng)一繼承。盡管這表面上看似乎造成了限制,但由于每個對象肯定至少有一個object接口,所以往往能獲得更強大的能力,Java的強制單根結構更好地符合了面向對象(00)語言的標準。
(2)取消指針
Java和C++用new創(chuàng)建一個對象的時候,例如:Strings=new String(“object”):都會獲得一個對象引用。然而,C++對象引用在創(chuàng)建時必須進行初始化,而且不可重定義到一個不同的位置。但Java對象引用并不一定局限于創(chuàng)建時的位置。可根據情況任意定義,這便消除了對指針的部分需求。指針通常被看作在基本變量數組中四處移動的一種有效手段。在c++里,必須用大量采用指針指向任意一個內存位置,這同時會使其變得不安全,也是Java不提供這一支持的原因。在Java里,沒有象C++那樣的指針,Java允許其以更安全的形式達到相同的目標。Java沒有全局函數,只有類,因而可以用傳遞的方式實現(xiàn)對象的引用。
(3)自動垃圾收集機制
Java中沒有C++“破壞器”,變量不存在“作用域”的問題。Java有個finalize()方法是每一個類的成員,在某種程度上類似于c++的“破壞器”。但finalize()是由垃圾收集器調用的,而且只負責釋放“資源”,如打開的文件、套接字、端口、URL等。如需在一個特定的地點做某件事情,必須創(chuàng)建一個特殊的方法,并調用它,不能依賴finalize()方法。由Java不支持破壞器的概念,針對類內的基礎類以及成員對象,Java采用垃圾收集器自動清除,所有對象都會被當作“垃圾”收集掉。自動垃圾收集意味著在Java中出現(xiàn)內存漏洞的情況會少得多,但也并非完全不可能。若調用一個用于分配存儲空間的固有方法,垃圾收集器就不能對其進行跟蹤監(jiān)視。而在另一方面,C++中的所有對象必須用finalize()方法破壞,然而,內存漏洞和資源漏洞多是由于編寫不當的finalize()造成的,或是由于在已分配的一個塊尾釋放一種資源造成的。Java垃圾收集器是在C++基礎上的一種極大進步,使許多編程問題得以解決。
(4)異常控制機制
Java的異常規(guī)范比c++的出色得多。Java中的所有異常都是從基礎類Throwable里繼承而來的,所以可確保得到的是一個通用接口。丟棄一個錯誤的異常后,不是象C++那樣在運行期間調用一個函數,Java異常規(guī)范是在編譯期間檢查并執(zhí)行的。被取代的方法必須遵守那一方法的基礎類 的異常規(guī)范,可丟棄指定的異常或者從那些異常衍生出來的其他異常。這樣一來,最終得到的是更為“健壯”的異常控制代碼。
(5)單一繼承
Java中的繼承具有與c++相同的效果,但采用的語法不同。Java用extends關鍵字標志從一個基礎類的繼承,并用super關鍵字指出準備在基礎類中調用的方法,與當前所在的方法具有相同的名字。然而,Java中的super關鍵字只允許訪問父類的方法,亦即分級結構的上一級。通過在c++中設定基礎類的作用域,可訪問位于分級結構較深處的方法,亦可用super關鍵字調用基礎類構建器,所有類最終都會從Object里自動繼承。和C++不同,Java不存在明確的構建器初始化列表,但Java編譯器會強迫在構建器主體的開頭進行全部的基礎類初始化,而且不允許在主體的后面部分進行這一工作。其語法如下:
public class A extends B{public A(String msg){super(msg);∥調用基礎類構建器}pubic C(int i){ super.C(i);∥調用基本方法}}
Java提供了一個interface關鍵字,其作用是創(chuàng)建抽象基礎類的一個等價物。在其中填充抽象方法,且沒有數據成員。這樣一來,對于僅僅設計成一個接口的東西,以及對于用extends關鍵字在現(xiàn)有功能基礎上的擴展,兩者之間便產生了一個明顯的差異。不值得用abstract關鍵字產生一種類似的效果,因為不能創(chuàng)建屬于那個類的一個對象。一個抽象類可包含抽象方法,并不要求在其里面包含什么東西,但其也能包含用于具體實現(xiàn)的代碼。因此,其被限制成一個單一的繼承。通過與接口聯(lián)合使用,這一方案避免了對類似于c++虛擬基礎類那樣的一些機制的需要。為創(chuàng)建一個實例的一個interface(接口),需使implements關鍵字。其語法類似于繼承的語法,如下:
public interface Face
public void Output():}
public class C extends B implements Face{public void Output()fSystem,out,println(“an object”),}}
篇5
關鍵詞:C語言;指針;程序設計
中圖分類號:TP311.1 文獻標識碼:A文章編號:1007-9599 (2010) 05-0000-01
C Language Pointer
Li Peng
(Tianjin Polytechnic University,Tianjin300160,China)
Abstract:C-language is a programming language,teaching in the program design plays an important role.In the C language,difficult to understand is the pointer.This article intends to discuss the indicators of definitions,classifications,operations and 3 special purpose,so that we can more clearly understand the nature pointer.Can be expected that only a thorough grasp of the pointer can truly grasp of the C language. Applications through in-depth pointers,C language will be used more widely in the field.
Keywords:C language;Pointer;Programming
一、引言
C語言是目前教學中使用最廣的程序設計語言。雖然近年來產生了許多功能豐富的計算機程序設計語言,但鮮有能代替C語言的。其主要原因就是它不僅是一門高級語言更重要的是它能直接對物理地址進行訪問,具有雙重功能,是嵌入式設計中必不可少的一門語言。C語言功能強大的主要原因就是具有指針結構。指針是一種特殊的數據類型,直接指向目標的存儲地址,實現(xiàn)直接訪問對象存儲空間的功能,具有重要的作用。
二、C語言中的指針簡介
在C語言中,任何一個變量總結起來包括變量的數據類型、存儲空間。在數據類型中定義的變量的基本范圍和操作類型。存儲空間就是變量在計算機中的存儲地址,如何有效的存儲變量并能有效的訪問到它這是一個必須解決的問題。指針就是表示地址的一種變量,所以指針的范圍嚴格來說只能是自然數的,并且不能在兩個指針間進行加、乘、除這樣的運算。由于在C語言中每個數據類型都必有存儲空間,所以指針可以應用于幾乎所有的數據類型中。所以,從這個角度出發(fā)可以將指針分為:指向變量的指針、數組指針、字符指針、指向指針的指針、函數指針、結構變量的指針以及文件指針等等。其中,指向變量的指針就是存儲變量的地址的。如 int * s這就是一個指向整型的指針,可以用于指向一個整型變量。如int a; 當p=&a時,就是將p存儲整型變量a的地址。這是指針最簡單的一種類型。所謂數組指針,就是指數組的名稱實際上是指向整個數組空間的首指針。如 int a[10];其中a本質上是一個指針,指向該數組的第一個位置,a[2]表示距離a指向空間向后2個位置所在空間中的存放的值。所以,a[2]=*(a+2)。字符指針本質上是數組指針的一種特殊情況,就是存放字符串的數組所對應的數組名。指向指針的指針這是一類很特殊的指針,用于存放指針的一類指針,在本質上與指向變量的指針十分相似。例如 char *ss[N]={“java”,”sss”,’’rrr”}。指向函數的指針就是指向函數入口地址的指針。結構變量的指針這類指針和指向變量的指針很類似,主要的區(qū)別在于結構變量可能有多個類型不同的變量,所以一般空間較大。文件指針就是對文件進行操作的指針。從上述的分類可以看出無論什么類型的指針其功能都是一樣的就是用于指向對象的地址空間罷了。
上面簡要的介紹了指針的定義和分類,現(xiàn)在簡要的論述一下指針涉及到的運算操作。首先由于指針是存放的變量地址的,所以第一個操作就是對指針進行地址賦值。如int a,*p;
P=&a,這就是對指針p進行進行賦變量a的地址,p指向變量a。當然也可以通過指針獲取指針指向地址空間所存儲的值。如int b=2,*p;p=&a,這是*p就表示p指向空間所存儲的值,在本例中就是a的值2。為了能在數組指針中通過指針能訪問到整個數組的值,所以。可以對指針進行加減整數值,表示地址的前移或后移。如int a[10],*p,*s; p=a;s=p+2;其中s 的值表示數組中首地址向前移動2的位置,表示 a[2]對應的地址。 為了表示兩個地址間存在的距離,可以通過指針間的減法實現(xiàn)。當然指針涉及到的還有其他運算,現(xiàn)不詳述了。
三、C語言中的指針應用
在C語言中指針的十分應用廣泛,除具有一般的功能外,具體特殊功能的應用總結起來有三個方面:一是用于在函數中可以返回多個值;還有就是可以實現(xiàn)動態(tài)調用函數;最后就是實現(xiàn)數組的動態(tài)定義。其中,由于由函數的特點,一個函數只能有一個返回值,但在有些場合需要返回多個值,就可以定義指針參量來實現(xiàn),其定義的基本框架如下:
Sss( int a,int *p )
{int s;
…….
………
Return s;
}
在這中情況下,函數不僅可以得到返回值(通過Return s來實現(xiàn)的),還可以通過指針p來返回相應的值。所謂指針能實現(xiàn)動態(tài)調用函數,這里用到的指針就是上文中提到的函數指針。函數指針就是指向函數入口地址的指針,我們還知道其實函數名就是一個函數指針。我們就是通過函數名實現(xiàn)動態(tài)調用函數的。在主調函數的參數中采用函數名充當實參就能實現(xiàn)函數的動態(tài)調用。該方法以簡短的代碼實現(xiàn)了復雜的功能。最后講到指針能實現(xiàn)數組的動態(tài)定義。從C語言的學習中,我們知道在定義數組時一定要指定數組的大小,否則,不能完整數組的定義。那么如何實現(xiàn)數組的動態(tài)定義?數組從本質上來講就是連續(xù)的空間集合罷了。那么,我們可以通過申請一個空間并賦值給一個指針變量,以此指針變量為首空間,就能獲取連續(xù)的空間,這與數組相同。當然數組還有許多應用,只有認真分析就能得到更多更好的應用實例。
四、結論
C語言是到目前為止學習最多的程序設計語言之一,也是計算機教育中的必修課。在整個C語言教學中,指針是一個十分重要的部分,也是最難掌握的部分之一。論文通過對指針的概念、分類、運算類型和應用等方面,系統(tǒng)的論述了指針,目的就是讓大家能清晰的了解指針、掌握指針,從而實現(xiàn)高效的應用指針。只有掌握好了指針,才能發(fā)揮C語言的優(yōu)勢,可見指針具有重要的作用。
參考文獻:
篇6
【關鍵詞】指針;情景創(chuàng)設;主動探索;協(xié)作學習;游戲案例導入
一、引言
指針是C語言中廣泛使用的一種數據類型,運用指針編程是C語言最主要的風格之一。正確而靈活地運用它,可以有效地表示復雜的數據結構;能動態(tài)分配內存;能方便地使用字符串;有效而方便地使用數組;在調用函數時能得到多于1個的值;并能像匯編語言一樣處理內存地址,從而變出精練而高效的程序等,這對設計系統(tǒng)軟件是很必要的。掌握指針的應用,可以使程序簡潔、緊湊、高效。指針極大地豐富了C語言的功能。每一個學習和使用C語言的人,都應當深入地學習和掌握指針。可以說,不掌握指針就是沒有掌握C語言的精華。
二、教學現(xiàn)狀
高職學生的基礎普遍較差,數學與英語基礎較為薄弱,在碰到程序邏輯思維分析,程序代碼編寫及調試的過程中,往往會感到困難,這是高職C語言課程教學中的共性問題。學習指針是學習C語言中最重要的一環(huán),能否正確理解和使用指針是學生是否掌握C語言的一個標志。同時,指針也是C語言中最為困難的一部分,學生很難正確理解基本概念,就指針的教學談談自己的想法。
三、教學方法
1、情景創(chuàng)設教學法。課堂教學是獲取知識和技能的主要陣地,應當成為培養(yǎng)學生獨立思考的搖籃。情景創(chuàng)設教學方法把學習設置到簡單的、有意義的問題情境中,學生通過互相合作來解決這些問題,發(fā)現(xiàn)隱含于問題背后的科學知識,形成讓學生掌握解決問題的技能和提高自主學習的能力。例如,講解指針的基本概念,計算機中的所有數據都是順序存放在存儲器中的。一般把存儲器中的一個字節(jié)稱為一個內存單元,不同數據類型的值所占用的內存單元數亦不同。為了正確地訪問這些內存單元。內存單元的編號也叫地址,通常也把這個地址稱為指針。內存單元的指針和內存單元的內容是兩個不同的概念。為讓學生掌握并理解內存單元的指針和內存單元的內容,我采用了情景創(chuàng)設的教學方法。我們到銀行去存、取款時,銀行工作人員將根據我們的賬號去查找存款單,找到之后在存單上寫入存款、取款的金額。在這里,賬號就是存單的指針,存款數就是存單的內容。這樣就能讓學生明白內存單元的指針和內存單元的內容之間的關系了。
2、主動探索、協(xié)作學習教學法。根據已有信息,從不同角度、不同方向思考問題,從多方面尋求多樣性答案的一種思維形式,是主動探索的教學方法。為走出傳統(tǒng)教學中的泥灘,教師應轉變教學觀念,砸碎應試教育的模式和框架,克服單純傳授知識的傾向,注重順向思維、逆向思維、多向思維的訓練,培養(yǎng)學生思維的深刻性、批判性和創(chuàng)新性。具體來講,就是要通過挖掘教材中能一題多解、一法多用、一題多變的教學內容,來引導學生主動探索,使他們的思考朝多種方向擴散,提出各種設想、多種解答。在指針教學中還可以進行協(xié)作學習中培養(yǎng)學生們的思維。協(xié)作學習是在解題中,盡可能利用自己已有的知識和經驗與同學一起討論,將不同的方法進行比較,從中確定出最佳方案。在教學中,引導學生從不同方向利用其他學科的理論,開闊思路,找出解決問題的多種方法。然后在眾多的解法中,經過歸納、判斷和比較,最終得出一個最優(yōu)化的結論。比如在教學生如何通過指針引用數組元素,先請學生協(xié)作學習開闊思路用不同方法編寫“輸出數組中的全部元素”程序。
方法一:下標法
方法二:通過數組名計算數組元素地址,找出元素的值
方法三:用指針變量指向數組元素
通過該教學方法,這個知識點學生掌握得很好,找出解決問題的多種方法,能深刻地、高水平地掌握知識,并能把這些知識廣泛應用到學習新知識的過程中,舉一反三,提高了對知識的理解能力,使學習活動順利進行。
3、游戲案例導入教學法
在指針教學中通過游戲案例導入教學法可以營造學生獨立思考的心理氛圍。在分析指向多維數組的指針和指針變量中的“多維數組的地址”知識點,我先請同學做游戲,一個當“排長”,三個當“班長”,十二個當“戰(zhàn)士”,游戲是:有一個排,下設3個班,每個班有4名戰(zhàn)士。規(guī)定排長只管理到班,班長管理戰(zhàn)士。在排長眼里只有第0、1、2班。排長從第0班的起始位置走到第1班的起始位置,看來只走了一步,但實際上他跳過了4名戰(zhàn)士。為了找到某一班內某一個戰(zhàn)士,必須給兩個參數,即第i班第j個戰(zhàn)士,先找到第i班,然后由該班班長在本班范圍內找第j個戰(zhàn)士。這個戰(zhàn)士的位置就是a[i]+i.。開始時班長面對第0個戰(zhàn)士。注意,排長和班長的初始位置是相同的。但他們的“指向”是不同的。排長“指向”班,他走一步就跳過1個班,而班長“指向”戰(zhàn)士,走一步只是指向下一個戰(zhàn)士。可以看到排長是“宏觀管理”,只管班,班長則是“微觀管理”,管理到戰(zhàn)士。如果要找第1班第2個戰(zhàn)士,則先由排長找到第1班的班長,然后,由班長在本班范圍內找到第2個戰(zhàn)士。二維數組a相當于排長,每一行(即一維數組a[0]、a[1]、a[2])相當于班長,每一行中的元素(如a[1][2])相當于戰(zhàn)士。
請同學們打開書,仔細看插圖,邊看邊想:誰是排長?班長在哪兒?管多少個戰(zhàn)士?
這段游戲導入把貫穿全文的線索用三個問題串起來,讓學生從靜態(tài)的圖中找答案,思考、討論結果。這一過程學生的思維也是最活躍的,對問題的思考是深入而全方位的,這些問題激發(fā)了學生們的心理驅動力,在討論爭議中,讓學生迸發(fā)出創(chuàng)新思維的火花。
篇7
關鍵詞: C語言 變量 變量的存儲類別
C語言是一種應用廣泛的、結構化的程序設計語言。程序設計的一項主要任務就是對數據進行處理,編寫程序時需要用到各種變量來存放數據。因此,變量在C語言中是一個很重要的概念。由于C語言的數據結構豐富,變量的內容也很多,包括變量的概念、定義、數據類型、作用域、存儲類別和存儲方式等。靈活掌握C語言中的各種變量,對程序設計將起到至關重要的作用。
一、變量的概念
變量是內存或寄存器中用一個標識符命名的存儲單元,可以用來存儲一個特定類型的數據,并且數據的值在程序運行過程中可以進行修改。可見,變量首先是一個標識符或者名稱,就像一個客房的編號一樣,有了這個編號,我們就可以找到房間的客人。為了方便,我們在給變量命名時,最好能符合大多數人的習慣,應見名知義,便于交流和維護。
二、變量的定義和初始化
在C語言中要使用變量必須先定義,再使用。一個變量定義的完整格式是(里的部分表示可以省略的部分):
[存儲類型]數據類型 變量名1[=表達式1],變量名2[=表達式2],……,變量名n[=表達式n]。
定義一個變量的過程就是向內存申請一個符合該數據類型的內存空間,以后對該變量的操作就是對對應內存空間的存取操作。
在這個定義中,存儲類型決定了變量存放在何處,數據類型決定了這個變量所占的字節(jié)數,變量名決定了這個變量在本程序中的名字,表達式則決定了這個變量的初始值,使用變量之前應該給一個值,編譯程序將幫助我們發(fā)現(xiàn)那些還沒有被給定一個值就被使用的變量。不過,變量不一定需要初始化。在函數外部定義的變量或者在函數內部用static關鍵字定義的變量在沒有明確地被初始化之前都已被系統(tǒng)初始化為0了。在函數內部或程序塊內部定義的不帶Static關鍵字的變量都是自動變量,如果沒有明確地對這些變量進行初始化,它們就是會具有未定義值。如果沒有對一個自動變量進行初始化,在使用它之前就必須保證先給它賦值。
三、變量的數據類型
程序設計最基本的問題是解決對所要處理數據的描述。任何一個數據,都有一個確定的表示形式。一個確定的值和確定的能參與的各種運算,就是數據類型。程序中變量的本質表現(xiàn)在存在時間和占用空間這兩個方面。變量的數據類型決定了變量占用的存儲空間。它受類型說明語句的制約。任一變量都必須具有確定的數據類型。不管變量怎樣變化,其值都必須符合該類數據類型的規(guī)定。
四、變量的存儲類型
C語言中變量不僅僅有數據類型,還有存儲類型。數據類型用來說明變量所占的存儲空間的大小和可以進行的操作,存儲類型用來表示變量的生命期和作用域,即變量起作用的范圍。在C語言中,按照變量的作用域把變量分為兩種:局部變量和全局變量。
1.局部變量
在一個函數內部定義的變量,只在本函數內部有效,這種變量稱為“局部變量”。例如:主函數與被調用函數中可以有相同的變量名,但這些變量只作用在它自己的范圍內,即兩個函數中的同名變量,在內存中占有不同的存儲單元,是兩個不同的變量。局部變量存在于以下幾種形式中:
(1)在一個函數內部定義的變量是局部變量,只能在函數內部使用。
(2)在主函數內部定義的變量也是局部變量,其它函數也不能使用主函數中的變量。
(3)形式參數是局部變量。
(4)在復合語句中定義的變量是局部于復合語句的變量,只能在復合語句中使用。
(5)局部變量在函數被調用的過程中占有存儲單元。
(6)不同函數中可以使用同名變量。在不同的作用域內,可以對變量重新進行定義。
2.全局變量
在函數外部定義的變量是全局變量,其作用域是變量定義位置至整個程序文件結束。使用全局變量,可增加函數間數據聯(lián)系的渠道。全局變量可以將數據帶入到作用域范圍內的函數,也可以將數據帶回到作用域范圍內的其它函數。提前引用外部變量,需對外部變量進行說明,或稱聲明。局部變量如與外部變量同名,則在局部變量的作用域內,外部變量存在,但不可見,外部變量的作用被屏蔽。全局變量在程序運行過程中均占用存儲單元。在編程時,原則上盡量少用全局變量,能用局部變量,不用全局變量,要避免局部變量全局化。
在C語言中,按照變量在內存中存在的時間(生存期)角度來分,可分為動態(tài)存儲方式和靜態(tài)存儲方式。
(1)靜態(tài)存儲變量
凡是用關鍵字Static定義的變量全部被稱為靜態(tài)變量。所有的靜態(tài)變量全部存儲在靜態(tài)存儲區(qū),在程序的運行期間一直存在。
(2)動態(tài)存儲變量
動態(tài)存儲變量是存儲在動態(tài)存儲區(qū)的,這種變量只在定義它們的時候才創(chuàng)建,在定義它們的函數返回時系統(tǒng)回收變量所占內存。對這些變量的創(chuàng)建和回收是由系統(tǒng)自動完成的,所以也叫自動變量(用關鍵字Auto定義)。最典型的例子就是函數中定義的局部變量。
變量的特性除了數據類型之外,還有存儲類別。C語言中變量的存儲類別有四種:自動型(Auto)、靜態(tài)型(Static)、外部型(Extern)、寄存器型(Register)。
①自動型(Auto)
Auto表示自動變量,通常關鍵字Auto可以省略,自動變量必須定義在函數內部,我們以前所說的變量基本上都是這種類型,函數的形式參數也是這種類型。自動型變量是局部變量,所以作用域是本函數。若是在復合語句中說明的自動變量,其作用域是本復合語句。
②靜態(tài)型(Static)
在函數內部以Static進行說明的變量。它是局部變量,作用域與自動變量相同。它的存儲方式是靜態(tài)的,當它被說明后就占有存儲單元,直到本程序執(zhí)行結束,所以它的生命期是從被說明開始到程序執(zhí)行結束。當一個變量被定義為靜態(tài)型時,如果它沒有賦值,系統(tǒng)自動賦0值,而自動變量不賦值,它的值是不確定的。
③外部型(Extern)
在函數外部說明的變量,它是全局變量,所以作用域是從說明開始到程序結束。它的存儲方式是靜態(tài)型,所以它的生存期是從說明開始到整個程序執(zhí)行結束。外部變量有定義性說明和引用性說明兩種形式,定義性說明作用是定義一個外部變量,不需要使用Extern。若外部變量在程序的后面說明,當前不能直接使用,若要使用就必需使用Extern進行引用性說明。
④寄存器型(Register)
Register關鍵字用于聲明寄存器變量,頻繁使用的變量聲明為Register型可以提高程序效率,也可以交給編譯器自行優(yōu)化(編譯器一般把循環(huán)控制變量存儲類型定為Register),Register類型的變量受處理器寄存器長度的限制,不符合要求的Register變量將會被處理成Auto型內存變量。Register變量在作用時駐留于處理器的寄存器,故其作用域也只限于相應的函數和復合語句,和Auto類似。
總之,C語言中的變量類型豐富,運用靈活。只有多想、多練、多編寫程序,我們才能真正掌握其中的含義。
參考文獻:
篇8
關鍵詞: C程序設計 運算符 預算順序 算法 結構
一、引言
現(xiàn)在許多院校的計算機專業(yè)開設了C語言課程,將其作為學生學習程序設計技術的入門課程,這與C語言的特點是分不開的。C語言不但可以編寫系統(tǒng)軟件,而且可以根據用戶的需要編寫出滿足用戶要求的應用軟件,尤其是C語言具有很好的對計算機的硬件編程能力。同時,C語言具有邏輯性強、處理問題周密、嚴謹的特點,是集知識和技能于一體,實踐性很強的課程。學生通過學習C語言可掌握程序設計的一些基本方法和技巧。然而C語言的數據類型較多、表達式豐富、語法結構較復雜,是一門教師難教、學生難學的課程。
《C程序設計》的內容很豐富,按照我們現(xiàn)在的教學大綱,教學的主要內容是基礎知識、四種結構的程序設計、函數與數組的應用和一些簡單的算法。在學習時,同學們應該把主要精力放在這些部分,多進行練習和上機調試。當然,在初學C語言時,可能會遇到有些問題理解不透,或者表達方式與以往數學學習中不同(如運算符等),這就要求不要氣餒,不明白的地方多問多想,鼓足勇氣進行學習,待學完后面的章節(jié)知識,前面的問題也就迎刃而解了。學習C語言始終要記住“曙光在前頭”和“千金難買回頭看”。學習后面的知識,不要忘了回頭弄清遺留下的問題和加深理解前面的知識。這是我們學生最不易做到的,然而卻又是最重要的。學習C語言就是要經過幾個反復,才能前后貫穿,積累應該掌握的C語言知識。那么,我們到底該如何學好《C程序設計》呢?
二、奠定基礎――了解、學好運算符和運算順序
C語言的運算非常靈活,功能十分豐富,運算種類遠多于其他程序設計語言。在表達式方面較其它程序語言更為簡潔,如自加、自減、逗號運算和三目運算使表達式更為簡單。但初學者往往會覺得這種表達式難讀,關鍵原因就是對運算符和運算順序理解不透不全。當多種不同運算組成一個運算表達式,即一個運算式中出現(xiàn)多種運算符時,運算的優(yōu)先順序和結合規(guī)則顯得十分重要。在學習中,只要我們對此合理進行分類,找出它們與我們在數學中所學到運算之間的不同點之后,記住這些運算也就不困難了,有些運算符在理解后更會牢記心中,將來用起來會得心應手,而有些可暫時放棄不理,等用到時再記不遲。對于運算符的優(yōu)先級也是必須明確的。《C程序設計》運算符可分為15種優(yōu)先級,從高到低,優(yōu)先級為1―15,且除第2、3級和第14級為從右至左結合外,其他都是從左至右結合,它決定著同級運算符的運算順序。這里就給大家介紹一個優(yōu)先級口訣:
括號成員第一
全體單目第二
乘除余三、加減四
移位五、關系六
等于(與)不等排第七
位與異位和位或
“三分天下”八九十
邏輯或跟與
十二和十一
條件高于賦值
逗號運算級最低。[1]
下面我們來舉個例子:
a=3;b=5;c=++a*b;d=a++*b;
對于c=++a*b來說,按表中所列順序,++先執(zhí)行,*后執(zhí)行,所以++a執(zhí)行后,a的值為4,由于++為前置運算,所以a的值4參與運算,C的值計算式為4*5=20而不是3*5=15了。而對于d=a++*b來說,由于a++為后置運算,所以a值為4參與運算,使得d的值仍為20,而a參與運算后其值加1,值為5。這個例子執(zhí)行后,a的值為5,b的值為5,c的值為20,d的值也是20。
三、砌磚壘墻――了解、學好四種程序結構
(1)順序結構
順序結構的程序設計是最簡單的,只要按照解決問題的順序寫出相應的語句就行,它的執(zhí)行順序是自上而下,依次執(zhí)行。例如:a=3,b=5,現(xiàn)交換a,b的值。這個問題就好像交換兩個杯子的水,這當然要用到第三個杯子,假如第三個杯子是c,那么正確的程序為:c=a;a=b;b=c;執(zhí)行結果是a=5,b=c=3。
(2)分支結構
順序結構的程序雖然能解決計算、輸出等問題,但不能做判斷再選擇。對于要先做判斷再選擇的問題就要使用分支結構。分支結構的執(zhí)行是依據一定的條件選擇執(zhí)行路徑,而不是嚴格按照語句出現(xiàn)的物理順序。分支結構的程序設計方法的關鍵在于構造合適的分支條件和分析程序流程,根據不同的程序流程選擇適當的分支語句。分支結構適合于帶有邏輯或關系比較等條件判斷的計算,設計這類程序時往往都要先繪制其程序流程圖,然后根據程序流程寫出源程序,這樣做把程序設計分析與語言分開,使得問題簡單化,易于理解。程序流程圖是根據解題分析所繪制的程序執(zhí)行流程圖。學習分支結構不要被分支嵌套所迷惑,只要正確繪制出流程圖,弄清各分支所要執(zhí)行的功能,嵌套結構也就不難了。嵌套只不過是分支中又包括分支語句而已,不是新知識,只要對雙分支的理解清楚,分支嵌套是不難的。那么就先來簡單介紹一下二分支選擇結構。C語言的if語句有兩種基本形式,即獨立的if結構和if-else結構。[2]其語法形式如下:
1)獨立的if結構
if(表達式)
語句
2)if-else結構
if(表達式)
語句1
else
語句2
再來看一下分支嵌套的語法形式
if(表達式1)
if(表達式2)語句1
else語句2
else語句3
(3)循環(huán)結構
循環(huán)結構可以減少源程序重復書寫的工作量,用來描述重復執(zhí)行某段算法的問題,這是程序設計中最能發(fā)揮計算機特長的程序結構。C語言中提供四種循環(huán),即goto循環(huán)、while循環(huán)、do-while循環(huán)和for循環(huán)。[3]四種循環(huán)可以用來處理同一問題,一般情況下它們可以互相代替換,但一般不提倡用goto循環(huán),因為強制改變程序的順序經常會給程序的運行帶來不可預料的錯誤,在學習中我們主要學習while、do...while、for三種循環(huán)。常用的三種循環(huán)結構學習的重點在于弄清它們相同與不同之處,以便在不同場合下使用,這就要清楚三種循環(huán)的格式和執(zhí)行順序,將每種循環(huán)的流程圖理解透徹后就會明白如何替換使用,如把while循環(huán)的例題,用for語句重新編寫一個程序,這樣能更好地理解它們的作用。特別要注意在循環(huán)體內應包含趨于結束的語句(即循環(huán)變量值的改變),否則就可能成了一個死循環(huán),這是初學者的一個常見錯誤。對于它們的異同點,我們也應該了解,明確:用while和do...while循環(huán)時,循環(huán)變量的初始化的操作應在循環(huán)體之前,而for循環(huán)一般在語句1中進行的;while循環(huán)和for循環(huán)都是先判斷表達式,后執(zhí)行循環(huán)體,而do...while循環(huán)是先執(zhí)行循環(huán)體后判斷表達式,也就是說do...while的循環(huán)體最少被執(zhí)行一次,而while循環(huán)和for就可能一次都不執(zhí)行。另外還要注意的是這三種循環(huán)都可以用break語句跳出循環(huán),用continue語句結束本次循環(huán),而goto語句與if構成的循環(huán),是不能用break和continue語句進行控制的。[4]在這里介紹一下三種常見循環(huán)的一般格式:
1)while循環(huán):
while(表達式)
循環(huán)體
2)do-while循環(huán):
do
循環(huán)體
while(表達式)
3)for循環(huán):
for(表達式1;表達式2;表達式3)
循環(huán)體語句(組)
(4)模塊化程序結構
C語言的模塊化程序結構用函數來實現(xiàn),即將復雜的C程序分為若干模塊,每個模塊都編寫成一個C函數,然后通過主函數調用函數及函數調用函數來實現(xiàn)一大型問題的C程序編寫。因此常說:C程序=主函數+子函數。因此,對函數的定義、調用、值的返回等中要尤其注重理解和應用,并通過上機調試加以鞏固。[5]
其實,順序結構、分支結構和循環(huán)結構并不是彼此孤立的,在循環(huán)中可以有分支、順序結構,分支中也可以有循環(huán)、順序結構,但是不管哪種結構,我們均可廣義地把它們看成一個語句。在實際編程過程中常將這三種結構相互結合以實現(xiàn)各種算法,設計出相應程序,但是要編程的問題較大,編寫出的程序就往往很長、結構重復多,造成可讀性差,難以理解,解決這個問題的方法是將C程序設計成模塊化結構。[6]
四、修飾――掌握一些簡單的算法
所謂算法,就是解決某類問題的方法。確切地說,就是對某一類特定的問題,給出解決該問題的一系列(有窮的)操作,而每一操作都有其確切的意義,并在有限時間內可以計算出結果。一個算法有多少個輸入量,它是問題給出的初始數據,經過算法的實現(xiàn),它有一個或多個輸出量,這就是算法對輸入運算的結果,即問題的解答。《C程序設計》教學大綱,只要求我們掌握一些簡單的算法,在掌握這些基本算法后,要完成對問題的分析就容易了。[7]如兩個數的交換、三個數的比較、選擇法排序和冒泡法排序,這就要求我們要清楚這些算法的內在含義,其中選擇法排序和冒泡法排序稍難,但只要明白排序的具體過程,對代碼的理解就不難了。如要將兩個變量X、Y的值交換。
用自然語言描述如下:
步驟1,將X值存入中間變量Z中:XZ。
步驟2,將Y值存入變量X中:YX。
步驟3,將中間變量Z值存入Y中:ZY。
用偽代碼可表示如下:
BEGIN
xz
yx
zy
END
當然還可以用流程圖表示,這里就不列舉了。
五、結語
在大學里,許多學C語言的人,都有著不同的目的。有的人是認真對待每一門所學的課程,包括C語言,有的人是對程序設計有著濃厚的興趣,還有的人只是為了獲得學分而學習C語言。這樣,一部分人會覺得C語言容易學,一部分人又會覺得C語言難學,還有一部分人會覺得C語言容易學,但是不會編寫程序。這樣就導致了學習C語言效果的差異。其實,學習C語言并不是進行一種職業(yè)培訓,而是一種綜合思維的訓練。我們應當正確認識什么是程序,并學會一種思考問題的方法,初步掌握用C語言來進行程序設計。
參考文獻:
[1]田祥宏,榮政.C語言程序設計.西安電子科技大學出版社,2007.
[2]李麗娟.C程序設計基礎教程.
[3]Stephen Prata著.云巔工作室譯.C Primer Plus.
[4]Kenneth A.Reek著.徐波譯.C和指針POINTERS ON C.
篇9
關鍵字:“C語言”;C;AI-CODE;游戲教學;程序設計
前言
傳統(tǒng)的計算機程序設計教學方式大部分都是以教師講授為主,而學生被動地接受知識。這種教育模式往往存在著枯燥乏味、無趣,而且很大程度上存著單向性(也就是常說的填鴨式教學),教授者和被教授者之間缺乏互動性,使學生普遍產生學習只為了應付考試等厭學的情緒,不能積極地發(fā)展和挖掘學生的智力,甚至會扼殺學生的求真求新的天性,他們的創(chuàng)造力逐漸在枯燥無味的程序設計教學中消磨殆盡。
如何能讓學生能體會到學生程序設計的樂趣,并逐漸地像迷上“網絡游戲”那樣“迷上”程序設計的學習呢?
“游戲教學”是旨在用一種寓教于樂的高效學習方法,利用人們“愛玩”的天性,讓學習者在“玩”中學習,從而充分調動學習者的學習興趣,使學習的效率和主動性得到極大的提高。正如蘇格拉底的名言:教育不是灌輸,而是點燃火焰!
一、AI-CODE游戲系統(tǒng)簡介
AI-CODE游戲教育平臺是一套全新的教育平臺,以寓教于樂的游戲教育方式,打破了傳統(tǒng)的教育模式??么蠹以詵茄蠱鵲木杭賈脅恢瘓醯靨岣咦約旱募撲慊絳蟶杓撲膠拖喙氐氖А⑽錮懟⑼紜⑷斯ぶ悄艿妊Э浦兜撓τ盟健I-CODE為程序和算法設計的學習和實踐提供了全方位的環(huán)境,由于其游戲主題的有趣性、直觀性,使學生在學習的同時感到了快樂和成就感,而在娛樂的同時發(fā)現(xiàn)自己以前的知識不夠用,所以為了得到更多的快樂和成就感,便又投入于學習中,讓學生在玩,學習,玩,學習的循環(huán)的過程中不斷提高自己的程序設計和策略算法設計的水平,整個過程是一個自主的學習過程,是一種逐漸“迷上”的過程,而非被強迫的。AI-CODE學習三者的關系如下圖:
AI-RCJ是AI-CODE中一套虛擬足球機器人的制作和競技仿真的教育平臺,并實現(xiàn)了C、C++、Java、C#等多種編程語言同臺競技。為了讓自己的足球在競技中具有良好的攻防性和機動性,必須給虛擬足球機器人賦予一定的智能,智能化程度的高低取決于使用者數學、物理、計算機等相關學科知識的靈活運用程度。AI-RCJ界面如下圖:
二、快樂的學習之旅
下面在“AI-RCJ”教育平臺上,以幾個簡單的例子展示C語言的快樂學習之旅,在這些快樂的有“成就感”的競技中逐漸掌握C程序設計語言一些關鍵語法,體會到“游戲教學”的樂趣。
(一)我的第一個會動的機器人
在AI-RCJ教育平臺中我們只須書寫幾句簡單的代碼,就立刻可以看到一個會動的“足球機器人”,會讓我們馬上感到有些小小的“成就感”,并吸引我們繼續(xù)的深入。
#includeairobot/c/SimpleRobot.h
/**
*機器人執(zhí)行函數
*/
voidrun()
{
/*在這里添加控制機器人的代碼*/
doMoveTo(30,30);/*移動到坐標點(30,30)*/
}
這段代碼代表了一個“函數”,這個函數的名字叫做run。函數是c語言程序的一個主要組成部分,每個函數都有自己的名字,并且可以完成相應的功能。run函數只由單個語句組成,doMoveTo(30,30)完成控制機器人移動到(30,30)這個坐標點。
(二)讓機器人會撞球
要讓機器人撞擊足球就要知道足球的坐標。在程序中調用getBallX和getBallY可以獲取足球的坐標。
voidrun(void)
{
doubleballX,ballY;/*定義兩個變量*/
ballX=getBallX();/*獲得足球的x坐標*/
ballY=getBallY();/*獲得足球的y坐標*/
doMoveTo(ballX,ballY);/*向足球撞擊*/
}
在run函數里面,第一條語句定義了兩個“變量”,變量是c語言中的一個基本元素,可以用它們來存放不同的數值,程序設計中變量的作用和代數中的未知數的作用類似。在使用一個變量之前,必須先定義它,“doubleballX,ballY;”這條語句完成了變量的定義。這兩個變量的名字是ballX和ballY,以后可以通過這兩個名字來使用變量,就像使用函數的名字來調用一個函數一樣。變量是有“類型”的,變量的類型規(guī)定了變量可以存放什么樣的數據,ballX和ballY這兩個變量的類型是double,表示他們可以存放浮點數,也就是我們通常所說的小數。轉載于范文中國網。
語句ballX=getBallX()使用了變量ballX,這是一個“賦值語句”,等號“=”將賦值
語句分成了左右兩部分,等號的左邊一般是一個變量,等號表示賦值操作,就是把右邊的數值存放到左邊的變量當中,在這里等號并不是要表示兩邊的內容相等。在這條賦值語句中,等號右邊的部分是一個函數調用,被調用的函數叫getBallX,這個函數是一個有“返回值”的函數,這表示調用這個函數后,我們可以得到一個數值,這個數值代表了函數執(zhí)行的結果。getBallX函數的返回值是足球的ballX坐標。賦值語句“ballX=getBallX();”把getBallX函數的返回值保存到了變量ballX里,執(zhí)行這個語句的時候,實際上發(fā)生了兩件事,首先是調用getBallX函數,并取得函數的返回值,然后就是將這個返回值保存到變量ballX里。語句ballY=getBallY()是類似的,這條語句把對手的ballY坐標保存到的變量y里。
現(xiàn)在知道了足球當前的坐標,語句“doMoveTo(ballX,ballY);”完成了向足球所在位置撞擊的工作。在這里我們將變量ballX,ballY作為參數傳遞給doMoveTo函數,因為變量ballX,ballY里存放了足球所在位置的坐標,通過用這兩個變量作為參數調用doMoveTo函數,也就是將足球所在位置作為撞擊的目標點,實現(xiàn)向足球所在位置撞擊。
但我們看到機器人在剛開始時撞擊了一下足球,之后便停止不動。
如何能讓機器人能不斷地撞球呢?我們用一種新的語句:循環(huán)語句,實現(xiàn)一個不斷撞擊足球的機器人。
voidrun(void)
{
doubleballX,ballY;/*定義兩個變量*/
while(1){
ballX=getBallX();/*獲得足球的x坐標*/
ballY=getBallY();/*獲得足球的x坐標*/
doMoveTo(ballX,ballY);
}
}
就這樣讓我們體會到循環(huán)語句的“威力”!(三)讓機器人聰明起來——避免“烏龍”球
好了,我們的機器人已經能動起來啦,但如何讓我們的機器人變“聰明”起來呢?能實現(xiàn)一個可以根據自己的進攻方向和足球的運動方向來盡量避免踢“烏龍”球的機器人。
我們會不知不覺地想辦法去不斷學習,讓我們機器人越來起“聰明”!
voidrun(void)
{
intshoot;/*定義控制變量*/
doubleballHeading;/*定義變量,存儲球的運動方向*/
doubleheading;/*定義變量,存儲機器人的進攻方向*/
doubleballX,ballY;/*定義變量,存儲球的ballX,ballY坐標*/
doublegoalMin,goalMax;
doublecourtWidth,courtHeight;
doublegoalSize;/*定義變量,存儲球門的大小(寬度)*/
/*定義變量,存儲球的運動直線方程ballY=k*ballX+b中的b和k*/
doubleb,k;
heading=getAttack();/*得到機器人的進攻方向*/
courtWidth=getCourtWidth();/*得到場地的寬度*/
courtHeight=getCourtHeight();/*得到場地的高度*/
goalSize=getGoalSize();/*得到球門的大小*/
goalMin=courtHeight/2-goalSize/2;
goalMax=courtHeight/2+goalSize/2;
while(1){
/*求出足球的運動直線*/
ballX=getBallX();
ballY=getBallY();
ballHeading=getBallHeading();
k=tan(ballHeading);
b=ballY-k*ballX;
/*如果機器人是由左向右進攻,而且當前球的運動方向是由右向左運動*/
if(heading0ballHeadingPI/2ballHeadingPI*3/2){
if(goalMin50*k+bgoalMax50*k+b){
shoot=0;
}else{
shoot=1;
}
}
/*如果機器人是由右向左進攻,而且當前球的運動方向是由左向右運動*/
elseif(heading=0
(ballHeading=0ballHeadingPI/2
||ballHeading2*PIballHeading3*PI/2))
{
if(goalMink*courtWidth+b
k*courtWidth+bgoalMax){
shoot=0;
}else{
shoot=1;
}
}
/*其他情況*/
elseshoot=1;
if(shoot==1){
doMoveTo(ballX,ballY
}else{
doTurnTo(PI*3/2);
doMoveBack(300);
}
}
}
通過循環(huán)語句(while)和選擇語句(if)等知識的綜合應用,讓我們的機器人變得越來越“聰明”啦。接著下來,我們又會想讓我們的機器人變成有策略的進攻和防守,團隊協(xié)作。。。。。。,最后讓整個“足球”比賽變得越來越有意思,學習變得越來越有趣。
四、結語
AI-CODE中的AI-RCJ讓學生在這“虛擬足球競技”的教育平臺上,讓自己的機器人動起來,不斷地撞球,聰明起來,有策略的進攻和防守。。。。。。等一系列有“成就感”的快樂游戲中,逐漸“迷上”程序和算法設計。為了更好地“玩”,不斷地學習,不斷地提高自己的計算機程序設計水平和策略算法設計水平,真正體會到寓教于樂的樂趣!
參考文獻
[1]龔睿.AI-CODESYSTEMS在智能機器人教學中的應用[J].2004.
[2]沙有威.程序設計教學的新載體——智能機器[J].2002.
篇10
關鍵詞:C語言 圖形函數 應用
引言
C語言是國際上廣泛流行的很有發(fā)展前途的計算機高級語言。它既具有一般計算機高級語言的可讀性、可移植性的特點,又具有低級語言能夠對計算機硬件進行操作的特性,因此,它適合用于操作系統(tǒng)的描述語言,用C語言開發(fā)系統(tǒng)軟件和應用軟件。但在87ANSIC中并沒有規(guī)定C語言的圖形功能,許多C語言教材沒有介紹C語言的圖形功能,這給許多需要用C語言設計完美、漂亮的用戶界面的初學者帶來了困難[1-2]。本文旨在通過介紹Turbo C 2.0的主要圖形函數及一個具體的實例簡介這些函數的用法。
1 與圖形繪制有關的系統(tǒng)硬件[2-3]
要使計算機能夠繪制圖形,必須有一定的硬件基礎作為保障。圖形繪制的硬件基礎主要是顯示器和顯示卡。顯示器的工作方式一般有文本方式和圖形方式。要在屏幕上顯示圖形,必須將其設置成圖形方式。衡量顯示器的主要性能指標是點距和分辨率。目前顯示器常用的點距有0.39mm、0.31mm和0.28mm三種。高檔微機配置的彩色顯示器目前流行的是VGA檔次,它最低的分辨率為640×480,中檔的是800×600,高檔的是1024×768。顯示器必須與顯示卡配套使用才能發(fā)揮其圖形功能。顯示卡所能支持的不同分辨率的顯卡類型稱為顯示模式。下表給出Turbo C中常用的幾種顯示卡的圖形模式:
2 Turbo C 2.0中與繪圖有關的常用圖形函數
2.1 設置圖形工作方式的函數:initgraph()。
Turbo C繪圖,首先必須設置顯示器為圖形方式。該函數通過選定參數可確定顯卡的類型及圖形模式。
如:
int driver,mode;
driver=IBM8514;
mode=IBM8514HI;
initgraph(&driver,& mode,“c:\temp”);
將圖形方式設置為IBM8514類型,IBM8514HI圖形模式,1024×768的分辨率,搜索路徑temp為C盤一級子目錄。
2.2 顏色控制函數setbkcolor(int color)及setcolor(int color)。
其中setbkcolor( )設置背景顏色,setcolor( )設置劃線顏色。
2.3 基本繪圖函數
A. line(int x1,int y1,int x2,int y2)
功能:從點(x1,y1)到點(x2,y2)畫一直線。
B. arc(int x,int y,int stange,int endangle,int r)
功能:以(x,y)為圓弧的中心,以stange為起始角度,以endangle為終止角度,以r為半徑作一圓弧。
C. setfillstyle(int pattern,int color)
功能:用參數pattern所確定的填充模式,用參數color確定的顏色進行填充。
D. floodfill(int x,int y,int color)
功能:填充一個含有點(x,y)在內的有界封閉區(qū)域,這個有界封閉區(qū)域的邊界由參數color確定,填充模式與填充顏色由函數setfillstyle設定。
2.4 字符輸出函數
A. settextstyle(int font,int direction,int size)
功能:在圖形方式下設置字符的字體,式樣和放大因子。
B. outtextxy(int x,int y,char &str)
功能:在窗口(x,y)的位置輸出字符或字符串。
C. getch( )
功能:從控制臺取得一字符且不輸出,用來使程序暫停,按任意鍵后使程序繼續(xù)運行。
3. 繪制一個圓餅型統(tǒng)計圖的程序如下
#include
main( )
{ int driver,mode;
driver=VGA;
mode=VGAHI;
initgraph(&driver,&mode,“ ”);
setbkcolor(0);
setcolor(15);
arc(320,240,0,360,180);
line(320,240,500,240);
line(320,240,443,112);
line(320,240,266,70);
line(320,240,200,374);
setfillstyle(4,2);
floodfill(340,230,15);
setfillstyle(5,9);
floodfill(340,180,15);
setfillstyle(7,4);
floodfill(300,240,15);
setfillstyle(8,3);
floodfill(340,280,15);
setcolor(14);
settextstyle(1,0,4);
outtextxy(410,180,“14%”);
settextstyle(1,0,4);
outtextxy(330,110,“16%”);
settextstyle(1,0,4);
outtextxy(200,200,“34%”);
settextstyle(1,0,4);
outtextxy(340,310,“36%”);}
上述程序在Turbo C 2.0中上機通過編譯、連接、運行,可得到精美的圓餅型圖。讀者通過閱讀并上機調試運行該程序可以對C語言的圖形設置、繪制;顏色的控制、填充等函數的應用有一個感性的認識,對復雜枯燥的C函數提高學習興趣。
結語
目前許多C語言教材很少介紹C語言的圖形功能,而許多C語言學習者對C語言的圖形功能很感興趣,為幫助初學者學習C語言繪圖函數并提高學習興趣,本文簡單介紹了C語言一些常用的繪圖函數及其應用,權當拋磚引玉!還有一些圖形函數沒有列出,讀者若有興趣可參閱《C語言函數大全》。
參考文獻:
[1]徐士良.PC機C圖形編程手冊.北京:清華大學出版社,1994.2.
[2]譚浩強.C程序設計(第二版)[M].北京:清華大學出版社,1999.