學(xué)習(xí)-程序設(shè)計(jì)基礎(chǔ)_第1頁
學(xué)習(xí)-程序設(shè)計(jì)基礎(chǔ)_第2頁
學(xué)習(xí)-程序設(shè)計(jì)基礎(chǔ)_第3頁
學(xué)習(xí)-程序設(shè)計(jì)基礎(chǔ)_第4頁
學(xué)習(xí)-程序設(shè)計(jì)基礎(chǔ)_第5頁
已閱讀5頁,還剩96頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系第4章程序設(shè)計(jì)基礎(chǔ)了解程序設(shè)計(jì)的基本概念和方法,掌握J(rèn)avaScript的基礎(chǔ)程序設(shè)計(jì)技術(shù)。2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系第四章

程序設(shè)計(jì)基礎(chǔ)編程基本概念JavaScript語言及其運(yùn)行環(huán)境JavaScript編程基礎(chǔ)JavaScript流程控制調(diào)試JavaScript程序JavaScript函數(shù)2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.1編程基本概念4.1.1程序設(shè)計(jì)語言4.1.2算法與流程圖4.1.3結(jié)構(gòu)化程序設(shè)計(jì)2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.1.1程序設(shè)計(jì)語言程序是用計(jì)算機(jī)語言描述的解決某一問題的步驟,由符合一定詞法、語法和語義規(guī)則的符號(hào)序列組成。程序設(shè)計(jì)語言是用于編寫計(jì)算機(jī)程序的語言,包括一組符號(hào)定義和相應(yīng)規(guī)則。分類:機(jī)器語言、匯編語言和高級(jí)語言2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.1.1程序設(shè)計(jì)語言(1)機(jī)器語言是二進(jìn)制代碼語言,能被計(jì)算機(jī)硬件直接識(shí)別并執(zhí)行。如計(jì)算2+3:

0010001100000010--將2送累加器A;前8位是操作碼--后8位是操作數(shù)

0000001100000011--將3與累加器A相加,結(jié)果放累加器A00000010--將累加器A中的數(shù)(即5)從總線輸出2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.1.1語言分類(2)匯編語言是用助記符代替操作碼、用地址符代替操作數(shù)的一種面向機(jī)器的低級(jí)語言。例如:

MOVA,2H將2送累加器AADDA,3H將3與累加器A相加,結(jié)果放累加器

OUTLBUS,A將累加器A中的數(shù)(即5)從總線輸出匯編概念:匯編語言程序必須使用匯編程序把它翻譯成機(jī)器語言后,才能被機(jī)器理解、執(zhí)行。2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.1.1語言分類(3)高級(jí)語言的表達(dá)方法接近于人的自然語言和數(shù)學(xué)表達(dá)式,不依賴于機(jī)器的特定屬性。例如:

Print2+3翻譯方式:編譯方式:使用編譯程序解釋方式:使用解釋程序2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.1.2算法與流程圖算法是計(jì)算機(jī)解決問題的方法和步驟,可以使用自然語言、流程圖、程序設(shè)計(jì)語言等描述工具來描述。一、流程圖流程圖是用一些幾何框圖、流程線和文字說明表示各種類型的操作。基本圖形和含義2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.1.2算法與流程圖二、使用流程圖描述算法示例例4.1將兩個(gè)變量X和Y的值互換。設(shè)X=5,Y=10用自然語言描述:

S1:將Y值存入中間變量Z:Y→ZS2:將X值存入變量Y中:X→YS3:將中間變量Z的值存入X中:Z→X用流程圖描述2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.1.2算法與流程圖例4.2求1+2+3+4+…+100用自然語言描述:S1:設(shè)累加和變量S,且0→S;計(jì)數(shù)變量i,且0→iS2:計(jì)算和S+i→S,并把計(jì)數(shù)變量增值i+1→i。S3:判斷:當(dāng)i≤100時(shí),返回第2步S2,再次求和;當(dāng)i>100時(shí),順序執(zhí)行下一步S4。S4:輸出結(jié)果,S為所求之和。用流程圖描述2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.1.2算法與流程圖三、算法評(píng)價(jià)標(biāo)準(zhǔn)⑴正確性:保證運(yùn)行結(jié)果正確⑵可讀性:良好的可讀性有助于保證算法的正確性??茖W(xué)、規(guī)范的程序設(shè)計(jì)方法(如結(jié)構(gòu)化方法和面向?qū)ο蠓椒ǎ┛商岣咚惴ǖ目勺x性。⑶通用性:一個(gè)好算法要盡可能通用,可適用于同類問題的求解。⑷高效率:效率包括時(shí)間和空間兩個(gè)方面,一個(gè)好的算法應(yīng)執(zhí)行速度快、占用內(nèi)存少??勺x性要優(yōu)先于效率,高效率處于次要地位。2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.1.3結(jié)構(gòu)化程序設(shè)計(jì)結(jié)構(gòu)化程序設(shè)計(jì)方法是指按照模塊化、層次化的方法來設(shè)計(jì)程序。其核心思想包括以下三點(diǎn):(1)程序模塊化:是指把一個(gè)大程序分解成若干個(gè)小程序(即模塊)。(2)語句結(jié)構(gòu)化:是指每個(gè)模塊用順序、選擇和循環(huán)三種流程結(jié)構(gòu)來實(shí)現(xiàn),如圖:2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.1.3結(jié)構(gòu)化程序設(shè)計(jì)(3)自頂向下、逐步求精的設(shè)計(jì)過程:一方面是指將一個(gè)復(fù)雜問題的求解過程分解和細(xì)化成由若干個(gè)模塊組成的層次結(jié)構(gòu);另一方面是指將每個(gè)模塊的功能逐步分解、細(xì)化為一系列的處理步驟,直至分解為三種基本控制結(jié)構(gòu)的組合。例4.3某班80名學(xué)生,求該班成績(jī)的不及格率。首先將任務(wù)“求不及格率”分解成2個(gè)子模塊“輸入成績(jī)”和“統(tǒng)計(jì)不及格人數(shù)”,如圖:2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.1.3結(jié)構(gòu)化程序設(shè)計(jì)然后使用流程圖分別描述這些模塊的實(shí)現(xiàn)算法,如圖4.7中的子圖B、C、D所示最后使用某種程序設(shè)計(jì)語言加以實(shí)現(xiàn)2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.2JavaScript語言及其環(huán)境4.2.1JavaScript簡(jiǎn)介JavaScript是一種解釋型的、基于對(duì)象的腳本語言。適用于創(chuàng)建短小的應(yīng)用程序。腳本宿主:執(zhí)行腳本的解釋器依賴于宿主特性,JavaScript腳本的用途有:動(dòng)態(tài)網(wǎng)頁編程:將JavaScript腳本嵌入網(wǎng)頁中,由Web瀏覽器解釋執(zhí)行。Web服務(wù)器編程:將JavaScript腳本嵌入ASP頁面中,由服務(wù)器端的ASP服務(wù)程序解釋執(zhí)行。自動(dòng)管理Windows系統(tǒng):將JavaScript腳本保存為獨(dú)立的腳本文件,由Windows腳本宿主解釋執(zhí)行,實(shí)現(xiàn)對(duì)Windows系統(tǒng)的自動(dòng)管理。2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.2.2Windows腳本宿主一、WSH簡(jiǎn)介Windows腳本宿主是Windows腳本的運(yùn)行環(huán)境,內(nèi)嵌在微軟的Windows操作系統(tǒng)中。其中,WindowsXP已內(nèi)置WSH5.6版。腳本引擎是某種腳本語言的解釋程序。安裝WSH時(shí)已自動(dòng)安裝JavaScript和VBScrip這兩種腳本引擎WSH可以執(zhí)行以文本文件格式獨(dú)立存在的Windows腳本,如.js、.vbs、.wsf、.wsh2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.2.2Windows腳本宿主二、編寫第一個(gè)JavaScript腳本程序例4.4使用記事本編寫一個(gè)JavaScript腳本程序,顯示文字“HelloWorld!”。操作步驟如下:⑴啟動(dòng)Windows記事本;⑵輸入以下代碼:

