c語(yǔ)言范文

時(shí)間:2023-04-07 14:38:03

導(dǎo)語(yǔ):如何才能寫(xiě)好一篇c語(yǔ)言,這就需要搜集整理更多的資料和文獻(xiàn),歡迎閱讀由公務(wù)員之家整理的十篇范文,供你借鑒。

c語(yǔ)言

篇1

c語(yǔ)言是計(jì)算機(jī)的高級(jí)語(yǔ)言。

高級(jí)語(yǔ)言主要是相對(duì)于匯編語(yǔ)言而言的,基本脫離了機(jī)器的硬件系統(tǒng),用人們更易理解的方式編寫(xiě)程序。C語(yǔ)言是僅產(chǎn)生少量的機(jī)器語(yǔ)言以及不需要任何運(yùn)行環(huán)境支持便能運(yùn)行的高效率程序設(shè)計(jì)語(yǔ)言,能以簡(jiǎn)易的方式編譯、處理低級(jí)存儲(chǔ)器。

C語(yǔ)言提供了許多低級(jí)處理的功能,但仍然保持著跨平臺(tái)的特性,以一個(gè)標(biāo)準(zhǔn)規(guī)格寫(xiě)出的C語(yǔ)言程序可在包括一些類(lèi)似嵌入式處理器以及超級(jí)計(jì)算機(jī)等作業(yè)平臺(tái)的許多計(jì)算機(jī)平臺(tái)上進(jìn)行編譯。

(來(lái)源:文章屋網(wǎng) )

篇2

關(guān)鍵詞:C語(yǔ)言;教學(xué)方法;思維轉(zhuǎn)化;啟發(fā)式教學(xué);軟件工程

一、前言

C語(yǔ)言是一種通用性計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言。它兼有匯編語(yǔ)言和高級(jí)語(yǔ)言的雙重優(yōu)點(diǎn),運(yùn)用它既能編寫(xiě)操作系統(tǒng)軟件,又能開(kāi)發(fā)各個(gè)領(lǐng)域的應(yīng)用軟件。C語(yǔ)言的實(shí)用性使之成為編程的首選語(yǔ)言。學(xué)好了C語(yǔ)言,再進(jìn)一步深造C++/VC++,JAVA等言語(yǔ),就有了堅(jiān)實(shí)的基礎(chǔ)。但目前很多學(xué)生在學(xué)習(xí)《C語(yǔ)言程序設(shè)計(jì)》后,感覺(jué)讀程序還湊合,編程則“難于上青天”部分學(xué)生甚至毫無(wú)編程想法,僅僅是為應(yīng)付考試而死記硬背,完全背離了高職教育的初衷。因此,如何在C語(yǔ)言教學(xué)中啟發(fā)并訓(xùn)練學(xué)生的編程思維,是每個(gè)教師應(yīng)深思的問(wèn)理。以下是筆者在C語(yǔ)言教學(xué)中的一些看法,愿和同行探討。

二、上好第一堂課

如何上好第一堂《C語(yǔ)言程序設(shè)計(jì)》課是至關(guān)重要的。因?yàn)閷W(xué)生都是初次接觸C語(yǔ)言,C語(yǔ)言對(duì)他們來(lái)說(shuō)是神秘的,“興趣永遠(yuǎn)是最好的老師”,有了興趣他們才會(huì)積極主動(dòng)地去學(xué)習(xí),所以第一堂課的成功與否直接關(guān)系到學(xué)生能否對(duì)這門(mén)課產(chǎn)生興趣,所以我覺(jué)得第一堂課應(yīng)為“趣味C語(yǔ)言導(dǎo)學(xué)課”。

(一)程序結(jié)果展示,激發(fā)興趣

要激發(fā)學(xué)生的興趣。首先要讓大家知道C語(yǔ)言的強(qiáng)大功能,利用它我們能編寫(xiě)各種軟件,通過(guò)幻燈片向?qū)W生展示各種結(jié)果畫(huà)面,例如從50年代玩的搖桿游戲到如今的電腦游戲。相信這時(shí)有些學(xué)生已經(jīng)有些“蠢蠢欲動(dòng)”了。恨不得立刻學(xué)好C語(yǔ)言。

(二)強(qiáng)調(diào)C語(yǔ)言的重要性

C語(yǔ)言是學(xué)生今后學(xué)好后繼課程的基礎(chǔ),比如數(shù)據(jù)結(jié)構(gòu)。C++,JAVA等。雖然程序設(shè)計(jì)語(yǔ)言更新很快,但如果真正掌握精了程序設(shè)計(jì)思想,具備了真正解決實(shí)際問(wèn)題的能力。語(yǔ)言再更新可程序設(shè)計(jì)的本質(zhì)不會(huì)變。

(三)傳授C語(yǔ)言的學(xué)習(xí)方法

C語(yǔ)言是一門(mén)實(shí)踐性課程,要理論結(jié)合實(shí)踐,加強(qiáng)學(xué)生的動(dòng)手能力,解決問(wèn)題的能力,在學(xué)習(xí)方法上給以學(xué)生指導(dǎo),告訴學(xué)生如何自學(xué),如何聽(tīng)課,如何動(dòng)手實(shí)踐,明確一點(diǎn):“C語(yǔ)言不是看會(huì)的,也不是聽(tīng)會(huì)的,而是親自動(dòng)手實(shí)踐練會(huì)的”,強(qiáng)調(diào)實(shí)踐的重要性。

(四)認(rèn)識(shí)C語(yǔ)言的編譯環(huán)境。

在visual studio2005環(huán)境下,舉出幾個(gè)簡(jiǎn)單的小程序演示給他們看,并逐一講解,引導(dǎo)學(xué)生自己去發(fā)現(xiàn)程序中存在的缺陷以及改進(jìn)的方式。熟悉C語(yǔ)言源程序到可執(zhí)行文件的整個(gè)操作流程。讓他們仿照所列舉的幾個(gè)程序模仿著編一個(gè)小程序。

二、C語(yǔ)言教學(xué)方法

(一)抽象思維到形象思維的轉(zhuǎn)化

讓學(xué)習(xí)過(guò)程變得輕松有趣是激發(fā)學(xué)生興趣的關(guān)鍵所在,C語(yǔ)言本身是一門(mén)極其抽象難懂的學(xué)科,把抽象的問(wèn)題形象化,使本來(lái)枯燥無(wú)味的C語(yǔ)言變得魅力無(wú)限,符合學(xué)生的認(rèn)知規(guī)律,可以收到良好的效果。

(二)采用問(wèn)題啟發(fā)式授課,激發(fā)自主學(xué)習(xí)

針對(duì)C語(yǔ)言概念多,語(yǔ)法繁的現(xiàn)狀,采用問(wèn)題啟發(fā)式教學(xué)可以將難理解、難記憶的概念和規(guī)則變成一系列時(shí)而醒目、時(shí)而深?yuàn)W的問(wèn)題呈現(xiàn)在課堂教學(xué)中,這樣就能把學(xué)生的注意力集中起來(lái),學(xué)習(xí)積極性調(diào)動(dòng)起來(lái),達(dá)到師生互動(dòng)的效果,教師自問(wèn)自答為主,有問(wèn)有答,互問(wèn)互答,改變單調(diào)死板、照本宣科的牧師講法。這種啟發(fā)式、討論式、交流式的教法,不僅改變?cè)瓉?lái)的灌輸式,而且增強(qiáng)了學(xué)生自主學(xué)習(xí)的能力。

(三)“引申法”“框架法”和“求異法”相結(jié)合

所謂“引申法”是指是結(jié)合已經(jīng)解決的問(wèn)題,因勢(shì)利導(dǎo),引導(dǎo)學(xué)生在此基礎(chǔ)上解決相關(guān)聯(lián)的問(wèn)題。“引申法”可以培養(yǎng)學(xué)生在程序設(shè)計(jì)方面的發(fā)散思維。提高程序設(shè)計(jì)中的應(yīng)變能力。問(wèn)題是活的,但程序是有章可循的。最終使學(xué)生明白,語(yǔ)法是有限的,可解決的問(wèn)題是無(wú)限的。只有在分析實(shí)際向題的基礎(chǔ)上,以清晰的思路去設(shè)計(jì)算法,才能舉一反三,以不變應(yīng)萬(wàn)變。

“框架法”可培養(yǎng)學(xué)生的全局思維和算法的整體設(shè)計(jì)能力。具體體現(xiàn)在兩方面:一是在學(xué)生有了一點(diǎn)編程基礎(chǔ)后要利用偽代碼或流程圖,從算法設(shè)計(jì)的角度講解編程思路,而不應(yīng)拘泥于語(yǔ)法細(xì)節(jié),不分主次、逐條語(yǔ)句的講解代碼。通過(guò)此框架,可使初學(xué)者對(duì)函數(shù)設(shè)計(jì)的關(guān)鍵問(wèn)題有清晰的認(rèn)識(shí),利于從統(tǒng)籌全局的角度去考慮問(wèn)題,體現(xiàn)了程序設(shè)計(jì)逐步求精的思路。這樣可以層次分明,突出算法設(shè)計(jì)的關(guān)鍵,利于培養(yǎng)學(xué)生的編程思路。二是在學(xué)習(xí)重點(diǎn)章函數(shù)時(shí),由于新的算法已很少,主要是學(xué)習(xí)用函數(shù)調(diào)用的方法來(lái)重新編制以前所熟悉的程序,那么我們可以把著眼點(diǎn)放在函數(shù)的設(shè)計(jì)框架上,體現(xiàn)參數(shù)設(shè)計(jì)、返回值設(shè)計(jì)等關(guān)鍵問(wèn)題,而無(wú)需細(xì)講函數(shù)體的實(shí)現(xiàn)細(xì)節(jié)。

“求異法”:一個(gè)固定的問(wèn)題。解決的方法可能不唯一,如果能啟發(fā)學(xué)生多角度、多側(cè)面去尋求解決問(wèn)題的辦法,則可激發(fā)學(xué)生思考的積極性,提高其學(xué)習(xí)興致。在C語(yǔ)言中一題多解的情況有很多,有意識(shí)地引導(dǎo)新思路,鼓勵(lì)新方法,以培養(yǎng)學(xué)生在編程中的求異思維,而不是死記硬背,墨守成規(guī)。

(四)理論教學(xué)與學(xué)生實(shí)踐相結(jié)合,提高程序調(diào)試能力

對(duì)程序設(shè)計(jì)課來(lái)說(shuō),理論學(xué)習(xí)和上機(jī)要兩手抓,兩手都要抓硬。實(shí)驗(yàn)課不能流于形式,讓學(xué)生照抄照搬,甚至身在曹營(yíng)心在漢。必須給學(xué)生思考、創(chuàng)新的啟迪,訓(xùn)練其實(shí)踐能力,實(shí)驗(yàn)課要生動(dòng)活潑,使學(xué)生既掌握書(shū)中的重點(diǎn)算法,又有充分的思考空間,讓學(xué)生充分體會(huì)到頓悟和創(chuàng)造的樂(lè)趣。在進(jìn)行每一部分的學(xué)習(xí)的時(shí)候,都應(yīng)該配有相應(yīng)的學(xué)生上機(jī)實(shí)踐的機(jī)會(huì)。這樣學(xué)生既鍛煉了動(dòng)手能力,又鞏固了所學(xué)的知識(shí)。還應(yīng)該讓學(xué)生養(yǎng)成上機(jī)前分析題目,決定算法與數(shù)據(jù)結(jié)構(gòu),并編出程序源代碼的好習(xí)慣,這樣在上機(jī)時(shí),學(xué)生就有的放矢,主要精力放在調(diào)式程序上需。對(duì)于普遍存在的問(wèn)題,進(jìn)行集中提示、講解、演示以增加學(xué)生的印象。井及時(shí)檢查總結(jié)學(xué)生上機(jī)實(shí)驗(yàn)的完成情況。

