版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
《計(jì)算機(jī)導(dǎo)論——計(jì)算思維和應(yīng)用技術(shù)》計(jì)算機(jī)第2章
程序語言2.1程序特征2.2程序結(jié)構(gòu)2.3程序員語言介紹2.4軟件開發(fā)方法2.1.3C語言程序結(jié)構(gòu)2.1.4程序解釋與編譯2.1.5程序編輯與運(yùn)行2.1.1程序語言的發(fā)展2.1.2程序語言的類型[增強(qiáng)版]2.1.1程序語言的發(fā)展1、為程序設(shè)計(jì)做出杰出貢獻(xiàn)的科學(xué)家(1)艾倫·佩利與程序設(shè)計(jì)語言艾倫·佩利貢獻(xiàn):1958年主持設(shè)計(jì)了ALGOL程序語言。在ALGOL60設(shè)計(jì)中,提出語法和語義區(qū)分開來。最早將程序設(shè)計(jì)引入了大學(xué)課堂。1960年代,在卡內(nèi)基-梅隆大學(xué)建立最早的計(jì)算機(jī)科學(xué)系。1982年,發(fā)表名文《編程箴言》。艾倫·佩利名言:如果你給別人講解程序時(shí),看到對方點(diǎn)頭了,那你就拍他一下,他肯定是睡覺了。2.1.1程序語言的發(fā)展(2)迪科斯徹與結(jié)構(gòu)化程序設(shè)計(jì)迪科斯徹貢獻(xiàn):1960年開發(fā)了ALGOL60編譯器;提出“Goto語句有害論”(廣泛用于結(jié)構(gòu)化程序設(shè)計(jì));解決“哲學(xué)家就餐”問題(操作系統(tǒng)中信號量算法);發(fā)明圖論中最短路徑算法(應(yīng)用廣泛的網(wǎng)絡(luò)路由算法);銀行家算法的創(chuàng)造者(廣泛用于操作系統(tǒng)的算法)。迪科斯徹名言:編程的藝術(shù)就是處理復(fù)雜性的藝術(shù)。簡單是可靠的先決條件。計(jì)算機(jī)會(huì)不會(huì)思考這個(gè)問題就像問潛水艇會(huì)不會(huì)游泳一樣。哲學(xué)家就餐問題2.1.1程序語言的發(fā)展(3)高德納與數(shù)據(jù)結(jié)構(gòu)高德納貢獻(xiàn):創(chuàng)建了算法分析領(lǐng)域;開創(chuàng)了數(shù)據(jù)結(jié)構(gòu)的最初體系;《計(jì)算機(jī)程序設(shè)計(jì)藝術(shù)》是計(jì)算機(jī)界最受敬重的參考書;提出文學(xué)編程的概念;開發(fā)了KnuthMorrisPratt(字符串查找)算法;開發(fā)了TEX排版軟件,成為科技論文的排版程序。高德納名言:如果我們有再三思考的機(jī)會(huì),幾乎沒有一件事情是不能被簡化的。計(jì)算復(fù)雜性理論研究計(jì)算模型在各種資源(時(shí)間、空間等)限制下的計(jì)算能力。雖然計(jì)算機(jī)科學(xué)非常美妙,但它也不可能包辦一切!2.1.1程序語言的發(fā)展【擴(kuò)展】中國最早的程序員。中國第一個(gè)程序員:董鐵寶(1956年)中國第一個(gè)女程序員:張綺霞(1957年)計(jì)算所成立的第一個(gè)程序設(shè)計(jì)組(1958年)2.1.1程序語言的發(fā)展【擴(kuò)展】1956年,教育部從上海交通大學(xué)抽調(diào)電機(jī)專業(yè)高年級學(xué)生,到清華大學(xué)轉(zhuǎn)學(xué)新成立的計(jì)算機(jī)專業(yè),1957年中國第一批計(jì)算機(jī)專業(yè)學(xué)生畢業(yè)。2.1.1程序語言的發(fā)展2、不同類型程序語言的發(fā)展高級程序語言使得程序設(shè)計(jì)
不再過度地倚賴特定的計(jì)算
機(jī)硬件設(shè)備。最古老的高級程序語言:FORTRANCOBOLALGOLLISP2.1.1程序語言的發(fā)展【案例】第一個(gè)高級程序設(shè)計(jì)語言FORTRAN開發(fā)團(tuán)隊(duì)。2.1.1程序語言的發(fā)展3、為什么有這么多程序語言程序語言已超過上千種(維基百科);試圖創(chuàng)建一種通用程序語言的嘗試沒有成功。多種程序語言的原因:沒有一種程序語言可以解決所有問題;環(huán)境變化時(shí),需要新程序語言適用它;編程新手與高手之間的技術(shù)差距非常大;不同程序語言的運(yùn)行效率和開發(fā)成本不相同。2.1.1程序語言的發(fā)展4、程序設(shè)計(jì)語言的學(xué)習(xí)大部分應(yīng)用程序開發(fā)具有初中知識水平即可;程序設(shè)計(jì)中需要記憶的英文單詞并不多;高水平編程需要查閱相應(yīng)的英文技術(shù)文檔:例如,如API(應(yīng)用程序編程接口),例如,SDK(軟件開發(fā)工具包),例如,MSDN(微軟開發(fā)人員網(wǎng)絡(luò))。學(xué)習(xí)編程語言的方法:多閱讀優(yōu)秀源程序;多練習(xí)編寫程序;多思考如何解決身邊的問題。計(jì)算機(jī)是一臺笨拙的機(jī)器,具有從事令人難以置信的聰明工作的能力,...計(jì)算機(jī)程序員則是一些聰明的人,具有從事令人難以置信的笨拙工作的能力。簡而言之,計(jì)算機(jī)與程序員實(shí)現(xiàn)了完美的配合。
——JamieShiers2.1.1程序語言的發(fā)展5、程序語言的發(fā)展趨勢程序語言結(jié)構(gòu)變化很少,主要成績是設(shè)計(jì)框架和設(shè)計(jì)工具的改進(jìn)。例如,微軟.NETFramework框架有超過1萬個(gè)類和10萬個(gè)方法(子程序)。例如,程序集成開發(fā)環(huán)境包含:指令彩色顯示,指令和函數(shù)提示,錯(cuò)誤提示,自動(dòng)遞進(jìn),自動(dòng)收縮,集成調(diào)試器和編譯器等。語言抽象級別越高,語言表現(xiàn)力越強(qiáng)大。程序語言發(fā)展趨勢:聲明式編程風(fēng)格,例如,Prolog、SQL、函數(shù)式編程等;動(dòng)態(tài)程序語言,例如,PHP、Python等;并行編程,例如,UPC、Go等。2.1.1程序語言的發(fā)展【案例】程序設(shè)計(jì)語言之間的相互影響。計(jì)算機(jī)《計(jì)算機(jī)導(dǎo)論——計(jì)算思維和應(yīng)用技術(shù)》計(jì)算機(jī)第2章
程序語言2.1程序特征2.2程序結(jié)構(gòu)2.3程序員語言介紹2.4軟件開發(fā)方法2.1.3C語言程序結(jié)構(gòu)2.1.4程序解釋與編譯2.1.5程序編輯與運(yùn)行2.1.1程序語言的發(fā)展2.1.2程序語言的類型2.1.2程序語言的類型1、程序語言的基本功能程序語言是計(jì)算機(jī)指令執(zhí)行流程的形式化語言。程序語言規(guī)范:數(shù)據(jù)類型和數(shù)據(jù)結(jié)構(gòu);指令類型和指令控制;調(diào)用機(jī)制和庫函數(shù);以及不成文的規(guī)定,如,遞進(jìn)書寫、變量命名等。計(jì)算機(jī)是一臺快速,笨拙的機(jī)器,只有有限的能力。只能進(jìn)行基本的數(shù)學(xué)運(yùn)算與邏輯比較。必須由程序來指示它做什么事。
——GeorgeBeekman2.1.2程序語言的類型2、程序語言的基本組成(1)指令及指令流程控制程序由多條語句組成。語句有規(guī)定的關(guān)鍵字和語法結(jié)構(gòu)。(2)程序語言基本組成數(shù)據(jù)成分,如:數(shù)值、字符、數(shù)組等;運(yùn)算成分,如:四則運(yùn)算、邏輯運(yùn)算等;控制成分,如:選擇、循環(huán)、調(diào)用等;傳輸成分,如:實(shí)參與形參、返回值等。2.1.2程序語言的類型3、程序語言的類型(1)程序語言的分類程序功能:算法描述型語言,如C、Java等;
數(shù)據(jù)描述型語言,如HTML、XML等。
編程難易:低級語言,如匯編語言;
高級語言,如C、Java等。
設(shè)計(jì)風(fēng)格:命令式語言,
結(jié)構(gòu)化語言,
面向?qū)ο笳Z言,
函數(shù)式語言,
腳本語言等;
應(yīng)用領(lǐng)域:通用程序語言,如C、Java等;
專用程序語言,如VHDL、TCL等;
執(zhí)行方式:解釋型語言,
編譯型語言,
編譯+解釋型語言。2.1.2程序語言的類型(2)機(jī)器語言機(jī)器語言是以二進(jìn)制代碼表示的指令集合。優(yōu)點(diǎn):占用內(nèi)存少、執(zhí)行速度快;缺點(diǎn):難編寫、難閱讀、難修改、難移植。早期手工編寫的機(jī)器語言程序2.1.2程序語言的類型【案例】機(jī)器語言。指令部份示例1、0000代表加載(LOAD)2、0001代表存儲(STORE)暫存器部份示例1、0000代表暫存器A2、0001代表暫存器B存儲器部份示例1、000000000000代表地址為0的存儲器2、000000000001代表地址為1的存儲器3、000000010000代表地址為16的存儲器4、100000000000代表地址為211的存儲器集成示例1、0000,0000,000000010000代表LOADA,162、0000,0001,000000000001代表LOADB,13、0001,0001,000000010000代表STOREB,164、0001,0001,000000000001代表STOREB,12.1.2程序語言的類型(3)匯編語言匯編語言是用簡單符號(助記符)表示二進(jìn)制代碼指令的語言。匯編語言與機(jī)器語言本質(zhì)上相同。不同CPU(如ARM與Intel的CPU)的機(jī)器指令不同,它們的匯編語言也不同。匯編程序的運(yùn)行2.1.2程序語言的類型【案例】匯編語言與機(jī)器語言指令。匯編指令機(jī)器指令指令說明內(nèi)存地址機(jī)器代碼MOVAL,620010000011010110000將地址為2001的內(nèi)存單元中的數(shù)據(jù)(6),傳送到AL寄存器ADDAL,220030000001000000100將地址2003內(nèi)存單元中的數(shù)據(jù)(2)取出,將AL寄存器中數(shù)據(jù)(6)取出,兩者相加后,結(jié)果仍然保存在AL寄存器MOVSUM,AL2005000000000101000010100010將AL寄存器中的數(shù)據(jù)(8)送到SUM存儲單元HLT200811111000停機(jī)(指程序停止運(yùn)行)2.1.2程序語言的類型【案例】用不同編程語言對2+6進(jìn)行描述。用機(jī)器指令對“2+6”進(jìn)行描述:10110000000001100000010000000010101000100101000000000000用匯編語言對“2+6”進(jìn)行描述:MOVAL,6ADDAL,2MOVVC,AL用高級語言對“2+6”進(jìn)行描述:A=2+62.1.2程序語言的類型(4)高級程序語言高級語言將許多機(jī)器指令合并成一條高級程序指令。2014年流行程序語言如表2-2所示。排名程序語言語言特色1C結(jié)構(gòu)化,處理能力強(qiáng),可對硬件編程,通用性語言2Java面向?qū)ο?,跨平臺,多線程等,廣泛用于網(wǎng)絡(luò)和手機(jī)編程3Objective-C面向?qū)ο螅瑪U(kuò)充C語言,蘋果計(jì)算機(jī)和智能手機(jī)編程4C++面向?qū)ο螅δ軓?qiáng)大,過于復(fù)雜,大型系統(tǒng)軟件開發(fā)5PHP腳本語言,易于學(xué)習(xí),開源免費(fèi),網(wǎng)絡(luò)Web程序開發(fā)6C#面向?qū)ο?,跨平臺性不佳,網(wǎng)絡(luò)Web程序開發(fā)7VisualBasic面向?qū)ο?,簡單易學(xué),運(yùn)行效率較低,一般軟件開發(fā)8Python腳本語言,面向?qū)ο?,語法簡潔。系統(tǒng)管理和網(wǎng)絡(luò)程序開發(fā)9Perl腳本語言,操作文本容易,開源免費(fèi),網(wǎng)絡(luò)Web程序開發(fā)10JavaScript腳本語言,易于學(xué)習(xí),開源免費(fèi),網(wǎng)絡(luò)Web程序開發(fā)2.1.2程序語言的類型【擴(kuò)展】IEEESpectrum發(fā)布2014年編程語言排行榜。PC開發(fā)網(wǎng)站開發(fā)手機(jī)開發(fā)嵌入式開發(fā)2.1.2程序語言的類型【擴(kuò)展】2002-2013年編程語言排行變化趨勢。2.1.2程序語言的類型【擴(kuò)展】CodeForge網(wǎng)站2014年中國程序員調(diào)查報(bào)告。男女比例:男性80%,女性20%;喜歡語言:C++(24.5%),C(21.7%),Java(12.3%),C#(10.8%),Matlab#(8.4%)。地區(qū)分布:廣東(14.9%),北京(13.2%),江蘇(7.6%),上海(6.4%),山東(5.3%),浙江(5.3%),陜西(4.9%),湖北(4.7%),四川(4.4%)。程序員年齡:
20-29占33.5%,30-39占36.3%,40-49占10.6%,50-59占1.7%。使用操作系統(tǒng):Win7占61.3%,WinXP占20.2%,Win8占12.%,MacOS占3.3%,Linux占2%。2.1.2程序語言的類型【擴(kuò)展】K網(wǎng)站2013年令人討厭的編程語言排行榜。2.1.2程序語言的類型【擴(kuò)展】K網(wǎng)站2013年令人討厭的編程語言排行榜。(10)Python上榜理由:用代碼縮進(jìn)指定塊結(jié)構(gòu);大量冒號和下劃線;模塊、變量名沖突等。如何避免:不要去Google、Yahoo或NASA工作。(9)LabVIEW(儀器編程語言)上榜理由:相當(dāng)抽象,將簡單問題變得極其復(fù)雜。如何避免:遠(yuǎn)離儀器控制或工業(yè)自動(dòng)化編程工作。(8)JavaScript上榜理由:區(qū)分大小寫;跨瀏覽器需要不同實(shí)現(xiàn);缺乏調(diào)試功能;奇怪的繼承規(guī)則。如何避免:不要去當(dāng)Web開發(fā)人員。(7)TCL(腳本語言,用于快速原型開發(fā)、腳本編程、GUI、測試)上榜理由:語法太簡單;缺乏指針;將數(shù)組存儲為字符串;混亂的變量范圍。如何避免:不要去Cisco、AOL或任何AOLserver平臺的公司工作。(6)COBOL(商業(yè)通用語言,一種功能很強(qiáng)而又極為冗長的語言)上榜理由:極其繁瑣的語法;版本之間不兼容;缺乏面向?qū)ο缶幊痰?。如何避免:不要去政府、金融領(lǐng)域或軍用企業(yè)工作。2.1.2程序語言的類型【擴(kuò)展】K網(wǎng)站2013年令人討厭的編程語言排行榜。(5)C++上榜理由:龐大的函數(shù)集;手動(dòng)內(nèi)存管理;編譯速度慢。如何避免:不要去Adobe、Google、游戲領(lǐng)域工作。(4)PHP上榜理由:不一致的命名約定;安全漏洞;混和在HTML、CSS中。如何避免:如果從事Web方面的工作,這很難避免。不去Facebook工作即可。(3)Java上榜理由:語法冗長;慢;不容易傳遞函數(shù);API過度設(shè)計(jì)。如何避免:不要去當(dāng)程序員,不要用AndroidSDK開發(fā)任何應(yīng)用程序。(2)Perl上榜理由:完成一件事有太多種方法;太簡潔;難以閱讀;難以維護(hù)。如何避免:不要去當(dāng)程序員。(1)VisualBasic上榜理由:語法冗長;需要?jiǎng)討B(tài)鏈接庫才能運(yùn)行;面向?qū)ο缶幊逃邢?。如何避免:避免為開發(fā)老舊的Windows應(yīng)用程序。《計(jì)算機(jī)導(dǎo)論——計(jì)算思維和應(yīng)用技術(shù)》計(jì)算機(jī)第2章
程序語言2.1程序特征2.2程序結(jié)構(gòu)2.3程序員語言介紹2.4軟件開發(fā)方法2.1.3C語言程序結(jié)構(gòu)2.1.4程序解釋與編譯2.1.5程序編輯與運(yùn)行2.1.1程序語言的發(fā)展2.1.2程序語言的類型2.1.3C語言程序結(jié)構(gòu)1、C語言程序案例【例2-2】編寫“hello.c”C語言程序。函數(shù)的一般結(jié)構(gòu):
[函數(shù)類型]函數(shù)名(函數(shù)參數(shù)表)
/*函數(shù)說明部分*/
{說明語句部分;
執(zhí)行語句部分;
/*函數(shù)體部分*/
}⑴⑵⑶⑷⑸#include<stdio.h>voidmain(){printf("HelloWorld!\n");}/*文件包含的庫函數(shù)*//*主函數(shù)*//*函數(shù)體開始*//*輸出語句*//*函數(shù)體結(jié)束*/頭文件主函數(shù)2.1.3C語言程序結(jié)構(gòu)【例2-3】編制C語言程序,隨機(jī)輸入2個(gè)整數(shù),輸出其中較大的一個(gè)數(shù)。程序包括一個(gè)主函數(shù)main()和一個(gè)被調(diào)用的自定義函數(shù)max()。⑴⑵⑶⑷⑸⑹⑺⑻⑼⑽⑾⑿⒀#include<stdio.h>voidmain(){intmax();inta,b,c;scanf("%d,%d",&a,&b);c=max(a,b);printf("max=%d\n",c);}intmax(intx,inty){intz;if(x>y)z=x;elsez=y;return(z);}/*頭文件,包含庫函數(shù)<stdio.h>*//*void是函數(shù)類型,main是主函數(shù)名*//*主程序開始,自定義函數(shù)max為整型數(shù)*//*聲明a、b、c變量為整型數(shù)*//*scanf為輸入語句,%d為格式符*//*調(diào)用max自定義函數(shù),傳遞實(shí)參a,b值*//*顯示“max=”和c值,主程序結(jié)束*/
/*自定義函數(shù)max的x,y為形參*//*{為函數(shù)開始符,變量z為整型數(shù)*//*判斷語句,(x>y)是表達(dá)式*//*z=x、z=y是賦值語句,將y值賦給z*//*將z值返回主函數(shù)main;}為函數(shù)結(jié)束符*/
主函數(shù)(主程序)
自定義函數(shù)(子程序)2.1.3C語言程序結(jié)構(gòu)2、C語言程序的主要結(jié)構(gòu)C語言程序構(gòu)成C語言程序由函數(shù)構(gòu)成;每個(gè)C程序必須有一個(gè)主函數(shù)main;程序由“函數(shù)頭部”和“函數(shù)體”組成。程序注釋C語言中/**/之內(nèi)為程序注釋;程序注釋部分不會(huì)執(zhí)行;程序代碼說明“怎樣做”;程序注釋說明“為什么”這樣做;程序注釋是為了增強(qiáng)程序的易讀性和可維護(hù)性。2.1.3C語言程序結(jié)構(gòu)【案例】C語言程序結(jié)構(gòu)?!队?jì)算機(jī)導(dǎo)論——計(jì)算思維和應(yīng)用技術(shù)》計(jì)算機(jī)第2章
程序語言2.1程序特征2.2程序結(jié)構(gòu)2.3程序員語言介紹2.4軟件開發(fā)方法2.1.3C語言程序結(jié)構(gòu)2.1.4程序解釋與編譯2.1.5程序編輯與運(yùn)行2.1.1程序語言的發(fā)展2.1.2程序語言的類型2.1.4程序解釋與編譯1、程序的解釋執(zhí)行方式程序語言編寫的指令序列稱為“源程序”;源程序必須翻譯成機(jī)器指令,計(jì)算機(jī)才能識別和執(zhí)行;翻譯方式:解釋執(zhí)行方式和編譯執(zhí)行方式。(1)程序的解釋執(zhí)行過程語言解釋器一般包含在軟件或操作系統(tǒng)內(nèi),如IE瀏覽器,Java虛擬機(jī)等。源程序解釋程序執(zhí)行代碼執(zhí)行結(jié)果2.1.4程序解釋與編譯【案例】程序的執(zhí)行過程。LanguageTranslationProcess源代碼源程序機(jī)器代碼目標(biāo)程序WritteninCetc.LanguageTranslatorProgram
編譯
解釋
匯編IFA=BTHEN1001101111010100101102.1.4程序解釋與編譯【案例】解釋程序的執(zhí)行過程。2.1.4程序解釋與編譯(2)解釋程序的特點(diǎn)解釋程序:如腳本語言PHP、Python等。優(yōu)點(diǎn):實(shí)現(xiàn)簡單,交互性較好。缺點(diǎn):程序運(yùn)行效率低;程序獨(dú)立性不強(qiáng)。測試表明,不同語言程序的運(yùn)行時(shí)間如下:C++CJavaJavaScriptSchemeGoPythonRubyPerlPHP1.051.01.64455060641002.1.4程序解釋與編譯2、程序的編譯執(zhí)行方式1950年代,程序員人工將程序翻譯成機(jī)器碼。葛麗絲·穆雷·霍普首先設(shè)計(jì)了A-0編譯程序。程序編譯完成后,生成的軟件可反復(fù)執(zhí)行?;羝瞻l(fā)現(xiàn)的第一個(gè)程序BUG2.1.4程序解釋與編譯3、程序的編譯過程程序編譯過程:源程序→預(yù)處理→詞法分析→語法分析→語義分析→生成中間代碼→代碼優(yōu)化→生成目標(biāo)程序→程序連接→生成可執(zhí)行程序。以上過程不一定是順序進(jìn)行。2.1.4程序解釋與編譯【案例】
GCC(GUN編譯器集合)編譯過程。2.1.4程序解釋與編譯(1)預(yù)處理編譯器:將預(yù)處理,匯編,編譯,連接等過程集成在一起的軟件。預(yù)處理目的:加快編譯速度。預(yù)處理內(nèi)容:宏定義,文件包含,條件編譯等。(2)詞法分析目的:分析和識別程序語句中的單詞(分詞)。方法:編譯器掃描源程序中的字符串,根據(jù)詞法規(guī)則識別出單詞。單詞類型:語言規(guī)定的關(guān)鍵字或保留字,如:for、if、end等;標(biāo)識符,如:x、i、list等變量名稱;常數(shù),如:PI值等;運(yùn)算符和分界符,如:+、-、*、/、=、;、{、}等。2.1.4程序解釋與編譯【例2-6】對表達(dá)式:X1=(2.0+0.8)*C1進(jìn)行詞法分析。X1=(2.0+0.8)*C12.1.4程序解釋與編譯(3)語法分析語法分析是生成語法樹,并進(jìn)行語法正確性檢查;語法樹是程序結(jié)構(gòu)的樹形表示;編譯器利用語法樹進(jìn)行語法規(guī)則分析,并且生成中間代碼?!纠?-7】對表達(dá)式:X1=(2.0+0.8)*C1進(jìn)行語法分析。2.1.4程序解釋與編譯【案例】條件語句:ifx==2then{x=a+b}的語法分析樹。2.1.4程序解釋與編譯(4)語義分析和生成中間代碼中間代碼是介于源語言和目標(biāo)語言之間的中間語言形式。目的:便于后面做優(yōu)化處理;中間代碼很容易生成目標(biāo)程序。形式:四元式、三元式、逆波蘭表達(dá)式等?!纠?-8】X1=(2.0+0.8)*C1四元式方式生成的中間代碼如表2-3所示。運(yùn)算符左運(yùn)算對象右運(yùn)算對象中間結(jié)果四元式語義+2.00.8T1T1←2.0+0.8*T1C1T2T2←T1*C1=X1T2
X1←T22.1.4程序解釋與編譯(5)代碼優(yōu)化目的:為了得到高質(zhì)量的目標(biāo)程序。【例2-9】表2-3中第1行是一個(gè)常量表達(dá)式,可以在編譯時(shí)計(jì)算出它的值,并存放在臨時(shí)單元(T1)中,不必生成目標(biāo)指令。優(yōu)化后的中間代碼如表2-4所示。運(yùn)算符左運(yùn)算對象右運(yùn)算對象中間結(jié)果語義說明*T1C1T2T2←T1*C1=X1T2
X1←T22.1.4程序解釋與編譯(6)生成目標(biāo)程序優(yōu)化處理不僅與編譯技術(shù)有關(guān),而且與機(jī)器硬件關(guān)系密切。例如,充分利用硬件資源,減少對內(nèi)存的訪問次數(shù);例如,根據(jù)機(jī)器硬件的特點(diǎn)(如多線程等),調(diào)整目標(biāo)代碼。匯編過程實(shí)際上是把中間代碼翻譯成目標(biāo)機(jī)器指令的過程。(7)鏈接程序?qū)⒛繕?biāo)文件和函數(shù)庫連接,生成能執(zhí)行的機(jī)器代碼(軟件)。經(jīng)過上述過程后,源程序最終轉(zhuǎn)換成可執(zhí)行文件了?!队?jì)算機(jī)導(dǎo)論——計(jì)算思維和應(yīng)用技術(shù)》計(jì)算機(jī)第2章
程序語言2.1程序特征2.2程序結(jié)構(gòu)2.3程序員語言介紹2.4軟件開發(fā)方法2.1.3C語言程序結(jié)構(gòu)2.1.4程序解釋與編譯2.1.5程序編輯與運(yùn)行2.1.1程序語言的發(fā)展2.1.2程序語言的類型2.1.5程序編輯與運(yùn)行1、程序的編程環(huán)境(1)集成開發(fā)環(huán)境的功能IDE(集成開發(fā)環(huán)境)是一個(gè)綜合性工具軟件。大部分IDE是針對特定的程序語言量身打造的,如VisualBasic。IDE功能:程序語言編輯器,程序關(guān)鍵詞檢查器,程序調(diào)試器等;有些IDE包含編譯器或解釋器,如:MicrosoftVisualStudio;有些IDE不包含編譯器,如:Eclipse、SharpDevelop等;其他:類瀏覽器、物件檢視器、物件結(jié)構(gòu)圖等。2.1.5程序編輯與運(yùn)行【案例】MicrosoftVisualStudio集成開發(fā)環(huán)境(IDE)。2.1.5程序編輯與運(yùn)行(2)Code::Blocks集成開發(fā)環(huán)境工具軟件。功能:語法彩色醒目顯示;捆綁了minGW編譯器。可以編寫跨平臺的C/C++程序。支持C、C++、Python、XML、CSS、Matlab,F(xiàn)ortran,批處理文件等。計(jì)算機(jī)2.1.5程序編輯與運(yùn)行2、程序的運(yùn)行平臺(1)程序運(yùn)行的硬件環(huán)境運(yùn)行平臺指程序運(yùn)行時(shí)需要的硬件環(huán)境和操作系統(tǒng)環(huán)境。如,C#、VB等程序,只能支持x86系列CPU硬件環(huán)境。程序運(yùn)行在不同硬件環(huán)境下時(shí),需要對源程序進(jìn)行重新編譯。如,C程序用VC編譯后,生成的exe文件可以在Windows下運(yùn)行;如果C程序用GCC進(jìn)行編譯,生成的執(zhí)行文件可以在Liunx上運(yùn)行。不同程序?qū)PU和內(nèi)存的要求不相同。2.1.5程序編輯與運(yùn)行(2)程序運(yùn)行的操作系統(tǒng)環(huán)境程序運(yùn)行需要操作系統(tǒng)環(huán)境的支持。如,Windows下的應(yīng)用程序,在Linux系統(tǒng)中不能運(yùn)行;蘋果智能手機(jī)中的程序,在安卓智能手機(jī)中也不能運(yùn)行。程序開發(fā)時(shí),需要調(diào)用操作系統(tǒng)底層接口程序?qū)崿F(xiàn)某些功能。如,在Windows編程時(shí),需要調(diào)用各種子程序接口。如窗口,對話框,菜單等。《計(jì)算機(jī)導(dǎo)論——計(jì)算思維和應(yīng)用技術(shù)》計(jì)算機(jī)第2章
程序語言2.1程序特征2.2程序結(jié)構(gòu)2.3程序員語言介紹2.4軟件開發(fā)方法2.2.3表達(dá)式2.2.4程序控制2.2.5函數(shù)調(diào)用2.2.1數(shù)據(jù)類型2.2.2標(biāo)識符2.2.1數(shù)據(jù)類型1、程序語言的主要數(shù)據(jù)類型數(shù)據(jù)類型的“域”和“操作”域指定該數(shù)據(jù)類型值的集合。如,整型域包含所有整數(shù):……-2,-1,0,1,2……操作是定義該數(shù)據(jù)類型的行為。如,算術(shù)操作:+、-、*、/等大部分程序語言支持的數(shù)據(jù)類型:整型(整數(shù))、浮點(diǎn)型(實(shí)數(shù))、字符型、布爾型(邏輯型)等。2.2.1數(shù)據(jù)類型C語言數(shù)據(jù)類型2.2.1數(shù)據(jù)類型【擴(kuò)展】Java語言數(shù)據(jù)類型2.2.1數(shù)據(jù)類型(1)整型整型表示:int存儲長度:32位系統(tǒng)中為4個(gè)字節(jié)最大值:0~4294967295(232無符號數(shù))長整型表示:long存儲長度:在32位計(jì)算機(jī)系統(tǒng)中為8個(gè)字節(jié)最大值:263-1,最高位為符號位。2.2.1數(shù)據(jù)類型(2)浮點(diǎn)型有小數(shù)的數(shù)稱為浮點(diǎn)數(shù),它用來近似地表示數(shù)學(xué)中的實(shí)數(shù)。浮點(diǎn)數(shù)類型:float(單精度浮點(diǎn)型)double(雙精度浮點(diǎn)型)longdouble(長雙精度浮點(diǎn)型)除非進(jìn)行精確的科學(xué)計(jì)算,否則三者的差別無關(guān)緊要。2.2.1數(shù)據(jù)類型(3)字符型字符型常量用英文雙引號(如C語言)或單引號(如Python語言)圍起來。如:''ABC''、''a+b=''、''x1''等。(4)布爾型表示:bool值:true(邏輯真)和false(邏輯假)2.2.1數(shù)據(jù)類型2、常量常量是程序運(yùn)行中始終保持不變的數(shù)值、字符串等。如,3.14(數(shù)值常量),如,“A+B=”(字符串常量),如,“請輸入圓的半徑:”(字符串常量)等。2.2.1數(shù)據(jù)類型3、變量值可以改變的量稱為變量。變量在使用前必須進(jìn)行聲明(定義)。變量屬性變量名變量類型:整型,浮點(diǎn)型,字符型,邏輯型,指針型,日期型等。作用域全局變量局部變量變量初始值2.2.1數(shù)據(jù)類型【擴(kuò)展】全局變量的作用范圍。2.2.1數(shù)據(jù)類型【擴(kuò)展】變量的思維導(dǎo)圖。2.2.1數(shù)據(jù)類型【擴(kuò)展】Java的基本數(shù)據(jù)類型基本型別大小最小值最大值Boolean布爾型----------------Char字符型16bitUnicode0Unicode2^16-1Byte字節(jié)型8bit-128+127Short短整型16bit-2^15+2^15-1int整型32bit-2^31+2^31-1Long長整型64bit-2^63+2^63-1Float浮點(diǎn)型32bitIEEE754IEEE754Double雙精度浮點(diǎn)型64bitIEEE754IEEE754《計(jì)算機(jī)導(dǎo)論——計(jì)算思維和應(yīng)用技術(shù)》計(jì)算機(jī)第2章
程序語言2.1程序特征2.2程序結(jié)構(gòu)2.3程序員語言介紹2.4軟件開發(fā)方法2.2.3表達(dá)式2.2.4程序控制2.2.5函數(shù)調(diào)用2.2.1數(shù)據(jù)類型2.2.2標(biāo)識符2.2.2標(biāo)識符1、標(biāo)識符命名規(guī)則表示變量、常量、函數(shù)、類型的名稱稱為標(biāo)識符。標(biāo)識符特性:只能由字母、數(shù)字和下劃線組成,不允許空格、漢字和其他特殊字符。第1個(gè)字符不能是數(shù)字,必須是英文字母或下劃線。不能是程序語言中的關(guān)鍵字如:if、then、else、end、for、while、do、int、float、char等。有些程序語言對標(biāo)識符中字母的大小寫敏感。如:C語言認(rèn)為“int”和“Int”不同;而如VB、SQL等程序語言對大小寫不敏感。變量名盡量用小寫字母。如:n1等;常量名以大寫字母開始,如:Pi等。標(biāo)識符盡量做到見名知義,最好以英文全稱或中文全拼音的方式命名。如對年齡變量名的定義可用:intage=0或intnianling=10等。2.2.2標(biāo)識符帕斯卡命名法:單詞首字母大寫如:RaiseIntToPower、LowerLimit、DisplayInfo();等下劃線法:單詞之間用下劃線分隔如:print_employee_paychecks();匈牙利命名法:變量名=屬性+類型+對象描述如,frmSwitchboard(frm是表單,Switchboard是表單名稱)
駝峰命名法:第1個(gè)單詞小寫,第2個(gè)單詞首字母大寫如,printEmployeePaychecks();、myFirstName等標(biāo)識符首部其他2.2.2標(biāo)識符2、轉(zhuǎn)義字符以斜杠“\”加字符表示的ASCII符號稱為轉(zhuǎn)義字符。例如,\0、\r、\n等斜杠后的第1個(gè)字符不是它本來的字符,它轉(zhuǎn)移表示為另外一個(gè)含義。例如,“\n”不表示字符“n”,而是表示“換行”打印。需要轉(zhuǎn)義字符的原因:回車符、換行符等沒有代號,只能用轉(zhuǎn)義字符表示;在程序語言中,一些字符被定義為特殊用途,失去了原有意義;例如,程序用“\”作為轉(zhuǎn)義字符的開始,如果程序要用“\”,只能用轉(zhuǎn)義字符。如“\\”;例如,在HTML語言中,“<>”被定義為標(biāo)簽開始,如果使用“<>”符號,只能使用轉(zhuǎn)義字符;例如,C語言中,雙引號被定義為字符串的標(biāo)簽,如果要用雙引號,只能使用轉(zhuǎn)義字符。出于安全原因,數(shù)據(jù)寫入數(shù)據(jù)庫前,會(huì)使用轉(zhuǎn)義字符對一些敏感字符進(jìn)行轉(zhuǎn)義,這樣可以避免黑客利用特殊符號進(jìn)行攻擊。2.2.2標(biāo)識符【案例】C語言轉(zhuǎn)義字符。轉(zhuǎn)義字符含義ASCII碼(16進(jìn)制)ASCII碼(10進(jìn)制)\o字符串結(jié)束標(biāo)志(NULL)00H0\n換行(LF)0AH10\r回車(CR)0DH13\t水平跳格(HT)09H9\b退格(BS)08H8\f換頁(FF)0CH12\’單引號27H39\”雙引號22H34\\反斜杠5CH92\?問號字符3FH63\ddd任意字符3位八進(jìn)制3位八進(jìn)制\xhh任意字符2位十六進(jìn)制2位十六進(jìn)制2.2.2標(biāo)識符【擴(kuò)展】ANSIC語言的32個(gè)關(guān)鍵字。auto:自動(dòng)變量double:雙精度浮點(diǎn)型int:整型變量struct:結(jié)構(gòu)體類型break:跳出循環(huán)else:否則(與if連用)long:長整型變量switch:開關(guān)語句case:開關(guān)語句分支enum:枚舉類型register:寄存器變量typedef:數(shù)據(jù)類型別名char:字符型變量extern:變量在其它文件return:子程序返回unsigned:無符號類型const:只讀變量float:浮點(diǎn)型變量short:短整型變量union:共用體類型continue:繼續(xù)(循環(huán))for:循環(huán)語句signed:有符號類型void:無返回值default:默認(rèn)(分支)goto:無條件跳轉(zhuǎn)sizeof:計(jì)算數(shù)據(jù)類型字節(jié)數(shù)volatile:變量在執(zhí)行中可被改變do:循環(huán)體if:條件語句static:靜態(tài)變量while:當(dāng)…時(shí)(循環(huán))2.2.2標(biāo)識符【擴(kuò)展】C語言常用函數(shù)和頭文件。常用數(shù)學(xué)函數(shù)輸入輸出函數(shù)常用頭文件編譯預(yù)處理指令abs:求整數(shù)絕對值Printf:輸出到設(shè)備ctype.h:字符處理#include:文件包含fabs:求實(shí)數(shù)絕對值scanf:從設(shè)備輸入errno.h:錯(cuò)誤處理#define:宏定義sqrt:求x平方根gets:讀取字符串local.h:地區(qū)化#if,#ifdef:條件編譯pow10:求10的p次方open:打開文件math.h:數(shù)學(xué)函數(shù)
pow:求x的y次方Close:關(guān)閉文件signal.h:信號處理
Random:產(chǎn)生隨機(jī)數(shù)
exit:中止程序運(yùn)行stdio.h:輸入輸出
sin:正弦函數(shù)
stdlib.h:實(shí)用工具
cos:余弦函數(shù)
string.h:字符串處理
tan:正切函數(shù)
time.h:日期和時(shí)間
《計(jì)算機(jī)導(dǎo)論——計(jì)算思維和應(yīng)用技術(shù)》計(jì)算機(jī)第2章
程序語言2.1程序特征2.2程序結(jié)構(gòu)2.3程序員語言介紹2.4軟件開發(fā)方法2.2.3表達(dá)式2.2.4程序控制2.2.5函數(shù)調(diào)用2.2.1數(shù)據(jù)類型2.2.2標(biāo)識符2.2.3算術(shù)表達(dá)式1、算術(shù)表達(dá)式表達(dá)式是常量、變量、函數(shù)、運(yùn)算符等符號組成的有意義組合式。算術(shù)表達(dá)式是最常用的表達(dá)式。程序語言只能識別按行書寫的數(shù)學(xué)表達(dá)式?!纠?-10】x+y是表達(dá)式;一個(gè)變量x也是一個(gè)表達(dá)式;【案例】x=x+y是賦值語句,不是表達(dá)式,它表示將表達(dá)式x+y的值賦給x。2.2.3算術(shù)表達(dá)式2、邏輯表達(dá)式邏輯表達(dá)式的值是“true”(真)或“false”(假)。一般用數(shù)字“1”表示“真”,數(shù)字“0”表示“假”。多個(gè)關(guān)系表達(dá)式用邏輯運(yùn)算符連接起來的式子稱為邏輯表達(dá)式。邏輯運(yùn)算順序:?。ǚ牵?&(與)→||(或)。復(fù)合表達(dá)式運(yùn)算順序:算術(shù)運(yùn)算→關(guān)系運(yùn)算→邏輯運(yùn)算?!纠?-11】a=5,b=7,c=2,d=1,求表達(dá)式:a+b>c+d&&a>=5||!c>0||d<0的值。運(yùn)算結(jié)果值=true(真)?!纠?-12】判斷變量x是否在5.002和5.004區(qū)間。邏輯表達(dá)式為:x>5.002&&x<5.004。2.2.3算術(shù)表達(dá)式3、模運(yùn)算模運(yùn)算(求余運(yùn)算):求一個(gè)整數(shù)n除以另一個(gè)整數(shù)p后的余數(shù)。在程序設(shè)計(jì)中,通常用mod表示模運(yùn)算?!纠?-13】7mod3=1,因?yàn)?除以3商2余1,商丟棄,余數(shù)1為模運(yùn)算結(jié)果?!纠?-14】假設(shè)今天是星期五,請問1000天后是星期幾?
(5+1000)mod7=4,1000天后是星期四。2.2.3算術(shù)表達(dá)式4、表達(dá)式中的運(yùn)算符不同的程序語言有不同的運(yùn)算符,符號定義和使用規(guī)則都有區(qū)別。C語言運(yùn)算符類型:算術(shù)運(yùn)算符:加(+)、減(-)、乘(*)、除(/)、模運(yùn)算(%)、自增運(yùn)算(++)、自減運(yùn)算(--)等。關(guān)系運(yùn)算符:大于(>)、小于(<)、等于(==)、大于等于(>=)、小于等于(<=)、不等于(!=)。邏輯運(yùn)算符:與(&&)、或(||)、非(!)。其他運(yùn)算符:賦值運(yùn)算、位操作運(yùn)算、條件運(yùn)算、逗號運(yùn)算、指針運(yùn)算、求字節(jié)數(shù)運(yùn)算、特殊運(yùn)算等。2.2.3算術(shù)表達(dá)式【案例】C語言運(yùn)算符應(yīng)用。運(yùn)算符名稱案例結(jié)果+加5+510-減8-62++自加a=2;b=++a;a=3;b=3++自加a=2;b=a++;a=3;b=2--自減a=2;b=--a;a=1;b=1--自減a=2;b=a--;a=1;b=2*乘3*721/除12/34%求余12%120&&與
||或
!非
^異或
2.2.3算術(shù)表達(dá)式5、表達(dá)式的運(yùn)算順序(1)圓括號()優(yōu)先級最高,其他次之。多層圓括號遵循由里向外的原則。(2)多個(gè)運(yùn)算符運(yùn)算順序?yàn)椋?/p>
括號→乘方→乘/除→加/減→字符連接運(yùn)算符→關(guān)系運(yùn)算符→邏輯運(yùn)算符(3)優(yōu)先級相同時(shí),遵循左則優(yōu)先的原則。
如:表達(dá)式x-y+z中,y先與“-”號結(jié)合,執(zhí)行x-y運(yùn)算,然后再執(zhí)行+z的運(yùn)算。(4)優(yōu)先級相同時(shí),賦值表達(dá)式遵循右則優(yōu)先的原則。
如:表達(dá)式x=y=z中,先執(zhí)行y=z運(yùn)算,再執(zhí)行x=(y=z)運(yùn)算。2.2.3算術(shù)表達(dá)式
2.2.3算術(shù)表達(dá)式6、正則表達(dá)式(1)正則表達(dá)式的概念正則表達(dá)式是字符串處理規(guī)則的表達(dá)式。盡管正則表達(dá)式晦澀難懂,但它功能強(qiáng)大,使用它的領(lǐng)域越來越多。與通配符類似,正則表達(dá)式是用來進(jìn)行文本匹配的工具。(2)正則表達(dá)式的功能用一個(gè)“字符串”描述特征,然后驗(yàn)證另一個(gè)“字符串”是否符合這個(gè)特征。主要功能:驗(yàn)證字符串是否符合指定特征,如驗(yàn)證是否是合法的郵件地址;用來從文本中查找符合指定特征的字符串;替換文本中的字符串;從文本中提取指定的字符串;統(tǒng)計(jì)文本中某些字符的數(shù)量;進(jìn)行字符的翻譯;對字符串進(jìn)行加密處理等。2.2.3算術(shù)表達(dá)式【例2-17】表達(dá)式“bcd”在匹配字符串“abcde”時(shí),匹配結(jié)果成功;匹配內(nèi)容=“bcd”;匹配位置開始于1,結(jié)束于4?!纠?-18】需要?jiǎng)h除文檔中的空白行時(shí),正則表達(dá)式為:\n\s*\r“\”是轉(zhuǎn)義字符,“\n”表示匹配一個(gè)換行符;“\s”表示匹配任何空白字符;“*”表示匹配前面的子表達(dá)式0~多次;“\r”表示匹配一個(gè)回車符。(3)程序語言對正則表達(dá)式的支持不是每一種語言都側(cè)重于處理文本。例如,R是統(tǒng)計(jì)語言,處理文本不是它的強(qiáng)項(xiàng);例如,PHP、Python等程序語言處理文本的功能很強(qiáng)大;例如,C/C++程序語言不支持正則表達(dá)式,但是可通過其他函數(shù)庫程序達(dá)到這一功能。2.2.3算術(shù)表達(dá)式(4)正則表達(dá)式的簡單案例【例2-19】寫出驗(yàn)證用戶名和密碼的正則表達(dá)式。
正則表達(dá)式為:^[a-zA-Z][a-zA-Z0-9_]{6,15}$“^”表示文本匹配開始;“[]”表示選擇方括號中任意一個(gè)字符;“[a-zA-Z][a-zA-Z0-9_]”表示用戶名和密碼中的字符可以為:大小寫英文字母、數(shù)字或下劃線;“{6,15}”表示用戶名和密碼允許6~15個(gè)字符;“$”表示文本匹配結(jié)束。2.2.3算術(shù)表達(dá)式【擴(kuò)展】PHP語言正則表達(dá)式?!队?jì)算機(jī)導(dǎo)論——計(jì)算思維和應(yīng)用技術(shù)》計(jì)算機(jī)第2章
程序語言2.1程序特征2.2程序結(jié)構(gòu)2.3程序員語言介紹2.4軟件開發(fā)方法2.2.3表達(dá)式2.2.4程序控制2.2.5函數(shù)調(diào)用2.2.1數(shù)據(jù)類型2.2.2標(biāo)識符2.2.4程序控制三種基本程序結(jié)構(gòu):順序、選擇、循環(huán)。1、順序結(jié)構(gòu)執(zhí)行完第1條語句后,接著執(zhí)行第2條語句,直到所有語句執(zhí)行完成。計(jì)算機(jī)2.2.4程序控制2、選擇結(jié)構(gòu)(1)選擇結(jié)構(gòu)的形式選擇結(jié)構(gòu)是判斷某個(gè)條件是否成立,然后選擇程序中的某些語句執(zhí)行。選擇結(jié)構(gòu)用菱形框表示判斷條件,根據(jù)條件是否成立選擇執(zhí)行流向。選擇結(jié)構(gòu)規(guī)則:只能執(zhí)行一個(gè)方向的語句,不能既執(zhí)行A語句又執(zhí)行B語句;A或B可以有一個(gè)為空,即不執(zhí)行任何操作;無論執(zhí)行哪一個(gè)方向,執(zhí)行完A或B語句后,都必須脫離選擇結(jié)構(gòu)。選擇結(jié)構(gòu)一般通過if-then和select-case語句實(shí)現(xiàn)。2.2.4程序控制
if-then-else結(jié)構(gòu)和if-then結(jié)構(gòu)2.2.4程序控制【擴(kuò)展】多級if-then結(jié)構(gòu)。計(jì)算機(jī)2.2.4程序控制(2)IF條件語句if語句的基本格式C語言中,if語句以分號;作為結(jié)束符;VB語言以endif作為結(jié)束符。if語句執(zhí)行過程:條件成立時(shí),執(zhí)行t<語句組1>,否則執(zhí)行<語句組2>。有時(shí)可省略else和<語句組2>,當(dāng)<條件>成立時(shí),執(zhí)行<語句組1>,否則退出。/*C語言if語句格式*/if<條件>then<語句組1>;
else<語句組2>;'VB語言if語句格式('為VB注釋符)if<條件>then<語句組1>else<語句組2>endif2.2.4程序控制【例2-21】某超市購物優(yōu)惠規(guī)定:購物不超過100元時(shí),按9折付款;超過100元時(shí),超過部分按7折收費(fèi)。算法如下:輸入一個(gè)數(shù)給浮點(diǎn)型變量w;判斷w如果小于100,則x=0.9*w;否則x=0.9*w+0.7*(w-100);輸出x的值。C程序代碼如下(1)(2)(3)(4)(5)(6)(7)(8)#include<stdio.h>main(){floatw,x;printf("請輸入購物金額\n");scanf("%f",&w);if(w<=100)x=0.9*w;elsex=0.9*100+0.7*(w-100);printf("應(yīng)付款=%10.2f\n",x);}/*頭文件*//*主函數(shù)*//*聲明變量為浮點(diǎn)型*//*顯示提示信息*//*讀取輸入變量*//*如果金額小于等于100,則按9折計(jì)算*//*否則超過部分按7折計(jì)算,;為選擇結(jié)束符*//*顯示應(yīng)付款,第10列開始,2位小數(shù)*/2.2.4程序控制3、循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)是重復(fù)執(zhí)行一些語句,直到滿足某個(gè)條件為止。循環(huán)結(jié)構(gòu)類型:當(dāng)型循環(huán)(while)和直到型循環(huán)(until)。2.2.4程序控制(1)當(dāng)型循環(huán)(while)先判斷循環(huán)條件,后執(zhí)行循環(huán)體。表達(dá)式值為真繼續(xù)循環(huán);表達(dá)式值為假時(shí)結(jié)束循環(huán)。循環(huán)次數(shù)不確定時(shí),適用于采用當(dāng)型循環(huán)。【例2-22】用“當(dāng)型”循環(huán)求1+2+3….+100之和。步驟1:聲明迭代變量sum初始值為0;步驟2:確定迭代公式:sum←sun+i;步驟3:i分別取值1,2,3,…,100時(shí),重復(fù)計(jì)算:sum←sun+i。C語言程序代碼如下(1)(2)(3)(4)(5)(6)(7)#include<stdio.h>intmain(void){inti=1,sum=0;while(i<=100){sum=sum+i;i++;}printf("Sum=%d\n",sum);}/*頭文件*//*主函數(shù)*//*初始化,i為循環(huán)計(jì)數(shù)器,sum為和*//*循環(huán)開始,判斷條件為(i<=100),值為假結(jié)束*//*循環(huán)體,計(jì)算部分和*//*循環(huán)體,修改循環(huán)值,}為循環(huán)結(jié)束標(biāo)志*//*循環(huán)結(jié)束后的語句,顯示計(jì)算結(jié)果*/2.2.4程序控制(2)直到型循環(huán)(until)先執(zhí)行循環(huán)體,后判斷循環(huán)條件。表達(dá)式值為真結(jié)束循環(huán),表達(dá)式值為假繼續(xù)循環(huán)。循環(huán)次數(shù)確定值時(shí),適用于采用直到型循環(huán)。【例2-23】用“直到型”循環(huán)求1+2+3….+100之和。C語言程序代碼如下(1)(2)(3)(4)(5)(6)(7)(8)#include<stdio.h>intmain(void){inti=1,sum=0;do{sum=sum+i;i++;}while(i<=100);printf("Sum=%d\n",sum);}/*頭文件*//*主函數(shù)*//*初始化,i為循環(huán)計(jì)數(shù)器,sum為和*//*循環(huán)開始*//*循環(huán)體,計(jì)算部分和*//*循環(huán)體,修改循環(huán)值,循環(huán)一次i值加1*//*判斷條件為(i<=100),條件值為假結(jié)束循環(huán)*//*循環(huán)結(jié)束后的語句,顯示計(jì)算結(jié)果*/2.2.4程序控制【案例】求1+2+3….+100之和的循環(huán)結(jié)構(gòu)流程圖。計(jì)算機(jī)2.2.4程序控制4、程序基本結(jié)構(gòu)的特點(diǎn)任何程序均可采用“順序、選擇、循環(huán)”三種基本結(jié)構(gòu)實(shí)現(xiàn)。程序結(jié)構(gòu)的共同特點(diǎn):結(jié)構(gòu)內(nèi)每一部分程序都有被執(zhí)行的機(jī)會(huì)。結(jié)構(gòu)內(nèi)不能有“死循環(huán)”(無法終止的循環(huán))。程序只有一個(gè)入口和一個(gè)出口。選擇結(jié)構(gòu)有多個(gè)出口時(shí),只有一個(gè)出口被執(zhí)行?!队?jì)算機(jī)導(dǎo)論——計(jì)算思維和應(yīng)用技術(shù)》計(jì)算機(jī)第2章
程序語言2.1程序特征2.2程序結(jié)構(gòu)2.3程序員語言介紹2.4軟件開發(fā)方法2.2.3表達(dá)式2.2.4程序控制2.2.5函數(shù)調(diào)用2.2.1數(shù)據(jù)類型2.2.2標(biāo)識符2.2.5函數(shù)調(diào)用1、函數(shù)的形式(1)函數(shù)的一般形式C語言函數(shù)調(diào)用形式為:函數(shù)名(實(shí)參表)實(shí)參表中的參數(shù)可以是常量、變量或其它表達(dá)式;實(shí)參之間用逗號分隔;對無參函數(shù)調(diào)用時(shí),不需要實(shí)參表。(2)函數(shù)表達(dá)式以函數(shù)返回值參與表達(dá)式運(yùn)算時(shí),必須有返回值。【例2-24】z=max(x,y)是賦值表達(dá)式,max函數(shù)將返回值賦予給變量z。2.2.5函數(shù)調(diào)用2、函數(shù)的形參與實(shí)參實(shí)參指調(diào)用函數(shù)時(shí),傳遞給函數(shù)的常量、表達(dá)式、變量名等;實(shí)參表中各個(gè)參數(shù)用逗號分隔;實(shí)參一般出現(xiàn)在主調(diào)函數(shù)中,進(jìn)入被調(diào)函數(shù)后,實(shí)參變量不能使用。形參是接收數(shù)據(jù)的變量。形參表中各個(gè)變量之間用逗號分隔;形參表中的變量可以是簡單變量,也可以是數(shù)組。形參不能是定長的字符串,定長字符串可作為實(shí)參傳遞給函數(shù)。形參一般出現(xiàn)在被調(diào)函數(shù)中,在函數(shù)體內(nèi)可用,離開該函數(shù)則不能使用。形參和實(shí)參可以實(shí)現(xiàn)兩個(gè)程序模塊之間的數(shù)據(jù)傳送。在調(diào)用函數(shù)時(shí),實(shí)參被賦值到對應(yīng)的形參變量中。2.2.5函數(shù)調(diào)用【例2-3】C語言程序中實(shí)參與形參之間的數(shù)據(jù)傳遞。⑴⑵⑶⑷⑸⑹⑺⑻⑼⑽⑾⑿⒀#include<stdio.h>voidmain(){intmax();
inta,b,c;scanf("%d,%d",&a,&b);c=max(a,b);printf("max=%d\n",c);}intmax(intx,inty){int
z;if(x>y)z=x;elsez=y;return(z);}聲明自定義函數(shù)數(shù)據(jù)類型聲明實(shí)參類型實(shí)參賦值函數(shù)值返回給max()函數(shù)名形參調(diào)用自定義函數(shù)自定義函數(shù)實(shí)參將值傳遞給形參2.2.5函數(shù)調(diào)用【案例】形參與實(shí)參的關(guān)系。2.2.5函數(shù)調(diào)用3、函數(shù)的聲明調(diào)用某個(gè)函數(shù)前,應(yīng)對該函數(shù)進(jìn)行聲明;被調(diào)函數(shù)聲明的形式為:類型說明符被調(diào)函數(shù)名(類型形參,類型形參,…);【例2-25】在main主函數(shù)中,對被調(diào)函數(shù)max的聲明為:intmax(intx,inty);2.2.5函數(shù)調(diào)用4、函數(shù)的嵌套調(diào)用C語言中,各函數(shù)之間是平行的,不存在上一級函數(shù)和下一級函數(shù)的問題。C語言允許在一個(gè)函數(shù)中對另一個(gè)函數(shù)進(jìn)行調(diào)用。多層嵌套調(diào)用2.2.5函數(shù)調(diào)用5、C語言程序的基本組成C語言程序由一個(gè)或多個(gè)程序組成;每個(gè)程序作為一個(gè)源程序文件。較大的程序,一般會(huì)將它們放在若干個(gè)源程序文件中;一個(gè)源程序文件可以為多個(gè)C程序使用。C程序的執(zhí)行從main主函數(shù)開始;如果main主函數(shù)調(diào)用了其他函數(shù),調(diào)用結(jié)束后應(yīng)返回主函數(shù);應(yīng)當(dāng)在主函數(shù)中結(jié)束程序。2.2.5函數(shù)調(diào)用【案例】C語言函數(shù)調(diào)用。計(jì)算機(jī)2.2.5函數(shù)調(diào)用【擴(kuò)展】C語言組成?!队?jì)算機(jī)導(dǎo)論——計(jì)算思維和應(yīng)用技術(shù)》計(jì)算機(jī)第2章
程序語言2.1程序特征2.2程序結(jié)構(gòu)2.3程序員語言介紹2.4軟件開發(fā)方法2.3.3面向?qū)ο缶幊陶Z言Java2.3.4數(shù)據(jù)統(tǒng)計(jì)編程語言R2.3.5邏輯推理編程語言Prolog2.3.1入門程序語言介紹2.3.2用流程圖進(jìn)行編程RAPTOR2.3.1入門程序語言介紹1、國內(nèi)外大學(xué)入門程序語言教學(xué)美國1970年代,F(xiàn)ortran為主;1970年代以后,Pascal為主;1990年代中后期,C語言;21世紀(jì)初,Java;近年,多樣化,Python、Java、C、C++等。中國1980年代,BASIC語言;1990年代中后期,VB;21世紀(jì)至今,C語言。2.3.1入門程序語言介紹推薦入門程序語言RAPTOR,適用所有專業(yè)。Scratch、
Alice,適用藝術(shù)專業(yè)。Blockly、易語言,適用文科專業(yè)。R,適用經(jīng)管、生物、化工等專業(yè)。C,適用工業(yè)控制、機(jī)械等專業(yè)。Java、C++,適用計(jì)算機(jī)專業(yè)。PHP、Python,適用互聯(lián)網(wǎng)專業(yè)。Matlab,適用通信、數(shù)學(xué)、物理等專業(yè)。2.3.1入門程序語言介紹2、Scratch圖形化游戲編程介紹Scratch是美國麻省理工學(xué)院開發(fā)的編程軟件。網(wǎng)址:
http:///howtoScratch特征:不需要編寫任何程序代碼;用鼠標(biāo)拖拽圖形模塊就可以對動(dòng)畫進(jìn)行編程。(1)Scratch的功能很容易創(chuàng)造出交互式游戲和動(dòng)畫;官方網(wǎng)站有大量資源;提供70多個(gè)動(dòng)畫游戲,600多個(gè)角色,70多個(gè)背景圖片,110多個(gè)音頻文件;允許用戶導(dǎo)入或制作素材;自動(dòng)進(jìn)入簡體中文界面。2.3.1入門程序語言介紹Scratch編程界面計(jì)算機(jī)2.3.1入門程序語言介紹【案例】Scratch程序Alice2.3.1入門程序語言介紹【擴(kuò)展】Alice3D動(dòng)畫游戲創(chuàng)作程序Alice是卡內(nèi)基.梅隆大學(xué)的可視化編程工具。程序的功能:對象模型:模型庫內(nèi)有幾百個(gè)內(nèi)建三維模型;對象操作:移動(dòng)、轉(zhuǎn)向、說、滾動(dòng)、調(diào)整大小、顏色等;編程操作:通過鼠標(biāo)拖拽屏幕上的語句和對象,來指揮對象動(dòng)作,生成動(dòng)畫效果;程序運(yùn)行:程序執(zhí)行過程以動(dòng)畫表示,隨時(shí)看到所編程序的運(yùn)行結(jié)果。ACM/IEEECS2013推薦:可視化程序設(shè)計(jì)語言,如Alice和Scratch,也成為受歡迎的選擇。Alice資源http://http://2.3.1入門程序語言介紹【擴(kuò)展】Alice3D動(dòng)畫游戲創(chuàng)作程序主要分區(qū)對象樹細(xì)節(jié)區(qū)場景窗囗編輯區(qū)事件區(qū)2.3.1入門程序語言介紹3、Blockly圖形化編程介紹Blockly是Google公司2012年發(fā)布了一款可視化程序語言;它非常類似MIT的Scratch,同樣是通過圖形代碼塊構(gòu)建程序;Blockly是在網(wǎng)頁上運(yùn)行的圖形化程序語言;它可以生成JavaScript、Python、XML等程序代碼。網(wǎng)站:http:///svn/trunk/apps/code/計(jì)算機(jī)2.3.1入門程序語言介紹【案例】Blockly編程應(yīng)用。計(jì)算機(jī)2.3.1入門程序語言介紹4、易語言中文編程介紹大連大有吳濤公司(地址:http:///pdown.htm)開發(fā);(1)易語言的功能易語言中所有程序代碼都采用漢字。支持中文程序語句的快速錄入如:輸入for或xh時(shí),易語言會(huì)自動(dòng)轉(zhuǎn)換為漢字“循環(huán)”。變量聲明采用填表方法,簡化和規(guī)范了變量聲明的工作。能與常用程序語言互相調(diào)用,充分利用現(xiàn)有的API(應(yīng)用程序接口)等組件;易語言采用結(jié)構(gòu)化、面向?qū)ο?、集成化等技術(shù);可以滿足絕大部分Windows、Linux編程需求。2.3.1入門程序語言介紹【案例】易語言的程序案例。2.3.1入門程序語言介紹【案例】易語言程序案例。計(jì)算機(jī)2.3.1入門程序語言介紹(2)易語言與Java語言的比較指令類型易語言Java語言啟動(dòng)方法公開靜態(tài)整數(shù)啟動(dòng)(文本[]參數(shù))publicstaticvoidmain(String[]args)基本類型整數(shù),小數(shù),邏輯,文本,字節(jié)集int,float,boolean,char,byte定義變量整數(shù)i=123;inti=123;創(chuàng)建數(shù)組整數(shù)[]a=創(chuàng)建整數(shù)[x];int[]a=newint[x];數(shù)組賦值整數(shù)[]a={1,2,3};int[]a={1,2,3};定義類公開類我的類<基類型=XXX>{}publicclassMyClassextendsXXX{}if判斷如果(1+1==2){}否則{}if(1+1==2){}else{}while循環(huán)循環(huán)(x<0){x++;}while(x<0){x++;}for循環(huán)C循環(huán)(整數(shù)i=0;i<10;i++){}for(inti=0;i<10;i++){}2.3.1入門程序語言介紹(3)易語言編程案例【例2-26】:用易語言編寫“Helle”程序。(4)其他中文程序語言漢化的其他程序語言,如:“中蟒”是漢化Python語言,“習(xí)語言”是C的漢化自主研發(fā)漢語內(nèi)核的語言,如:“易語言”,O匯編語言等;以漢語為基礎(chǔ)的編程工具,如:搭建之星,網(wǎng)站搭建者,雅奇MIS等。(1)(2)(3)(4)公開
類
啟動(dòng)類{公開
靜態(tài)
啟動(dòng)(){控制臺.輸出行("Hello,World!");}}2.3.1入門程序語言介紹【擴(kuò)展】計(jì)算機(jī)科學(xué)家發(fā)明阿拉伯文字編程語言。2.3.1入門程序語言介紹【案例】可視化編程案例。《計(jì)算機(jī)導(dǎo)論——計(jì)算思維和應(yīng)用技術(shù)》計(jì)算機(jī)第2章
程序語言2.1程序特征2.2程序結(jié)構(gòu)2.3程序員語言介紹2.4軟件開發(fā)方法2.3.3面向?qū)ο缶幊陶Z言Java2.3.4數(shù)據(jù)統(tǒng)計(jì)編程語言R2.3.5邏輯推理編程語言Prolog2.3.1入門程序語言介紹2.3.2用流程圖進(jìn)行編程RAPTOR2.3.2用流程圖進(jìn)行編程RAPTORRAPTOR是基于流程圖的可視化編程工具。用圖形符號代表執(zhí)行指令,符號連線方向決定指令執(zhí)行順序。計(jì)算機(jī)2.3.2用流程圖進(jìn)行編程RAPTOR1、RAPTOR的基本功能用8個(gè)流程圖符號創(chuàng)建程序,在RAPTOR環(huán)境下運(yùn)行程序。有單步執(zhí)行和連續(xù)執(zhí)行兩種模式,可以直觀顯示程序執(zhí)行所在的位置。提供了簡單圖形庫,求解的結(jié)果也是可視化的。可以根據(jù)流程圖自動(dòng)生成C++、C#、Java源程序代碼,以及exe可執(zhí)行程序。2、使用RAPTOR學(xué)習(xí)程序設(shè)計(jì)的優(yōu)點(diǎn)圖形編程環(huán)境可以減少對程序語法的要求??梢砸淮螆?zhí)行一個(gè)圖形符號,幫助學(xué)習(xí)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度大數(shù)據(jù)分析處理個(gè)人勞務(wù)合同3篇
- 2025年浙江嘉興市海寧市城投集團(tuán)招聘筆試參考題庫含答案解析
- 二零二五年度鞋類產(chǎn)品回收與再利用技術(shù)研究合同3篇
- 2025年度個(gè)人健康保險(xiǎn)連帶擔(dān)保協(xié)議4篇
- 2025年遼寧鞍山國家高新技術(shù)產(chǎn)業(yè)開發(fā)區(qū)國有企業(yè)招聘筆試參考題庫附帶答案詳解
- 2025年度個(gè)人果園生態(tài)旅游開發(fā)與承包經(jīng)營合同4篇
- 二零二五年度綠色能源貸款擔(dān)保服務(wù)協(xié)議4篇
- 二零二五年度門窗五金件行業(yè)人才培養(yǎng)與引進(jìn)合同4篇
- 二零二五年度民辦學(xué)校學(xué)生宿舍維修與設(shè)施更新合同4篇
- 2025年度智能門禁系統(tǒng)節(jié)能環(huán)保改造合同文檔4篇
- 第22單元(二次函數(shù))-單元測試卷(2)-2024-2025學(xué)年數(shù)學(xué)人教版九年級上冊(含答案解析)
- 藍(lán)色3D風(fēng)工作總結(jié)匯報(bào)模板
- 安全常識課件
- 河北省石家莊市2023-2024學(xué)年高一上學(xué)期期末聯(lián)考化學(xué)試題(含答案)
- 2024年江蘇省導(dǎo)游服務(wù)技能大賽理論考試題庫(含答案)
- 2024年中考英語閱讀理解表格型解題技巧講解(含練習(xí)題及答案)
- 新版中國食物成分表
- 浙江省溫州市溫州中學(xué)2025屆數(shù)學(xué)高二上期末綜合測試試題含解析
- 2024年山東省青島市中考生物試題(含答案)
- 保安公司市場拓展方案-保安拓展工作方案
- GB/T 15843.2-2024網(wǎng)絡(luò)安全技術(shù)實(shí)體鑒別第2部分:采用鑒別式加密的機(jī)制
評論
0/150
提交評論