WScript.Echo("HelloWorld!");⑶將這段代碼保存在文件S0404.js中。2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.2.2Windows腳本宿主三、腳本的執(zhí)行方式(1)顯式啟動(dòng)WSH執(zhí)行腳本W(wǎng)SH有兩種形式,即窗口式WSH(WScript)和命令式WSH(CScript),分別對(duì)應(yīng)可執(zhí)行文件WScript.exe和CScript.exe。如:

wscriptE:\Scripts\S0404.js或

cscriptE:\Scripts\S0404.jsWScript和CScript對(duì)腳本的執(zhí)行效果基本相同,唯一區(qū)別在于輸出形式不同2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.2.2Windows腳本宿主三、腳本的執(zhí)行方式(2)隱式啟動(dòng)WSH執(zhí)行腳本W(wǎng)indows腳本文件也可以像普通可執(zhí)行文件那樣直接執(zhí)行:通過“我的電腦”打開腳本文件所在的文件夾,然后雙擊它。通過Windows“開始”菜單的“運(yùn)行”命令,鍵入腳本文件的完整路徑名。在命令提示符中鍵入腳本文件的完整路徑名。2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.2.3使用

Windows腳本幫助微軟在發(fā)布WSH5.6時(shí),也為腳本開發(fā)者提供了一個(gè)名為“MicrosoftWindows腳本技術(shù)”的說明文檔(CHM格式)。它提供了對(duì)JScript、VBScript、腳本運(yùn)行時(shí)庫和Windows腳本宿言等技術(shù)的詳細(xì)描述。還可以到微軟的腳本中心站點(diǎn)()獲取大量的腳本應(yīng)用技術(shù)及實(shí)例。2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.3JavaScript編程基礎(chǔ)本節(jié)介紹最基本的編程概念,即常量、變量、運(yùn)算符、表達(dá)式及其類型。4.3.1數(shù)據(jù)類型與常量(一)數(shù)值型(1)整數(shù)十進(jìn)制:使用0~9的數(shù)字序列表示。例如:25,+234,-998,085。八進(jìn)制:使用0~7的數(shù)字序列表示,并且首位必須是0。例如:0235,-065。十六進(jìn)制:使用0~9、A、B、C、D、E、F(或a、b、c、d、e、f)的數(shù)碼序列表示,并且前兩位必須是0X或0x。例如:0x235,-0XA8,0XEF。2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.3.1數(shù)據(jù)類型與常量(2)浮點(diǎn)數(shù)浮點(diǎn)數(shù)是可以有小數(shù)部分的數(shù)值。浮點(diǎn)數(shù)常量只能采用十進(jìn)制,表示形式有兩種:普通形式。由整數(shù)部分、小數(shù)點(diǎn)和小數(shù)部分組成,如:3.2、12.0、12.、.5、-1.8。指數(shù)形式。如5.34e5(表示5.34×105)、312E-4(表示312×10-4)。其中,e(或E)后面的指數(shù)是-324~308之間的整數(shù)。如23e4321和1.2e2.5等都是不合法的。另外,JavaScript用一個(gè)特殊的數(shù)值常量NaN(NotaNumber的縮寫,即“非數(shù)字”)表示無意義的數(shù)學(xué)運(yùn)算結(jié)果。2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.3.1數(shù)據(jù)類型與常量(二)字符串型字符串用于表示文本數(shù)據(jù),由0個(gè)或多個(gè)字符組成的序列組成。在表示字符串常量時(shí),必須為字符串首尾添加成對(duì)的雙引號(hào)“"”或單引號(hào)“'”,如:"Helloword!"'世界,您好!'"a"或'a''"Hi!"Isaid.'轉(zhuǎn)義字符是指以反斜杠“\”開頭,后跟一個(gè)或多個(gè)字符。4.3.1數(shù)據(jù)類型與常量(二)字符串型轉(zhuǎn)義字符是指以反斜杠“\”開頭,后跟一個(gè)或多個(gè)字符。

\b退格符\f換頁符

\n換行符\r回車符

\t制表符\'

單引號(hào)

\"

雙引號(hào)\\反斜杠例4.5

WScript.Echo("在字符串中,通過換碼字符\\,既可加入單引號(hào)\',也可以加入雙引號(hào)\"");2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.3.1數(shù)據(jù)類型與常量(三)布爾型布爾型(Boolean)就是邏輯型,只有兩個(gè)值:邏輯“真”和邏輯“假”,分別對(duì)應(yīng)于布爾常量true和false。(四)其他類型的常量null是空值常量,表示空的或不存在的對(duì)象引用。undefined是未定義值常量,表示變量還沒有賦值。2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.3.2