(五)在整個(gè)教學(xué)環(huán)節(jié)中,巧妙地引人軟件工程的基本思想

計(jì)算機(jī)科學(xué)屬工程技術(shù)科學(xué),為使學(xué)生有良好的編程思維,應(yīng)注重軟件工程思想的滲透。對(duì)軟件生存周期的幾個(gè)階段,即問(wèn)題定義、可行性研究、需求分析、概要設(shè)計(jì)、詳細(xì)設(shè)計(jì)、編碼、調(diào)試、運(yùn)行與維護(hù),可以通過(guò)常規(guī)的C程序設(shè)計(jì)實(shí)例來(lái)體現(xiàn),以培養(yǎng)學(xué)生編程中的工程思維。這樣并沒(méi)有費(fèi)很大力氣講抽象的概念,卻可培養(yǎng)學(xué)生在程序設(shè)計(jì)中從軟件工程角度去系統(tǒng)分析問(wèn)題的良好習(xí)慣。雖然問(wèn)題小了些,但“窺一斑而知全局”,經(jīng)反復(fù)強(qiáng)化問(wèn)題求解中所蘊(yùn)含的基本思想,將有效地訓(xùn)練學(xué)生程序設(shè)計(jì)中統(tǒng)籌全局的工程思維能力。

篇3

實(shí)驗(yàn)一 上機(jī)操作初步和簡(jiǎn)單的C程序設(shè)計(jì)

一、 實(shí)驗(yàn)?zāi)康?/p>

1、熟悉C語(yǔ)言運(yùn)行環(huán)境Turbo C++3.0

2、會(huì)簡(jiǎn)單的程序調(diào)試

3、熟悉C語(yǔ)言各種類(lèi)型數(shù)據(jù)的輸入輸出函數(shù)的使用方法

4、掌握順序結(jié)構(gòu)程序設(shè)計(jì)

二、 實(shí)驗(yàn)內(nèi)容

1、 上機(jī)運(yùn)行本章3個(gè)例題,熟悉所用系統(tǒng)的上機(jī)方法與步驟。(習(xí)題1.7)

2、 編寫(xiě)一個(gè)C程序,輸入a、b、c 3個(gè)值,輸出其中最大者。(習(xí)題1.6)

3、 設(shè)圓半徑r=1.5,圓柱高h(yuǎn)=3,求圓周長(zhǎng)、圓面積、圓球表面積、圓球體積、圓柱體積。用scanf輸入數(shù)據(jù),輸出計(jì)算結(jié)果,輸出時(shí)要求有文字說(shuō)明,取小數(shù)點(diǎn)后2位數(shù)字。注意:在Trubo C++ 3.0中不能輸入漢字,只能輸入英文或拼音。(習(xí)題4.8)

4、 運(yùn)行如下程序,寫(xiě)出運(yùn)行結(jié)果。kt250.com整理該文章,版權(quán)歸原作者、原出處所有...

#include

void main()

{

int a=1,b=2;

a=a+b; b=a-b; a=a-b;

printf("%d,%dn",a,b);

}

篇4

關(guān)鍵詞:Java

面向?qū)ο?/p>

c++

編程語(yǔ)言

中國(guó)分類(lèi)號(hào):TP312

文獻(xiàn)標(biāo)識(shí)碼:A

文章編號(hào):1002-2422(2010)03-0088-03

1 Java語(yǔ)言的特點(diǎn)

(1)簡(jiǎn)單性

Java繼承了C/C++的語(yǔ)法,丟棄了其中不常用又容易引起混淆的功能,特別是非面向?qū)ο蟮膬?nèi)容,取消了c語(yǔ)言的結(jié)構(gòu)、指針、#define語(yǔ)句、多重繼承、全局變量和函數(shù)、GOTO語(yǔ)句、操作符重載和自動(dòng)類(lèi)型轉(zhuǎn)換等等。

(2)面向?qū)ο?/p>

Java是一種純面向?qū)ο蟮恼Z(yǔ)言,具有封裝、繼承和多態(tài)的特性,無(wú)全局變量或函數(shù),可以被用于面向?qū)ο筮@種現(xiàn)代軟件工程。

(3)分布式

Java包括一個(gè)支持HTTP和FTP等基于TCP/IP協(xié)議的子庫(kù)。因此,Java應(yīng)用程序可憑借URL打開(kāi)并訪問(wèn)網(wǎng)絡(luò)上的對(duì)象,象本地一樣。

(4)解釋型

Java寫(xiě)成的源代碼需要被編譯成高階的字節(jié)碼,其與機(jī)器架構(gòu)無(wú)關(guān)。然后,這種字節(jié)碼在任何Java的運(yùn)行環(huán)境中由Java虛擬機(jī)解釋執(zhí)行。保證了Java與平臺(tái)無(wú)關(guān)性和可移植性。解釋執(zhí)行與及時(shí)編譯技術(shù)的完美結(jié)合,提供了相當(dāng)高的運(yùn)算性能。

(5)多態(tài)的支持

Java是一種非常注重對(duì)象形態(tài)轉(zhuǎn)換的語(yǔ)言,所以在編譯時(shí)期就會(huì)做形態(tài)轉(zhuǎn)換檢查,在執(zhí)行時(shí)期,Java也會(huì)做一些形態(tài)上的檢查。

(6)垃圾收集和異常處理

由于Java垃圾收集器會(huì)做自動(dòng)的垃圾收集,這里的垃圾指一些不會(huì)被再使用的對(duì)象,所以程序設(shè)計(jì)者不需費(fèi)心。內(nèi)存會(huì)被自動(dòng)地管理,Java本身提供了許多面向?qū)ο蟮漠惓?Exception)處理,所以程序在執(zhí)行時(shí)期所發(fā)生的錯(cuò)誤,都可以由程序自己來(lái)處理。

(7)安全性

Java設(shè)計(jì)時(shí)對(duì)系統(tǒng)的安全,特別是網(wǎng)絡(luò)安全做了周密的考慮。通過(guò)字節(jié)碼驗(yàn)證、內(nèi)存調(diào)用方式、資源使用權(quán)限等進(jìn)行多層次的安全管理。Java被認(rèn)為是在任何系統(tǒng)上最安全的應(yīng)用程序之一。

2 Java的技術(shù)平臺(tái)

Java不僅僅是一種語(yǔ)言,更重要是一種區(qū)別于傳統(tǒng)系統(tǒng),遵循“網(wǎng)絡(luò)就是計(jì)算機(jī)”信條的平臺(tái)技術(shù)。Java平臺(tái)將面向?qū)ο笙到y(tǒng)擴(kuò)展成包括程序和數(shù)據(jù)的網(wǎng)絡(luò)計(jì)算機(jī),而這個(gè)平臺(tái)的核心就是Java虛擬機(jī)。Java虛擬機(jī)的概念和實(shí)現(xiàn)使Java平臺(tái)成為萬(wàn)能開(kāi)發(fā)平臺(tái),實(shí)現(xiàn)了Java程序“編寫(xiě)一次,到處運(yùn)行”。Java虛擬機(jī)是一種抽象化的計(jì)算機(jī),可以在其上面執(zhí)行Java的字節(jié)碼。其本身的設(shè)計(jì)原則是“小而簡(jiǎn)單”,目的是為了盡可能在所有機(jī)器上都能安裝。這樣的精簡(jiǎn)原則,使得其能夠在現(xiàn)有的各種平臺(tái)上都可以順利執(zhí)行,適合各種網(wǎng)絡(luò)的環(huán)境。Java的技術(shù)平臺(tái)的工作原理:第一步Java用一個(gè)編譯器將源程序代碼(.java)轉(zhuǎn)換成可執(zhí)行程序(.class),Java編譯器生成的是獨(dú)立于處理器結(jié)構(gòu)的字節(jié)代碼。第二步字節(jié)代碼用一個(gè)Java虛擬機(jī)來(lái)執(zhí)行,JVM是理想化的Java處理芯片,通常是在軟件上實(shí)現(xiàn)而不是在硬件上實(shí)現(xiàn)。

3 Java語(yǔ)言和c++語(yǔ)言的比較

c++和Java都屬于雜合語(yǔ)言,允許采用多種編程風(fēng)格。C++是一種雜合語(yǔ)言,支持與c語(yǔ)言的向后兼容能力。由于C++是c的一個(gè)超集,所以包含的許多特性都是c語(yǔ)言不具備的,這些特性使C++在某些地方顯得過(guò)于復(fù)雜。但在Java中,設(shè)計(jì)者覺(jué)得這種雜合并不象在C++里那么重要。JavB保留了C++的語(yǔ)法,但忽略了資源引用、指針?biāo)惴ā⒉僮鞣剌d等潛在危險(xiǎn),是C/C++的簡(jiǎn)化版本。所以Java雖然是從C++衍生出來(lái),Java和C++之間仍存在一些顯著的差異,這些差異代表著技術(shù)的極大進(jìn)步,證明了Java是一種比c++更優(yōu)秀的程序設(shè)計(jì)語(yǔ)言。從面向?qū)ο?00)程序設(shè)計(jì)的角度,論述一下Java和C++的重要差異:

(1)單根結(jié)構(gòu)

在c++中,可在任何地方啟動(dòng)一個(gè)新的繼承樹(shù),所以最后往往看到包含了大量樹(shù)的“一片森林”。在Java中,采用了一種單根式的分級(jí)結(jié)構(gòu),因此所有對(duì)象都是從根類(lèi)統(tǒng)一繼承。盡管這表面上看似乎造成了限制,但由于每個(gè)對(duì)象肯定至少有一個(gè)object接口,所以往往能獲得更強(qiáng)大的能力,Java的強(qiáng)制單根結(jié)構(gòu)更好地符合了面向?qū)ο?00)語(yǔ)言的標(biāo)準(zhǔn)。

(2)取消指針

Java和C++用new創(chuàng)建一個(gè)對(duì)象的時(shí)候,例如:Strings=new String(“object”):都會(huì)獲得一個(gè)對(duì)象引用。然而,C++對(duì)象引用在創(chuàng)建時(shí)必須進(jìn)行初始化,而且不可重定義到一個(gè)不同的位置。但Java對(duì)象引用并不一定局限于創(chuàng)建時(shí)的位置。可根據(jù)情況任意定義,這便消除了對(duì)指針的部分需求。指針通常被看作在基本變量數(shù)組中四處移動(dòng)的一種有效手段。在c++里,必須用大量采用指針指向任意一個(gè)內(nèi)存位置,這同時(shí)會(huì)使其變得不安全,也是Java不提供這一支持的原因。在Java里,沒(méi)有象C++那樣的指針,Java允許其以更安全的形式達(dá)到相同的目標(biāo)。Java沒(méi)有全局函數(shù),只有類(lèi),因而可以用傳遞的方式實(shí)現(xiàn)對(duì)象的引用。

(3)自動(dòng)垃圾收集機(jī)制

Java中沒(méi)有C++“破壞器”,變量不存在“作用域”的問(wèn)題。Java有個(gè)finalize()方法是每一個(gè)類(lèi)的成員,在某種程度上類(lèi)似于c++的“破壞器”。但finalize()是由垃圾收集器調(diào)用的,而且只負(fù)責(zé)釋放“資源”,如打開(kāi)的文件、套接字、端口、URL等。如需在一個(gè)特定的地點(diǎn)做某件事情,必須創(chuàng)建一個(gè)特殊的方法,并調(diào)用它,不能依賴finalize()方法。由Java不支持破壞器的概念,針對(duì)類(lèi)內(nèi)的基礎(chǔ)類(lèi)以及成員對(duì)象,Java采用垃圾收集器自動(dòng)清除,所有對(duì)象都會(huì)被當(dāng)作“垃圾”收集掉。自動(dòng)垃圾收集意味著在Java中出現(xiàn)內(nèi)存漏洞的情況會(huì)少得多,但也并非完全不可能。若調(diào)用一個(gè)用于分配存儲(chǔ)空間的固有方法,垃圾收集器就不能對(duì)其進(jìn)行跟蹤監(jiān)視。而在另一方面,C++中的所有對(duì)象必須用finalize()方法破壞,然而,內(nèi)存漏洞和資源漏洞多是由于編寫(xiě)不當(dāng)?shù)膄inalize()造成的,或是由于在已分配的一個(gè)塊尾釋放一種資源造成的。Java垃圾收集器是在C++基礎(chǔ)上的一種極大進(jìn)步,使許多編程問(wèn)題得以解決。

