某知名出行打車服務(wù)商PHP工程師面試筆試真題18_第1頁(yè)
某知名出行打車服務(wù)商PHP工程師面試筆試真題18_第2頁(yè)
某知名出行打車服務(wù)商PHP工程師面試筆試真題18_第3頁(yè)
某知名出行打車服務(wù)商PHP工程師面試筆試真題18_第4頁(yè)
某知名出行打車服務(wù)商PHP工程師面試筆試真題18_第5頁(yè)
已閱讀5頁(yè),還剩7頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

某知名出行打車服務(wù)商PHP工程師面試筆試真題18一、選擇題1.

如果等式12*25=311成立,那么使用的是______進(jìn)制運(yùn)算。A.七B.八C.九D.十一正確答案:C[解析]當(dāng)進(jìn)行乘法(江南博哥)運(yùn)算時(shí),無(wú)論是什么進(jìn)制的數(shù)進(jìn)行運(yùn)算,其基本方法都是相同的,以十進(jìn)制數(shù)的計(jì)算為例:2*5=10。如果是七進(jìn)制,那么運(yùn)算結(jié)果最后一位一定是10%7=3,相乘后進(jìn)位值為10/7=1。同理,如果是八進(jìn)制,相乘結(jié)果最后一位一定等于10%8=2。如果是九進(jìn)制,最后一位一定是10%9=1。如果是十一進(jìn)制,最后一位一定是10%11=A(類似于十六進(jìn)制中,使用A表示數(shù)字10)。

本題中,計(jì)算結(jié)果為311,最后一位為1,可以排除選項(xiàng)A選項(xiàng)B和選項(xiàng)D,只有選項(xiàng)C滿足題意。

所以,本題的答案為C。

2.

下面說(shuō)法錯(cuò)誤的是______A.如果一個(gè)類的成員前面有訪問(wèn)修飾符private,那么這些成員不能被繼承,在類的外部不可見(jiàn)。但如果成員被指定為protected和public,那么可以被繼承,在類的外部也是可見(jiàn)的。B.PHP5中,final關(guān)鍵字可以禁止繼承和重載C.PHP5中,析構(gòu)函數(shù)的名稱是__destruct(),并且不能有任何參數(shù)D.繼承接口的類必須實(shí)現(xiàn)接口中聲明的所有方法,在PHP中,如果繼承接口的類沒(méi)有實(shí)現(xiàn)接口中的方法,那么將會(huì)產(chǎn)生一個(gè)致命錯(cuò)誤正確答案:A[解析]對(duì)于選項(xiàng)A,private修飾的成員是不可以被繼承的,protected的成員是可以被繼承的,但是在外部不可見(jiàn)。選項(xiàng)A說(shuō)法錯(cuò)誤,選項(xiàng)A正確。

對(duì)于選項(xiàng)B,final關(guān)鍵字的方法是禁止被繼承和重載的。選項(xiàng)B說(shuō)法正確,選項(xiàng)B錯(cuò)誤。

對(duì)于選項(xiàng)C,析構(gòu)函數(shù)不能有參數(shù)。選項(xiàng)C說(shuō)法正確,選項(xiàng)C錯(cuò)誤。

對(duì)于選項(xiàng)D,繼承接口的類沒(méi)有實(shí)現(xiàn)接口中的方法是會(huì)產(chǎn)生錯(cuò)誤的。選項(xiàng)D說(shuō)法正確,選項(xiàng)D錯(cuò)誤。

所以,本題的答案為A。

3.

考慮如下腳本:運(yùn)行時(shí),盡管文件test.txt已經(jīng)被用unlink(()函數(shù)刪除,腳本仍然輸出1,1。在腳本的最后添加什么函數(shù)才能解決這個(gè)問(wèn)題?______

<?php

$f=fopen("test.txt","w");

fwrite($f,"test");

fclose($f);

echo(int)file_exists("test.txt").',';

unlink("c:\\test.txt");

echo(int)file_exists("test.txt");

?>A.clearstatcache()B.fflush()C.ob_flush()D.touch()正確答案:A[解析]腳本仍然輸出1,1,是因?yàn)镻HP會(huì)緩存某些文件系統(tǒng)函數(shù)的返回值,例如file_exists()函數(shù),為了提高腳本處理重復(fù)操作時(shí)的效率,所以可以使用clearstatcache()函數(shù)清理緩存,防止unlink()刪除文件后仍然輸出1,1。選項(xiàng)A正確。