變量變量是程序中一個(gè)已命名的存儲(chǔ)單元。它有兩個(gè)基本特征,即變量名(標(biāo)識(shí)變量的名稱)和變量值(變量存儲(chǔ)的數(shù)據(jù))。另外,變量的值可以通過賦值發(fā)生變化;不過,在為變量賦予新值之前,變量一直保持它原先所存儲(chǔ)的數(shù)據(jù)。2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.3.2

變量(一)變量命名①變量名由以字母或下劃線開頭的字母A~Z或a~z、數(shù)字0~9和下劃線(_)構(gòu)成的字符序列組成。如:page1、_hg、X1_1②不能使用JavaScript保留字,如var。③JavaScript變量名是區(qū)分大小寫的。如n與N④為了提高程序的可讀性,要選擇易于記憶、有意義的變量名。如age⑤也可以使用中文字符命名JavaScript變量2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.3.2

變量(二)變量聲明使用關(guān)鍵字var聲明變量,格式如下:varvariablename;也可以同時(shí)聲明多個(gè)變量,如:varname,age,weight;(三)為變量賦值①方法一:聲明變量的同時(shí)也給出初始值。如:varname="張三";②方法二:使用賦值語句為變量賦值。如:age=20;2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.3.2

變量(四)讀取變量的值若要取一個(gè)變量的值,則可以把該變量名放在一個(gè)常量可以出現(xiàn)的位置。例4.6了解變量的基本用法和含義,以及注釋。varname; //聲明變量namename="張三"; //把字符串“張三”存儲(chǔ)到變量name中age=20; //變量age被隱式聲明,并賦值整數(shù)20/*以上語句聲明兩個(gè)變量name、age,并賦值;以下語句取出這兩個(gè)變量的值、并使用WScript.Echo方法輸出。*/WScript.Echo(name); //取出變量name的值,并輸出WScript.Echo("今年"); //輸出字符串“今年”WScript.Echo(age); //讀取變量age的值,并輸出WScript.Echo("歲"); //輸出字符串“歲”2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.3.2

變量(五)變量類型在JavaScript中,變量類型是指變量值所屬的數(shù)據(jù)類型。由于JavaScript是一種弱類型的編程語言,允許把任何類型的數(shù)據(jù)賦值給變量,因此JavaScript變量的類型是動(dòng)態(tài)的,只有在程序運(yùn)行時(shí)才能動(dòng)態(tài)確定。例4.7編寫以下JavaScript程序并使用CScript執(zhí)行,以了解變量類型的動(dòng)態(tài)性。varx=20;WScript.Echo(typeof(x));x="您好";WScript.Echo(typeof(x));x=true;WScript.Echo(typeof(x));2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.3.2

變量(六)簡(jiǎn)述變量的作用域變量的作用域是指變量起作用的范圍,在該范圍內(nèi)可引用該變量。在引入函數(shù)概念之前,本章大多數(shù)示例使用的都是全局變量,其作用范圍是同一個(gè)腳本文件,也就是說,只要定義了一個(gè)變量,那么在同一個(gè)腳本文件中的后續(xù)腳本就可以使用它。2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.3.3運(yùn)算符與表達(dá)式4.3.3.1基本概念運(yùn)算符是指定計(jì)算操作的符號(hào)(如+、-、*、\等)。其中,把被計(jì)算的值稱為操作數(shù)。依賴操作數(shù)的個(gè)數(shù),可將運(yùn)算符分為單目運(yùn)算符、雙目運(yùn)算符和三目運(yùn)算符。表達(dá)式是運(yùn)算符和操作數(shù)組合而成的式子,如123、x、x+100表達(dá)式具有值,這個(gè)值是對(duì)操作數(shù)實(shí)施運(yùn)算符所確定的計(jì)算后產(chǎn)生的結(jié)果值。例如,如果有定義“varx=123;”,那么123、x、x+100的值分別是數(shù)值123、123、223。2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.3.3運(yùn)算符與表達(dá)式4.3.3.2運(yùn)算符的優(yōu)先級(jí)在計(jì)算復(fù)雜表達(dá)式時(shí),先要計(jì)算子表達(dá)式的值,而計(jì)算這些子表達(dá)式的順序依賴于運(yùn)算符的優(yōu)先級(jí)(優(yōu)先級(jí)越高越先計(jì)算)。例盡量使用簡(jiǎn)單的表達(dá)式2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.3.3運(yùn)算符與表達(dá)式4.3.3.3運(yùn)算符的結(jié)合性當(dāng)表達(dá)式中連續(xù)出現(xiàn)的幾個(gè)運(yùn)算符優(yōu)先級(jí)相同時(shí),其運(yùn)算順序由結(jié)合性決定,分為:左結(jié)合:是指左邊的運(yùn)算符優(yōu)先計(jì)算,如

10-2-5右結(jié)合:是指右邊的運(yùn)算符優(yōu)先計(jì)算,如

x=y=1002023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.3.3運(yùn)算符與表達(dá)式4.3.3.4表達(dá)式中的類型轉(zhuǎn)換JavaScript會(huì)根據(jù)運(yùn)算符的特性和操作數(shù)的類型進(jìn)行隱式類型轉(zhuǎn)換。例4.8求100+300、100+"300"、"100"+300和"100"+"300"。例4.9求100-300、100-"300"、"100"-300和"100"-"300"。例4.10求true+100、true+"100"、true+false、true-false。例4.11求表達(dá)式"a"–100的值??刂品椒á艑?duì)于+運(yùn)算符:①如果有一個(gè)操作數(shù)為字符串,則為字符串連接運(yùn)算;②如果兩個(gè)操作數(shù)都不是字符串,則是算術(shù)加運(yùn)算。⑵對(duì)于其他運(yùn)算符,自動(dòng)把操作數(shù)轉(zhuǎn)換為相應(yīng)類型⑶使用函數(shù)parseInt()和parseFloat()顯式轉(zhuǎn)換2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.3.4JavaScript運(yùn)算符4.3.4.1算術(shù)運(yùn)算符JavaScript算術(shù)運(yùn)算符的操作數(shù)和計(jì)算結(jié)果都是數(shù)值型,包括+、-、*、/、%、++x、x++、--x、x--例

