Promise的基本用法

陳鈴1147 分享 時(shí)間:

關(guān)于 Promise的基本用法,你知道哪些?快來(lái)一起學(xué)習(xí)吧。下面小編就和大家分享,來(lái)欣賞一下吧。

Promise的基本用法

Promise是一個(gè)類(lèi),可以創(chuàng)建一個(gè)實(shí)例, Promise,也是一個(gè)對(duì)象,用來(lái)傳遞異步操作的消息。

Promise有三個(gè)狀態(tài):

penging(對(duì)象的初始狀態(tài),等到任務(wù)的完成或者被拒絕)

fulfilled (任務(wù)執(zhí)行完成并且成功的狀態(tài))

rejuce(任務(wù)執(zhí)行完成并且失敗的狀態(tài))

Promise對(duì)象有以下兩個(gè)特點(diǎn):

1)對(duì)象的狀態(tài)不受外界影響。

2) 一旦狀態(tài)改變,就不會(huì)再變, Promise的狀態(tài)只可能從“pending”狀態(tài)轉(zhuǎn)到“fulfilled”狀態(tài)或者“pejected”狀態(tài),而且不能逆向轉(zhuǎn)換.

缺點(diǎn):

1)無(wú)法取消 Promise,一旦新建它就會(huì)立即執(zhí)行,無(wú)法中途取消。

2)如果不設(shè)置回調(diào)函數(shù),Promise 內(nèi)部拋出的錯(cuò)誤,不會(huì)反應(yīng)到外部。

Promise的用法

Promise的構(gòu)造函數(shù)接收一個(gè)參數(shù),是函數(shù),并且傳入兩個(gè)參數(shù):resolve,reject,

分別表示異步操作執(zhí)行成功后的回調(diào)函數(shù)和異步操作執(zhí)行失敗后的回調(diào)函數(shù)。

var promise = new Promise(function(resolve, reject) {

if (/.異步操作成功 .){

resolve(value);

} else {

reject(error);

}

});

//then里面的函數(shù)就跟我們平時(shí)的回調(diào)函數(shù),不管上面的是什么結(jié)果,都會(huì)走then里面。

promise .then(function (value){

console.log('成功',value);

},function(reason){

console.log('失敗',reason);

})

Promise還提供了all,race、reject、resolve等方法