fflush()函數(shù)是將緩沖內(nèi)容輸出到文件,ob_flush()函數(shù)是輸出緩沖區(qū)中的內(nèi)容,touch()函數(shù)是設(shè)置指定文件的訪問(wèn)和修改時(shí)間。選項(xiàng)B選項(xiàng)C選項(xiàng)D錯(cuò)誤。

所以,本題的答案為A。

4.

在PHP的“安全模式”下,有助于降低安全風(fēng)險(xiǎn)的是______A.限制shell命令的執(zhí)行B.限制對(duì)系統(tǒng)環(huán)境變量的訪問(wèn)C.限制PHP的文件包含目錄D.限制允許對(duì)數(shù)據(jù)庫(kù)進(jìn)行的操作E.以上全部正確答案:ABC[解析]在安全模式下,增加了許多附加的安全驗(yàn)證,從而降低了安全隱患。但是在安全模式下無(wú)法執(zhí)行系統(tǒng)命令、訪問(wèn)環(huán)境變量和判斷文件引入是否安全。正是這些限制使得安全模式下運(yùn)行的代碼有更小的風(fēng)險(xiǎn)。選項(xiàng)A選項(xiàng)B選項(xiàng)C正確。

所以,本題的答案為ABC。

5.

PHP的mysql系列函數(shù)中常用的遍歷數(shù)據(jù)的函數(shù)是______A.mysql_fetch_row,mysql_fetch_assoc,mysql_affetced_rowsB.mysql_fecth_row,mysql_fecth_assoc,mysql_affetced_rowsC.mysql_fetch_rows,mysql_fetch_array,mysql_fetch_assocD.mysql_fecth_row,mysql_fecth_array,mysql_fecth_assoc正確答案:D[解析]mysql系列函數(shù)常用的遍歷數(shù)據(jù)函數(shù)有mysql_fetch_row、mysql_fetch_array、mysql_fetch_assoc等三個(gè)函數(shù),但不存在mysql_fetch_rows。

所以,本題的答案為D。

6.

使用mysqli擴(kuò)展可以很方便地完成數(shù)據(jù)庫(kù)的事務(wù)處理功能,下面對(duì)數(shù)據(jù)庫(kù)事務(wù)處理的描述中,不正確的是______A.MySQL目前只有InnoDB和BDB兩個(gè)數(shù)據(jù)表類型才支持事務(wù)B.MySQL是以自動(dòng)提交(autocommit)模式運(yùn)行的,必須執(zhí)行mysqli對(duì)象中的autocommit(0)方法關(guān)閉MySQL事務(wù)機(jī)制的自動(dòng)提交模式C.調(diào)用mysqli類對(duì)象的commit()方法提交事務(wù)D.調(diào)用mysqli類對(duì)象的rollback()方法撤銷事務(wù),并開(kāi)啟自動(dòng)提交模式運(yùn)行正確答案:D[解析]mysqli類對(duì)象的rollbackback()方法,只是撤銷從上一次提交commit()后不成功的事務(wù),并不會(huì)開(kāi)啟自動(dòng)提交模式。選項(xiàng)D正確。

所以,本題的答案為D。

7.

以下程序的功能是______

<?php

$a=array_sum(explode('',microtime()));

for($i=0;$i<10000;$i++);

$b=array_sum(explode('',microtime()));

echo$b-$a;