10%3//等于1//若有varx=100,y;y=++x;y=x++;y=--x;y=x--;例4.12

買東西付了$105,稅率為0.05,那么標(biāo)價(jià)是多少?一共又付了多少稅錢?2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.3.4JavaScript運(yùn)算符4.3.4.2關(guān)系運(yùn)算符關(guān)系運(yùn)算符(又稱比較運(yùn)算符)對(duì)操作數(shù)進(jìn)行比較,返回一個(gè)布爾值。包括<、<=、>、>=、==、!=、===、!==比較運(yùn)算符的操作數(shù)一般為數(shù)值型數(shù)據(jù),但也可以是其他類型的數(shù)據(jù):如果兩個(gè)操作數(shù)都是字符串,則進(jìn)行字符串比較運(yùn)算(比較字符的Unicode碼值)。例如:"a"=="a"、"ab"=="ab"、"a"<"ab"、"ab"<"a"、"xyz">"XYZ"、"x">"XYZ"如果至少有一個(gè)操作數(shù)不是字符串,就先將非數(shù)值型操作數(shù)轉(zhuǎn)換為數(shù)值,然后進(jìn)行數(shù)值比較運(yùn)算。例如:2>"10"、1>true、true>false、2=="0X2"、1==true、"true"==true2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.3.4JavaScript運(yùn)算符4.3.4.3邏輯運(yùn)算符邏輯運(yùn)算符的操作數(shù)和計(jì)算結(jié)果都是布爾值,包括&&、||、!例如,若有變量x,則判斷“x是屬于[10,99]之間的數(shù)值”的表達(dá)式寫成:

x>=10&&x<=99判斷“x是大于100或小于10的正數(shù)”的表達(dá)式寫成:

x>100||(x<10&&x>0)2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.3.4JavaScript運(yùn)算符4.3.4.4位操作運(yùn)算符位操作運(yùn)算符用于對(duì)整數(shù)的二進(jìn)制位進(jìn)行操作,計(jì)算結(jié)果仍為整數(shù),包括&、|、^、<<、>>、>>>例4.13

vara=4,b=7,c=2,result;WScript.Echo("a=4(0100),b=7(0111),c=2");result=a&b;WScript.Echo("a&b="+result);result=a|b;WScript.Echo("a|b="+result);result=a^b;WScript.Echo("a^b="+result);result=a<<c;WScript.Echo("a<<c="+result);result=a>>c;WScript.Echo("a>>c="+result);result=a>>>c;WScript.Echo("a>>>c="+result);result=-1>>2;WScript.Echo("-1>>2="+result);result=-1>>>2;WScript.Echo("-1>>>2="+result);2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.3.4JavaScript運(yùn)算符4.3.4.5賦值運(yùn)算符最基本的賦值運(yùn)算符是等于號(hào)(=),用于對(duì)變量進(jìn)行賦值。另外,一些運(yùn)算符也可以和等于號(hào)(=)聯(lián)合使用,構(gòu)成組合賦值運(yùn)算符,如=、+=、-=、*=、/=、%=、&=、|=、^=、<<=、>>=、>>>=2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.3.4JavaScript運(yùn)算符4.3.4.6條件運(yùn)算符條件運(yùn)算符格式如下:

condition?true_result:false_result如果condition為真,則表達(dá)式的值為true_result子表達(dá)式的值,否則為false_result子表達(dá)式的值。例4.14varage,status;age=20;status=(age>=18)?"已成年":"未成年";WScript.Echo("小李"+status);2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.3.4JavaScript運(yùn)算符4.3.4.7其他運(yùn)算符JavaScript還包含其他幾個(gè)特殊的運(yùn)算符,如.字段訪問[]數(shù)組下標(biāo)()函數(shù)調(diào)用,順序執(zhí)行兩個(gè)表達(dá)式Delete對(duì)象中刪除一個(gè)屬性,數(shù)組中刪除一個(gè)元素

New對(duì)像創(chuàng)建Typeof對(duì)像類型Void對(duì)表達(dá)式求值,并返回undefined2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.4

JavaScript流程控制JavaScript支持結(jié)構(gòu)化程序設(shè)計(jì)方法,即支持順序、選擇和循環(huán)這三種流程結(jié)構(gòu)。所謂順序結(jié)構(gòu)就是指構(gòu)成JavaScript程序的多條語句按照它們的書寫順序從頭到尾依次執(zhí)行在JavaScript中,每條語句應(yīng)該以一個(gè)分號(hào)(;)結(jié)束,不過有時(shí)沒有分號(hào)也不會(huì)出錯(cuò)。另外,JavaScrip允許把多條語句寫在同一行中,此時(shí),語句之間就一定要加上分號(hào)。2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.4.1宿主的輸入與輸出功能JavaScript語言沒有直接提供輸入與輸出的語句,只能借助腳本宿主對(duì)象所提供的有關(guān)方法進(jìn)行基本的輸入與輸出。(一)使用WScript對(duì)象的Echo方法命令格式:WScript.Echo([Arg1][,Arg2][,Arg3]...);例如:WScript.Echo("HelloWorld!");WScript.Echo("Hello","World!");WScript.Echo("1+2","=",1+2);2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.4.1宿主的輸入與輸出功能(二)使用WScript.Shell對(duì)象的Popup方法命令格式:iB=object.Popup(strText,[nSecondsToWait],[strTitle],[nType])例4.15varshell=WScript.CreateObject("WScript.Shell");varBtnCode=shell.Popup("您來過中大嗎?",8,"確認(rèn)框示例",1);varvisited=(BtnCode==1);varshow_text=visited?"您也認(rèn)為中大很美吧!":"歡迎您有機(jī)會(huì)來中大參觀!";WScript.Echo(show_text);2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.4.1宿主的輸入與輸出功能(三)使用WScript的標(biāo)準(zhǔn)輸入/輸出流對(duì)象StdIn、StdOutWScript的子對(duì)象StdIn、StdOut分別對(duì)應(yīng)于Windows命令符窗口中的標(biāo)準(zhǔn)輸入、輸出流,因此,這兩個(gè)對(duì)象只有用CScript執(zhí)行才有效。WScript.StdIn對(duì)象的ReadLine方法從標(biāo)準(zhǔn)輸入流中讀取一行文本;而WScript.StdOut對(duì)象的WriteLine方法則是向標(biāo)準(zhǔn)輸出流輸出一行文本。例4.16