promise鏈?zhǔn)秸{(diào)用:會(huì)將前一個(gè)then的返回值(return)作為下一次成功的回調(diào)函數(shù)的參數(shù)。

promise.all方法:可以傳入多個(gè)promise ,全部執(zhí)行后將結(jié)果以數(shù)組的方式返回,如果有一個(gè)失敗了,就失敗了

promise.race方法:就是賽跑的意思。race的用法與all一樣,誰(shuí)的時(shí)間快就實(shí)行哪個(gè)函數(shù)

下面就是的小例子(字符串的倒敘),來(lái)講解promise.all方法和promise.race方法

let p1 =new Promise(function (resolve,reject) {

let str1 ='123456789'; //定義一個(gè)字符串

let leg = str1.length; //獲取字符串的長(zhǎng)度

let re =''; //存儲(chǔ)返回值

let i =1; //初始循環(huán)變量

let a = setInterval(function () { //定義一個(gè)定時(shí)器

re+= str1.charAt(leg-i); //獲取字符串指定的位置的字符

i++;

if(i > leg) { //判斷循環(huán)變量大于指定字符串長(zhǎng)度

clearInterval(a); //結(jié)束定時(shí)器

if (i == leg +1) { //判斷循環(huán)變量 剛好大于指定字符長(zhǎng)度時(shí) 返回 倒敘字符串

resolve(re);

}else {

reject('倒敘失敗!');

}

}

},100);

});

let p2 =new Promise(function (resolve,reject) {

let str1 ='abcdefghijklmn';//定義一個(gè)字符串

let leg = str1.length;//獲取字符串的長(zhǎng)度

let re ='';//存儲(chǔ)返回值

let i =1;//初始循環(huán)變量

let a1 = setInterval(function () {//定義一個(gè)定時(shí)器

re+= str1.charAt(leg-i);//獲取字符串指定的位置的字符

i++;

if(i > leg){//判斷循環(huán)變量大于指定字符串長(zhǎng)度

clearInterval(a1);//結(jié)束定時(shí)器

if(i == leg+1){//判斷循環(huán)變量 剛好大于指定字符長(zhǎng)度時(shí) 返回 倒敘字符串

resolve(re);

}else {

reject('倒敘失敗2!');

}

}

},100);

});

Promise.all([p1,p2]).then(function (value) {

console.log(value);/

},function(reason){

console.log(reason);

})

Promise.race([p1,p2]).then(function (value) {

console.log(value);

},function(reason){

console.log(reason);

})

Promise.resolve方法返回的是一個(gè)成功態(tài)的Promise實(shí)例

Promise.reject方法返回的是一個(gè)失敗態(tài)的Promise實(shí)例

以上就是Promise的基本用法

Provide 的用法你知道多少?

第一種用法:

Provide后面接間接賓語(yǔ) 時(shí),通常用with 。

Provide sb. with sth. 為某人提供所需要的東西?!?/p>

例子:

下面是美國(guó)第一夫人米歇爾 奧巴馬所寫(xiě)的一個(gè)實(shí)例。

Room to Read provides girls with scholarships that cover the cost of housing , food,and books.

“閱讀空間(Room to Read)為少女們提供的獎(jiǎng)學(xué)金,涵蓋了食宿費(fèi)和書(shū)費(fèi)?!?/p>

在句子中,girls 是間接賓語(yǔ),scholarship是直接賓語(yǔ)。

第二種用法:

Provide for

(1) 讓某人獲取自己所需要的東西。”

談及父母為家人提供東西時(shí),經(jīng)常會(huì)用到這個(gè)表達(dá)。

例子:

She says changes such as migration away from rural areas are allowing more women to find work and provide for their families.

諸如離開(kāi)鄉(xiāng)村地區(qū)等一系列的改變,讓更多婦女們找到了工作,貼補(bǔ)家用。

(2)“表示未來(lái)可能發(fā)生的某事”

例子:

They say it California needs to find a way to provide for the growing need for water.

他們表示,如果水需求量不斷增加,加利福尼亞就需要尋求一中心解決方法?!?/p>

第三種用法:

Provide后面接直接賓語(yǔ) 時(shí),通常用to/for 。

Provide sth. to/for 將某物給予給某人”

例子:

The company provides health insurance for/to all of its employees.

該公司為所有員工繳納醫(yī)療保險(xiǎn)。

Health issurance 是直接賓語(yǔ),員工是間接賓語(yǔ)。

PS:

Provide sth. for sb. 的用法更普遍

Provide sth. to sb. 的用法更新穎

那么我的小可愛(ài)們,你還記得上一課的知識(shí)嗎?

我們來(lái)做個(gè)題檢測(cè)一下吧!

下面橫線(xiàn)內(nèi)填什么呢?

Your necklace is very nice. ——,where did you buy this necklace.

A.By the way B.Mind you

為什么 suggest 后不能接 to do?

1.

首先我想解決這個(gè)問(wèn)題下的爭(zhēng)議。

現(xiàn)代語(yǔ)言學(xué)(包括語(yǔ)法)有個(gè)基本前提性的結(jié)論,即語(yǔ)言是一種convention,即社會(huì)的約定俗成。這里有兩點(diǎn)值得注意:

這個(gè)「約定俗成」不是完全隨意的,背后有規(guī)律可循。從語(yǔ)言實(shí)例中歸納總結(jié)出「規(guī)律」就是語(yǔ)言學(xué),「規(guī)律」被總結(jié)出來(lái)之后自然就表現(xiàn)出比較強(qiáng)的規(guī)范性(prescriptive),變成了「規(guī)則」,「規(guī)則」在一段時(shí)間之內(nèi)相對(duì)比較穩(wěn)定,因此可以用以判斷語(yǔ)言的「對(duì)錯(cuò)」。

這個(gè)「約定俗稱(chēng)」得是社會(huì)性的。不能隨便找兩個(gè)人來(lái)創(chuàng)造一個(gè)新的「規(guī)則」,因?yàn)樯鐣?huì)普遍意義上不認(rèn)同。所以大部分「新用法」都被視為是錯(cuò)誤的,都消失在歷史長(zhǎng)河中,只有少數(shù)被社會(huì)普遍接受之后才能納入上述的「規(guī)則」范疇之內(nèi),語(yǔ)言就是這樣緩慢生長(zhǎng)的。