?>A.測(cè)算for循環(huán)的執(zhí)行時(shí)間B.測(cè)定服務(wù)器的時(shí)鐘頻率C.計(jì)算操作系統(tǒng)的硬件時(shí)鐘頻率與軟件時(shí)鐘頻率的差D.測(cè)算for循環(huán)、一個(gè)array_sum()函數(shù)與一個(gè)microtime()的總執(zhí)行時(shí)間E.測(cè)算for循環(huán)、兩個(gè)array_sum()函數(shù)與兩個(gè)microtime()的總執(zhí)行時(shí)間正確答案:A[解析]代碼array_sum(explode('',microtime()))求得的是時(shí)間戳和微妙數(shù)的一個(gè)和,在執(zhí)行循環(huán)前的$a得到的是執(zhí)行循環(huán)前的開(kāi)始時(shí)間點(diǎn),$b得到的是每次循環(huán)的運(yùn)行時(shí)間點(diǎn)。所以每次循環(huán)后的$b的值都是執(zhí)行一次循環(huán)后的總時(shí)間點(diǎn),直到循環(huán)結(jié)束,$b得到的是執(zhí)行10000次的總執(zhí)行時(shí)間點(diǎn),最后輸出的$b減去$a的值是for循環(huán)的總執(zhí)行時(shí)間。選項(xiàng)A正確。

所以,本題的答案為A。

8.

以下有關(guān)PHP字符串的說(shuō)法中,不正確的是______A.如果一個(gè)腳本的編碼是ISO-8859-1,則其中的字符串也會(huì)被編碼為ISO-8859-1B.PHP的字符串在內(nèi)部是字節(jié)組成的數(shù)組,用花括號(hào)訪問(wèn)或修改字符串對(duì)多字節(jié)字符集很不安全C.substr()、strpos()、strlen()、htmlentities()處理字符串時(shí)依據(jù)的編碼方式是相同的D.一個(gè)布爾值Boolean的true被轉(zhuǎn)換成string的“1”,false被轉(zhuǎn)換成空字符串正確答案:C[解析]substr在處理多字節(jié)字符的時(shí)候可能會(huì)出現(xiàn)亂碼。

所以,本題的答案為C。

9.

以下程序如何用三元操作替代?______

if($a<10){

if($b>11){

if($c==10&&$d!=$c){

$x=0;

}else{

$x=1;

}

}

}A.$x=($a<10||$b>11||$c==1&&$d!=$c)?0:1;B.$x=($a<10||$b>11||($c==1&&$d!=$c))?0:1;C.$x=(($a<10&&$b>11)||($c==1&&$d!=$c))?0:1;D.$x=($a<10&&$b>11&&$c==1&&$d!=$c)?1:0;E.以上都不對(duì)正確答案:E[解析]由于需要$a<10為真才能執(zhí)行內(nèi)部語(yǔ)句,而$b>11也需要為真才能執(zhí)行下一個(gè)條件,所以$a<10需要與$b>11同時(shí)為真才能執(zhí)行到if($c==10&&$d!=$c),才會(huì)執(zhí)行$x=0或$x=1,如果它們其中有一個(gè)條件為假,那么都不會(huì)執(zhí)行得到$x=0或$x=1,因此可以改寫(xiě)用($a<10&&$b>11)?($c==10&&$d!=$c)?$x=0:$x=1:"的三元運(yùn)算符替代。選項(xiàng)E正確。

所以,本題的答案為E。

10.

下列有關(guān)關(guān)聯(lián)數(shù)組和索引數(shù)組的描述中,正確的是______A.索引數(shù)組是以字符串作為鍵名的數(shù)組B.關(guān)聯(lián)數(shù)組是以數(shù)字作為數(shù)組的鍵名的數(shù)組C.關(guān)聯(lián)數(shù)組是以字符串作為鍵值的數(shù)組D.索引數(shù)組是以數(shù)字作為數(shù)組的鍵名的數(shù)組正確答案:D[解析]索引數(shù)組是以數(shù)字作為鍵名的數(shù)組,關(guān)聯(lián)數(shù)組是以字符串作為鍵名的數(shù)組。但是關(guān)聯(lián)數(shù)組的值不一定是字符串。選項(xiàng)D正確。

所以,本題的答案為D。

二、填空題1.