WScript.StdOut.WriteLine("請(qǐng)輸入您的姓名:");varname=WScript.StdIn.ReadLine();WScript.StdOut.WriteLine("尊敬的"+name+":歡迎您進(jìn)入腳本世界!");2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.4.2選擇結(jié)構(gòu)JavaScript支持if語句和switch語句4.4.2.1if語句一、if…else語句if語句的基本形式是:if(判定條件)

語句1;

else

語句2;這種形式的if語句支持典型的二路選擇結(jié)構(gòu),也就是,根據(jù)某種情況的判斷,要么執(zhí)行語句A,要么執(zhí)行語句B。語句A和語句B不會(huì)同時(shí)執(zhí)行。2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.4.2選擇結(jié)構(gòu)例4.17分別輸入兩個(gè)數(shù)給變量x、y,然后求出這兩個(gè)變量中的最大值。varx,y,max;WScript.StdOut.WriteLine("x=");x=parseFloat(WScript.StdIn.ReadLine());WScript.StdOut.WriteLine("y=");y=parseFloat(WScript.StdIn.ReadLine());if(x>y)//若x>y,則x是最大值,否則y是最大值max=x;elsemax=y; WScript.StdOut.WriteLine("最大值是:"+max);2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.4.2選擇結(jié)構(gòu)二、沒有else部分的if語句if語句的簡(jiǎn)單形式:if(判定條件)語句;例4.18改寫例4.17,要求不使用else部分。編程思路:先假定x最大,如果假定不成立,那么y的值就最大。max=x; //先假定x的值最大if(max<y)max=y;WScript.StdOut.WriteLine("最大值是:"+max);好處:便于改為求3個(gè)甚至更多變量的最大值。max=x;if(max<y)max=y;if(max<z)max=z;…2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.4.2選擇結(jié)構(gòu)三、程序代碼的書寫格式問題建議格式:if(x>y)max=x;elsemax=y;或if(x>y)max=x;else//else與if對(duì)齊

max=y;不好格式:if(x>y)或if(x>y)max=x;elsemax=y;max=x;elsemax=y;注重程序可讀性2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.4.2選擇結(jié)構(gòu)四、使用語句組語句組:用大括號(hào)括起來的一組語句序列。在語法上,語句組相當(dāng)于單條語句。例4.19

求兩個(gè)變量的最大值和最小值...if(x>=y){//必須用花括號(hào){}括起以下兩條語句,使之成為語句組;否則將出錯(cuò)。

max=x;min=y;}else{//同樣必須用花括號(hào){}括起以下兩條語句,使之成為語句組

max=y;min=x;}WScript.StdOut.WriteLine("最大值是:"+max+";最小值是:"+min);2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.4.2選擇結(jié)構(gòu)五、論變量的使用變量的基本用途:存儲(chǔ)初始值和計(jì)算結(jié)果,以及中間變量例4.20

分別輸入兩個(gè)數(shù)給變量x、y,然后對(duì)這兩個(gè)數(shù)進(jìn)行由小到大的排序,使x、y分別存儲(chǔ)這兩個(gè)數(shù)中的最小值和最大值。if(x>y){//交換變量x,y的值

temp=x;x=y;y=temp;}WScript.StdOut.WriteLine("排序后,x="+x+";y="+y)2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.4.2選擇結(jié)構(gòu)六、if語句的嵌套可以把一個(gè)if語句當(dāng)成另外一個(gè)if語句的語句部分來用,這就是所謂的if語句的嵌套。例4.21

根據(jù)成績(jī)給出學(xué)生的考評(píng):如果成績(jī)>=85,就考評(píng)“優(yōu)”,否則如果成績(jī)>=60,就考評(píng)“及格”,否則考評(píng)為“不及格”。格式調(diào)整2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.4.2.2switch語句格式:switch(表達(dá)式){case表達(dá)式1:

語句1;[break;]case表達(dá)式2:

語句2;[break;]…default:

語句n+1;[break;]}2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.4.2.2switch語句例4.22常識(shí)問答,請(qǐng)選擇“中國的首都是哪個(gè)城市?A.沈陽B.廣州C.北京D.上?!眘witch(answer){case"a":case"A":WScript.StdOut.WriteLine("錯(cuò)!沈陽是中國東北部的大城市");break;case"b":case"B":WScript.StdOut.WriteLine("錯(cuò)!廣州是中國南部的大城市");break;...default:WScript.StdOut.WriteLine("選擇錯(cuò)誤!只能選填字母A、B、C或D");break;}2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.4.3循環(huán)結(jié)構(gòu)當(dāng)一些語句需要反復(fù)執(zhí)行時(shí),就要用到循環(huán)結(jié)構(gòu)的語句,即循環(huán)語句。JavaScript常用的循環(huán)語句主要是for語句、while語句以及do…while語句。2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.4.3.1for語句for語句格式:for(初值表達(dá)式;循環(huán)判定式;更新表達(dá)式)循環(huán)體語句;for語句執(zhí)行步驟:2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.4.3.1for語句例4.23

求1+2+3+…+100的累加和。編程思路:使用變量i作為循環(huán)變量,從1開始,每次加1,直至100;而sum作為累加器變量,累加i所遍歷的值,其效果就是計(jì)算1+2+3+…+100vari,sum=0;//sum是累加器變量,初值0for(i=1;i<=100;i++){//在每次循環(huán)時(shí),循環(huán)變量i的值依次是1,2,3,...,100sum+=i;//累加循環(huán)變量i所遍歷的值1,2,3,...,100}WScript.Echo("1+2+3+...+100=",sum);2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.4.3.1for語句例4.24

顯示十六進(jìn)制數(shù)的數(shù)碼0123…ABCDEF編程思路:使用一個(gè)循環(huán)變量(如i)遍歷十六進(jìn)制數(shù)的16個(gè)數(shù)碼for(i=0;i<16;i++)//i遍歷每個(gè)數(shù)碼{switch(i){//將十進(jìn)制數(shù)i轉(zhuǎn)換為對(duì)應(yīng)的十六進(jìn)制數(shù)碼