綜合以上兩點(diǎn),自然就能看出來(lái),「規(guī)則」相比「語(yǔ)言實(shí)例」總是滯后的。可能某個(gè)用法很多人都在用了,但是主流規(guī)則還是不承認(rèn)。舉幾個(gè)中文的例子,比如「男主角」現(xiàn)在很多念「男主jiǎo」了,比如「氣氛」很多人都念「氣fèn」,比如「細(xì)思極恐」「十動(dòng)然拒」等詞現(xiàn)在很流行了,但是在高考語(yǔ)文考卷上這樣用是要失分的,在正式書(shū)面文件上這樣用也是要被讀者皺眉頭的。

現(xiàn)在來(lái)看英語(yǔ)。我們作為外國(guó)人學(xué)英語(yǔ),當(dāng)然是想學(xué)decent English/ standard English——雖然英語(yǔ)沒(méi)有「普通話(huà)」考試,但是SAT、ACT仍然考語(yǔ)法,也有的是語(yǔ)法書(shū)可以參考。碰到有爭(zhēng)議的新新用法的時(shí)候,我一般建議大家適當(dāng)保守,選用穩(wěn)妥的被普遍接受的用法。至于某些native speaker選用這些新新用法,能聽(tīng)懂就行,自己不要用。像我在美國(guó),碰到不規(guī)范的英文用法、發(fā)音多了去了,我聽(tīng)聽(tīng)就行,自己堅(jiān)持用的還是當(dāng)年在人教版上學(xué)的正式的、標(biāo)準(zhǔn)的decent English。不要迷信native spaker,native speaker也有教育水平低的嘛,即便是高教育水平的native speaker也會(huì)犯錯(cuò)的嘛。我就教過(guò)英美澳的老外英語(yǔ)語(yǔ)法——這沒(méi)什么稀奇,一個(gè)本碩博都學(xué)中文的美國(guó)人如果來(lái)糾正咱漢語(yǔ)的語(yǔ)病,只要講的有道理,咱也會(huì)接受的對(duì)吧。

具體到suggest后能不能接to do的爭(zhēng)議。也許有不少native speaker說(shuō)suggest to do,但是顯然這種用法沒(méi)有被接受為decent English/ standard English的「規(guī)則」之內(nèi)。

從詞源來(lái)看,suggest = suggerere = sub- ‘from below’ + gerere ‘bring’,即「從下提起」「提出」(以供他人考慮)的意思,那么后面自然接名詞性的成分,即:

名詞:Ruth suggested a vacation.

動(dòng)名詞:I suggested going in my car.

名詞性從句:I suggest that we wait a day or two.

值得仔細(xì)分析的是第三種情況,「that we wait a day or two」即便we換成he/she,后面還是用wait。正因?yàn)閟uggest是「提出」(以供他人考慮),所接從句的內(nèi)容應(yīng)該是將來(lái)性的(即下例的shall),同時(shí)又應(yīng)該是一種虛擬的將來(lái)性(即建議方也并不確定這種將來(lái)性是否會(huì)成真),所以要用將來(lái)時(shí)態(tài)的虛擬語(yǔ)氣(即下例的should)。如果這樣說(shuō)難以理解,也可以簡(jiǎn)單理解成「客氣」(類(lèi)似于Could you please...中的could表示客氣)。如果還是難以理解,還可以簡(jiǎn)單理解成「應(yīng)該」,即「我建議你應(yīng)該怎么做」。

