Presentation is loading. Please wait.

Presentation is loading. Please wait.

CSIM, PU C Language Introduction to the C Programming Language 重覆敘述 (for,while,break,continue) 適合重複性的計算或判斷.

Similar presentations


Presentation on theme: "CSIM, PU C Language Introduction to the C Programming Language 重覆敘述 (for,while,break,continue) 適合重複性的計算或判斷."— Presentation transcript:

1 CSIM, PU C Language Introduction to the C Programming Language 重覆敘述 (for,while,break,continue) 適合重複性的計算或判斷

2 CSIM, PU C Language 2 選擇性結構 (if-else statements)  if-else 敘述的語法格式如下: Statement1  if-else 敘述的流程圖: if (expr) { Statement1; } else { Statement2; } Statement3; Statement1 expr true false Statement2 Statement3 根據判斷條件的結 果為真或假來執行 Statement 1 或 2, 最 後都會再回到 Statement3 繼續執 行.

3 CSIM, PU C Language 3 重複性結構  根據判斷條件的成立與否 ,決定程式段落的執行次 數,這個程式段落就稱為 迴圈的主體,如右圖的虛 線範圍。  重覆敘述 (iteration statement ), 包括 while 、 for 及 do while( 下學期會教 ) 敘述。 Statement2 expr true false Statement1  重複性敘述的流程圖:

4 CSIM, PU C Language 4  重覆敘述 --for 迴圈 (for loop)  for 迴圈的語法格式如下: for ( expr1 ; expr2 ; expr3 ) { statements; } next-statements; for ( expr1 ; expr2 ; expr3 ) { statements; } next-statements; 運算式 1(expr1 ) 為迴圈控制變數的初值。 運算式 2 (expr 2) 為迴圈是否重覆執行的條件。 運算式 3 (expr 3) 為迴圈控制變數的增減值。 以上 3 種運算式若有兩個以上的參數請以逗號隔開。 此處不可加分號

5 CSIM, PU C Language 5 重覆敘述 --for 迴圈 (for loop)--- 範例 1  #include  main()  {  int i, sum=0; /* 宣告變數 i 、 sum 為整數 */  for (i=1;i<=100;i++)  {  sum= sum+ i;  }  printf(“sum = %d \n”, sum); /* 迴圈結束時,印出 sum 的值 */  } 範例 1 :計算 1 累加至 100 的總和,並輸出其總和 Ch3_1_1.c /* 定義 i 的初值為 1 */ /* 判斷 i 的值是否小於等於 100 */ /* 如果是的話就作 sum+i, 並且將 i 作加 1 的動作 */

6 CSIM, PU C Language 6 重覆敘述 --for 迴圈 (for loop)--- 範例 2 範例 2 流程圖: 輸入一個正整數 N ,計算 1 累加至 N 的總和,並輸出其總和 流程圖符號說明 處理符號 流向符號 判斷符號 起始符號 / 結束符號 輸入 / 輸出方塊 開始 I <= N? Sum = Sum +I 結束 false Sum = 0 I = 1 輸入 正整數 N true I = I + 1 印出累加值

7 CSIM, PU C Language 7 重覆敘述 --for 迴圈 (for loop)--- 範例 2  #include  int main()  {  int i,N, sum=0;  printf("Please input an integer: "); /* 由鍵盤輸入數值 N*/  scanf("%d", &N );  for (i=1; i<=N; i++)  {  sum= sum+i; /* 計算 1+2+…+N*/  }  printf("1+2+…+%d = %d \n",N, sum); /* 印出 sum 的值 */  system("pause");  return 0;  } Ch3_1_2.c 範例 2 程式碼:

8 CSIM, PU C Language 8 重覆敘述 --for 迴圈 (for loop)--- 範例 3 範例 3 :流程圖 輸入 5 個實數,計算並輸出其平均值 N 表示輸入實數的個數 開始 I =1 Sum = 0.0 輸入實數 Data 結束 I = N ? Avg = Sum / 5 輸出 Avg true false I = I+1 Sum=Sum+Data

