Introduction to the C Programming Language

Slides:



Advertisements
Similar presentations
While 迴圈 - 不知重複執行次數
Advertisements

CSIM, PU C Language Introduction to the C Programming Language 重覆敘述 (for,while,break,continue) 適合重複性的計算或判斷.
親愛的老師您好 感謝您選用本書作為授課教材,博碩文化準備本書精選簡報檔,特別摘錄重點提供給您授課專用。 說明: 博碩文化:
第4章 條件判斷與迴圈 Java 2 程式設計入門與應用.
迴圈 迴圈基本觀念 while迴圈 do 迴圈 for迴圈 巢狀迴圈 迴圈設計注意事項 其他控制指令 迴圈與選擇的組合.
Loops.
第 5 章 流程控制 (一): 條件分支.
第4章 选择结构程序设计 在现实生活中,需要进行判断和选择的情况是很多的 如果你在家,我去拜访你 如果考试不及格,要补考
C语言程序设计 第八章 函数.
第一章 程序设计入门.
C语言程序设计 第五章 选择结构程序设计.
C语言程序设计 课程 第5章 数组 主讲:李祥 博士、副教授 单位:软件学院软件工程系.
循环结构又称为重复结构:用来处理需要重复处理的问题,它是程序中一种很重要的结构。
Class 2 流程控制-選擇敘述與迴圈.
佇列 (Queue).
第3章 顺序结构程序设计 本章要点: 格式化输出函数──printf() 格式输入函数——scanf() 字符输出函数——putchar()
適用於多選一 可減少if 與 else配對混淆的錯誤.
If … else 選擇結構 P27.
Chap 2 用C语言编写程序 2.1 在屏幕上显示 Hello World! 2.2 求华氏温度 100°F 对应的摄氏温度
C 程式設計— 控制敘述 台大資訊工程學系 資訊系統訓練班.
Introduction to the C Programming Language
Introduction to the C Programming Language
QQ: 李祥 QQ: 欢迎多种方式的学习交流,祝大家学有所成.
程式撰寫流程.
C 語言簡介 - 2.
第三章 流程控制與例外處理 資訊教育研究室 製作 注意:本投影片僅供上課使用,非經同意,請勿散播或轉載。
第5章 堆疊(Stacks) 5-1 堆疊的基礎 5-2 堆疊的表示法 5-3 堆疊的應用 - 運算式的計算與轉換
Chap 3 分支结构 3.1 简单的猜数游戏 3.2 四则运算 3.3 查询自动售货机中商品的价格.
1. 說明一個一維整數陣列passwd,下標範圍0至49 2. 在屏幕顯示 "Enter password"
C语言 程序设计基础与试验 刘新国、2012年秋.
第3讲 C++程序控制结构 3.1 顺序结构 3.2 分支结构 3.3 循环结构 3.4 转向控制 3.5 综合案例分析.
本章中將會更詳細地考慮有關重複的概念,並且會 介紹for和do…while等兩種用來控制重複的敘述 式。 也將會介紹switch多重選擇敘述式。 我們會討論直接和迅速離開某種控制敘述式的 break敘述式,以及用來跳過重複敘述式本體剩餘 部份的continue敘述式。 本章會討論用來組合控制條件的邏輯運算子,最後.
計數式重複敘述 for 迴圈 P
第5讲 结构化程序设计(Part II) 周水庚 2018年10月11日.
第0章作业: 教材P12-练习与实践 1.写出用符号’*’输出描绘汉字”大”的流程图。
第4讲 C++程序控制结构(二) 4.1 循环结构 4.2 转向控制 4.3 综合案例分析.
C语言概述 第一章.
程式結構&語法.
4 條件選擇 4.1 程式基本結構 循序式結構 選擇式結構 重複式結構 4-3
第三章 C++的语句和简单的程序设计 主要内容:
for 迴圈 while迴圈 do-while迴圈 break 與 continue goto 與 標籤 程式觀摩
C 语言程序设计 程序的循环结构 电大崇信县工作站 梁海亮.
第2章 算法与C语言程序 程序 (1)数据的描述:数据的类型和组织形式(数据结构) (2)操作的描述:操作步骤(算法) 沃思指出:
Introduction to the C Programming Language
Instructor:Po-Yu Kuo 教師:郭柏佑
请编写程序在屏幕上打印出一个“*”? printf(”*\n”); 请编写程序在屏幕上打印四行,每行一个“*”?
浙江长征职业技术学院—计算机与信息技术系—相方莉制作
Chap 5 函数 5.1 计算圆柱体积 5.2 使用函数编写程序 5.3 变量与函数.
Chap 5 函数 5.1 计算圆柱体积 5.2 数字金字塔 5.3 复数运算.
程式的時間與空間 Time and Space in Programming
輸出與輸入(I/O).
第十四章 若干深入问题和C独有的特性 作业: 函数指针 函数作参数 函数副作用 运算 语句 位段 存储类别 编译预处理
C程序设计.
Introduction to the C Programming Language
程序设计基础.
第五章 逻辑运算和判断选取控制 §5.1 关系运算符和关系表达式
Introduction to the C Programming Language
程式設計--linear search 通訊一甲 B 楊穎穆.
第1章 数据结构基础概论 本章主要介绍以下内容 数据结构研究的主要内容 数据结构中涉及的基本概念 算法的概念、描述方法以及评价标准.
Chap 7 数 组 7.1 排序问题 7.2 找出矩阵中最大值所在的位置 7.3 进制转换.
C/C++基礎程式設計班 C語言入門、變數、基本處理與輸入輸出 講師:林業峻 CSIE, NTU 3/7, 2015.
多重條件選擇敘述
迴圈(重複性結構) for while do while.
C/C++基礎程式設計班 陣列 講師:林業峻 CSIE, NTU 3/14, 2015.
第一次上機考參考答案 僅供參考,同學可自行再想更好的方法..
C语言基本语句 判断循环.
第三章 流程控制 程序的运行流程 选择结构语句 循环结构语句 主讲:李祥 时间:2015年10月.
Q1(a) 小偉打算編寫一個程序。該程序把兩個44的表內的數字相加。表3內的數字是由表1和表2應格子內的數字相加而成。例如:
Introduction to the C Programming Language
C语言基础学习 从外行到入门.
Presentation transcript:

Introduction to the C Programming Language 重覆敘述(for,while,break,continue) 適合重複性的計算或判斷 若傋註 C: 參見 “C語言教學手冊”,洪維恩著 yrjean:“結構化程式語言投影片”, 簡永仁老師

選擇性結構(if-else statements) if (expr) { Statement1; } else Statement2; Statement3; 根據判斷條件的結果為真或假來執行Statement 1或2,最後都會再回到Statement3繼續執行. Statement1 expr true false Statement2 Statement3 Statement1

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

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

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

重覆敘述--for迴圈(for loop)---範例2 範例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; Ch3_1_2.c

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

重覆敘述--for迴圈(for loop)---範例3 範例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

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

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

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

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

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

重覆敘述--while迴圈(while loop)範例2 /* 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鍵

do-while 至少會執行一次;while 可能一次都沒有執行。 重覆敘述(do-while loop) do-while 則是先執行敘述(statements)後, 再判斷運算式(expr)之值是否為真, 再決定是否重覆執行敘述。 do { statements; } while ( expr ); statements true do-while 至少會執行一次;while 可能一次都沒有執行。 C,hu do-while 與 while不同處在於while先判斷運算式是否為真, 再決定是否執行敘述, 而do-while 則是先執行敘述(statements)後, 再判斷運算式(expr)之值是否為真, 再決定是否重覆執行敘述。 do-while 至少會執行一次;while 可能一次都沒有執行。 和 while迴圈一樣要注意無窌迴圈的問題。 expr false

重覆敘述-- 重覆敘述(do-while loop)範例1 #include<stdio.h> /*sum*/ main() { int a, sump=0; do printf("請輸入一個整數a : "); scanf("%d", &a); if (a>0) /*若a為正整數則累績到sump*/ sump=sump+a; } while (a!=0); /*會重覆輸入,直到a輸入為0才結束*/ printf("總和= %d\n", sump); system("pause"); } C dowhilesum.c 從鍵盤輸入一個整數a,若a 為正整數則累績到sump, 再重覆輸入, 直到a輸入為0才結束, 然後, 輸出印出sump的值(總和)