case10:digit="A";break;case11:digit="B";break;...default:digit=i;break;//0…9}digits=digits+digit;}WScript.Echo("十六進(jìn)制的16個(gè)數(shù)碼是:",digits);2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.4.3.2while語句while語句格式:while(循環(huán)判定式)循環(huán)體語句;while循環(huán)的執(zhí)行步驟如下:2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.4.3.2while語句例4.25使用while語句求1+2+3+…+100編程思路:vari,sum;i=1;sum=0;//i是循環(huán)變量,初值1;而sum是累加器變量,初值0while(i<=100){//在每次循環(huán)時(shí),循環(huán)變量i的值依次是1,2,3,...,100sum+=i;//累加循環(huán)變量i所遍歷的值1,2,3,...,100i++;}WScript.Echo("1+2+3+...+100=",sum);2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.4.3.3dowhile語句dowhile語句格式:

do循環(huán)體語句while(循環(huán)判定式);dowhile循環(huán)的執(zhí)行步驟如下:2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.4.3.3dowhile語句例4.26使用do…while語句求1+2+3+…+100編程思路:vari,sum;i=1;sum=0;//i是循環(huán)變量;sum是累加器變量do{//在每次循環(huán)時(shí),循環(huán)變量i的值依次是1,2,3,...,100sum+=i;//累加循環(huán)變量i所遍歷的值1,2,3,...,100i++;}while(i<=100);WScript.Echo("1+2+3+...+100=",sum);在形式上dowhile語句把判定式while(i<=100)放在語句后部,并且后面要加上分號(hào)“;”2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.4.3.3dowhile語句dowhile的特點(diǎn)是至少執(zhí)行一次循環(huán)體語句。例4.27

編寫一個(gè)二位整數(shù)相加的測(cè)試程序。要求程序隨機(jī)生成兩個(gè)二位整數(shù),提示用戶回答它們的相加結(jié)果,根據(jù)用戶回答給出“答對(duì)”或“答錯(cuò)”的提示,并且允許用戶決定是否繼續(xù)答題,如果繼續(xù)就再出題,否則就結(jié)束。編程思路:2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.4.3.3dowhile語句varx,y,result,answer,prompt,go_on_s,go_on;do{//先出題,再答題

x=Math.floor(Math.random()*90)+10;//隨機(jī)生成兩個(gè)二位整數(shù)

y=Math.floor(Math.random()*90)+10;result=x+y;//計(jì)算標(biāo)準(zhǔn)答案

WScript.StdOut.WriteLine(x+"+"+y+"=");answer=parseInt(WScript.StdIn.ReadLine());//輸入用戶的答案

prompt=(answer==result?"答對(duì)":"答錯(cuò)")+"!繼續(xù)答題嗎?(Y:繼續(xù);其他鍵退出)";WScript.StdOut.WriteLine(prompt);go_on_s=WScript.StdIn.ReadLine();//輸入用戶是否繼續(xù)答題的字符,但仍然要按回車鍵結(jié)束

go_on=(go_on_s=="Y"||go_on_s=="y");}while(go_on);2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.4.3.4使用break和continuebreak語句也經(jīng)常用在循環(huán)體中。當(dāng)程序執(zhí)行到循環(huán)體中的break語句時(shí)就結(jié)束整個(gè)循環(huán)語句。continue語句只能用在循環(huán)體中,其作用是跳過循環(huán)體中未執(zhí)行的語句,結(jié)束本次循環(huán),跳至求循環(huán)判定式,決定是否繼續(xù)循環(huán)。continue語句和break語句的區(qū)別是:continue只是結(jié)束本次循環(huán)體的執(zhí)行,而break則是結(jié)束整個(gè)循環(huán)語句的執(zhí)行。通常,continue語句和break語句在循環(huán)體中與if語句配合使用,從而控制循環(huán)。2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.4.3.4使用break和continue例4.28使用break語句實(shí)現(xiàn)例4.27varx,y,result,answer,prompt,go_on_s;while(true){//先出題,再答題x=Math.floor(Math.random()*90)+10;y=Math.floor(Math.random()*90)+10;result=x+y;//計(jì)算標(biāo)準(zhǔn)答案WScript.StdOut.WriteLine(x+"+"+y+"=");answer=parseInt(WScript.StdIn.ReadLine());prompt=(answer==result?"答對(duì)":"答錯(cuò)")+"!繼續(xù)答題嗎?(Y:繼續(xù);其他鍵退出)";WScript.StdOut.WriteLine(prompt);go_on_s=WScript.StdIn.ReadLine();if(go_on_s!="Y"&&go_on_s!="y")break;}2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.4.3.4使用break和continue例4.29累加用戶輸入的正數(shù),如果輸入字符“Q”,就不繼續(xù)輸入,并顯示累加結(jié)果。varinput,input_number,sum;for(sum=0;;)//sum作為累加器,初值為0{WScript.StdOut.WriteLine("sum="+sum+",\t請(qǐng)輸入新的累加數(shù)(輸入Q結(jié)束):");input=WScript.StdIn.ReadLine();if(input=="Q"||input=="q")break;//結(jié)束累加input_number=parseFloat(input);if(isNaN(input_number))continue;//不能累加NaNif(input_number<=0)continue;//不累加非正數(shù)sum+=input_number;//累加有效正數(shù)}WScript.StdOut.WriteLine("sum="+sum);2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.4.3.5循環(huán)的嵌套在一個(gè)循環(huán)語句的循環(huán)體中也可以包含另一個(gè)循環(huán)語句,這稱為循環(huán)的嵌套。例4.30

顯示一個(gè)“9×9乘法表”。編程思路:第j列顯示j與j~9依次相乘的結(jié)果。9×9乘法表的每一項(xiàng)其實(shí)就是“列號(hào)*行號(hào)”2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.4.3.5循環(huán)的嵌套vari,j,output=""for(i=1;i<=9;i++)//外循環(huán):行號(hào)i從1~9{for(j=1;j<=i;j++)//內(nèi)循環(huán):列號(hào)j從1~i{if(j>1)output+="\t";//使輸出各項(xiàng)上下對(duì)齊

output+=j+"*"+i+"="+j*i;//9×9乘法表的每一項(xiàng)其實(shí)就是“列號(hào)j*行號(hào)i”}output+="\n"http://換行}WScript.Echo(output);//一次性輸出“9×9乘法表”2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.5 調(diào)試JavaScript程序程序出錯(cuò)分為兩類:語法錯(cuò)誤;語義錯(cuò)誤。所謂調(diào)試程序就是排除程序中的錯(cuò)誤。2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.5.1詞法、語法和語義規(guī)則(1)詞法:組成合法語句的基本單元稱為單詞,構(gòu)成合法單詞的規(guī)則稱為詞法。如語句“x1=2”中的x1、=、2是合法單詞,而1x不是合法變量名。(2)語法:具有特定含義的符號(hào)串稱為語句,構(gòu)成合法語句的規(guī)則稱為語法。例如:語句“x=*2”符合詞法,但不符合語法規(guī)則。(3)語義:合法語句的實(shí)際含義稱為該語句的語義。對(duì)語義的理解是否準(zhǔn)確,直接影響程序的正確性和可靠性。例如:在JavaScript中,“x==2”表示判斷變量x與數(shù)值2是否相等,而“x=2”卻表示將2賦值給x。2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.5.2排除語法錯(cuò)誤語法錯(cuò)誤是指寫出的程序代碼不符合語法規(guī)則,比如,變量名使用關(guān)鍵字、括號(hào)不匹配、if語句中判定條件式?jīng)]有用圓括號(hào)括起來,等等。Windows腳本宿主在執(zhí)行含有語法錯(cuò)誤的腳本程序時(shí),會(huì)提示出現(xiàn)了什么錯(cuò)誤以及出錯(cuò)位置。例4.31

以下程序有語法錯(cuò)誤,請(qǐng)排除。...ifx>y//將出錯(cuò),if判定條件式必須用圓括號(hào)括起來

max=x;elsemax=y; WScript.Echo("最大值是=",max);2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.5.3排除語義錯(cuò)誤語義錯(cuò)誤是指編寫的程序代碼符合語法規(guī)則,能夠正常執(zhí)行,但是執(zhí)行的結(jié)果不符合要求。導(dǎo)致語義錯(cuò)誤的常見情況是對(duì)流程控制語句使用不當(dāng)或者對(duì)變量賦予了一個(gè)不恰當(dāng)?shù)闹?。?duì)于這種情況,可以使用專業(yè)的調(diào)試工具,通過跟蹤程序的一步步執(zhí)行并且查看執(zhí)行中變量值的變化情況來排除程序中的語義錯(cuò)誤。2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.5.4使用Microsoft腳本編輯器調(diào)試程序Microsoft腳本編輯器是一種專業(yè)化的腳本編輯和調(diào)試工具,是MicrosoftOffice的可選組件之一。使用示例例4.32第一步:在調(diào)試器中執(zhí)行腳本