9 CSIM, PU C Language 9 重覆敘述 --for 迴圈 (for loop)--- 範例 3  #include  int main()  {  int i;  double avg,sum;  float Data;  for(i=1,sum=0; i<=5; i++)  {  printf(" 請輸入實數 : ");  scanf("%f", &Data);  sum = sum+Data; }  avg = sum/5.0;  printf(“ 平均值 =%.3f\n”,sum); /*.3f 表示只印至小數點第三位之值 */  system("pause");  return 0; } 範例 3 : 程式碼 Ch3_1_3.c

10 CSIM, PU C Language 10 重覆敘述 --for 迴圈 (for loop)--- 範例 4  #include  int main()  {  int i, n, f;  printf(" 請輸入一個正整數 n : ");  scanf("%d", &n);  f=1;  for (i=n; i>1; i--)  {  f=f*i;  printf(" 迴圈變數 i 值 = %d ",i);  printf(" 連乘積 f 值 = %d\n", f);  }  system("pause");  return 0;  }  執行結果 :  請輸入一個正整數 n : 4  迴圈變數 i 值 = 4 連乘積 f 值 = 4  迴圈變數 i 值 = 3 連乘積 f 值 = 12  迴圈變數 i 值 = 2 連乘積 f 值 = 24 範例 4 : f(n)=n*(n-1)*(n-2)*(n-3)…*3*2*1 Ch3_1_4.c

11 CSIM, PU C Language 11 九九乘法表 — 巢狀 for 迴圈 (nested for loop)--- 範例 5  #include  int main()  {  int i, j;  for (i=1; i<=9; i++) /* 外層迴圈 */  {  for (j=1; j<=9; j++) /* 內層迴圈 */  {  printf("%d*%d=%2d ", i, j, i*j);  }  system(“pause”);  return 0; } 開始 結束 i 為外層迴圈的控制變數 j 為內層迴圈的控制變數 i=1 i=i+1 j=j+1 j=1 印出 i*j i<=9 j<=9 false true false

12 CSIM, PU C Language 12 重覆敘述 --for 迴圈 (for loop)--- 範例 5 範例 5 執行結果 : 若要將表格排列如下,應如何修改? 1*1= 1 1*2= 2 1*3= 3 1*4= 4 1*5= 5 1*6= 6 1*7= 7 1*8= 8 1*9= 9 2*1= 2 2*2= 4 2*3 = 6 2*4= 8 2*5=10 2*6=12 2*7=14 2*8=16 2*9=18 3*1= 3 3*2= 6 3*3= 9 3*4=12 3*5=15 3*6=18 3*7=21 3*8=24 3*9=27 4*1= 4 4*2= 8 4*3=12 4*4=16 4*5=20 4*6=24 4*7=28 4* 8=32 4*9=36 5*1= 5 5*2=10 5*3=15 5*4=20 5*5=25 5*6=30 5*7=35 5*8=40 5*9=45 6*1= 6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36 6*7=42 6*8=48 6*9=54 7*1= 7 7*2=14 7*3=21 7 *4=28 7*5=35 7*6=42 7*7=49 7*8=56 7*9=63 8*1= 8 8*2=16 8*3=24 8*4=32 8*5=40 8*6= 48 8*7=56 8*8=64 8*9=72 9*1= 9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81

13 CSIM, PU C Language 13 重覆敘述 — 巢狀 for 迴圈 (nested for loop)--- 範例 6  #include  int main()  {  int i,k;  for(i=1;i<=5;i++)  {  for(k=1;k<=i;k++)  {  printf(“%d”,k);  }  printf("\n");  }  system("pause");  return 0;  }  執行結果 :  練習 : 如果想改成倒三角形的話, 程 式要怎麼改呢 ?

14 CSIM, PU C Language 14 重覆敘述 --for 迴圈 (for loop)--- 範例 7  #include  int main()  {  char ch;  int i, sumA=0, sumB=0, sumC=0;  for (i=0; i<10; i++)  {  printf(“ 請輸入一個字元 ch : ”); /* 讓使用者可一再輸入字元, 直到滿足 for 迴圈或 break 條件 */  scanf("%c",&ch);  switch (ch)  {  case 'A' : sumA++; break;  case 'B' : sumB++; break;  case 'C' : sumC++; break; }  fflush(stdin);  if (!(ch>='A'&& ch<='C')) break; /* 當使用者輸入之值不在 A~C 的範圍時就會跳離開迴圈 */  }  printf("\nA 出現 %d 次 \n", sumA);  printf("B 出現 %d 次 \n", sumB);  printf("C 出現 %d 次 \n", sumC);  system("pause");  return 0;} Ch3_1_7.c 練習 1 :計算字元 A,B,C 出現的次數

