c語言中for迴圈保證涵蓋所有的情況

2021-10-02 21:30:22 字數 2598 閱讀 4817

for迴圈中,我們其實預設的是初始條件滿足迴圈條件的情況。

我們以插入到線性表中的資料為例:

//此處以排除i超限及記憶體不足以插入資料的情況。

其中,i的值從1至length+1;

分析:

1)因為i的值從1至length+1;q的位置為l.elem至l.elem+length;

即q的位置範圍已定,可以是這個範圍內的任意值。l.elem<=q<=l.elem+length

再看p=l.elem+l.length-1; p指向的是表最後乙個元素。如length=0,則p指向的是線性表的l.elem-1的位置。

l.elem-1<=p<=l.elem+l.length-1;

q,p的位置指向如下所示:

2)再看 for迴圈條件,p>=q,

執行迴圈體的情況是:p>=q,即:l.elem+l.length-1>=l.elem+i-1-------------->l.length>=i ,i最小是1,故l.length最小為1;所以,當l.length為0時為進入for迴圈。

不執行for迴圈的情況有兩種:

a.一開始條件就不滿足,直接沒進入for迴圈;//q指向2的時候以及length為0的情況

b.進入到for迴圈中了,隨著迴圈的進行,條件不滿足了跳出了迴圈;//p3)我們來分析一下for迴圈體,我們知道for迴圈是多個if的疊加,只有滿足條件才會進行迴圈,迴圈條件是p>=q,也就說是,for迴圈體中的內容是在該條件下成立的。

for迴圈體的作用:*(p+1)=*p; 這條語句的作用是把q到p的元素都向後移了一下。這期間,不論qq>p的時候,迴圈條件不滿足,跳出迴圈。

4)再看for迴圈外的語句:*q = e;//這條語句的作用是將q指向的位置重新賦值為e。這條語句在不進入for迴圈和for迴圈退出後都會執行:如是不進入for迴圈的情況(如下圖中在表尾插入)還有如是空表的時候插入資料(如下下圖所示),即:直接執行*q = e;滿足要求的。

a.在表尾插入資料,不會執行for迴圈:

b.空表的時候,也不會執行for迴圈:

如果是執行了for迴圈,然後退出for迴圈後,執行*q = e;同樣滿足要求。

小結:for迴圈解決的是線性表中有1~n個元素且要插入的位置在1-n的情況;

1)如在第n+1個位置插入元素的話,是不需要挪動元素的,迴圈體是不需要執行的。

2)如線性表中0個元素,則只需要在第1個位置插入元素,也不需要挪動元素。

上面的結論依據:

1)p指向的是最後乙個元素n,q指向的是要插入的元素位置n+1,p>=q不成立,不會進入迴圈。

2)p指向l.elem-1,q指向l.elem+1-1 = l.elem,p>=q不成立,不會進入迴圈。

另:以下例子為線性表以下標的形式寫的程式。

for(int i=temp->length-1; i>=n-1;i--)//轉化為陣列的下標,最後乙個下標和第n個下標

temp->list[i+1]= value;

分析:1<=n<=temp->length+1,所以當length等於0的時候,n=1,此時i>=n-1不成立,並不會進入到迴圈體。

當n= temp->length+1的時候,i>=n-1不成立,並不會進入到迴圈體。

總結:這個例子跟for(int i=1;i<10;i++)這種例子不同的是,for(int i=1;i<10;i++)中i是定值,10也是個定值,所以不會存在其他的情況,即迴圈初始值,迴圈條件都是已確定的值,但是線性表的例子,這兩個值都是不定的,所以,情況就複雜一些。

那麼怎麼才能最終保證所有的情況都包含到且for迴圈體中不會出現溢位的情況呢?

我們這麼去想,for迴圈體的作用是將前乙個變數值賦給後乙個變數值,故首先,得有值才行,故排除了length為0的情況;

然後,要插入的位置需要在1-n這個範圍內,才需要挪動變數值,所以有排除了在length+1的位置插入資料的情況。

所以,就不要擔心for迴圈會出現的各種意外情況了。

C語言中的for迴圈語句

c語言中for迴圈語句是最靈活的迴圈,最適用於知道迴圈次數的情況,再知道迴圈次數的情況下完全可以取代while迴圈。for迴圈的格式如下 他的執行過程如下 執行表示式1,為初始變數賦值 判斷表示式2真假,若真則執行迴圈體重的迴圈 塊,若假則結束迴圈 執行表示式3 執行表示式2,若真則繼續迴圈,知道表...

c語言中迴圈使用技巧

簡明來說不確定迴圈,不知道何時迴圈停止,而計數迴圈已知要執行多少次迴圈 其中涉及了三個重要部分 1.初始化計數器 2.計數器與有限值比較 3.每次迴圈對計數器進行有規律變化 下面用for迴圈進行舉例 for i 0 i 10 i for i 0 i 10 i 見課本習題五p138頁 17題 incl...

C語言中的迴圈結構

迴圈結構是指在程式中需要反覆執行某個功能而設定的一種程式結構。它由迴圈體中的條件,判斷繼續執行某個功能還是退出迴圈。迴圈結構的三個要素 迴圈變數 迴圈體和迴圈終止條件。迴圈結構有三種語句,即while do while和for迴圈。當表示式結果為真 非0 時,則一直執行迴圈語句,知道表示式結果為假 ...