控制結構(二)
前面我們已經了解到了,控制結構中的判斷結構,當然switch語句也是判斷語句。不過如果if...else...語句你會了,我相信switch語句你也一定會的,它們的功能都是差不多的,只是switch語句在某些時候會讓程序更簡潔一點,此語法請看書自學。
下面進入正題。
2.循環語句。
在c語言中,循環語句一共有兩種,分別是 1):while循環. 2):for循環
基本語法格式:
1):while循環
//第一種: while() //括號內是判斷語句,如為假,則不在執行大括號內的內容 { printf("......"); }
//第二種: do//先執行下面的語句 { printf("......"); } while(); //注意有一個分號,括號內是判斷語句,如為假,則不再上面執行大括號內的內容
第一種與第二種有什麼區別嗎?肯定是有的。先記著,第一種至少會運行0次大括號內的類容,第二種至少會運行一次大括號內的類容。下面會解釋的。
2):for循環
for( 1 ; 2 ; 3 ) { 4 }
由於for循環比while循環復雜一點,所以有必要仔細把它講一下。首先明確此語法在程序中的運行順序
1->2->4->3->2->4->3->2...... 如果不結束的話,就會如此循環往復的運行下去,什麼時候結束呢?當3中的判斷語句為假的時候,for循環就會結束。可能現在講著有點抽象,下面我會用實際的樣例來講清楚循環結構的用法。
此時的你旁邊有一台開著編譯器的電腦嗎?
如果有的話,那麼開始吧.
很簡單的一道題,在鍵盤中輸入一百的數,然後輸出從1到100之間所有數的和。
當然,做了兩個數相加(如果你認真看過前面的)的你肯定能想到一種笨辦法,它的程序如下
#include<stdio.h> int main() { int a; //從鍵盤中輸入100 scanf("%d",&a); //省略的內容能補上去吧?我可不想做這麼累的事 printf("%d",1+2+3+4+...+100); }
如果你獨立寫出了上面我沒完成的程序,那麼我只能給你說,你太傻太天真。那麼有什麼方法可以簡化這個操作呢?機器的優點,機器擅長做很多重復性的操作,當然計算機也是這樣。而重復性的操作,既是循環。好好理解下面的代碼,看看是如何轉化為循環性的問題的。
#include<stdio.h> int main() { int a,i,sum=0; //從鍵盤中輸入100 scanf("%d",&a); /*i的初始值為1,每次i都加一,i++與++i的區別自己看看書 位於中間的i<=a是一個類似if()括號中的判斷,如果i<=a就執行 大括號中的操作,不然就跳出循環*/ for(i=1;i<=a;i++) { sum=sum+i; //sum每次加上一個i的值,i每次都自加一 //於是就實現了前i個正整數的和 } printf("%d\n",sum); //"\n"為換行符,以前沒提到過 }
如果理解了上面的程序,那麼繼續往下看吧.
對於每一個for()循環,都可以轉換為while()循環,對於每一個while()循環,都可以轉換為for()循環.下面用while()循環實現上面的程序的功能
#include<stdio.h> int main() { int a,i,sum=0; //從鍵盤中輸入100 scanf("%d",&a); i=1; //i的值從一開始 while(i<=a)//如果i<=a的時候執行大括號內的操作 { sum=sum+i; i++;//i自加一 } printf("%d\n",sum); //"\n"為換行符,以前沒提到過 }
當然,for() 和while()中可以有很多實現它的辦法,不過原理總是不會變化的,都是實現一個"累加器"的過程,例如:
//for()循環中的內容可以放在適當的內容 //來實現同樣的功能 i=1 for(; ; ) { sum=sum+i; i++; if(i==a+1) break; }
//同樣while()循環也可以 i=1 while(1) //1在計算機中代表真,即while循環一直 //為真,即一直會循環下去, { sum=sum+i; i++; //當i的值等於a+1時,需要打破這個循環 if(i==a+1) break; }
在上面的程序中,出現了 break; 這一語句,它的意思是 跳出/打破 這個循環.在c語言中,還有 contiue; 語句,它的意思是不再執行下面的語句,繼續運行這個循環語句中的下一個循環.上面兩個都需要在循環中使用. 還有 goto 語句可以了解一下,比較實用.
運行結果:
當然,前面提到的do ... while ; 和 while 循環的區別此時你肯定已經能理解了,如不能理解,結合文字,或者自己寫寫代碼試試。
上面的程序能理解的話,循環對你應該沒過大的問題了.雖然這很基礎,但是萬變不離其宗.
那好,下面算算前n個正整數,其中的所有的偶數的和吧.
很簡單,就是讓i從0開始,在i不大於a的情況下,讓i每次都自加2,這樣得到的結果即為所有偶數的和了.