(4)異常控制機(jī)制

Java的異常規(guī)范比c++的出色得多。Java中的所有異常都是從基礎(chǔ)類(lèi)Throwable里繼承而來(lái)的,所以可確保得到的是一個(gè)通用接口。丟棄一個(gè)錯(cuò)誤的異常后,不是象C++那樣在運(yùn)行期間調(diào)用一個(gè)函數(shù),Java異常規(guī)范是在編譯期間檢查并執(zhí)行的。被取代的方法必須遵守那一方法的基礎(chǔ)類(lèi) 的異常規(guī)范,可丟棄指定的異常或者從那些異常衍生出來(lái)的其他異常。這樣一來(lái),最終得到的是更為“健壯”的異常控制代碼。

(5)單一繼承

Java中的繼承具有與c++相同的效果,但采用的語(yǔ)法不同。Java用extends關(guān)鍵字標(biāo)志從一個(gè)基礎(chǔ)類(lèi)的繼承,并用super關(guān)鍵字指出準(zhǔn)備在基礎(chǔ)類(lèi)中調(diào)用的方法,與當(dāng)前所在的方法具有相同的名字。然而,Java中的super關(guān)鍵字只允許訪問(wèn)父類(lèi)的方法,亦即分級(jí)結(jié)構(gòu)的上一級(jí)。通過(guò)在c++中設(shè)定基礎(chǔ)類(lèi)的作用域,可訪問(wèn)位于分級(jí)結(jié)構(gòu)較深處的方法,亦可用super關(guān)鍵字調(diào)用基礎(chǔ)類(lèi)構(gòu)建器,所有類(lèi)最終都會(huì)從Object里自動(dòng)繼承。和C++不同,Java不存在明確的構(gòu)建器初始化列表,但Java編譯器會(huì)強(qiáng)迫在構(gòu)建器主體的開(kāi)頭進(jìn)行全部的基礎(chǔ)類(lèi)初始化,而且不允許在主體的后面部分進(jìn)行這一工作。其語(yǔ)法如下:

public class A extends B{public A(String msg){super(msg);∥調(diào)用基礎(chǔ)類(lèi)構(gòu)建器}pubic C(int i){ super.C(i);∥調(diào)用基本方法}}

Java提供了一個(gè)interface關(guān)鍵字,其作用是創(chuàng)建抽象基礎(chǔ)類(lèi)的一個(gè)等價(jià)物。在其中填充抽象方法,且沒(méi)有數(shù)據(jù)成員。這樣一來(lái),對(duì)于僅僅設(shè)計(jì)成一個(gè)接口的東西,以及對(duì)于用extends關(guān)鍵字在現(xiàn)有功能基礎(chǔ)上的擴(kuò)展,兩者之間便產(chǎn)生了一個(gè)明顯的差異。不值得用abstract關(guān)鍵字產(chǎn)生一種類(lèi)似的效果,因?yàn)椴荒軇?chuàng)建屬于那個(gè)類(lèi)的一個(gè)對(duì)象。一個(gè)抽象類(lèi)可包含抽象方法,并不要求在其里面包含什么東西,但其也能包含用于具體實(shí)現(xiàn)的代碼。因此,其被限制成一個(gè)單一的繼承。通過(guò)與接口聯(lián)合使用,這一方案避免了對(duì)類(lèi)似于c++虛擬基礎(chǔ)類(lèi)那樣的一些機(jī)制的需要。為創(chuàng)建一個(gè)實(shí)例的一個(gè)interface(接口),需使implements關(guān)鍵字。其語(yǔ)法類(lèi)似于繼承的語(yǔ)法,如下:

public interface Face

public void Output():}

public class C extends B implements Face{public void Output()fSystem,out,println(“an object”),}}

篇5

關(guān)鍵詞:C語(yǔ)言;指針;程序設(shè)計(jì)

中圖分類(lèi)號(hào):TP311.1 文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):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語(yǔ)言是目前教學(xué)中使用最廣的程序設(shè)計(jì)語(yǔ)言。雖然近年來(lái)產(chǎn)生了許多功能豐富的計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言,但鮮有能代替C語(yǔ)言的。其主要原因就是它不僅是一門(mén)高級(jí)語(yǔ)言更重要的是它能直接對(duì)物理地址進(jìn)行訪問(wèn),具有雙重功能,是嵌入式設(shè)計(jì)中必不可少的一門(mén)語(yǔ)言。C語(yǔ)言功能強(qiáng)大的主要原因就是具有指針結(jié)構(gòu)。指針是一種特殊的數(shù)據(jù)類(lèi)型,直接指向目標(biāo)的存儲(chǔ)地址,實(shí)現(xiàn)直接訪問(wèn)對(duì)象存儲(chǔ)空間的功能,具有重要的作用。

二、C語(yǔ)言中的指針簡(jiǎn)介

在C語(yǔ)言中,任何一個(gè)變量總結(jié)起來(lái)包括變量的數(shù)據(jù)類(lèi)型、存儲(chǔ)空間。在數(shù)據(jù)類(lèi)型中定義的變量的基本范圍和操作類(lèi)型。存儲(chǔ)空間就是變量在計(jì)算機(jī)中的存儲(chǔ)地址,如何有效的存儲(chǔ)變量并能有效的訪問(wèn)到它這是一個(gè)必須解決的問(wèn)題。指針就是表示地址的一種變量,所以指針的范圍嚴(yán)格來(lái)說(shuō)只能是自然數(shù)的,并且不能在兩個(gè)指針間進(jìn)行加、乘、除這樣的運(yùn)算。由于在C語(yǔ)言中每個(gè)數(shù)據(jù)類(lèi)型都必有存儲(chǔ)空間,所以指針可以應(yīng)用于幾乎所有的數(shù)據(jù)類(lèi)型中。所以,從這個(gè)角度出發(fā)可以將指針?lè)譃?指向變量的指針、數(shù)組指針、字符指針、指向指針的指針、函數(shù)指針、結(jié)構(gòu)變量的指針以及文件指針等等。其中,指向變量的指針就是存儲(chǔ)變量的地址的。如 int * s這就是一個(gè)指向整型的指針,可以用于指向一個(gè)整型變量。如int a; 當(dāng)p=&a時(shí),就是將p存儲(chǔ)整型變量a的地址。這是指針最簡(jiǎn)單的一種類(lèi)型。所謂數(shù)組指針,就是指數(shù)組的名稱實(shí)際上是指向整個(gè)數(shù)組空間的首指針。如 int a[10];其中a本質(zhì)上是一個(gè)指針,指向該數(shù)組的第一個(gè)位置,a[2]表示距離a指向空間向后2個(gè)位置所在空間中的存放的值。所以,a[2]=*(a+2)。字符指針本質(zhì)上是數(shù)組指針的一種特殊情況,就是存放字符串的數(shù)組所對(duì)應(yīng)的數(shù)組名。指向指針的指針這是一類(lèi)很特殊的指針,用于存放指針的一類(lèi)指針,在本質(zhì)上與指向變量的指針十分相似。例如 char *ss[N]={“java”,”sss”,’’rrr”}。指向函數(shù)的指針就是指向函數(shù)入口地址的指針。結(jié)構(gòu)變量的指針這類(lèi)指針和指向變量的指針很類(lèi)似,主要的區(qū)別在于結(jié)構(gòu)變量可能有多個(gè)類(lèi)型不同的變量,所以一般空間較大。文件指針就是對(duì)文件進(jìn)行操作的指針。從上述的分類(lèi)可以看出無(wú)論什么類(lèi)型的指針其功能都是一樣的就是用于指向?qū)ο蟮牡刂房臻g罷了。

上面簡(jiǎn)要的介紹了指針的定義和分類(lèi),現(xiàn)在簡(jiǎn)要的論述一下指針涉及到的運(yùn)算操作。首先由于指針是存放的變量地址的,所以第一個(gè)操作就是對(duì)指針進(jìn)行地址賦值。如int a,*p;

P=&a,這就是對(duì)指針p進(jìn)行進(jìn)行賦變量a的地址,p指向變量a。當(dāng)然也可以通過(guò)指針獲取指針指向地址空間所存儲(chǔ)的值。如int b=2,*p;p=&a,這是*p就表示p指向空間所存儲(chǔ)的值,在本例中就是a的值2。為了能在數(shù)組指針中通過(guò)指針能訪問(wèn)到整個(gè)數(shù)組的值,所以。可以對(duì)指針進(jìn)行加減整數(shù)值,表示地址的前移或后移。如int a[10],*p,*s; p=a;s=p+2;其中s 的值表示數(shù)組中首地址向前移動(dòng)2的位置,表示 a[2]對(duì)應(yīng)的地址。 為了表示兩個(gè)地址間存在的距離,可以通過(guò)指針間的減法實(shí)現(xiàn)。當(dāng)然指針涉及到的還有其他運(yùn)算,現(xiàn)不詳述了。

三、C語(yǔ)言中的指針應(yīng)用

在C語(yǔ)言中指針的十分應(yīng)用廣泛,除具有一般的功能外,具體特殊功能的應(yīng)用總結(jié)起來(lái)有三個(gè)方面:一是用于在函數(shù)中可以返回多個(gè)值;還有就是可以實(shí)現(xiàn)動(dòng)態(tài)調(diào)用函數(shù);最后就是實(shí)現(xiàn)數(shù)組的動(dòng)態(tài)定義。其中,由于由函數(shù)的特點(diǎn),一個(gè)函數(shù)只能有一個(gè)返回值,但在有些場(chǎng)合需要返回多個(gè)值,就可以定義指針參量來(lái)實(shí)現(xiàn),其定義的基本框架如下:

Sss( int a,int *p )

{int s;

…….

………

Return s;

}

在這中情況下,函數(shù)不僅可以得到返回值(通過(guò)Return s來(lái)實(shí)現(xiàn)的),還可以通過(guò)指針p來(lái)返回相應(yīng)的值。所謂指針能實(shí)現(xiàn)動(dòng)態(tài)調(diào)用函數(shù),這里用到的指針就是上文中提到的函數(shù)指針。函數(shù)指針就是指向函數(shù)入口地址的指針,我們還知道其實(shí)函數(shù)名就是一個(gè)函數(shù)指針。我們就是通過(guò)函數(shù)名實(shí)現(xiàn)動(dòng)態(tài)調(diào)用函數(shù)的。在主調(diào)函數(shù)的參數(shù)中采用函數(shù)名充當(dāng)實(shí)參就能實(shí)現(xiàn)函數(shù)的動(dòng)態(tài)調(diào)用。該方法以簡(jiǎn)短的代碼實(shí)現(xiàn)了復(fù)雜的功能。最后講到指針能實(shí)現(xiàn)數(shù)組的動(dòng)態(tài)定義。從C語(yǔ)言的學(xué)習(xí)中,我們知道在定義數(shù)組時(shí)一定要指定數(shù)組的大小,否則,不能完整數(shù)組的定義。那么如何實(shí)現(xiàn)數(shù)組的動(dòng)態(tài)定義?數(shù)組從本質(zhì)上來(lái)講就是連續(xù)的空間集合罷了。那么,我們可以通過(guò)申請(qǐng)一個(gè)空間并賦值給一個(gè)指針變量,以此指針變量為首空間,就能獲取連續(xù)的空間,這與數(shù)組相同。當(dāng)然數(shù)組還有許多應(yīng)用,只有認(rèn)真分析就能得到更多更好的應(yīng)用實(shí)例。