當(dāng)然,以上分析僅針對(duì)suggest做「提出」(以供他人考慮)或者一般翻譯的「建議」的意思,suggest還可以表示「暗示」,那就不需要用虛擬語(yǔ)氣,用正常語(yǔ)氣即可:

Are you suggesting I’m lazy?

for的用法詳解,C語(yǔ)言for循環(huán)完全攻略

for 循環(huán)語(yǔ)句的一般形式為:

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

{

語(yǔ)句;

}

首先要強(qiáng)調(diào)兩點(diǎn):

1) 表達(dá)式1、表達(dá)式2和表達(dá)式3之間是用分號(hào);隔開(kāi)的,千萬(wàn)不要寫(xiě)成逗號(hào)。

2) for(表達(dá)式1;表達(dá)式2;表達(dá)式3)的后面千萬(wàn)不要加分號(hào),很多新手都會(huì)犯這種錯(cuò)誤——會(huì)情不自禁地在后面加分號(hào)。

因?yàn)?for 循環(huán)只能控制到其后的一條語(yǔ)句,而在C語(yǔ)言中分號(hào)也是一個(gè)語(yǔ)句——空語(yǔ)句。所以如果在后面加個(gè)分號(hào),那么 for 循環(huán)就只能控制到這個(gè)分號(hào),下面大括號(hào)里面的語(yǔ)句就不屬于 for 循環(huán)了。

下面來(lái)看看它的執(zhí)行過(guò)程:

求解表達(dá)式1。

求解表達(dá)式2。若其值為真,則執(zhí)行 for 語(yǔ)句中指定的內(nèi)嵌語(yǔ)句,然后執(zhí)行第3步;若表達(dá)式2值為假,則結(jié)束循環(huán),轉(zhuǎn)到第5步。

求解表達(dá)式3。

轉(zhuǎn)回上面第2步繼續(xù)執(zhí)行。

循環(huán)結(jié)束,執(zhí)行 for 語(yǔ)句下面的語(yǔ)句。

從這個(gè)執(zhí)行過(guò)程中可以看出,“表達(dá)式1”只執(zhí)行一次,循環(huán)是在“表達(dá)式2”“表達(dá)式3”和“內(nèi)嵌語(yǔ)句”之間進(jìn)行的。

for語(yǔ)句最簡(jiǎn)單的形式是:

for (循環(huán)變量賦初值; 循環(huán)條件; 循環(huán)變量增值)

{

語(yǔ)句;

}

下面給大家寫(xiě)一個(gè)程序,求 1+2+3+4+…+100 的總和。

# includeint main(void){ int i; int sum = 0; //sum的英文意思是“總和” for (i=1; i<=100; ++i) //++是自加的意思, ++i相當(dāng)于i = i + 1 { sum = sum + i; /.價(jià)于sum += i;但是不建議這么寫(xiě), 因?yàn)閟um = sum + i看起來(lái)更清楚、更舒服. } printf("sum = %d\n", sum); return 0;}

輸出結(jié)果是:

sum = 5050

這個(gè)程序的功能是實(shí)現(xiàn)求 1+2+3+4+…+100 的和,如果不用循環(huán),加一次就要一條語(yǔ)句,加 100 次就要 100 條語(yǔ)句。這里是從 1 加到 100,要是從 1 加到 10000 那就要 10000 條語(yǔ)句。但有了循環(huán)就很方便了,你想加到多少就加到多少,只要改一個(gè)參數(shù)就可以了。所以循環(huán)很重要。