15 CSIM, PU C Language 15  重覆敘述 --while loop  適用於事先不確定迴圈需要執行多少次.  while loop 的語法格式如下:  依靠一個條件運算式來判斷是否停止迴圈.  迴圈內的 statement 必須能改變 條件運算式的結果才能離開迴圈, 否 則也會變成無窮迴圈. 設定迴圈初值 ; while ( expr ) { statements; } next-statements; 設定迴圈初值 ; while ( expr ) { statements; } next-statements; 迴圈主體 ; 設定增減量 ; 條件運算式

16 CSIM, PU C Language 16  重覆敘述 (while loop) expr Statements ( 迴圈主體, 設定值的增減 ) true false next-statements  while loop 的流程圖

17 CSIM, PU C Language 17 重覆敘述 --while 迴圈 (while loop) 範例 1 範例 1 流程圖: 求兩數的最大公因數 開始 輸入 M 和N和N X>Y? X=M Y=N X<Y? X!=Y? 輸出 X 即為 最大公因數 X=X-Y Y=Y-X true false 結束

18 CSIM, PU C Language 18 重覆敘述 --while 迴圈 (while loop)--- 範例 1  #include  int main(void)  {int M, N, X, Y;  printf(" 輸入兩個正數值 M,N \n");  scanf("%d %d",&M, &N);  /* 由鍵盤輸入數值 */  X=M; Y=N;  while(X != Y)  {  if(X > Y)  X=X-Y;  if(X < Y)  Y=Y-X;  }  printf("M 和 N 的最大公因數 =%d ",X);  printf("\n");  system("pause");  return 0; } Ch3_2_1.c

19 CSIM, PU C Language 19 重覆敘述 --while 迴圈 (while loop) 範例 3  /* Copy the input to screen */  #include  int main()  {  char ch;  while ( ( ch = getche() ) != '\r' )  {  /* 判斷輸入的字元是不是換行符號 */  putchar(ch);  printf("\n");  }  system("pause");  return 0;  } 執行結果 : 輸入 g 與 x, 再按下 enter 鍵

20 CSIM, PU C Language 20 重覆敘述 --while 迴圈 (while loop) 範例 4  假設有一盒子中, 裝了 1024 顆雞蛋, 若每次拿取盒中一半的雞蛋, 請問拿取 幾次後, 盒中只剩一顆雞蛋 ?  /*the last one*/  main()  {  int n=1024, takes=0;  while (n>1)  {  n=n/2;  takes++;  }  printf(" 拿 %d 次後盒中只剩下一顆雞蛋 \n", takes);  }

21 CSIM, PU C Language 21 重覆敘述 --while 迴圈 (while loop) 範例 5  #include  int main()  {  int a, b, n10=0, n5=0, n1=0;  printf(" 請輸入鉛筆盒金額 a 元 : ");  scanf("%d", &a);  b=100-a;  n10=0;  while(b>10) /* 可換成多少個 10 元 */  {  b=b-10;  n10++;  }  if (b>5) /* 可換成多少個 5 元 */  {  b=b-5;  n5++;  }  else /* 可換成多少個 1 元 */  n5=0;  n1=b;  printf(" 鉛筆盒金額 %d 元 \n", a);  printf(" 給 100 元,退還 %d 元 \n", 100-a);  printf(" 10 元 %d 個 \n", n10);  printf(" 5 元 %d 個 \n", n5);  printf(" 1 元 %d 個 \n", n1);  system("pause");  return 0;  } 某人到書局買一枝筆 a 元, 拿一百元鈔票給老板, 請問老板該找他幾個 十元, 幾個五元, 幾個一元 ?

22 CSIM, PU C Language 22 重覆敘述 —for 與 while 的比較 for (i=1;i<=5;i++,j++) { sum=sum+i*j; } i=1; while(i<=5) { j++ ;i++; sum=sum+i*j; }

