迴圈就是某段程式碼要重複執行
C語言分三種迴圈for,while,do..while
基本上,都是只要條件成立就會繼續執行,所以是可以互換的,只差在for跟while是先判斷條件在執行,do...while則是先執行到下面才判斷條件是否成立。
跳脫(break)與繼續(continue)
break; 只要在迴圈內執行這個指令,迴圈就會跳脫(不繼續loop)
continue; 只要在迴圈內執行這個指令,迴圈會直接開始下一圈
迴圈與if相同,只要單行都可以省略大括號
for迴圈
for(初始指令;條件;迴圈末端執行指令) { 成立時執行的指令; }
初始指令
執行迴圈之前,先執行初始指令,可以不執行,也可以執行多個指令(用逗號隔開,與三元運算相同)
條件
與if、while、do..while相同都是如果成立時執行,可以填入多個條件(用逗號隔開),也可用&& || !等布林運算
迴圈末端執行指令
每圈所有程式執行完之後,在後面執行的指令,也可以是多個指令(用逗號隔開)
for迴圈主要用在"知道要重複執行幾次"的程式碼,而通常for迴圈會用一個變數index來做計算次數,並用index來作條件
但是for也可以用來做不知道次數的用途 index不只可以決定迴圈次數,並且可以拿來輸出,協助計算,比方說第一圈的時候輸出1,第二圈輸出2...,這樣就把i輸出就好了 常用的寫法
int i; for(i=0;i<20;i++){...;}//執行20次 (i從0~19) for(i=1;i<=20;i++){...;}//執行20次 這種寫法相當於VB的for i= 1 to 20
當然,初始動作,結束動作,條件等都不一定要使用這樣的格式,不一定要有i,不一定要初始化i,末端也可以執行不是i++的指令,而且,那三個地方都能執行多個指令,與三元運算子相同,多個指令用逗號隔開
int i,j; for(i=1,j=2;i<=20,j<=30;i++,j++){...;}//執行多個初始動作,多個條件,多個迴圈末端動作 for(i=20;i>=1;i--){...;}//執行20次,從20開始 相當於VB for i=20 to 1 step -1 i=5; for( ;i<=20;i++)//不含初始動作 i沒有初始,所以為上一行的5 相當於VB for i=5 to 20
99乘法表範例
#include void main() { int x,y; for(y=1;y<=9;y++) { for(x=1;x<=9;x++) { printf("%dx%d=%d\t",x,y,x*y); } printf("\n"); } }
印字元範例
#include <stdio.h> void main() { int n=0; char c; printf("Please enter how many char you want to print"); scanf("%d",&n); scanf("%c",&c);//取得換行 printf("Please enter which you want to print"); scanf("%c",&c); int i=0; for(i=0;i<n;i++) printf("%c",c); }
印三角
#include<stdio.h> void print_n_ch(int n,char c) { int i=0; for(i=0;i<n;i++) printf("%c",c); } void main() { int i=0,h; printf("enter the height of the triangle "); scanf("%d",&h); for(i=1;i<=h;i++)//正印 { print_n_ch(i,'*'); printf("\n"); } }
印全部三角
void print_n_ch(int n,char c) { int i=0; for(i=0;i=1;i--)//反印 此初始值沿用 上方最後的i 上方最後的i為 h+1 因為三角形尖端只有一行 所以反印要比h-1 { print_n_ch(i,'*'); printf("\n"); } }
while迴圈
while(條件) { 成立時執行的指令; }
while通常用在不知道到底要執行幾次的程式碼,比如說我要執行很多次,如果輸入-1程式就結束了,這種條件不成立才會結束,但不知道要執行幾次的程式碼就可以用while,但是知道次數也可以使用while,可以將while做for用。
條件
與if、for、do..while相同都是如果成立時執行,也可用&& || !等布林運算
while迴圈主要用在"不知道要重複執行幾次"的程式碼
範例 模擬for(i=1;i<=20;i++) VB for i=1 to 20
int i=1;//初始化 while(i<=20)//條件 { /*其他code*/ i++;//尾端+1 }
範例 無限輸入(直到-1)
int input=0; while(input!=-1)//不知道多少圈 但是-1就結束的結構 { scanf("%d",&input); /*其他處理*/ }
範例 無限輸入第二種寫法
int input=0; while(1)//1在C語言表示true 這樣條件永遠成立,所以會無限執行 { scanf("%d",&input); if(input==-1)break;//如果輸入為-1強制跳脫 /*其他處理*/ }
範例 判斷位數
#include<stdio.h> void main() { printf("Please enter a number that I'll tell you how many digital it have "); int num,sizeofnum=0; scanf("%d",&num); printf("The number of digital of %d = ",num); if(num!=0) { while(num!=0) { num/=10; sizeofnum++; } printf("%d",sizeofnum); } }
範例 無限判斷位數 直到-1(結合function)
#include<stdio.h> void digital(int num) { int sizeofnum=0; if(num!=0) { printf("The number of digital of %d = ",num); while(num!=0) { num/=10; sizeofnum++; } printf("%d\n",sizeofnum); } } void main() { int num; while(num!=-1) { printf("Please enter a number that I'll tell you how many digital it have "); scanf("%d",&num); digital(num); } }
do...while迴圈
do { 先執行一次,如果後面成立繼續執行的指令; } while(條件);
do..while主要用在,無論如何都要執行一次,再重複執行的程式碼
do...while後方一定要加分號,跟上面的迴圈不同
條件
與if、for、while相同都是如果成立時執行,也可用&& || !等布林運算
範例 無限輸入 且無論如何都要執行一次
char input='\0'; do { printf("Are you edger?(input y/n)"); scanf("%c",&input); } while(input!='y'); printf("You are honest.");
留言列表