前置++和后置++的區(qū)別是______。正確答案:變量前置++是先將變量增加1,然后將值賦值給原來(lái)的變量;變量后置++是先返回變量的當(dāng)前值,然后將變量的當(dāng)前值增加1。

2.

$array['anykey']和$array[anykey]的區(qū)別是______。正確答案:數(shù)組中鍵名一般由單引號(hào)指明鍵名為字符串,如果沒(méi)有單引號(hào),那么系統(tǒng)首先認(rèn)為鍵名為常量,如果發(fā)現(xiàn)沒(méi)有定義該常量值,那么認(rèn)為該值為字符串并且會(huì)報(bào)NOTICE錯(cuò)誤,但這樣執(zhí)行效率較低。它們的根本區(qū)別在于編譯時(shí)系統(tǒng)認(rèn)為'anykey'是字符串,而anykey可能是常量或者字符串。

3.

PHP中獲取圖像尺寸大小的方法是______。正確答案:getimagesize()、Imagesx()、Imagesy()??梢允褂胓etimagesize()獲取圖片的大小及相關(guān)信息,使用方法為getimagesize(圖片路徑),如果成功獲取,那么返回?cái)?shù)組,如果不成功,那么返回false。

2)可以使用Imagesx()函數(shù)用于獲取圖像的寬度,單位為像素,返回值為整型。

3)可以使用Imagesy()函數(shù)用于獲取圖像的高度,單位為像素,返回值為整型。

4.

varchar和char的區(qū)別是______。正確答案:varchar與char的區(qū)別是char是固定長(zhǎng)度的字符類型,分配多少空間,就占用多少空間。varchar是可變長(zhǎng)度的字符類型,內(nèi)容有多大就占用多大的空間,比較節(jié)省空間。查找效率上char比varchar快,因?yàn)関archar是非定長(zhǎng),必須先查找長(zhǎng)度,然后進(jìn)行數(shù)據(jù)的提取,由于它比char定長(zhǎng)類型多了一個(gè)步驟,所以效率比char低。

5.

在MySQL中提取數(shù)據(jù)時(shí),用______來(lái)刪除重復(fù)的記錄。正確答案:DISTINCT。[解析]DISTINCT關(guān)鍵字可以對(duì)數(shù)據(jù)過(guò)濾重復(fù)記錄,只返回唯一的、不同值的數(shù)據(jù)。

三、簡(jiǎn)答題1.

MySQL的索引都有哪些?正確答案:MySQL的索引如下:

1)唯一索引。唯一索引避免了表中存在重復(fù)的數(shù)據(jù),提高了檢索速度。創(chuàng)建唯一索引的目的是避免表中插入重復(fù)的數(shù)據(jù),從而提高表的查詢速度。

2)普通索引。普通索引允許被索引的數(shù)據(jù)列包含重復(fù)的值。優(yōu)點(diǎn)如下:①簡(jiǎn)化MySQL對(duì)這個(gè)索引的管理工作,使工作更有效率;②MySQL會(huì)對(duì)新插入的數(shù)據(jù)自動(dòng)檢測(cè)是否有重復(fù)的值。

3)主索引。即主鍵索引,關(guān)鍵字PRIMARY。

4)外鍵索引。外鍵約束。

5)復(fù)合索引。索引可以覆蓋多列數(shù)據(jù),例如,INDEX(columnA,columnB)。這種索引的特點(diǎn)是MySQL可以有選擇地使用索引,例如,INDEX(A,B,C)可以當(dāng)作A或(A,B)的索引來(lái)使用,但不能當(dāng)作B或(B,C)來(lái)使用。

6)索引的長(zhǎng)度。在為char和varchar類型的數(shù)據(jù)列定義索引時(shí),可以把索引的長(zhǎng)度限制為一個(gè)給定的字符個(gè)數(shù),這個(gè)數(shù)字必須小于這個(gè)字段所允許的最大字符個(gè)數(shù)。