重覆敘述-- 重覆敘述(do-while loop)範例1執行結果 執行結果: 請輸入一個整數a : 1 請輸入一個整數a : 2 請輸入一個整數a : 3 請輸入一個整數a : 4 請輸入一個整數a : 5 請輸入一個整數a : 0 總和= 15

重覆敘述-- 重覆敘述(do-while loop)範例2 從鍵盤輸入一個整數a,若a為正整數則累績到sumP,再重覆輸入,若a為負整數則累績到sumN,再重覆輸入直到a輸入為0才結束, 然後, 輸出印出sumP 以及sumN 的值(總和) 因為此題目是要先輸入一整數,再來作累加的動作,所以非常適合使用do- while #include<stdlib.h> main() { int a, sumP=0, sumN=0; do { printf("請輸入一個整數a : "); scanf("%d", &a); if (a>0) sumP=sumP+a; else sumN=sumN+a; } while (a!=0); printf("正數總和= %d\n", sumP); printf("負數總和= %d\n", sumN); system("pause"); }

重覆敘述—for, while與do while的比較 for (i=1;i<=5;i++,j++) { sum=sum+i*j; } i=1; while(i<=5) { i++; j++ ; sum=sum+i*j; } i=1; do { i++; j++ ; sum=sum+i*j; } while (i<=5); hu

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

重覆敘述--for迴圈(無窮迴圈) ----範例1 範例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; } 無窮迴圈,此種寫法要小心確認終止條件一定會成立,否則程式會一直執行

重覆敘述--for迴圈(for loop) ---範例1 範例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.

重覆敘述--while迴圈(while loop)範例2 範例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"); case 3: printf(" Fair!\n"); break; case 4: printf(" Bye!\n"); default: /*若輸入之值不在1~4*/ printf(" Illegal number try again!\n"); } if(i==4) /*當i之值全等於4時,才離 開此迴圈*/ system("pause"); return 0;

重覆敘述--while迴圈(while loop)範例2 執行結果 執行結果: 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!

重覆敘述(Break and Continue比較) 不同點 終止do, for, switch, while,等敘述在break 那一層次的執行工作 若在巢狀迴圈(nested loop)中, break只中止該層次的執行, 而繼績執行下一迴圈 若要中止整個巢狀迴圈可使用return 忽略接在continue後面的敘述,直接返回到該層迴圈的條件運算式,並判斷是否繼續執行迴圈. 相同點 可用在for、while、do-while

Break與Continue---範例1 #include<stdio.h> else #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---範例1 執行結果: 使用者輸入之值

重覆敘述--(continue跳躍敘述)範例2 #include<stdlib.h> main() { int f=1,n; printf("請輸入一個正整數n : "); scanf("%d",&n); while (n>0) if ((n%2)==0) {n--; continue;} /*n為偶數則忽略 f=f*n; */ f=f*n; /*f是奇數連乘積 1*3*5*...*/ n--; } printf("f=%d\n",f); /*印出f值*/ system("pause"); } 請自行練習將此範例改以do while或for迴圈來撰寫 C continue.c 從鍵盤輸入一個正整數n , 計算 f=1*3*5*7…*n 若 n 為偶數, 執行n--, 跳到while敘述,略過第11, 12 行的敘述 若 n 為奇數, 執行第11, 12行的敘述。