CScriptE:\Scripts\S0432.js//X第二步:設(shè)置斷點(diǎn)、執(zhí)行到斷點(diǎn)第三步:逐語句執(zhí)行,觀察變量x、y值的變化第四步:找到問題后,結(jié)束本次調(diào)試2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.6

JavaScript函數(shù)4.6.1什么是函數(shù)函數(shù)是編制程序時(shí)定義的一個(gè)語句序列,其作用是執(zhí)行一項(xiàng)單一任務(wù)或一系列任務(wù)。例如,一個(gè)函數(shù)可能是輸出一行文本,也可能是計(jì)算一個(gè)數(shù)值并把它返回給主程序。使用函數(shù)的一個(gè)好處在于它的可重用性。2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.6.2使用預(yù)定義函數(shù)所謂預(yù)定義函數(shù)是指不必自己定義、直接就可使用的函數(shù)。一、eval()函數(shù):計(jì)算在字符串中的表達(dá)式的值例4.33求用戶輸入的任意常量表達(dá)式的值。二、isNaN()函數(shù)isNaN()函數(shù)用于確定一個(gè)變量是否是NaN。2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.6.2使用預(yù)定義函數(shù)三、parseFloat()函數(shù)parseFloat()函數(shù)將字符串轉(zhuǎn)換為浮點(diǎn)數(shù)。如:parseFloat("123.45")\\123.45parseFloat("123.45abc")\\123.45parseFloat("abc123.45")\\NaNparseFloat(true)\\NaN四、parseInt()函數(shù)parseInt()函數(shù)與parseFloat()類似parseInt("123.45")\\123parseInt("123.45abc")\\123parseInt("abc123")\\NaNparseInt(true)\\NaN2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.6.3函數(shù)定義與函數(shù)調(diào)用4.6.3.1函數(shù)定義定義格式:function自定義函數(shù)名(){

函數(shù)體}例4.34

定義一個(gè)函數(shù)Hello(),這個(gè)函數(shù)的功能是輸出文字“您好!”。實(shí)現(xiàn)程序如下:functionHello(){//自定義無參數(shù)的函數(shù)

WScript.Echo("您好!");}2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.6.3函數(shù)定義與函數(shù)調(diào)用4.6.3.2函數(shù)調(diào)用與調(diào)用預(yù)定義函數(shù)一樣,對(duì)自定義函數(shù)的調(diào)用形式也是“函數(shù)名()”例4.35

改寫例4.34,通過函數(shù)調(diào)用實(shí)現(xiàn)文字“您好!”的輸出。...Hello();調(diào)用流程2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.6.3函數(shù)定義與函數(shù)調(diào)用4.6.3.2函數(shù)調(diào)用例4.35

改寫例4.34,通過函數(shù)調(diào)用實(shí)現(xiàn)文字“您好!”的輸出。functionHello(){//自定義函數(shù),只有通過函數(shù)調(diào)用才能使該函數(shù)起作用

WScript.Echo("您好!");}Hello();//對(duì)自定義函數(shù)Hello()的調(diào)用,從而輸出文字“您好!”2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.6.4函數(shù)參數(shù)的使用4.6.4.1給函數(shù)添加參數(shù)定義函數(shù)的完整格式:function自定義函數(shù)名(形參1,形參2,...){

函數(shù)體}參數(shù)作用:為被調(diào)用的函數(shù)傳遞一個(gè)或多個(gè)值定義函數(shù)時(shí)指定的參數(shù)稱為形式參數(shù)(形參);調(diào)用函數(shù)時(shí)為形參實(shí)際傳遞的值稱為實(shí)際參數(shù)(實(shí)參)調(diào)用形式:函數(shù)名(實(shí)參1,實(shí)參2,...)2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.6.4函數(shù)參數(shù)的使用例4.36