下面按照?qǐng)?zhí)行過(guò)程看看上面這個(gè)程序是怎樣執(zhí)行的。

1) 首先定義一個(gè)循環(huán)變量 i。定義的時(shí)候可以不給它賦初值,在 for 循環(huán)里面再給它賦初值也行。但前面說(shuō)過(guò),最好在定義變量的時(shí)候就對(duì)它進(jìn)行初始化,如果值不確定就初始化為 0。所以程序中也可以在定義 i 的時(shí)候就給它賦初值,那么 for 循環(huán)里的“表達(dá)式1”就可以省略了,但分號(hào)不可以省略。

這樣的話(huà),執(zhí)行的時(shí)候就跳過(guò)第1步,直接進(jìn)入第2步,其他的不變。所以程序也可以像下面這樣寫(xiě):

# includeint main(void){ int i = 1; int sum = 0; for (; i<=100; ++i) { sum = sum + i; } printf("sum = %d\n", sum); return 0;}

當(dāng)然表達(dá)式1加上也行,大不了再重新賦一次值。

2) 然后定義一個(gè)用來(lái)存放“和”的變量 sum,并給它賦初值 0,然后進(jìn)入 for 循環(huán):

首先求解表達(dá)式1,即給變量i賦初值,i=1;表達(dá)式1只執(zhí)行這一次,下面都不會(huì)再執(zhí)行了。

然后求解表達(dá)式2,若 1<=100 成立,則執(zhí)行 for 循環(huán)中的內(nèi)嵌語(yǔ)句,即 sum=0+1。

然后執(zhí)行第3步,變量 i 自加 1,即變量 i 由 1 變?yōu)?2。

然后再求解表達(dá)式2,2<=100 成立,則執(zhí)行 for 循環(huán)中的內(nèi)嵌語(yǔ)句,sum=0+1+2。

然后再執(zhí)行第3步,變量 i 自加 1,即變量 i 由 2 變?yōu)?3。

然后再求解表達(dá)式2,即 3<=100 成立,則執(zhí)行 for 循環(huán)中的內(nèi)嵌語(yǔ)句,sum=0+1+2+3。

……

就這樣一直循環(huán)下去,直到 ++i 等于 100 的時(shí)候,求解表達(dá)式2,即 100<=100 成立,則執(zhí)行 for 循環(huán)中的內(nèi)嵌語(yǔ)句,sum=0+1+2+3+…+100。

然后再執(zhí)行第3步,變量 i 自加 1,即變量 i 由 100 變?yōu)?101。然后再求解表達(dá)式2,即 101<=100 不成立,則結(jié)束循環(huán),執(zhí)行 for 循環(huán)下面的語(yǔ)句即 printf。

以上就是這個(gè)程序的執(zhí)行過(guò)程。關(guān)于 for 語(yǔ)句的代碼規(guī)范化問(wèn)題,有兩點(diǎn)要再跟大家強(qiáng)調(diào)一下:

1)if、else、for、while、do 都只能控制到其后的一條語(yǔ)句,如果要控制多條語(yǔ)句必須加大括號(hào){}。但基于代碼規(guī)范化,if、else、for、while、do 后面的執(zhí)行語(yǔ)句不論有多少行,就算只有一行也要加{}。

2) 像 if、for、while 等關(guān)鍵字之后應(yīng)留一個(gè)空格再跟左括號(hào)(,以突出關(guān)鍵字。

此外上面的程序還有一個(gè)知識(shí)點(diǎn)要跟大家說(shuō)一下:從功能上講,for(i=1; i<=100;++i)完全可以寫(xiě)成for(i=1; i<101; ++i),而且建議大家盡量使用這種寫(xiě)法。也就是說(shuō),循環(huán)語(yǔ)句的循環(huán)條件盡量寫(xiě)成半開(kāi)半閉的,不管是 for 循環(huán)還是 while 循環(huán)。

for(i=1; i<101; ++i)實(shí)際上是 1≤i<101,是半開(kāi)半閉的;而for(i=1; i<=100; ++i)實(shí)際上是 1≤i≤100,是全閉的。那么為什么建議使用半開(kāi)半閉的呢?因?yàn)槿绻麑?xiě)成 i<=100 的話(huà),那么每次判斷的時(shí)候都要判斷兩次,即 i<100 和 i==100,而寫(xiě)成 i<101 的話(huà)每次只需要判斷一次。

