循環嵌套式演算法
1. c語言 循環嵌套
由外到內,逐層完成,for循環的方法你應該知道了吧,我就不一一說了。
首先進行最外面的循環,第一次
i=1
,進入循環體,由於他的循環體是另一個循環,也就是執行另一個循環,
首先由
j=0
開始,然後有進入循環體。。。也就是執行第三層循環,在你上面的程序來說
,完成第三個循環一共要循環
7次
,k
從
2
到
10
(等於10的時候跳出去,實際執行9次)。
然後,第二層循環進行了
1
次
,j
由
0
變成
1
,繼續循環,也就是從新開始
第三層循環。這樣一直下去,知道
j=10
跳出了第二層循環
,第一個循環才
完成了
1次
,i
由1變成
2,繼續又進入到第二層,第三層循環,在一層一層跳出來,直到跳出最外層循環為止。
用一句話來說就是
逐層進入,逐層完成,逐層跳出。
2. 如何實現n次嵌套循環
這種是 MySQL 里最簡單、最容易理解的表關聯演算法。
比如,拿語句 select * from p1 join p2 using(r1) 來說,
先從表 p1 里拿出來一條記錄 ROW1,完了再用 ROW1 遍歷表 p2 里的每一條記錄,並且欄位 r1 來做匹配是否相同,以便輸出;再次循環剛才的過程,直到兩表的記錄數對比完成為止。
3. for循環語句嵌套怎麼算
雖然不知道你用的是什麼語言,不過各種語言應該是類似的。
在你程序中:如果不用for嵌套而是把語句寫上9遍:
LET I=1
For J From 0 To 9
If 10J+I=J^2-I^2 Then
Print 10J+I
End If
End For
LET I=2
For J From 0 To 9
If 10J+I=J^2-I^2 Then
Print 10J+I
End If
End For
LET I=3
For J From 0 To 9
If 10J+I=J^2-I^2 Then
Print 10J+I
End If
End For
.
.
.
LET I=9
For J From 0 To 9
If 10J+I=J^2-I^2 Then
Print 10J+I
End If
End For
如此。
4. for循環的嵌套怎麼算輸出幾個「#」
當i=1時,不輸出
當i=2時,一個#
當i=1時,兩個#
當i=2時,三個#
當i=5時,退出循環
所以一共六個
5. C語言中嵌套循環的運行原理是什麼(詳細點)應注意什麼細節
循環的嵌套就是一個循環體內又包含另一個完整的循環結構。三種循環可以互相嵌套的。
舉個例子吧,兩重的for循環:
for(i=0;i<N;i++)
{...
for(j=0;j<M;j++)
{...
}
}
進入第一層循環後,執行一些語句,再進入第二層循環,執行第二層循環的語句,當第二層循環結束跳出後,再判斷第一層循環的條件是否滿足,也就是說內層循環要執行多次(N次),總共的循環次數為N*M次。
6. C語言:n個for循環的嵌套
用遞歸函數,舉個例子:
void f(int n)
{
int i;
if(n==1)
for(i=0;i<n;i++)
{
/*這里是最內層 可以放上一些代碼*/
printf("123\n");
}
else
for(i=0;i<n;i++)
f(n-1);
}
////////////////////////////
這樣 f(5);語句就可以實現5個for循環的嵌套了
7. 如何理解循環的嵌套
外層循環到內層循環,必須要等到內層循環完畢才繼續下一個的外層循環。
如果外層循環100次內層循環50次那麼當外層循環第一次的時候,內層循環要循環50次當外層循環,第二次的時候,內層循環要循環100次當外層循環完畢的時候, 內存循環次數就是100乘以50。
8. php的for循環嵌套問題,高手請進(需要講一些細節)
for循環的執行原理:
for循環的參數有(初始值;判斷條件;更新循環變數表達式) 三者均不是必須的,若三者不完整則必須在適當的時候手動調用break命令終止循環,否則循環將一直持續下去成為死循環
執行過程為:
首先判斷初始值是否滿足判斷條件,如滿足則開始循環,若不滿足則直接跳過循環因此如下的循環是不會被執行的:
for($i=0;$i<0;$i++)
然後執行一次循環體(包裹在for後面大括弧里的代碼)
使用更新循環變數表達式更新變數
使用判斷條件進行判斷,若不滿足則終止循環,若滿足則再次執行循環體
因此如下循環會被執行5次
for($i=0;$i<5;$i++)
for循環嵌套:
for循環嵌套的話將優先執行內循環,再執行外循環,如下:
//外循環開始
for($i=0;$i<10;$i++)
{
//這里是外循環的循環體
for($j=0;$j<20;$j++)//內循環開始
{
//這里是內循環的循環體
}//內循環結束
}//外循環結束
當開始執行循環時,首先執行外循環的循環體(其中包括了內循環),此時$i=0;在此過程中當執行到內循環處時開始執行內循環,$j由0遞增到19;執行完20遍內循環後外循環結束,$i++;此時$i=1,再次開始執行外循環。
綜上,外循環體共執行10次,內循環體執行20(內循環本身的重復次數)*10(每次外循環均執行20次內循環)=200次
多重嵌套按此方法逐層分析
代碼分析:
for($i=1;$i<=9;$i++){
echo$j,'';
for($j=1;$j<=$i;$j++){
}
}
按上述方法進行分析的話,執行步驟如下:
$i=1代入外循環,循環開始
執行echo $j,此時未定義$j,輸出Notice: Undefined variable: j in C:wampwwwzhlx3.php on line 3
執行至內循環處,內循環開始,$j=1代入循環
內循環體什麼都沒做,循環執行1次(最終$j=2;$i=1<$j;內循環終止)
$i++;$i此時等於2;再次開始外循環
echo $j;此時$j的變數還等於2;因此輸出2
執行至內循環處,內循環開始,$j重新被初始化為1代入循環
內循環體什麼都沒做,循環執行2次(最終$j=3;$i=2<$j;內循環終止)
$i++;$i此時等於3;再次開始外循環
echo $j;此時$j的變數還等於3;因此輸出3
執行至內循環處,內循環開始,$j重新被初始化為1代入循環
內循環體什麼都沒做,循環執行3次(最終$j=4;$i=3<$j;內循環終止)
$i++;$i此時等於4;再次開始外循環
。。。。。以此類推
第二段代碼和第三段代碼與第一段的不同之處僅在於內外循環的輸出語句不同,按照此方法分析即可得到輸出結果
循環演算法是基礎演算法之一,原理簡單但是分析比較麻煩,尤其涉及到嵌套。在剛開始學的時候經常搞不懂這是很正常的。解決的方法就是靜下心來,把自己當做是一台速度極慢的計算機,按照for循環的執行過程逐條語句瀏覽,很快就可以弄明白的,祝你成功!
9. c語言程序設計中的循環嵌套是什麼
一.學好C語言的運算符和運算順序
這是學好《C程序設計》的基礎,C語言的運算非常靈活,功能十分豐富,運算種類遠多於其它程序設計語言。在表達式方面較其它程序語言更為簡潔,如自加、自減、逗號運算和三目運算使表達式更為簡單,但初學者往往會覺的這種表達式難讀,關鍵原因就是對運算符和運算順序理解不透不全。當多種不同運算組成一個運算表達式,即一個運算式中出現多種運算符時,運算的優先順序和結合規則顯得十分重要。在學習中,只要我們對此合理進行分類,找出它們與我們在數學中所學到運算之間的不同點之後,記住這些運算也就不困難了,有些運算符在理解後更會牢記心中,將來用起來得心應手,而有些可暫時放棄不記,等用到時再記不遲。
先要明確運算符按優先順序不同分類,《C程序設計》運算符可分為15種優先順序,從高到低,優先順序為1
~
15,除第2、3級和第14級為從右至左結合外,其它都是從左至右結合,它決定同級運算符的運算順序.
二.學好C語言的四種程序結構
(1)順序結構
順序結構的程序設計是最簡單的,只要按照解決問題的順序寫出相應的語句就行,它的執行順序是自上而下,依次執行。
例如;a
=
3,b
=
5,現交換a,b的值,這個問題就好像交換兩個杯子水,這當然要用到第三個杯子,假如第三個杯子是c,那麼正確的程序為:
c
=
a;
a
=
b;
b
=
c;
執行結果是a
=
5,b
=
c
=
3如果改變其順序,寫成:a
=
b;
c
=
a;
b
=
c;
則執行結果就變成a
=
b
=
c
=
5,不能達到預期的目的,初學者最容易犯這種錯誤。
順序結構可以獨立使用構成一個簡單的完整程序,常見的輸入、計算,輸出三步曲的程序就是順序結構,例如計算圓的面積,其程序的語句順序就是輸入圓的半徑r,計算s
=
3.14159*r*r,輸出圓的面積s。不過大多數情況下順序結構都是作為程序的一部分,與其它結構一起構成一個復雜的程序,例如分支結構中的復合語句、循環結構中的循環體等。
(2)
分支結構
順序結構的程序雖然能解決計算、輸出等問題,但不能做判斷再選擇。對於要先做判斷再選擇的問題就要使用分支結構。分支結構的執行是依據一定的條件選擇執行路徑,而不是嚴格按照語句出現的物理順序。分支結構的程序設計方法的關鍵在於構造合適的分支條件和分析程序流程,根據不同的程序流程選擇適當的分支語句。分支結構適合於帶有邏輯或關系比較等條件判斷的計算,設計這類程序時往往都要先繪制其程序流程圖,然後根據程序流程寫出源程序,這樣做把程序設計分析與語言分開,使得問題簡單化,易於理解。程序流程圖是根據解題分析所繪制的程序執行流程圖。
學習分支結構不要被分支嵌套所迷惑,只要正確繪制出流程圖,弄清各分支所要執行的功能,嵌套結構也就不難了。嵌套只不過是分支中又包括分支語句而已,不是新知識,只要對雙分支的理解清楚,分支嵌套是不難的。下面我介紹幾種基本的分支結構。
①if(條件)
{
分支體
}
這種分支結構中的分支體可以是一條語句,此時「{
}」可以省略,也可以是多條語句即復合語句。它有兩條分支路徑可選,一是當條件為真,執行分支體,否則跳過分支體,這時分支體就不會執行。如:要計算x的絕對值,根據絕對值定義,我們知道,當x>=0時,其絕對值不變,而x<0時其絕對值是為x的反號,因此程序段為:if(x<0)
x=-x;
②if(條件)
{分支1}
else
{分支2}
這是典型的分支結構,如果條件成立,執行分支1,否則執行分支2,分支1和分支2都可以是1條或若干條語句構成。如:求ax^2+bx+c=0的根
分析:因為當b^2-4ac>=0時,方程有兩個實根,否則(b^2-4ac<0)有兩個共軛復根。其程序段如下:
d=b*b-4*a*c;
if(d>=0)
{x1=(-b+sqrt(d))/2a;
<br/>x1=(-b-sqrt(d))/2a;
<br/>printf(「x1=%8.4f,x2=%8.4f\n」,x1,x2);
<br/>}
else
{r=-b/(2*a);
<br/>i
=sqrt(-d)/(2*a);
<br/>printf(「x1=%8.4f+%8.4fi\n」r,
i);
<br/>printf(「x2=%8.4f-%8.4fi\n」r,i)
<br/>}
③嵌套分支語句:其語句格式為:
if(條件1)
{分支1};
else
if(條件2)
{分支2}
else
if(條件3)
{分支3}
……
else
if(條件n)
{分支n}
else
{分支n+1}
嵌套分支語句雖可解決多個入口和出口的問題,但超過3重嵌套後,語句結構變得非常復雜,對於程序的閱讀和理解都極為不便,建議嵌套在3重以內,超過3重可以用下面的語句。
④switch開關語句:該語句也是多分支選擇語句,到底執行哪一塊,取決於開關設置,也就是表達式的值與常量表達式相匹配的那一路,它不同if…else
語句,它的所有分支都是並列的,程序執行時,由第一分支開始查找,如果相匹配,執行其後的塊,接著執行第2分支,第3分支……的塊,直到遇到break語句;如果不匹配,查找下一個分支是否匹配。這個語句在應用時要特別注意開關條件的合理設置以及break語句的合理應用。
(3)循環結構:
循環結構可以減少源程序重復書寫的工作量,用來描述重復執行某段演算法的問題,這是程序設計中最能發揮計算機特長的程序結構,C語言中提供四種循環,即goto循環、while循環、do
–while循環和for循環。四種循環可以用來處理同一問題,一般情況下它們可以互相代替換,但一般不提倡用goto循環,因為強制改變程序的順序經常會給程序的運行帶來不可預料的錯誤,在學習中我們主要學習while、do…while、for三種循環。常用的三種循環結構學習的重點在於弄清它們相同與不同之處,以便在不同場合下使用,這就要清楚三種循環的格式和執行順序,將每種循環的流程圖理解透徹後就會明白如何替換使用,如把while循環的例題,用for語句重新編寫一個程序,這樣能更好地理解它們的作用。特別要注意在循環體內應包含趨於結束的語句(即循環變數值的改變),否則就可能成了一個死循環,這是初學者的一個常見錯誤。
在學完這三個循環後,應明確它們的異同點:用while和do…while循環時,循環變數的初始化的操作應在循環體之前,而for循環一般在語句1中進行的;while
循環和for循環都是先判斷表達式,後執行循環體,而do…while循環是先執行循環體後判斷表達式,也就是說do…while的循環體最少被執行一次,而while
循環和for就可能一次都不執行。另外還要注意的是這三種循環都可以用break語句跳出循環,用continue語句結束本次循環,而goto語句與if構成的循環,是不能用break和
continue語句進行控制的。
順序結構、分支結構和循環結構並不彼此孤立的,在循環中可以有分支、順序結構,分支中也可以有循環、順序結構,其實不管哪種結構,我們均可廣義的把它們看成一個語句。在實際編程過程中常將這三種結構相互結合以實現各種演算法,設計出相應程序,但是要編程的問題較大,編寫出的程序就往往很長、結構重復多,造成可讀性差,難以理解,解決這個問題的方法是將C程序設計成模塊化結構。
(4)模塊化程序結構
C語言的模塊化程序結構用函數來實現,即將復雜的C程序分為若干模塊,每個模塊都編寫成一個C函數,然後通過主函數調用函數及函數調用函數來實現一大型問題的C程序編寫,因此常說:C程序=主函數+子函數。
因此,對函數的定義、調用、值的返回等中要尤其注重理解和應用,並通過上機調試加以鞏固。