1 / 30

Introduction to the C Programming Language

Introduction to the C Programming Language. 重覆敘述 (for,while,break,continue) 適合重複性的計算或判斷. false. expr. true. Statement2. Statement1. Statement3. 選擇性結構 (if-else statements). if-else 敘述的語法格式如下:. if-else 敘述的流程圖:. 根據判斷條件的結果為真或假來執行 Statement 1 或 2, 最後都會再回到 Statement3 繼續執行. if ( expr )

dwight
Download Presentation

Introduction to the C Programming Language

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

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

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

  5. 重覆敘述--for迴圈(for loop)---範例1 • #include<stdio.h> • 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的總和,並輸出其總和 /*定義i的初值為1*/ /*判斷i的值是否小於等於100*/ /*如果是的話就作sum+i,並且將i作加1的動作*/ Ch3_1_1.c

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

  7. 重覆敘述--for迴圈(for loop)---範例2 • #include<stdio.h> • 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; • } 範例2 程式碼: Ch3_1_2.c

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

  9. 重覆敘述--for迴圈(for loop)---範例3 • #include<stdio.h> • 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. #include<stdio.h> 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 重覆敘述--for迴圈(for loop)---範例4 範例4: f(n)=n*(n-1)*(n-2)*(n-3)…*3*2*1 Ch3_1_4.c

  11. #include<stdio.h> 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; } 九九乘法表—巢狀for迴圈(nested for loop)---範例5 開始 i為外層迴圈的控制變數 j為內層迴圈的控制變數 i=1 i=i+1 false true j<=9 印出i*j j=j+1 true i<=9 j=1 false 結束

  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. #include<stdio.h> 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; } 執行結果: 練習:如果想改成倒三角形的話,程式要怎麼改呢? 重覆敘述—巢狀for迴圈(nested for loop)---範例6

  14. 重覆敘述--for迴圈(for loop)---範例7 • #include<stdio.h> • 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;} 練習1:計算字元A,B,C出現的次數 Ch3_1_7.c

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

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

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

  18. #include <stdio.h> 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; } 重覆敘述--while迴圈(while loop)---範例1 Ch3_2_1.c

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

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

  21. #include<stdio.h> 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; } 重覆敘述--while迴圈(whileloop)範例5 某人到書局買一枝筆a元, 拿一百元鈔票給老板,請問老板該找他幾個十元, 幾個五元,幾個一元?

  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. for( ; ; ) { statement; } while(1) { statement; } 無窮迴圈 如果迴圈的條件永遠為真,則會形成無窮迴圈,程式將無法停止,若要強制中斷可按下Ctrl + C鍵強迫中止.

  24. 重覆敘述--for迴圈(無窮迴圈) ----範例8 範例6:無窮for迴路 (for loop with forever loop) • #include<stdio.h> • 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. 重覆敘述--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. 範例2:while(1)與switch的應用 #include<stdio.h> #include<stdlib.h> 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; } 重覆敘述--while迴圈(while loop)範例9

  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. 重覆敘述(Break and Continue比較)

  29. #include<stdio.h> #include<stdlib.h> 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; } Break與Continue---範例10

  30. Break與Continue---範例10 • 執行結果: 使用者輸入之值

More Related