四、結(jié)論

C語(yǔ)言是到目前為止學(xué)習(xí)最多的程序設(shè)計(jì)語(yǔ)言之一,也是計(jì)算機(jī)教育中的必修課。在整個(gè)C語(yǔ)言教學(xué)中,指針是一個(gè)十分重要的部分,也是最難掌握的部分之一。論文通過(guò)對(duì)指針的概念、分類(lèi)、運(yùn)算類(lèi)型和應(yīng)用等方面,系統(tǒng)的論述了指針,目的就是讓大家能清晰的了解指針、掌握指針,從而實(shí)現(xiàn)高效的應(yīng)用指針。只有掌握好了指針,才能發(fā)揮C語(yǔ)言的優(yōu)勢(shì),可見(jiàn)指針具有重要的作用。

參考文獻(xiàn):

篇6

【關(guān)鍵詞】指針;情景創(chuàng)設(shè);主動(dòng)探索;協(xié)作學(xué)習(xí);游戲案例導(dǎo)入

一、引言

指針是C語(yǔ)言中廣泛使用的一種數(shù)據(jù)類(lèi)型,運(yùn)用指針編程是C語(yǔ)言最主要的風(fēng)格之一。正確而靈活地運(yùn)用它,可以有效地表示復(fù)雜的數(shù)據(jù)結(jié)構(gòu);能動(dòng)態(tài)分配內(nèi)存;能方便地使用字符串;有效而方便地使用數(shù)組;在調(diào)用函數(shù)時(shí)能得到多于1個(gè)的值;并能像匯編語(yǔ)言一樣處理內(nèi)存地址,從而變出精練而高效的程序等,這對(duì)設(shè)計(jì)系統(tǒng)軟件是很必要的。掌握指針的應(yīng)用,可以使程序簡(jiǎn)潔、緊湊、高效。指針極大地豐富了C語(yǔ)言的功能。每一個(gè)學(xué)習(xí)和使用C語(yǔ)言的人,都應(yīng)當(dāng)深入地學(xué)習(xí)和掌握指針。可以說(shuō),不掌握指針就是沒(méi)有掌握C語(yǔ)言的精華。

二、教學(xué)現(xiàn)狀

高職學(xué)生的基礎(chǔ)普遍較差,數(shù)學(xué)與英語(yǔ)基礎(chǔ)較為薄弱,在碰到程序邏輯思維分析,程序代碼編寫(xiě)及調(diào)試的過(guò)程中,往往會(huì)感到困難,這是高職C語(yǔ)言課程教學(xué)中的共性問(wèn)題。學(xué)習(xí)指針是學(xué)習(xí)C語(yǔ)言中最重要的一環(huán),能否正確理解和使用指針是學(xué)生是否掌握C語(yǔ)言的一個(gè)標(biāo)志。同時(shí),指針也是C語(yǔ)言中最為困難的一部分,學(xué)生很難正確理解基本概念,就指針的教學(xué)談?wù)勛约旱南敕ā?/p>

三、教學(xué)方法

1、情景創(chuàng)設(shè)教學(xué)法。課堂教學(xué)是獲取知識(shí)和技能的主要陣地,應(yīng)當(dāng)成為培養(yǎng)學(xué)生獨(dú)立思考的搖籃。情景創(chuàng)設(shè)教學(xué)方法把學(xué)習(xí)設(shè)置到簡(jiǎn)單的、有意義的問(wèn)題情境中,學(xué)生通過(guò)互相合作來(lái)解決這些問(wèn)題,發(fā)現(xiàn)隱含于問(wèn)題背后的科學(xué)知識(shí),形成讓學(xué)生掌握解決問(wèn)題的技能和提高自主學(xué)習(xí)的能力。例如,講解指針的基本概念,計(jì)算機(jī)中的所有數(shù)據(jù)都是順序存放在存儲(chǔ)器中的。一般把存儲(chǔ)器中的一個(gè)字節(jié)稱為一個(gè)內(nèi)存單元,不同數(shù)據(jù)類(lèi)型的值所占用的內(nèi)存單元數(shù)亦不同。為了正確地訪問(wèn)這些內(nèi)存單元。內(nèi)存單元的編號(hào)也叫地址,通常也把這個(gè)地址稱為指針。內(nèi)存單元的指針和內(nèi)存單元的內(nèi)容是兩個(gè)不同的概念。為讓學(xué)生掌握并理解內(nèi)存單元的指針和內(nèi)存單元的內(nèi)容,我采用了情景創(chuàng)設(shè)的教學(xué)方法。我們到銀行去存、取款時(shí),銀行工作人員將根據(jù)我們的賬號(hào)去查找存款單,找到之后在存單上寫(xiě)入存款、取款的金額。在這里,賬號(hào)就是存單的指針,存款數(shù)就是存單的內(nèi)容。這樣就能讓學(xué)生明白內(nèi)存單元的指針和內(nèi)存單元的內(nèi)容之間的關(guān)系了。

2、主動(dòng)探索、協(xié)作學(xué)習(xí)教學(xué)法。根據(jù)已有信息,從不同角度、不同方向思考問(wèn)題,從多方面尋求多樣性答案的一種思維形式,是主動(dòng)探索的教學(xué)方法。為走出傳統(tǒng)教學(xué)中的泥灘,教師應(yīng)轉(zhuǎn)變教學(xué)觀念,砸碎應(yīng)試教育的模式和框架,克服單純傳授知識(shí)的傾向,注重順向思維、逆向思維、多向思維的訓(xùn)練,培養(yǎng)學(xué)生思維的深刻性、批判性和創(chuàng)新性。具體來(lái)講,就是要通過(guò)挖掘教材中能一題多解、一法多用、一題多變的教學(xué)內(nèi)容,來(lái)引導(dǎo)學(xué)生主動(dòng)探索,使他們的思考朝多種方向擴(kuò)散,提出各種設(shè)想、多種解答。在指針教學(xué)中還可以進(jìn)行協(xié)作學(xué)習(xí)中培養(yǎng)學(xué)生們的思維。協(xié)作學(xué)習(xí)是在解題中,盡可能利用自己已有的知識(shí)和經(jīng)驗(yàn)與同學(xué)一起討論,將不同的方法進(jìn)行比較,從中確定出最佳方案。在教學(xué)中,引導(dǎo)學(xué)生從不同方向利用其他學(xué)科的理論,開(kāi)闊思路,找出解決問(wèn)題的多種方法。然后在眾多的解法中,經(jīng)過(guò)歸納、判斷和比較,最終得出一個(gè)最優(yōu)化的結(jié)論。比如在教學(xué)生如何通過(guò)指針引用數(shù)組元素,先請(qǐng)學(xué)生協(xié)作學(xué)習(xí)開(kāi)闊思路用不同方法編寫(xiě)“輸出數(shù)組中的全部元素”程序。

方法一:下標(biāo)法

方法二:通過(guò)數(shù)組名計(jì)算數(shù)組元素地址,找出元素的值

方法三:用指針變量指向數(shù)組元素

通過(guò)該教學(xué)方法,這個(gè)知識(shí)點(diǎn)學(xué)生掌握得很好,找出解決問(wèn)題的多種方法,能深刻地、高水平地掌握知識(shí),并能把這些知識(shí)廣泛應(yīng)用到學(xué)習(xí)新知識(shí)的過(guò)程中,舉一反三,提高了對(duì)知識(shí)的理解能力,使學(xué)習(xí)活動(dòng)順利進(jìn)行。

3、游戲案例導(dǎo)入教學(xué)法

在指針教學(xué)中通過(guò)游戲案例導(dǎo)入教學(xué)法可以營(yíng)造學(xué)生獨(dú)立思考的心理氛圍。在分析指向多維數(shù)組的指針和指針變量中的“多維數(shù)組的地址”知識(shí)點(diǎn),我先請(qǐng)同學(xué)做游戲,一個(gè)當(dāng)“排長(zhǎng)”,三個(gè)當(dāng)“班長(zhǎng)”,十二個(gè)當(dāng)“戰(zhàn)士”,游戲是:有一個(gè)排,下設(shè)3個(gè)班,每個(gè)班有4名戰(zhàn)士。規(guī)定排長(zhǎng)只管理到班,班長(zhǎng)管理戰(zhàn)士。在排長(zhǎng)眼里只有第0、1、2班。排長(zhǎng)從第0班的起始位置走到第1班的起始位置,看來(lái)只走了一步,但實(shí)際上他跳過(guò)了4名戰(zhàn)士。為了找到某一班內(nèi)某一個(gè)戰(zhàn)士,必須給兩個(gè)參數(shù),即第i班第j個(gè)戰(zhàn)士,先找到第i班,然后由該班班長(zhǎng)在本班范圍內(nèi)找第j個(gè)戰(zhàn)士。這個(gè)戰(zhàn)士的位置就是a[i]+i.。開(kāi)始時(shí)班長(zhǎng)面對(duì)第0個(gè)戰(zhàn)士。注意,排長(zhǎng)和班長(zhǎng)的初始位置是相同的。但他們的“指向”是不同的。排長(zhǎng)“指向”班,他走一步就跳過(guò)1個(gè)班,而班長(zhǎng)“指向”戰(zhàn)士,走一步只是指向下一個(gè)戰(zhàn)士。可以看到排長(zhǎng)是“宏觀管理”,只管班,班長(zhǎng)則是“微觀管理”,管理到戰(zhàn)士。如果要找第1班第2個(gè)戰(zhàn)士,則先由排長(zhǎng)找到第1班的班長(zhǎng),然后,由班長(zhǎng)在本班范圍內(nèi)找到第2個(gè)戰(zhàn)士。二維數(shù)組a相當(dāng)于排長(zhǎng),每一行(即一維數(shù)組a[0]、a[1]、a[2])相當(dāng)于班長(zhǎng),每一行中的元素(如a[1][2])相當(dāng)于戰(zhàn)士。

請(qǐng)同學(xué)們打開(kāi)書(shū),仔細(xì)看插圖,邊看邊想:誰(shuí)是排長(zhǎng)?班長(zhǎng)在哪兒?管多少個(gè)戰(zhàn)士?

這段游戲?qū)氚沿灤┤牡木€索用三個(gè)問(wèn)題串起來(lái),讓學(xué)生從靜態(tài)的圖中找答案,思考、討論結(jié)果。這一過(guò)程學(xué)生的思維也是最活躍的,對(duì)問(wèn)題的思考是深入而全方位的,這些問(wèn)題激發(fā)了學(xué)生們的心理驅(qū)動(dòng)力,在討論爭(zhēng)議中,讓學(xué)生迸發(fā)出創(chuàng)新思維的火花。

篇7

關(guān)鍵詞: C語(yǔ)言 變量 變量的存儲(chǔ)類(lèi)別

C語(yǔ)言是一種應(yīng)用廣泛的、結(jié)構(gòu)化的程序設(shè)計(jì)語(yǔ)言。程序設(shè)計(jì)的一項(xiàng)主要任務(wù)就是對(duì)數(shù)據(jù)進(jìn)行處理,編寫(xiě)程序時(shí)需要用到各種變量來(lái)存放數(shù)據(jù)。因此,變量在C語(yǔ)言中是一個(gè)很重要的概念。由于C語(yǔ)言的數(shù)據(jù)結(jié)構(gòu)豐富,變量的內(nèi)容也很多,包括變量的概念、定義、數(shù)據(jù)類(lèi)型、作用域、存儲(chǔ)類(lèi)別和存儲(chǔ)方式等。靈活掌握C語(yǔ)言中的各種變量,對(duì)程序設(shè)計(jì)將起到至關(guān)重要的作用。