7)全文索引。針對(duì)內(nèi)容開(kāi)頭的字符進(jìn)行檢索操作,如果檢索的內(nèi)容由多個(gè)字段構(gòu)成,數(shù)據(jù)量很大,那么全文索引是必要的。注意,MySQL的InnoDB引擎不支持全文搜索索引。

2.

正則表達(dá)式是什么?PHP中有哪些常用的與正則相關(guān)的函數(shù)?請(qǐng)寫(xiě)出一個(gè)email的正則表達(dá)式、中國(guó)手機(jī)號(hào)碼和座機(jī)號(hào)碼的正則表達(dá)式?正確答案:正則表達(dá)式是一種字符串匹配的模式,可以判斷一個(gè)字符串的組成是否滿足某種特定的模式,將匹配的子串替換或者從某個(gè)串中取出符合某個(gè)條件的子串等。

常用的正則函數(shù)有:

1)preg_match()函數(shù)用于通過(guò)正則表達(dá)式匹配字符串。

2)preg_quote()函數(shù)可以轉(zhuǎn)義正則表達(dá)式字符。

3)preg_replace()函數(shù)用于執(zhí)行正則表達(dá)式的搜索和替換。

4)preg_replace_callback()函數(shù)可以執(zhí)行一個(gè)正則表達(dá)式搜索和使用回調(diào)替換。

5)preg_split()函數(shù)可以通過(guò)一個(gè)正則表達(dá)式分隔字符串。

email擁有固定的格式,可以根據(jù)這個(gè)格式匹配正確的email,它的正則表達(dá)式為/^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/。

中國(guó)手機(jī)號(hào)碼的正則表達(dá)式如下:

/^1[3-5,8]{1}[0-9]{9)$/

座機(jī)號(hào)碼的驗(yàn)證的正則表達(dá)式如下:

/^([0,9]{3,4}-)?[0-9]{7,8}$/

3.

PHP的魔術(shù)方法包含哪些(越多越好)?在什么情況下被自動(dòng)調(diào)用?正確答案:PHP可用的魔術(shù)方法會(huì)在特定情況下被自動(dòng)調(diào)用,但是前提是特定的條件被觸發(fā),并且這些魔術(shù)方法可以在類中作為方法。

PHP的魔術(shù)方法有:

1)__construct()。構(gòu)造函數(shù),創(chuàng)建對(duì)象時(shí)自動(dòng)被調(diào)用。

2)__destruct()。析構(gòu)函數(shù),對(duì)象的所有引用都被刪除或者當(dāng)對(duì)象被顯式銷毀時(shí)執(zhí)行。

3)__clone()。復(fù)制函數(shù),調(diào)用clone方法時(shí)自動(dòng)調(diào)用。

4)__set()。當(dāng)程序試圖寫(xiě)入一個(gè)不存在或不可見(jiàn)的成員變量時(shí)自動(dòng)調(diào)用。該函數(shù)在類中定義時(shí)必須有兩個(gè)參數(shù),即變量名和變量值。

5)__get()。當(dāng)程序調(diào)用一個(gè)未定義或不可見(jiàn)的成員變量時(shí)自動(dòng)調(diào)用__get()來(lái)讀取變量值。定義時(shí)必須有一個(gè)參數(shù),即變量名。

6)__call()。當(dāng)程序試圖調(diào)用不存在或不可見(jiàn)的成員方法時(shí),自動(dòng)調(diào)用__call()。__call()方法一般用于監(jiān)視錯(cuò)誤的方法調(diào)用。為了避免當(dāng)調(diào)用的方法不存在時(shí)產(chǎn)生錯(cuò)誤,可以使用__call()方法來(lái)避免。該方法包含兩個(gè)參數(shù),即方法名和方法參數(shù)。其中方法參數(shù)以數(shù)組形式存在。

7)__sleep()。使用serialize()實(shí)現(xiàn)序列化對(duì)象時(shí),先調(diào)用該方法,可以用來(lái)清除對(duì)象并返回一個(gè)該對(duì)象中所有變量的數(shù)組。