23 CSIM, PU C Language 23 無窮迴圈  for( ; ; )  {  statement;  }  while(1)  {  statement;  } 如果迴圈的條件永遠為真,則會形成無窮迴圈,程式將無法停止,若要強制中 斷可按下 Ctrl + C 鍵強迫中止.

24 CSIM, PU C Language 24 重覆敘述 --for 迴圈 ( 無窮迴圈 ) ---- 範例 8 範例 6 :無窮 for 迴路 (for loop with forever loop)  #include  int main()  {  int i;  int count = 1;  for ( ; ; )  {  printf("\1: guess number here: ");  scanf("%d",&i);  if ( i == 5 )/* 表示當 i 之值全等於 5 時, 就會離開此迴圈 */  break;  count++;/* 若 i 之值不等於 5, 則繼續將 count 變數加 1*/  }  printf("\2: You take %d times to get it.\n",count);  system(“pause”);  return 0; } 無窮迴圈, 此種寫法要小心 確認終止條件一定會成立, 否則程式會一直執行

25 CSIM, PU C Language 25 重覆敘述 --for 迴圈 (for loop) --- 範例 8 範例 6 執行結果 : ☺ : guess number here: 1 ☺ : guess number here: 2 ☺ : guess number here: 3 ☺ : guess number here: 19 ☺ : guess number here: 5 ☻ : You take 5 times to get it.

26 CSIM, PU C Language 26 重覆敘述 --while 迴圈 (while loop) 範例 9  範例 2:while(1) 與 switch 的應用  #include  int main()  {  int i;  while(1)  { /* 無論如何一定要執行此迴圈 */  printf("Enter 1-4 for exit==>");  scanf("%d",&i);  switch(i)  {  case 1:  printf(" Excellent!\n");  break;  case 2:  printf(" Good!\n");  break;  case 3:  printf(" Fair!\n");  break;  case 4:  printf(" Bye!\n");  break;  default: /* 若輸入之值不在 1~4*/  printf(" Illegal number try again!\n");  }  if(i==4) /* 當 i 之值全等於 4 時, 才離 開此迴圈 */  break;  }  system("pause");  return 0;  }

27 CSIM, PU C Language 27 重覆敘述 --while 迴圈 (while loop) 範例 9 執行結果 執行結果 : Enter 1-4 for exit==>1 Excellent! Enter 1-4 for exit==>2 Good! Enter 1-4 for exit==>3 Fair! Enter 1-4 for exit==>4 Bye!

28 CSIM, PU C Language 28 重覆敘述 (Break and Continue 比較 ) breakContinue 不同點跳離迴圈, 繼續執行接在迴 圈後面的敘述. 忽略接在 continue 後面的敘 述, 直接返回到迴圈的條件 運算式, 並判斷是否繼續執 行迴圈. 相同點可用在 for 、 while 、 do- while

29 CSIM, PU C Language 29 Break 與 Continue--- 範例 10  #include  int main() {{  char ch;  int ans,keyin,num1,num2;  while(1) /* 外層的 while 迴圈 */  {  printf("\n 請輸入兩個整數 :\n");  scanf("%d %d",&num1,&num2);  ans=num1*num2;  while(1) /* 內層的 while 迴圈 */  {  printf("%d * %d =",num1,num2);  scanf("%d",&keyin);  if(keyin==ans)  {  printf(" 答對了 \n");  break; /* 若答對就離開內層的迴圈, 跳至 接在內層迴圈後的程式碼 */  }  else  {  printf(" 答錯了 \n");  continue; /* 若答錯就回到內層的迴圈判斷條件 */  }  printf("\n 是否繼續執行 :");  ch=getche();  if(ch==‘n’) /* 若輸入 n 表示要離開外層迴圈, 跳至接在外 層迴圈後的程式碼 */  break;  }  printf("\n");  system("pause");  return 0; }}

30 CSIM, PU C Language 30 Break 與 Continue--- 範例 10  執行結果 : 使用者輸入之值


Download ppt "CSIM, PU C Language Introduction to the C Programming Language 重覆敘述 (for,while,break,continue) 適合重複性的計算或判斷."

Similar presentations


Ads by Google