一、變量的概念

變量是內(nèi)存或寄存器中用一個(gè)標(biāo)識(shí)符命名的存儲(chǔ)單元,可以用來(lái)存儲(chǔ)一個(gè)特定類(lèi)型的數(shù)據(jù),并且數(shù)據(jù)的值在程序運(yùn)行過(guò)程中可以進(jìn)行修改。可見(jiàn),變量首先是一個(gè)標(biāo)識(shí)符或者名稱,就像一個(gè)客房的編號(hào)一樣,有了這個(gè)編號(hào),我們就可以找到房間的客人。為了方便,我們?cè)诮o變量命名時(shí),最好能符合大多數(shù)人的習(xí)慣,應(yīng)見(jiàn)名知義,便于交流和維護(hù)。

二、變量的定義和初始化

在C語(yǔ)言中要使用變量必須先定義,再使用。一個(gè)變量定義的完整格式是(里的部分表示可以省略的部分):

[存儲(chǔ)類(lèi)型]數(shù)據(jù)類(lèi)型 變量名1[=表達(dá)式1],變量名2[=表達(dá)式2],……,變量名n[=表達(dá)式n]。

定義一個(gè)變量的過(guò)程就是向內(nèi)存申請(qǐng)一個(gè)符合該數(shù)據(jù)類(lèi)型的內(nèi)存空間,以后對(duì)該變量的操作就是對(duì)對(duì)應(yīng)內(nèi)存空間的存取操作。

在這個(gè)定義中,存儲(chǔ)類(lèi)型決定了變量存放在何處,數(shù)據(jù)類(lèi)型決定了這個(gè)變量所占的字節(jié)數(shù),變量名決定了這個(gè)變量在本程序中的名字,表達(dá)式則決定了這個(gè)變量的初始值,使用變量之前應(yīng)該給一個(gè)值,編譯程序?qū)椭覀儼l(fā)現(xiàn)那些還沒(méi)有被給定一個(gè)值就被使用的變量。不過(guò),變量不一定需要初始化。在函數(shù)外部定義的變量或者在函數(shù)內(nèi)部用static關(guān)鍵字定義的變量在沒(méi)有明確地被初始化之前都已被系統(tǒng)初始化為0了。在函數(shù)內(nèi)部或程序塊內(nèi)部定義的不帶Static關(guān)鍵字的變量都是自動(dòng)變量,如果沒(méi)有明確地對(duì)這些變量進(jìn)行初始化,它們就是會(huì)具有未定義值。如果沒(méi)有對(duì)一個(gè)自動(dòng)變量進(jìn)行初始化,在使用它之前就必須保證先給它賦值。

三、變量的數(shù)據(jù)類(lèi)型

程序設(shè)計(jì)最基本的問(wèn)題是解決對(duì)所要處理數(shù)據(jù)的描述。任何一個(gè)數(shù)據(jù),都有一個(gè)確定的表示形式。一個(gè)確定的值和確定的能參與的各種運(yùn)算,就是數(shù)據(jù)類(lèi)型。程序中變量的本質(zhì)表現(xiàn)在存在時(shí)間和占用空間這兩個(gè)方面。變量的數(shù)據(jù)類(lèi)型決定了變量占用的存儲(chǔ)空間。它受類(lèi)型說(shuō)明語(yǔ)句的制約。任一變量都必須具有確定的數(shù)據(jù)類(lèi)型。不管變量怎樣變化,其值都必須符合該類(lèi)數(shù)據(jù)類(lèi)型的規(guī)定。

四、變量的存儲(chǔ)類(lèi)型

C語(yǔ)言中變量不僅僅有數(shù)據(jù)類(lèi)型,還有存儲(chǔ)類(lèi)型。數(shù)據(jù)類(lèi)型用來(lái)說(shuō)明變量所占的存儲(chǔ)空間的大小和可以進(jìn)行的操作,存儲(chǔ)類(lèi)型用來(lái)表示變量的生命期和作用域,即變量起作用的范圍。在C語(yǔ)言中,按照變量的作用域把變量分為兩種:局部變量和全局變量。

1.局部變量

在一個(gè)函數(shù)內(nèi)部定義的變量,只在本函數(shù)內(nèi)部有效,這種變量稱為“局部變量”。例如:主函數(shù)與被調(diào)用函數(shù)中可以有相同的變量名,但這些變量只作用在它自己的范圍內(nèi),即兩個(gè)函數(shù)中的同名變量,在內(nèi)存中占有不同的存儲(chǔ)單元,是兩個(gè)不同的變量。局部變量存在于以下幾種形式中:

(1)在一個(gè)函數(shù)內(nèi)部定義的變量是局部變量,只能在函數(shù)內(nèi)部使用。

(2)在主函數(shù)內(nèi)部定義的變量也是局部變量,其它函數(shù)也不能使用主函數(shù)中的變量。

(3)形式參數(shù)是局部變量。

(4)在復(fù)合語(yǔ)句中定義的變量是局部于復(fù)合語(yǔ)句的變量,只能在復(fù)合語(yǔ)句中使用。

(5)局部變量在函數(shù)被調(diào)用的過(guò)程中占有存儲(chǔ)單元。

(6)不同函數(shù)中可以使用同名變量。在不同的作用域內(nèi),可以對(duì)變量重新進(jìn)行定義。

2.全局變量

在函數(shù)外部定義的變量是全局變量,其作用域是變量定義位置至整個(gè)程序文件結(jié)束。使用全局變量,可增加函數(shù)間數(shù)據(jù)聯(lián)系的渠道。全局變量可以將數(shù)據(jù)帶入到作用域范圍內(nèi)的函數(shù),也可以將數(shù)據(jù)帶回到作用域范圍內(nèi)的其它函數(shù)。提前引用外部變量,需對(duì)外部變量進(jìn)行說(shuō)明,或稱聲明。局部變量如與外部變量同名,則在局部變量的作用域內(nèi),外部變量存在,但不可見(jiàn),外部變量的作用被屏蔽。全局變量在程序運(yùn)行過(guò)程中均占用存儲(chǔ)單元。在編程時(shí),原則上盡量少用全局變量,能用局部變量,不用全局變量,要避免局部變量全局化。

在C語(yǔ)言中,按照變量在內(nèi)存中存在的時(shí)間(生存期)角度來(lái)分,可分為動(dòng)態(tài)存儲(chǔ)方式和靜態(tài)存儲(chǔ)方式。

(1)靜態(tài)存儲(chǔ)變量

凡是用關(guān)鍵字Static定義的變量全部被稱為靜態(tài)變量。所有的靜態(tài)變量全部存儲(chǔ)在靜態(tài)存儲(chǔ)區(qū),在程序的運(yùn)行期間一直存在。

(2)動(dòng)態(tài)存儲(chǔ)變量

動(dòng)態(tài)存儲(chǔ)變量是存儲(chǔ)在動(dòng)態(tài)存儲(chǔ)區(qū)的,這種變量只在定義它們的時(shí)候才創(chuàng)建,在定義它們的函數(shù)返回時(shí)系統(tǒng)回收變量所占內(nèi)存。對(duì)這些變量的創(chuàng)建和回收是由系統(tǒng)自動(dòng)完成的,所以也叫自動(dòng)變量(用關(guān)鍵字Auto定義)。最典型的例子就是函數(shù)中定義的局部變量。

變量的特性除了數(shù)據(jù)類(lèi)型之外,還有存儲(chǔ)類(lèi)別。C語(yǔ)言中變量的存儲(chǔ)類(lèi)別有四種:自動(dòng)型(Auto)、靜態(tài)型(Static)、外部型(Extern)、寄存器型(Register)。

①自動(dòng)型(Auto)

Auto表示自動(dòng)變量,通常關(guān)鍵字Auto可以省略,自動(dòng)變量必須定義在函數(shù)內(nèi)部,我們以前所說(shuō)的變量基本上都是這種類(lèi)型,函數(shù)的形式參數(shù)也是這種類(lèi)型。自動(dòng)型變量是局部變量,所以作用域是本函數(shù)。若是在復(fù)合語(yǔ)句中說(shuō)明的自動(dòng)變量,其作用域是本復(fù)合語(yǔ)句。

②靜態(tài)型(Static)

在函數(shù)內(nèi)部以Static進(jìn)行說(shuō)明的變量。它是局部變量,作用域與自動(dòng)變量相同。它的存儲(chǔ)方式是靜態(tài)的,當(dāng)它被說(shuō)明后就占有存儲(chǔ)單元,直到本程序執(zhí)行結(jié)束,所以它的生命期是從被說(shuō)明開(kāi)始到程序執(zhí)行結(jié)束。當(dāng)一個(gè)變量被定義為靜態(tài)型時(shí),如果它沒(méi)有賦值,系統(tǒng)自動(dòng)賦0值,而自動(dòng)變量不賦值,它的值是不確定的。

③外部型(Extern)

在函數(shù)外部說(shuō)明的變量,它是全局變量,所以作用域是從說(shuō)明開(kāi)始到程序結(jié)束。它的存儲(chǔ)方式是靜態(tài)型,所以它的生存期是從說(shuō)明開(kāi)始到整個(gè)程序執(zhí)行結(jié)束。外部變量有定義性說(shuō)明和引用性說(shuō)明兩種形式,定義性說(shuō)明作用是定義一個(gè)外部變量,不需要使用Extern。若外部變量在程序的后面說(shuō)明,當(dāng)前不能直接使用,若要使用就必需使用Extern進(jìn)行引用性說(shuō)明。

④寄存器型(Register)

Register關(guān)鍵字用于聲明寄存器變量,頻繁使用的變量聲明為Register型可以提高程序效率,也可以交給編譯器自行優(yōu)化(編譯器一般把循環(huán)控制變量存儲(chǔ)類(lèi)型定為Register),Register類(lèi)型的變量受處理器寄存器長(zhǎng)度的限制,不符合要求的Register變量將會(huì)被處理成Auto型內(nèi)存變量。Register變量在作用時(shí)駐留于處理器的寄存器,故其作用域也只限于相應(yīng)的函數(shù)和復(fù)合語(yǔ)句,和Auto類(lèi)似。

總之,C語(yǔ)言中的變量類(lèi)型豐富,運(yùn)用靈活。只有多想、多練、多編寫(xiě)程序,我們才能真正掌握其中的含義。

參考文獻(xiàn):

篇8

關(guān)鍵詞: C程序設(shè)計(jì) 運(yùn)算符 預(yù)算順序 算法 結(jié)構(gòu)

一、引言

現(xiàn)在許多院校的計(jì)算機(jī)專業(yè)開(kāi)設(shè)了C語(yǔ)言課程,將其作為學(xué)生學(xué)習(xí)程序設(shè)計(jì)技術(shù)的入門(mén)課程,這與C語(yǔ)言的特點(diǎn)是分不開(kāi)的。C語(yǔ)言不但可以編寫(xiě)系統(tǒng)軟件,而且可以根據(jù)用戶的需要編寫(xiě)出滿足用戶要求的應(yīng)用軟件,尤其是C語(yǔ)言具有很好的對(duì)計(jì)算機(jī)的硬件編程能力。同時(shí),C語(yǔ)言具有邏輯性強(qiáng)、處理問(wèn)題周密、嚴(yán)謹(jǐn)?shù)奶攸c(diǎn),是集知識(shí)和技能于一體,實(shí)踐性很強(qiáng)的課程。學(xué)生通過(guò)學(xué)習(xí)C語(yǔ)言可掌握程序設(shè)計(jì)的一些基本方法和技巧。然而C語(yǔ)言的數(shù)據(jù)類(lèi)型較多、表達(dá)式豐富、語(yǔ)法結(jié)構(gòu)較復(fù)雜,是一門(mén)教師難教、學(xué)生難學(xué)的課程。

