第五章 迴圈結構課後反思

2022-07-31 22:57:20 字數 3854 閱讀 3075

1、for語句的一般形式:

for(《初值表示式》;《條件表示式》;《迴圈變數表示式》)

2、for語句的重要特徵1、while語句的一般形式:

while(《條件表示式》)

2、while語句的重要特徵

3、do-while語句的一般形式:

do

while(《條件表示式》);4、do-while語句的特徵

1、break語句既可用於分支結構,又可用於迴圈結構,其作用是跳出控制結構語句。

2、continue語句不會終止迴圈,而是在《迴圈體語句》沒有執行完的情況下,結束當前迴圈,提前進入下一迴圈。

1、實驗**如下:

#includemain()

printf("sum=%d\n",sum);

}

在編譯的時候,程式並不會報錯,理應在執行的時候出現的結果為「sum=5050」,但是,執行後結果如下:

為此,我問了幾個朋友以及查閱大量資料,我的理解如下。

2、i++不能做左值?

(1)首先說左值和右值的定義:

變數和文字常量都有儲存區,並且有相關的型別。區別在於變數是可定址的(addressable)對於每乙個變數都有兩個值與其相聯:

1).它的資料值,儲存在某個記憶體位址中。有時這個值也被稱為物件的右值(rvalue,讀做are-value).我們也可認為右值的意思是被讀取的值(read value)。文字常量和變數都可 被用作右值。

2).它的位址值——即儲存資料值的那塊記憶體的位址。它有時被稱為變數的左值(lvalue,讀作ell-value)。我們也可認為左值的意思是位置值location value文字常量不能被用作左值.

(2)首先對於i++的實現是:

int temp;

temp = i;

i = i+1;

return temp;

而++i的實現是:

i = i+1;

return i;

所以對於我們提出來的問題已經能得到解決了:

i++=5; 是錯誤的是因為i++返回的是編譯器自動分配的臨時變數temp,而這個temp並不是你程式中定義的可定址變數的引用 ,也就是說你不能通過位址對它進行操作.(換句話說就是不能作為左值)++i=5;是正確的就是因為其返回值就是i;

3、用實驗**來解釋

**如下:

根據我們通常所知道的後自增先使用後增加的道理,i++在使用後i自身會增加乙個數值,初始值為0時,自增後就是1,那麼輸出的結果應該是1.但實際上這題的結果卻是0。

這是因為開發工具在處理i = i++時, 會建立乙個臨時變數來接收i++的的值,然後返回這個臨時變數的值,返回的值再被等號左邊的變數接收了,這樣就是說i雖然自增了但是又被賦值了0,這樣輸出的結果自然就是0了。

不妨我們用temp臨時變數來接收i++的值,來看一下結果。

可以看到temp的結果就是0,也就是說賦值號右邊傳遞過來的是i未自增前的值,這符合後自增運算子先使用後增加的原則,這時候我們再輸出一下i的值。

i也的確自增了乙個值,這樣就好理解為什麼i = i++中輸出第乙個i為什麼是0了,因為i在自增後又被等式右邊的值覆蓋了。也就是說這裡的i的值發生了三次變化,第一次是我們定義i = 0;第二次就是i自增後變成了1;第三次就是i又被0值覆蓋了。

4、總結

其實i++或者++i,只有單句的話執行是add加法運算,如果i++有賦值動作的話類似於下列**:

int result,temp;

int i=0;

temp=i;

result=temp+1;

i=result;

i=temp;

簡單說其實i=0;i=i++就是i=1然後i=0,其實i++這個i就已經變成了+1的結果了,但是呢加完後回寫了沒運算的值。

所以說,在上課那個例子中i總是等於1,滿足i<=100,while永遠為真,使得while無限迴圈,電腦記憶體不夠,"炸了「。根據i++不能做左值,++i能做右值,來看,**如下都可以使程式執行。

#includemain()

printf("sum=%d\n",sum);

}

或者

1、例題中的幾何圖案

之前我們學了一些幾何圖形的輸出,例如直角三角形,等腰三角形的輸出等。但是,這個不同於之前的圖形,這個比之前的更複雜。我的思路是:將這個圖形先補齊,再分塊。

因為之前我們所輸出圖形的**都是乙個for中巢狀兩個for,所以我總想著這樣做完

我發現這和我預想的結果不一樣,我再次分析了這張圖。四個部分,第乙個部分由空格組成;第二個部分由" * "組成,第三個部分由空格組成;第四個部分由" * "組成。想起老師課上講的大迴圈裡面是控制行,小迴圈裡面控制了列。再反觀自己的**,我的**大迴圈沒有錯。

我發現,我前兩個部分沒有錯,錯的是後兩個部分,使得我圖案不能正常輸出,我覺得要將第三第四個部分放在另外乙個for的大迴圈之中,就像下面**所示。

#includemain()

for(n=1;n<=4;n++)

}

執行結果如下:

但是,我還發現了另外一種方法來輸出這個圖案,雖然可行但是偏移了我們的本意。**如下:

#includemain()

for(l=1;l<=4;l++)

}

總結一下,我覺得做這種圖形的題目,首先要補齊圖形,再劃分圖形,然後再敲**。需要注意的是,for迴圈裡面的《初始表示式》和《條件表示式》,因為這兩個決定你的圖形形狀。

2、希望拓展的部分

我希望老師可以穿插地講一點關於程式設計中後面涉及到的問題,讓我們更好地學習,例如:棧和堆,計算機的儲存結構和**的存放位址等,這樣也可以讓我們下課去查,為以後的學習減輕負擔。

第五章 迴圈結構

第五章 迴圈結構 5.1while語句和呼叫while語句構成的迴圈結構 當 迴圈 由while語句構成 形式 while 表示式 迴圈體eg k 0 while k 10 說明 while是c語言的關鍵字。while後一對圓括號中的表示式可以是c語言中任意合法的表示式,但不能為空,由它來控制迴圈是...

第五章 課後習題

第一題 輸入乙個字串,將該字串中下標為偶數的字元組成新串並通過字元格式化方式顯示 str1 input 請輸入乙個字串 str2 for i in range len str1 if i 2 0 str2 str1 i print format str2 第二題 編寫程式,生成乙個由15個不重複的大...

第五章 迴圈結構程式設計

第五章 迴圈結構程式設計 三種迴圈語句 while 表示式 語句 其中的 語句 就是迴圈體。迴圈體只能是乙個語句,可以使乙個簡單的語句,還可以是復合語句。用花括號包起來的若干語句,如果不用花括號,則while語句的範圍知道while後面的第乙個分號處 只要當暈還條件表示式為真 即給定的條件成立 就執...