也許有人說(shuō):程序在執(zhí)行 i<=100 的時(shí)候不是將它轉(zhuǎn)換成 i<100||i==100 嗎?這樣由“短路或”的知識(shí)可知,如果前面的為真那么后面的不就不會(huì)執(zhí)行了嗎?這樣不也是判斷一次嗎?不是這樣的,系統(tǒng)是不會(huì)將 i<=100 轉(zhuǎn)換成 i<100||i==100 的,每次判斷的時(shí)候 i<100 和 i==100 都要判斷。

但是寫(xiě)成半開(kāi)半閉也有一個(gè)問(wèn)題,就是會(huì)影響對(duì)代碼的理解。有時(shí)候?qū)懗扇]的區(qū)間理解起來(lái)才順暢,而寫(xiě)成半開(kāi)半閉反而不易理解,比如<=右邊是變量或表達(dá)式的時(shí)候。這時(shí)候要以可讀性為第一要素,即哪種好理解就使用哪種?,F(xiàn)在 CPU 速度那么快,也不在乎那點(diǎn)效率。所以前面說(shuō)“盡量”,沒(méi)有要求一定要那樣寫(xiě)。

下面再給大家寫(xiě)一個(gè)程序,求 1 到 100 之間所有奇數(shù)的和。

# includeint main(void){ int i; int sum = 0 ; for (i=1; i<100; i+=2) //i+=2;等價(jià)于i = i + 2; { sum = sum + i; } printf("sum = %d\n", sum); return 0;}

輸出結(jié)果是:

sum = 2500

關(guān)于自增和自減

一直以來(lái),++ 和 –– 語(yǔ)法浪費(fèi)了太多人的時(shí)間。說(shuō)句實(shí)在話(huà),++ 和 –– 在C語(yǔ)言中根本就不重要,除了表達(dá)簡(jiǎn)練外,真的沒(méi)有什么其他好處了。

簡(jiǎn)單地說(shuō):++i 和 i++ 在單獨(dú)使用時(shí),都表示 i=i+1;––i 和 i–– 在單獨(dú)使用時(shí),都表示 i=i–1。

而 a=++i 就相當(dāng)于 i=i+1,a=i;a=i++ 就相當(dāng)于 a=i,i=i+1。

同理,a=––i 就相當(dāng)于 i=i–1,a=i;a=i–– 就相當(dāng)于 a=i,i=i–1。

如果實(shí)在搞不明白 ++ 和 –– 是怎么回事,那也不是什么天塌下來(lái)的事情。因?yàn)閍=++i;完全可以寫(xiě)成i++; a=i;。而a=i++;也完全可以寫(xiě)成a=i; i++;。而且,這也是一種很好的程序風(fēng)格。

作為一個(gè)優(yōu)秀的程序員,在你的程序中就不應(yīng)該體現(xiàn)出 ++i 和 i++ 的區(qū)別,要么都用 ++i,要么都用 i++,不要一會(huì)兒用 ++i 一會(huì)兒用 i++。

對(duì)于自增和自減還有一點(diǎn)需要強(qiáng)調(diào)的是:只有“變量”才能進(jìn)行自增和自減!你認(rèn)為 3++ 等于多少?C語(yǔ)言中沒(méi)有這種寫(xiě)法,常量是不能進(jìn)行自增和自減的。

for循環(huán)練習(xí)

1) 求 1! + 2! + 3! + ... + n!