《C程序設(shè)計(jì)》的內(nèi)容很豐富,按照我們現(xiàn)在的教學(xué)大綱,教學(xué)的主要內(nèi)容是基礎(chǔ)知識(shí)、四種結(jié)構(gòu)的程序設(shè)計(jì)、函數(shù)與數(shù)組的應(yīng)用和一些簡(jiǎn)單的算法。在學(xué)習(xí)時(shí),同學(xué)們應(yīng)該把主要精力放在這些部分,多進(jìn)行練習(xí)和上機(jī)調(diào)試。當(dāng)然,在初學(xué)C語(yǔ)言時(shí),可能會(huì)遇到有些問(wèn)題理解不透,或者表達(dá)方式與以往數(shù)學(xué)學(xué)習(xí)中不同(如運(yùn)算符等),這就要求不要?dú)怵H,不明白的地方多問(wèn)多想,鼓足勇氣進(jìn)行學(xué)習(xí),待學(xué)完后面的章節(jié)知識(shí),前面的問(wèn)題也就迎刃而解了。學(xué)習(xí)C語(yǔ)言始終要記住“曙光在前頭”和“千金難買(mǎi)回頭看”。學(xué)習(xí)后面的知識(shí),不要忘了回頭弄清遺留下的問(wèn)題和加深理解前面的知識(shí)。這是我們學(xué)生最不易做到的,然而卻又是最重要的。學(xué)習(xí)C語(yǔ)言就是要經(jīng)過(guò)幾個(gè)反復(fù),才能前后貫穿,積累應(yīng)該掌握的C語(yǔ)言知識(shí)。那么,我們到底該如何學(xué)好《C程序設(shè)計(jì)》呢?

二、奠定基礎(chǔ)――了解、學(xué)好運(yùn)算符和運(yùn)算順序

C語(yǔ)言的運(yùn)算非常靈活,功能十分豐富,運(yùn)算種類(lèi)遠(yuǎn)多于其他程序設(shè)計(jì)語(yǔ)言。在表達(dá)式方面較其它程序語(yǔ)言更為簡(jiǎn)潔,如自加、自減、逗號(hào)運(yùn)算和三目運(yùn)算使表達(dá)式更為簡(jiǎn)單。但初學(xué)者往往會(huì)覺(jué)得這種表達(dá)式難讀,關(guān)鍵原因就是對(duì)運(yùn)算符和運(yùn)算順序理解不透不全。當(dāng)多種不同運(yùn)算組成一個(gè)運(yùn)算表達(dá)式,即一個(gè)運(yùn)算式中出現(xiàn)多種運(yùn)算符時(shí),運(yùn)算的優(yōu)先順序和結(jié)合規(guī)則顯得十分重要。在學(xué)習(xí)中,只要我們對(duì)此合理進(jìn)行分類(lèi),找出它們與我們?cè)跀?shù)學(xué)中所學(xué)到運(yùn)算之間的不同點(diǎn)之后,記住這些運(yùn)算也就不困難了,有些運(yùn)算符在理解后更會(huì)牢記心中,將來(lái)用起來(lái)會(huì)得心應(yīng)手,而有些可暫時(shí)放棄不理,等用到時(shí)再記不遲。對(duì)于運(yùn)算符的優(yōu)先級(jí)也是必須明確的。《C程序設(shè)計(jì)》運(yùn)算符可分為15種優(yōu)先級(jí),從高到低,優(yōu)先級(jí)為1―15,且除第2、3級(jí)和第14級(jí)為從右至左結(jié)合外,其他都是從左至右結(jié)合,它決定著同級(jí)運(yùn)算符的運(yùn)算順序。這里就給大家介紹一個(gè)優(yōu)先級(jí)口訣:

括號(hào)成員第一

全體單目第二

乘除余三、加減四

移位五、關(guān)系六

等于(與)不等排第七

位與異位和位或

“三分天下”八九十

邏輯或跟與

十二和十一

條件高于賦值

逗號(hào)運(yùn)算級(jí)最低。[1]

下面我們來(lái)舉個(gè)例子:

a=3;b=5;c=++a*b;d=a++*b;

對(duì)于c=++a*b來(lái)說(shuō),按表中所列順序,++先執(zhí)行,*后執(zhí)行,所以++a執(zhí)行后,a的值為4,由于++為前置運(yùn)算,所以a的值4參與運(yùn)算,C的值計(jì)算式為4*5=20而不是3*5=15了。而對(duì)于d=a++*b來(lái)說(shuō),由于a++為后置運(yùn)算,所以a值為4參與運(yùn)算,使得d的值仍為20,而a參與運(yùn)算后其值加1,值為5。這個(gè)例子執(zhí)行后,a的值為5,b的值為5,c的值為20,d的值也是20。

三、砌磚壘墻――了解、學(xué)好四種程序結(jié)構(gòu)

(1)順序結(jié)構(gòu)

順序結(jié)構(gòu)的程序設(shè)計(jì)是最簡(jiǎn)單的,只要按照解決問(wèn)題的順序?qū)懗鱿鄳?yīng)的語(yǔ)句就行,它的執(zhí)行順序是自上而下,依次執(zhí)行。例如:a=3,b=5,現(xiàn)交換a,b的值。這個(gè)問(wèn)題就好像交換兩個(gè)杯子的水,這當(dāng)然要用到第三個(gè)杯子,假如第三個(gè)杯子是c,那么正確的程序?yàn)椋篶=a;a=b;b=c;執(zhí)行結(jié)果是a=5,b=c=3。

(2)分支結(jié)構(gòu)

順序結(jié)構(gòu)的程序雖然能解決計(jì)算、輸出等問(wèn)題,但不能做判斷再選擇。對(duì)于要先做判斷再選擇的問(wèn)題就要使用分支結(jié)構(gòu)。分支結(jié)構(gòu)的執(zhí)行是依據(jù)一定的條件選擇執(zhí)行路徑,而不是嚴(yán)格按照語(yǔ)句出現(xiàn)的物理順序。分支結(jié)構(gòu)的程序設(shè)計(jì)方法的關(guān)鍵在于構(gòu)造合適的分支條件和分析程序流程,根據(jù)不同的程序流程選擇適當(dāng)?shù)姆种дZ(yǔ)句。分支結(jié)構(gòu)適合于帶有邏輯或關(guān)系比較等條件判斷的計(jì)算,設(shè)計(jì)這類(lèi)程序時(shí)往往都要先繪制其程序流程圖,然后根據(jù)程序流程寫(xiě)出源程序,這樣做把程序設(shè)計(jì)分析與語(yǔ)言分開(kāi),使得問(wèn)題簡(jiǎn)單化,易于理解。程序流程圖是根據(jù)解題分析所繪制的程序執(zhí)行流程圖。學(xué)習(xí)分支結(jié)構(gòu)不要被分支嵌套所迷惑,只要正確繪制出流程圖,弄清各分支所要執(zhí)行的功能,嵌套結(jié)構(gòu)也就不難了。嵌套只不過(guò)是分支中又包括分支語(yǔ)句而已,不是新知識(shí),只要對(duì)雙分支的理解清楚,分支嵌套是不難的。那么就先來(lái)簡(jiǎn)單介紹一下二分支選擇結(jié)構(gòu)。C語(yǔ)言的if語(yǔ)句有兩種基本形式,即獨(dú)立的if結(jié)構(gòu)和if-else結(jié)構(gòu)。[2]其語(yǔ)法形式如下:

1)獨(dú)立的if結(jié)構(gòu)

if(表達(dá)式)

語(yǔ)句

2)if-else結(jié)構(gòu)

if(表達(dá)式)

語(yǔ)句1

else

語(yǔ)句2

再來(lái)看一下分支嵌套的語(yǔ)法形式

if(表達(dá)式1)

if(表達(dá)式2)語(yǔ)句1

else語(yǔ)句2

else語(yǔ)句3

(3)循環(huán)結(jié)構(gòu)

循環(huán)結(jié)構(gòu)可以減少源程序重復(fù)書(shū)寫(xiě)的工作量,用來(lái)描述重復(fù)執(zhí)行某段算法的問(wèn)題,這是程序設(shè)計(jì)中最能發(fā)揮計(jì)算機(jī)特長(zhǎng)的程序結(jié)構(gòu)。C語(yǔ)言中提供四種循環(huán),即goto循環(huán)、while循環(huán)、do-while循環(huán)和for循環(huán)。[3]四種循環(huán)可以用來(lái)處理同一問(wèn)題,一般情況下它們可以互相代替換,但一般不提倡用goto循環(huán),因?yàn)閺?qiáng)制改變程序的順序經(jīng)常會(huì)給程序的運(yùn)行帶來(lái)不可預(yù)料的錯(cuò)誤,在學(xué)習(xí)中我們主要學(xué)習(xí)while、do...while、for三種循環(huán)。常用的三種循環(huán)結(jié)構(gòu)學(xué)習(xí)的重點(diǎn)在于弄清它們相同與不同之處,以便在不同場(chǎng)合下使用,這就要清楚三種循環(huán)的格式和執(zhí)行順序,將每種循環(huán)的流程圖理解透徹后就會(huì)明白如何替換使用,如把while循環(huán)的例題,用for語(yǔ)句重新編寫(xiě)一個(gè)程序,這樣能更好地理解它們的作用。特別要注意在循環(huán)體內(nèi)應(yīng)包含趨于結(jié)束的語(yǔ)句(即循環(huán)變量值的改變),否則就可能成了一個(gè)死循環(huán),這是初學(xué)者的一個(gè)常見(jiàn)錯(cuò)誤。對(duì)于它們的異同點(diǎn),我們也應(yīng)該了解,明確:用while和do...while循環(huán)時(shí),循環(huán)變量的初始化的操作應(yīng)在循環(huán)體之前,而for循環(huán)一般在語(yǔ)句1中進(jìn)行的;while循環(huán)和for循環(huán)都是先判斷表達(dá)式,后執(zhí)行循環(huán)體,而do...while循環(huán)是先執(zhí)行循環(huán)體后判斷表達(dá)式,也就是說(shuō)do...while的循環(huán)體最少被執(zhí)行一次,而while循環(huán)和for就可能一次都不執(zhí)行。另外還要注意的是這三種循環(huán)都可以用break語(yǔ)句跳出循環(huán),用continue語(yǔ)句結(jié)束本次循環(huán),而goto語(yǔ)句與if構(gòu)成的循環(huán),是不能用break和continue語(yǔ)句進(jìn)行控制的。[4]在這里介紹一下三種常見(jiàn)循環(huán)的一般格式:

1)while循環(huán):

while(表達(dá)式)

循環(huán)體

2)do-while循環(huán):

do

循環(huán)體

while(表達(dá)式)

3)for循環(huán):

for(表達(dá)式1;表達(dá)式2;表達(dá)式3)

循環(huán)體語(yǔ)句(組)

(4)模塊化程序結(jié)構(gòu)

C語(yǔ)言的模塊化程序結(jié)構(gòu)用函數(shù)來(lái)實(shí)現(xiàn),即將復(fù)雜的C程序分為若干模塊,每個(gè)模塊都編寫(xiě)成一個(gè)C函數(shù),然后通過(guò)主函數(shù)調(diào)用函數(shù)及函數(shù)調(diào)用函數(shù)來(lái)實(shí)現(xiàn)一大型問(wèn)題的C程序編寫(xiě)。因此常說(shuō):C程序=主函數(shù)+子函數(shù)。因此,對(duì)函數(shù)的定義、調(diào)用、值的返回等中要尤其注重理解和應(yīng)用,并通過(guò)上機(jī)調(diào)試加以鞏固。[5]