8)__wakeup()。使用unserialize()還原一個(gè)被序列化的對(duì)象時(shí),先執(zhí)行該方法,恢復(fù)在序列化中可能丟失的數(shù)據(jù)庫(kù)連接及相關(guān)工作。

9)__toString()。當(dāng)使用echo或print輸出對(duì)象時(shí),將對(duì)象轉(zhuǎn)化為字符串。

10)__autoload()。調(diào)用未被實(shí)例化的類時(shí),自動(dòng)調(diào)用,在指定路徑下查找和該類名稱相同的文件。

4.

請(qǐng)簡(jiǎn)述HTTP中POST、GET、PUT、DELETE方式的區(qū)別。正確答案:HTTP定義了與服務(wù)器交互的不同的方法,最基本的方法是POST、GET、PUT和DELETE,URL全稱是資源描述符,可以認(rèn)為一個(gè)URL地址用于描述一個(gè)網(wǎng)絡(luò)上的資源,而對(duì)應(yīng)的HTTP中的四種方法GET、POST、PUT、DELETE對(duì)應(yīng)這個(gè)資源的查、改、增和刪四個(gè)操作。它們的具體功能如下:

1)根據(jù)HTTP規(guī)范,GET用于信息獲取,信息應(yīng)該是安全的。

2)根據(jù)HTTP規(guī)范,POST表示可以修改服務(wù)器上的資源的請(qǐng)求。

3)PUT和POST極為相似,都是向服務(wù)器發(fā)送數(shù)據(jù),但它們之間有一個(gè)重要區(qū)別,PUT通常指定了資源的存放位置,而POST則沒(méi)有,POST的數(shù)據(jù)存放位置由服務(wù)器決定。

4)DELETE的功能是刪除某一個(gè)資源。

5.

文件上傳需要注意哪些細(xì)節(jié)?怎么把文件保存到指定目錄?怎么避免上傳文件重名問(wèn)題?正確答案:文件上傳需要注意以下幾點(diǎn):

1)確保php.ini中已經(jīng)開(kāi)啟了文件上傳功能。

2)如果對(duì)文件上傳的大小有限制,那么需在php.ini中修改允許上傳的最大值,默認(rèn)是2MB。

3)在上傳圖片的表單中,form標(biāo)簽需要加上enctype="multipart/form-data"。

4)表單上傳圖片時(shí),method必須使用post。

5)表單使用file類型,并且有name屬性值,后臺(tái)才能獲取。

6)必須保證上傳文件的大小不會(huì)超出限制,文件類型符合上傳要求,上傳文件的存儲(chǔ)路徑不存在問(wèn)題。

7)需要使用$_FILES接收上傳文件信息。其中$_FILES是一個(gè)二維數(shù)組,一維是上傳空間的name,二維對(duì)應(yīng)了文件名、文件類型、上傳到臨時(shí)目錄下的臨時(shí)文件名、文件大小、是否有錯(cuò)誤等信息。如果是批量上傳,那么二維數(shù)組下標(biāo)是數(shù)組而不是字符串。

文件上傳后是放置在服務(wù)器端的臨時(shí)路徑下的,需要使用move_uploaded_file()函數(shù)將上傳后的文件保存到指定目錄。

為了避免上傳圖片重名,可以使用時(shí)間戳加隨機(jī)數(shù)的方式給文件重新命名。

四、編程題1.

打印出所有的“水仙花數(shù)”,所謂“水仙花數(shù)”是指一個(gè)三位數(shù),其各位數(shù)字立方和等于該數(shù)本身。例如,153是一個(gè)“水仙花數(shù)”,因?yàn)?53=1的三次方+5的三次方+3的三次方。正確答案:利用for循環(huán)控制100~999個(gè)數(shù),每個(gè)數(shù)分解出個(gè)位、十位和百位。利用循環(huán),分別用$i代表百位,$i代表十位,$m代表個(gè)位,且百位的初始數(shù)值是1~9,而十位和個(gè)位初始數(shù)值是0~9,然后按百位、十位、個(gè)位的順序嵌套循環(huán),判斷找出符合“水仙花數(shù)”的公式的數(shù)。