# includeint main(void){ int n = 0; int i = 0; int m = 1; int sum=0; printf("請(qǐng)輸入n的值:"); scanf("%d", &n); for (i=1; i<=n; ++i) { m = m .i; sum = sum +m; } printf ("sum = %d\n", sum); return 0;}

這個(gè)程序雖然短,但邏輯性很強(qiáng),算法很好,所以建議讀者記住。因?yàn)檫壿嬓詮?qiáng),所以只看是很難明白的,自己在紙上試一下,將自己當(dāng)成計(jì)算機(jī)一步步地計(jì)算就明白了。

假如 n=4:

當(dāng) i=1 時(shí),m=1,sum=1。

當(dāng) i=2 時(shí),m=1×2,sum=1+1×2。

當(dāng) i=3 時(shí),m=1×2×3,sum=1+1×2+1×2×3。

當(dāng) i=4 時(shí),m=1×2×3×4,sum=1+1×2+1×2×3+1×2×3×4。

看出規(guī)律來(lái)了嗎?m 的值是一直往下乘,乘以 i 之前 m 的值是(i–1)的階乘,乘以 i 之后 m 的值就是 i 的階乘了。這樣 i 循環(huán)到多少,m. 就立刻將這個(gè)數(shù)的階乘計(jì)算出來(lái),然后加到 sum 中。

2) for 和 if 的嵌套使用。求 1 到 100 之間所有能被 3 整除的數(shù)之和。

# includeint main(void){ int i; int sum = 0; for (i=3; i<100; ++i) { if (0 == i%3) { sum = sum +i; } } printf("sum = %d\n", sum); return 0;}

輸出結(jié)果是:

sum = 1683

大家想想如果不用 if,這個(gè)程序能不能寫(xiě)出來(lái)?當(dāng)然能,能被 3 整除的數(shù)肯定是 3 的倍數(shù),只要 i 每次自加 3 就行了。我們將這個(gè)程序?qū)懸幌拢?/p>

# includeint main(void){ int i; int sum = 0; for (i=3; i<100; i+=3) { sum = sum +i; } printf("sum = %d\n", sum); return 0;}

因?yàn)?++i 每次只加 1,而 i+=3 每次加 3,所以這種寫(xiě)法與第一種寫(xiě)法比較起來(lái)計(jì)算機(jī)少執(zhí)行很多步,所以執(zhí)行起來(lái)更快。由此可知,完成相同的功能,算法不一樣則效果就不一樣。對(duì)計(jì)算機(jī)而言當(dāng)然是執(zhí)行得越快越好。

3) 編寫(xiě)程序,輸出 1~1000 之間所有的完全平方數(shù)。

# include# include//要用sqrt()int main(void){ int i; //循環(huán)變量 int x; //存儲(chǔ)每個(gè)數(shù)的二次方根 for (i=1; i<1000; ++i) { x = sqrt(i); /.果i不是完全平方數(shù), 那么sqrt(i)肯定是小數(shù), 而i是int型, 所以x是sqrt(i)取整后的值, 這樣x.肯定不等于i. if (x. == i) { printf("%d\t", i); // \t是跳到下一個(gè)Tab位置 } } printf("\n"); return 0;}

輸出結(jié)果是:

1 4 9 16 25 36 49 64 81 100

121 144 169 196 225 256 289 324 361 400

441 484 529 576 625 676 729 784 841 900

961

其實(shí)這個(gè)程序還有更簡(jiǎn)單的算法,不需要使用 sqrt()。下面將這個(gè)程序也寫(xiě)下來(lái):

# includeint main(void){ int i; //循環(huán)變量 for (i=1; i.<1000; ++i) { printf("%d\t", i .i); // \t是跳到下一個(gè)Tab位置 } printf("\n"); return 0;}

輸出結(jié)果是:

1 4 9 16 25 36 49 64 81 100

121 144 169 196 225 256 289 324 361 400

441 484 529 576 625 676 729 784 841 900

961

280608