其實(shí),順序結(jié)構(gòu)、分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)并不是彼此孤立的,在循環(huán)中可以有分支、順序結(jié)構(gòu),分支中也可以有循環(huán)、順序結(jié)構(gòu),但是不管哪種結(jié)構(gòu),我們均可廣義地把它們看成一個(gè)語(yǔ)句。在實(shí)際編程過(guò)程中常將這三種結(jié)構(gòu)相互結(jié)合以實(shí)現(xiàn)各種算法,設(shè)計(jì)出相應(yīng)程序,但是要編程的問(wèn)題較大,編寫(xiě)出的程序就往往很長(zhǎng)、結(jié)構(gòu)重復(fù)多,造成可讀性差,難以理解,解決這個(gè)問(wèn)題的方法是將C程序設(shè)計(jì)成模塊化結(jié)構(gòu)。[6]

四、修飾――掌握一些簡(jiǎn)單的算法

所謂算法,就是解決某類(lèi)問(wèn)題的方法。確切地說(shuō),就是對(duì)某一類(lèi)特定的問(wèn)題,給出解決該問(wèn)題的一系列(有窮的)操作,而每一操作都有其確切的意義,并在有限時(shí)間內(nèi)可以計(jì)算出結(jié)果。一個(gè)算法有多少個(gè)輸入量,它是問(wèn)題給出的初始數(shù)據(jù),經(jīng)過(guò)算法的實(shí)現(xiàn),它有一個(gè)或多個(gè)輸出量,這就是算法對(duì)輸入運(yùn)算的結(jié)果,即問(wèn)題的解答。《C程序設(shè)計(jì)》教學(xué)大綱,只要求我們掌握一些簡(jiǎn)單的算法,在掌握這些基本算法后,要完成對(duì)問(wèn)題的分析就容易了。[7]如兩個(gè)數(shù)的交換、三個(gè)數(shù)的比較、選擇法排序和冒泡法排序,這就要求我們要清楚這些算法的內(nèi)在含義,其中選擇法排序和冒泡法排序稍難,但只要明白排序的具體過(guò)程,對(duì)代碼的理解就不難了。如要將兩個(gè)變量X、Y的值交換。

用自然語(yǔ)言描述如下:

步驟1,將X值存入中間變量Z中:XZ。

步驟2,將Y值存入變量X中:YX。

步驟3,將中間變量Z值存入Y中:ZY。

用偽代碼可表示如下:

BEGIN

xz

yx

zy

END

當(dāng)然還可以用流程圖表示,這里就不列舉了。

五、結(jié)語(yǔ)

在大學(xué)里,許多學(xué)C語(yǔ)言的人,都有著不同的目的。有的人是認(rèn)真對(duì)待每一門(mén)所學(xué)的課程,包括C語(yǔ)言,有的人是對(duì)程序設(shè)計(jì)有著濃厚的興趣,還有的人只是為了獲得學(xué)分而學(xué)習(xí)C語(yǔ)言。這樣,一部分人會(huì)覺(jué)得C語(yǔ)言容易學(xué),一部分人又會(huì)覺(jué)得C語(yǔ)言難學(xué),還有一部分人會(huì)覺(jué)得C語(yǔ)言容易學(xué),但是不會(huì)編寫(xiě)程序。這樣就導(dǎo)致了學(xué)習(xí)C語(yǔ)言效果的差異。其實(shí),學(xué)習(xí)C語(yǔ)言并不是進(jìn)行一種職業(yè)培訓(xùn),而是一種綜合思維的訓(xùn)練。我們應(yīng)當(dāng)正確認(rèn)識(shí)什么是程序,并學(xué)會(huì)一種思考問(wèn)題的方法,初步掌握用C語(yǔ)言來(lái)進(jìn)行程序設(shè)計(jì)。

參考文獻(xiàn):

[1]田祥宏,榮政.C語(yǔ)言程序設(shè)計(jì).西安電子科技大學(xué)出版社,2007.

[2]李麗娟.C程序設(shè)計(jì)基礎(chǔ)教程.

[3]Stephen Prata著.云巔工作室譯.C Primer Plus.

[4]Kenneth A.Reek著.徐波譯.C和指針POINTERS ON C.

篇9

關(guān)鍵字:“C語(yǔ)言”;C;AI-CODE;游戲教學(xué);程序設(shè)計(jì)

前言

傳統(tǒng)的計(jì)算機(jī)程序設(shè)計(jì)教學(xué)方式大部分都是以教師講授為主,而學(xué)生被動(dòng)地接受知識(shí)。這種教育模式往往存在著枯燥乏味、無(wú)趣,而且很大程度上存著單向性(也就是常說(shuō)的填鴨式教學(xué)),教授者和被教授者之間缺乏互動(dòng)性,使學(xué)生普遍產(chǎn)生學(xué)習(xí)只為了應(yīng)付考試等厭學(xué)的情緒,不能積極地發(fā)展和挖掘?qū)W生的智力,甚至?xí)髿W(xué)生的求真求新的天性,他們的創(chuàng)造力逐漸在枯燥無(wú)味的程序設(shè)計(jì)教學(xué)中消磨殆盡。

如何能讓學(xué)生能體會(huì)到學(xué)生程序設(shè)計(jì)的樂(lè)趣,并逐漸地像迷上“網(wǎng)絡(luò)游戲”那樣“迷上”程序設(shè)計(jì)的學(xué)習(xí)呢?

“游戲教學(xué)”是旨在用一種寓教于樂(lè)的高效學(xué)習(xí)方法,利用人們“愛(ài)玩”的天性,讓學(xué)習(xí)者在“玩”中學(xué)習(xí),從而充分調(diào)動(dòng)學(xué)習(xí)者的學(xué)習(xí)興趣,使學(xué)習(xí)的效率和主動(dòng)性得到極大的提高。正如蘇格拉底的名言:教育不是灌輸,而是點(diǎn)燃火焰!

一、AI-CODE游戲系統(tǒng)簡(jiǎn)介

AI-CODE游戲教育平臺(tái)是一套全新的教育平臺(tái),以寓教于樂(lè)的游戲教育方式,打破了傳統(tǒng)的教育模式??么蠹以詵茄蠱鵲木杭賈脅恢瘓醯靨岣咦約旱募撲慊絳蟶杓撲膠拖喙氐氖А⑽錮懟⑼紜⑷斯ぶ悄艿妊Э浦兜撓τ盟健I-CODE為程序和算法設(shè)計(jì)的學(xué)習(xí)和實(shí)踐提供了全方位的環(huán)境,由于其游戲主題的有趣性、直觀性,使學(xué)生在學(xué)習(xí)的同時(shí)感到了快樂(lè)和成就感,而在娛樂(lè)的同時(shí)發(fā)現(xiàn)自己以前的知識(shí)不夠用,所以為了得到更多的快樂(lè)和成就感,便又投入于學(xué)習(xí)中,讓學(xué)生在玩,學(xué)習(xí),玩,學(xué)習(xí)的循環(huán)的過(guò)程中不斷提高自己的程序設(shè)計(jì)和策略算法設(shè)計(jì)的水平,整個(gè)過(guò)程是一個(gè)自主的學(xué)習(xí)過(guò)程,是一種逐漸“迷上”的過(guò)程,而非被強(qiáng)迫的。AI-CODE學(xué)習(xí)三者的關(guān)系如下圖:

AI-RCJ是AI-CODE中一套虛擬足球機(jī)器人的制作和競(jìng)技仿真的教育平臺(tái),并實(shí)現(xiàn)了C、C++、Java、C#等多種編程語(yǔ)言同臺(tái)競(jìng)技。為了讓自己的足球在競(jìng)技中具有良好的攻防性和機(jī)動(dòng)性,必須給虛擬足球機(jī)器人賦予一定的智能,智能化程度的高低取決于使用者數(shù)學(xué)、物理、計(jì)算機(jī)等相關(guān)學(xué)科知識(shí)的靈活運(yùn)用程度。AI-RCJ界面如下圖:

二、快樂(lè)的學(xué)習(xí)之旅

下面在“AI-RCJ”教育平臺(tái)上,以幾個(gè)簡(jiǎn)單的例子展示C語(yǔ)言的快樂(lè)學(xué)習(xí)之旅,在這些快樂(lè)的有“成就感”的競(jìng)技中逐漸掌握C程序設(shè)計(jì)語(yǔ)言一些關(guān)鍵語(yǔ)法,體會(huì)到“游戲教學(xué)”的樂(lè)趣。

(一)我的第一個(gè)會(huì)動(dòng)的機(jī)器人

在AI-RCJ教育平臺(tái)中我們只須書(shū)寫(xiě)幾句簡(jiǎn)單的代碼,就立刻可以看到一個(gè)會(huì)動(dòng)的“足球機(jī)器人”,會(huì)讓我們馬上感到有些小小的“成就感”,并吸引我們繼續(xù)的深入。

#includeairobot/c/SimpleRobot.h

/**

*機(jī)器人執(zhí)行函數(shù)

*/

voidrun()

{

/*在這里添加控制機(jī)器人的代碼*/

doMoveTo(30,30);/*移動(dòng)到坐標(biāo)點(diǎn)(30,30)*/

}

這段代碼代表了一個(gè)“函數(shù)”,這個(gè)函數(shù)的名字叫做run。函數(shù)是c語(yǔ)言程序的一個(gè)主要組成部分,每個(gè)函數(shù)都有自己的名字,并且可以完成相應(yīng)的功能。run函數(shù)只由單個(gè)語(yǔ)句組成,doMoveTo(30,30)完成控制機(jī)器人移動(dòng)到(30,30)這個(gè)坐標(biāo)點(diǎn)。

(二)讓機(jī)器人會(huì)撞球

要讓機(jī)器人撞擊足球就要知道足球的坐標(biāo)。在程序中調(diào)用getBallX和getBallY可以獲取足球的坐標(biāo)。

voidrun(void)

{

doubleballX,ballY;/*定義兩個(gè)變量*/

ballX=getBallX();/*獲得足球的x坐標(biāo)*/

ballY=getBallY();/*獲得足球的y坐標(biāo)*/

doMoveTo(ballX,ballY);/*向足球撞擊*/

}

在run函數(shù)里面,第一條語(yǔ)句定義了兩個(gè)“變量”,變量是c語(yǔ)言中的一個(gè)基本元素,可以用它們來(lái)存放不同的數(shù)值,程序設(shè)計(jì)中變量的作用和代數(shù)中的未知數(shù)的作用類(lèi)似。在使用一個(gè)變量之前,必須先定義它,“doubleballX,ballY;”這條語(yǔ)句完成了變量的定義。這兩個(gè)變量的名字是ballX和ballY,以后可以通過(guò)這兩個(gè)名字來(lái)使用變量,就像使用函數(shù)的名字來(lái)調(diào)用一個(gè)函數(shù)一樣。變量是有“類(lèi)型”的,變量的類(lèi)型規(guī)定了變量可以存放什么樣的數(shù)據(jù),ballX和ballY這兩個(gè)變量的類(lèi)型是double,表示他們可以存放浮點(diǎn)數(shù),也就是我們通常所說(shuō)的小數(shù)。轉(zhuǎn)載于范文中國(guó)網(wǎng)。

語(yǔ)句ballX=getBallX()使用了變量ballX,這是一個(gè)“賦值語(yǔ)句”,等號(hào)“=”將賦值

語(yǔ)句分成了左右兩部分,等號(hào)的左邊一般是一個(gè)變量,等號(hào)表示賦值操作,就是把右邊的數(shù)值存放到左邊的變量當(dāng)中,在這里等號(hào)并不是要表示兩邊的內(nèi)容相等。在這條賦值語(yǔ)句中,等號(hào)右邊的部分是一個(gè)函數(shù)調(diào)用,被調(diào)用的函數(shù)叫g(shù)etBallX,這個(gè)函數(shù)是一個(gè)有“返回值”的函數(shù),這表示調(diào)用這個(gè)函數(shù)后,我們可以得到一個(gè)數(shù)值,這個(gè)數(shù)值代表了函數(shù)執(zhí)行的結(jié)果。getBallX函數(shù)的返回值是足球的ballX坐標(biāo)。賦值語(yǔ)句“ballX=getBallX();”把getBallX函數(shù)的返回值保存到了變量ballX里,執(zhí)行這個(gè)語(yǔ)句的時(shí)候,實(shí)際上發(fā)生了兩件事,首先是調(diào)用getBallX函數(shù),并取得函數(shù)的返回值,然后就是將這個(gè)返回值保存到變量ballX里。語(yǔ)句ballY=getBallY()是類(lèi)似的,這條語(yǔ)句把對(duì)手的ballY坐標(biāo)保存到的變量y里。