定義一個(gè)含有參數(shù)的函數(shù)Show(text),它輸出參數(shù)text中的字符串。實(shí)現(xiàn)程序如下:functionShow(text){WScript.Echo(text);}Show("JavaScript真棒!");2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.6.4函數(shù)參數(shù)的使用4.6.4.2使用多個(gè)參數(shù)當(dāng)使用多個(gè)參數(shù)時(shí),函數(shù)調(diào)用的各個(gè)實(shí)參按照其排列的先后順序依次傳遞給函數(shù)定義中的形參。例4.37定義一個(gè)多參數(shù)函數(shù)Calculate(x,y,op),用于顯示對(duì)形參x、y進(jìn)行形參op指定的運(yùn)算結(jié)果。functionCalculate(x,y,op){//對(duì)形參x,y進(jìn)行形參op指定的運(yùn)算(如+、-、*、/等),并顯示

varexp,result;exp=x+op+y;result=eval(exp);WScript.Echo(x,op,y,"=",result);}Calculate(3,2,"+");Calculate(4,5,"-");Calculate(6,7,"*");Calculate(8,9,"/");2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.6.5使用函數(shù)返回值4.6.5.1給函數(shù)添加返回值方法:

return表達(dá)式;例4.38

編寫函數(shù)Max(x,y):functionMax(x,y){//求x,y中的最大值

varmax;if(x>y)max=x;elsemax=y;returnmax;//結(jié)束函數(shù),并把變量max的值作為函數(shù)的返回值}varm;m=Max(100,200);WScript.Echo("Max(100,200)=",m);2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.6.5使用函數(shù)返回值4.6.5.2區(qū)分函數(shù)和過程只返回undefined的函數(shù)稱為過程。過程和函數(shù)的一個(gè)顯著區(qū)別是:過程調(diào)用單獨(dú)構(gòu)成一條語句;而函數(shù)調(diào)用出現(xiàn)在表達(dá)式中。例4.39

如果一個(gè)正整數(shù)只能被1和自身整除,那么這個(gè)數(shù)就是素?cái)?shù)。求出1~100之間的所有素?cái)?shù)。編程思路:如果p能夠被2、3、4、…p-1之中的任何數(shù)整除,那么p就不是一個(gè)素?cái)?shù),否則就是素?cái)?shù)2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.6.5使用函數(shù)返回值例4.39:functionsum1_n(n){//求1+2+...+n的累加和

varsum=0,i;for(i=1;i<=n;i++)sum+=i;returnsum;}functionsum_all(n){//求1+(1+2)+(1+2+3)+...+(1+2+...+n)varsum=0,i;for(i=1;i<=n;i++){//累加sum1_n(1)+sum1_n(2)+...+sum1_n(n)sum+=sum1_n(i);//調(diào)用函數(shù)sum1_n(i)求1~i的累加和

}returnsum;}varn,sum;WScript.StdOut.WriteLine("n=");n=parseInt(WScript.StdIn.ReadLine());sum=sum_all(n);//1至1~n的累加和的累加和WScript.StdOut.WriteLine(sum);2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.6.6函數(shù)的嵌套調(diào)用4.6.6.1函數(shù)嵌套調(diào)用的形式在一個(gè)函數(shù)定義的函數(shù)體語句中出現(xiàn)對(duì)另一個(gè)函數(shù)的調(diào)用,這就是函數(shù)嵌套調(diào)用,如圖4.41所示。當(dāng)一個(gè)函數(shù)調(diào)用另一個(gè)函數(shù)時(shí),應(yīng)該在定義調(diào)用函數(shù)之前先定義被調(diào)用函數(shù)。2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.6.6函數(shù)的嵌套調(diào)用例4.40

輸入1個(gè)數(shù)n,求1+(1+2)+(1+2+3)+…+(1+2+…+n)的值。編程思路:引入只求1~n的累加和函數(shù)sum1_n(n),那么1到1~n的累加和分別是sum1_n(1)、sum1_n(2)、sum1_n(3)…sum1_n(n),最終將這些累加和加起來就可求解。2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.6.6函數(shù)的嵌套調(diào)用例4.40

functionsum1_n(n){//求1+2+...+n的累加和

varsum=0,i;for(i=1;i<=n;i++)sum+=i;returnsum;}functionsum_all(n){//求1+(1+2)+(1+2+3)+...+(1+2+...+n)varsum=0,i;for(i=1;i<=n;i++){//累加sum1_n(1)+sum1_n(2)+...+sum1_n(n)sum+=sum1_n(i);//調(diào)用函數(shù)sum1_n(i)求1~i的累加和

}returnsum;}varn,sum;WScript.StdOut.WriteLine("n=");n=parseInt(WScript.StdIn.ReadLine());sum=sum_all(n);//1至1~n的累加和的累加和WScript.StdOut.WriteLine(sum);2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.6.6函數(shù)的嵌套調(diào)用4.6.6.2解決嵌套調(diào)用引起的效率問題當(dāng)使用多個(gè)函數(shù)時(shí),可能會(huì)引起運(yùn)行效率問題例4.41使用單重循環(huán)求

1+(1+2)+(1+2+3)+…+(1+2+…+n)編程思路:引入另一個(gè)累加器變量(如total),使該變量在每次循環(huán)時(shí)累加變量sum的值例4.41和例4.40的實(shí)現(xiàn)程序都能正確求解,其主要差異是運(yùn)行速度。如果輸入一個(gè)比較大的數(shù)(如n=10000),那么例4.41將立刻算出結(jié)果;而例4.40則運(yùn)行時(shí)間較長(zhǎng)初學(xué)編程時(shí),要優(yōu)先考慮程序的可讀性2023/2/2中山大學(xué)計(jì)算機(jī)科學(xué)系4.6.6函數(shù)的嵌套調(diào)用例4.41

functionsum_all(n){//求1+(1+2)+(1+2+3)+...+(1+2+...+n)vari,sum,total;sum=total=0;//累加器變量初值0for(i=1;i<=n;i++){sum+=i;//變量sum遍歷每項(xiàng)累加和,即1、(1+2)、(1+2+3)、...、(1+2+...+n)total+=sum;//累加變量sum遍歷的每項(xiàng)累加和

}returntotal;}varn,sum;WScript.StdOut.WriteLine("n=");n=

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論