PHP代碼實(shí)現(xiàn)如下:

<?php

for($i=1;$i<=9;$i++){

for($j=0;$j<=9;$j++){

for($m=0;$m<=9;$m++){

if(pow($i,3)+pow($j,3)+pow($m,3)==100*$i+10*$j+$m){

echo$i.$j.$m;

}

}

}

}

?>

程序的運(yùn)行結(jié)果為

01153370371407

2.

給定一個(gè)數(shù)d和n,如何計(jì)算d的n次方?例如,d=2,n=3,d的n次方為23=8。正確答案:可以把n的取值分為如下幾種情況:

1)當(dāng)n=0時(shí),計(jì)算結(jié)果肯定為1。

2)當(dāng)n=1時(shí),計(jì)算結(jié)果肯定為d。

3)當(dāng)n>0時(shí),計(jì)算方法為初始化計(jì)算結(jié)果result=1,然后對(duì)result執(zhí)行n次乘以d的操作,得到的結(jié)果就是d的n次方。

4)當(dāng)n<0時(shí),計(jì)算方法為初始化計(jì)算結(jié)果result=1,然后對(duì)result執(zhí)行|n|次除以d的操作,得到的結(jié)果就是d的n次方。

以2的三次方為例,首先初始化result=1,接著對(duì)result執(zhí)行3次乘以2的操作:result=result*2=1*2=2,result=result*2=2*2=4,result=result*2=4*2=8,因此,2的三次方等于8。根據(jù)這個(gè)思路給出實(shí)現(xiàn)代碼如下:

<?php

/*函數(shù)功能:計(jì)算一個(gè)數(shù)d的n次方*/

functionpower($d,$n)

{

if($n==0)return1;

if($n==1)return$d;

$result=1.0;

if($n>0)

{

for($i=1;$i<=$n;$i++)

{

$result*=$d;

}

return$result;

}

else

{

for($i=1;$i<=abs($n);$i++)

{

$result=$result/$d;

}

}

return$result;

}

printf("%0.2f<br>",power(2,3));

printf("%0.2f<br>",power(-2,3));

printf("%0.3f",power(2,-3));

?>

程序的運(yùn)行結(jié)果為

8.00

-8.00

0.125

算法性能分析:這個(gè)算法時(shí)間復(fù)雜度為O(n),需要注意的是,當(dāng)n非常大的時(shí)候,這種算法的效率是非常低下的。

3.

給定一個(gè)數(shù)組,數(shù)組中含有重復(fù)元素,給定兩個(gè)數(shù)字num1和num2,求這兩個(gè)數(shù)字在數(shù)組中出現(xiàn)的位置的最小距離。正確答案:對(duì)于這類問(wèn)題,最簡(jiǎn)單的方法就是對(duì)數(shù)組進(jìn)行雙重遍歷,找出最小距離,但是這種方法效率比較低下。由于在求距離的時(shí)候只關(guān)心num1與num2這兩個(gè)數(shù),因此,只需要對(duì)數(shù)組進(jìn)行一次遍歷即可,在遍歷的過(guò)程中分別記錄num1或num2的位置就可以非常方便地求出最小距離。

主要思路:對(duì)數(shù)組進(jìn)行雙重遍歷,外層循環(huán)遍歷查找num1,只要找到num1,就開(kāi)始內(nèi)層循環(huán),即對(duì)數(shù)組從頭開(kāi)始遍歷查找num2,當(dāng)遍歷到num2時(shí),就計(jì)算它們的距離dist。當(dāng)遍歷結(jié)束后,最小的dist值就是它們之間的最小距離。

實(shí)現(xiàn)代碼如下:

<?php

functionminDistance($arr,$num1,$num2){

$len=count($arr);

if(!$arr||$len<=0){

printf("參數(shù)不合理");

return";

}

$minDis=max($arr);

//num1與num2的最小距離

$dist=0;

for($i=0;$i<$len;++$i){

if($arr[$i]==$num1){

for($j=0;$j<$len;++$j){

if($arr[$j]==$num2){

$

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論