現(xiàn)在知道了足球當(dāng)前的坐標(biāo),語(yǔ)句“doMoveTo(ballX,ballY);”完成了向足球所在位置撞擊的工作。在這里我們將變量ballX,ballY作為參數(shù)傳遞給doMoveTo函數(shù),因?yàn)樽兞縝allX,ballY里存放了足球所在位置的坐標(biāo),通過(guò)用這兩個(gè)變量作為參數(shù)調(diào)用doMoveTo函數(shù),也就是將足球所在位置作為撞擊的目標(biāo)點(diǎn),實(shí)現(xiàn)向足球所在位置撞擊。

但我們看到機(jī)器人在剛開(kāi)始時(shí)撞擊了一下足球,之后便停止不動(dòng)。

如何能讓機(jī)器人能不斷地撞球呢?我們用一種新的語(yǔ)句:循環(huán)語(yǔ)句,實(shí)現(xiàn)一個(gè)不斷撞擊足球的機(jī)器人。

voidrun(void)

{

doubleballX,ballY;/*定義兩個(gè)變量*/

while(1){

ballX=getBallX();/*獲得足球的x坐標(biāo)*/

ballY=getBallY();/*獲得足球的x坐標(biāo)*/

doMoveTo(ballX,ballY);

}

}

就這樣讓我們體會(huì)到循環(huán)語(yǔ)句的“威力”!(三)讓機(jī)器人聰明起來(lái)——避免“烏龍”球

好了,我們的機(jī)器人已經(jīng)能動(dòng)起來(lái)啦,但如何讓我們的機(jī)器人變“聰明”起來(lái)呢?能實(shí)現(xiàn)一個(gè)可以根據(jù)自己的進(jìn)攻方向和足球的運(yùn)動(dòng)方向來(lái)盡量避免踢“烏龍”球的機(jī)器人。

我們會(huì)不知不覺(jué)地想辦法去不斷學(xué)習(xí),讓我們機(jī)器人越來(lái)起“聰明”!

voidrun(void)

{

intshoot;/*定義控制變量*/

doubleballHeading;/*定義變量,存儲(chǔ)球的運(yùn)動(dòng)方向*/

doubleheading;/*定義變量,存儲(chǔ)機(jī)器人的進(jìn)攻方向*/

doubleballX,ballY;/*定義變量,存儲(chǔ)球的ballX,ballY坐標(biāo)*/

doublegoalMin,goalMax;

doublecourtWidth,courtHeight;

doublegoalSize;/*定義變量,存儲(chǔ)球門(mén)的大小(寬度)*/

/*定義變量,存儲(chǔ)球的運(yùn)動(dòng)直線方程ballY=k*ballX+b中的b和k*/

doubleb,k;

heading=getAttack();/*得到機(jī)器人的進(jìn)攻方向*/

courtWidth=getCourtWidth();/*得到場(chǎng)地的寬度*/

courtHeight=getCourtHeight();/*得到場(chǎng)地的高度*/

goalSize=getGoalSize();/*得到球門(mén)的大小*/

goalMin=courtHeight/2-goalSize/2;

goalMax=courtHeight/2+goalSize/2;

while(1){

/*求出足球的運(yùn)動(dòng)直線*/

ballX=getBallX();

ballY=getBallY();

ballHeading=getBallHeading();

k=tan(ballHeading);

b=ballY-k*ballX;

/*如果機(jī)器人是由左向右進(jìn)攻,而且當(dāng)前球的運(yùn)動(dòng)方向是由右向左運(yùn)動(dòng)*/

if(heading0ballHeadingPI/2ballHeadingPI*3/2){

if(goalMin50*k+bgoalMax50*k+b){

shoot=0;

}else{

shoot=1;

}

}

/*如果機(jī)器人是由右向左進(jìn)攻,而且當(dāng)前球的運(yùn)動(dòng)方向是由左向右運(yùn)動(dòng)*/

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);

}

}

}

通過(guò)循環(huán)語(yǔ)句(while)和選擇語(yǔ)句(if)等知識(shí)的綜合應(yīng)用,讓我們的機(jī)器人變得越來(lái)越“聰明”啦。接著下來(lái),我們又會(huì)想讓我們的機(jī)器人變成有策略的進(jìn)攻和防守,團(tuán)隊(duì)協(xié)作。。。。。。,最后讓整個(gè)“足球”比賽變得越來(lái)越有意思,學(xué)習(xí)變得越來(lái)越有趣。

四、結(jié)語(yǔ)

AI-CODE中的AI-RCJ讓學(xué)生在這“虛擬足球競(jìng)技”的教育平臺(tái)上,讓自己的機(jī)器人動(dòng)起來(lái),不斷地撞球,聰明起來(lái),有策略的進(jìn)攻和防守。。。。。。等一系列有“成就感”的快樂(lè)游戲中,逐漸“迷上”程序和算法設(shè)計(jì)。為了更好地“玩”,不斷地學(xué)習(xí),不斷地提高自己的計(jì)算機(jī)程序設(shè)計(jì)水平和策略算法設(shè)計(jì)水平,真正體會(huì)到寓教于樂(lè)的樂(lè)趣!

參考文獻(xiàn)

[1]龔睿.AI-CODESYSTEMS在智能機(jī)器人教學(xué)中的應(yīng)用[J].2004.

[2]沙有威.程序設(shè)計(jì)教學(xué)的新載體——智能機(jī)器[J].2002.

篇10

關(guān)鍵詞:C語(yǔ)言 圖形函數(shù) 應(yīng)用

引言

C語(yǔ)言是國(guó)際上廣泛流行的很有發(fā)展前途的計(jì)算機(jī)高級(jí)語(yǔ)言。它既具有一般計(jì)算機(jī)高級(jí)語(yǔ)言的可讀性、可移植性的特點(diǎn),又具有低級(jí)語(yǔ)言能夠?qū)τ?jì)算機(jī)硬件進(jìn)行操作的特性,因此,它適合用于操作系統(tǒng)的描述語(yǔ)言,用C語(yǔ)言開(kāi)發(fā)系統(tǒng)軟件和應(yīng)用軟件。但在87ANSIC中并沒(méi)有規(guī)定C語(yǔ)言的圖形功能,許多C語(yǔ)言教材沒(méi)有介紹C語(yǔ)言的圖形功能,這給許多需要用C語(yǔ)言設(shè)計(jì)完美、漂亮的用戶界面的初學(xué)者帶來(lái)了困難[1-2]。本文旨在通過(guò)介紹Turbo C 2.0的主要圖形函數(shù)及一個(gè)具體的實(shí)例簡(jiǎn)介這些函數(shù)的用法。

1 與圖形繪制有關(guān)的系統(tǒng)硬件[2-3]

要使計(jì)算機(jī)能夠繪制圖形,必須有一定的硬件基礎(chǔ)作為保障。圖形繪制的硬件基礎(chǔ)主要是顯示器和顯示卡。顯示器的工作方式一般有文本方式和圖形方式。要在屏幕上顯示圖形,必須將其設(shè)置成圖形方式。衡量顯示器的主要性能指標(biāo)是點(diǎn)距和分辨率。目前顯示器常用的點(diǎn)距有0.39mm、0.31mm和0.28mm三種。高檔微機(jī)配置的彩色顯示器目前流行的是VGA檔次,它最低的分辨率為640×480,中檔的是800×600,高檔的是1024×768。顯示器必須與顯示卡配套使用才能發(fā)揮其圖形功能。顯示卡所能支持的不同分辨率的顯卡類(lèi)型稱為顯示模式。下表給出Turbo C中常用的幾種顯示卡的圖形模式:

2 Turbo C 2.0中與繪圖有關(guān)的常用圖形函數(shù)

2.1 設(shè)置圖形工作方式的函數(shù):initgraph()。

Turbo C繪圖,首先必須設(shè)置顯示器為圖形方式。該函數(shù)通過(guò)選定參數(shù)可確定顯卡的類(lèi)型及圖形模式。

如:

int driver,mode;

driver=IBM8514;

mode=IBM8514HI;

initgraph(&driver,& mode,“c:\temp”);

將圖形方式設(shè)置為IBM8514類(lèi)型,IBM8514HI圖形模式,1024×768的分辨率,搜索路徑temp為C盤(pán)一級(jí)子目錄。

2.2 顏色控制函數(shù)setbkcolor(int color)及setcolor(int color)。

其中setbkcolor( )設(shè)置背景顏色,setcolor( )設(shè)置劃線顏色。

2.3 基本繪圖函數(shù)

A. line(int x1,int y1,int x2,int y2)

功能:從點(diǎn)(x1,y1)到點(diǎn)(x2,y2)畫(huà)一直線。

B. arc(int x,int y,int stange,int endangle,int r)

功能:以(x,y)為圓弧的中心,以stange為起始角度,以endangle為終止角度,以r為半徑作一圓弧。

C. setfillstyle(int pattern,int color)

功能:用參數(shù)pattern所確定的填充模式,用參數(shù)color確定的顏色進(jìn)行填充。

D. floodfill(int x,int y,int color)

功能:填充一個(gè)含有點(diǎn)(x,y)在內(nèi)的有界封閉區(qū)域,這個(gè)有界封閉區(qū)域的邊界由參數(shù)color確定,填充模式與填充顏色由函數(shù)setfillstyle設(shè)定。

2.4 字符輸出函數(shù)

A. settextstyle(int font,int direction,int size)

功能:在圖形方式下設(shè)置字符的字體,式樣和放大因子。

B. outtextxy(int x,int y,char &str)

功能:在窗口(x,y)的位置輸出字符或字符串。

C. getch( )

功能:從控制臺(tái)取得一字符且不輸出,用來(lái)使程序暫停,按任意鍵后使程序繼續(xù)運(yùn)行。

3. 繪制一個(gè)圓餅型統(tǒng)計(jì)圖的程序如下

#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中上機(jī)通過(guò)編譯、連接、運(yùn)行,可得到精美的圓餅型圖。讀者通過(guò)閱讀并上機(jī)調(diào)試運(yùn)行該程序可以對(duì)C語(yǔ)言的圖形設(shè)置、繪制;顏色的控制、填充等函數(shù)的應(yīng)用有一個(gè)感性的認(rèn)識(shí),對(duì)復(fù)雜枯燥的C函數(shù)提高學(xué)習(xí)興趣。

結(jié)語(yǔ)

目前許多C語(yǔ)言教材很少介紹C語(yǔ)言的圖形功能,而許多C語(yǔ)言學(xué)習(xí)者對(duì)C語(yǔ)言的圖形功能很感興趣,為幫助初學(xué)者學(xué)習(xí)C語(yǔ)言繪圖函數(shù)并提高學(xué)習(xí)興趣,本文簡(jiǎn)單介紹了C語(yǔ)言一些常用的繪圖函數(shù)及其應(yīng)用,權(quán)當(dāng)拋磚引玉!還有一些圖形函數(shù)沒(méi)有列出,讀者若有興趣可參閱《C語(yǔ)言函數(shù)大全》。

參考文獻(xiàn):

[1]徐士良.PC機(jī)C圖形編程手冊(cè).北京:清華大學(xué)出版社,1994.2.

[2]譚浩強(qiáng).C程序設(shè)計(jì)(第二版)[M].北京:清華大學(xué)出版社,1999.