計算機CC語言編程程序控制.ppt
《計算機CC語言編程程序控制.ppt》由會員分享,可在線閱讀,更多相關《計算機CC語言編程程序控制.ppt(46頁珍藏版)》請在裝配圖網上搜索。
1,2,提綱,4.1 switch多路選擇結構 4.2 循環(huán)的本質 4.3 計數器控制的循環(huán) 4.4 for循環(huán)結構 4.5 break和continue語句 4.6 邏輯運算符 4.7 相等測試運算符==和賦值運算符= 4.8 結構化程序設計小結,√,√,3,if語句有單分支和雙分支結構 考慮下面要求:變量day取值為0~6,0代表周日、1~6代表周一到周六。輸出要求:當day==0時輸出“Sunday”,day==1時輸出“Monday”…… 這種多分支的選擇結構可以使用switch語句來實現。,4.1 switch多路選擇結構,if (day==0) printf(“Sunday\n”); else if (day==1) printf(“Monday\n”); else if (day==2) printf(“Tuesday\n”); else if (day==3) printf(“Wednesday\n”); else if (day==4) printf(“Thursday\n”); else if (day==5) printf(“Friday\n”); else if (day==6) printf(“Saturday\n”); else printf(“Invalid day!\n”);,4,1.switch語句的一般形式 switch (表達式) { case 常量表達式1:語句組;break; case 常量表達式2:語句組;break; case 常量表達式n:語句組;break; [default:語句組;[break; ]] },4.1 switch多路選擇結構,5,(1)計算switch后面“表達式”的值,當其與某個case后面的“常量表達式”的值相同時,就執(zhí)行該case后面的語句(組);當執(zhí)行到break語句時,跳出switch語句,轉向執(zhí)行switch語句后的下一條語句。 (2)如果沒有任何一個case后面的“常量表達式”的值與“表達式”的值匹配,則執(zhí)行default 后面的語句(組)。然后,再執(zhí)行switch語句后的下一條語句。,4.1 switch多路選擇結構,6,main() { int day; scanf(“%d“, return 0; },case后面的表達式必須是常量表達式,不能含有變量;而且應該是運算結果為整型、字符型或枚舉型(以后會講)的常量表達式;同樣,switch后面的表達式結果也應該是整型、字符型或枚舉型的。注意:不能是浮點型。,2. 每個case后面“常量表達式”的值,必須各不相同,否則會出現互相矛盾的現象。,3.每個case后可以有多條語句,不用大括號括起來。 4. 各case及default子句的先后次序,不影響程序執(zhí)行結果。,5. default語句不是必須的,但最好提供一條default語句,用于集中處理例外情況。且放在最后。 6. break語句不是必須的,可以根據實際需要決定是否要有break語句。,7. 如果不是判斷表達式等于某個值,而是判斷表達式的值在某個范圍內,如: if (i = -10 則不能用switch語句。,7,4.1 switch多路選擇結構,main() { int day; scanf(“%d“, },當輸入為6時,輸出為: Saturday Invalid day! 當輸入為7時,輸出為: Invalid day!,case后面的常量表達式僅起語句標號作用,并不進行條件判斷。系統(tǒng)一旦找到入口標號,就從此標號開始執(zhí)行,不再進行標號判斷,直到遇到break,或者到switch語句結束。,不要忘記break,除非你真的是不需要。,8,4.1 switch多路選擇結構,多個case子句,可共用同一語句(組),表示這些條件有同一組操作。 當grade為‘A’或者‘a’時,均輸出85-100,switch (grade) { case ‘A’: case ‘a’: printf(“85-100\n”); break; case ‘B’: case ‘b’: printf(“70-84\n”); break; case ‘C’: case ‘c’: printf(“60-69\n”); break; case ‘D’: case ‘d’: printf(“below 60\n”); break; default: printf(“input error!\n”); },9,while((grade=getchar())!= EOF){ /*CTRL+Z組合鍵表示EOF,值為-1*/ switch(grade){ caseA:casea:/*成績?yōu)椤瓵’或‘a’*/ aCount++; break; caseB:caseb:/*成績?yōu)椤瓸’或‘b’*/ bCount++; break; caseC:casec:/*成績?yōu)椤瓹’或‘c’*/ cCount++; break; case\n:case :/*輸入為空格或換行*/ break; default: printf(“Incorrect letter grade entered.“); printf(“Entere a new grade.\n“); }/*switch*/ }/*while*/,節(jié)選教材86頁例題,1.getchar():從鍵盤讀取一個字符; 2. caseA:case‘a: aCount++; break; 相當于 caseA: casea‘: aCount++; break;,10,4.1 switch多路選擇結構,練習:輸入年份和月份,輸出該年截至該月共有多少天。要求在判斷某個月有多少天時用switch語句。 閏年的判斷條件: year能被4整除但不能被100整除;或者 能被400整除。,11,,#include #include main() { int year, month,day; int yearDays,i; printf(“input year-month-day:\n“); scanf(“%d-%d-%d“,,12,,yearDays = 0; for(i = 1; i = month-1; i++){ //求第i月的天數 switch(i){ case 1:case 3: case 5:case 7: case 8:case 10: case 12: yearDays += 31; break; case 4:case 6: case 9:case 11: yearDays += 30; break; case 2: if (year % 4 ==0 },13,提綱,4.1 switch多路選擇結構 4.2 循環(huán)的本質 4.3 計數器控制的循環(huán) 4.4 for循環(huán)結構 4.5 break和continue語句 (鏈接) 4.6 邏輯運算符 4.7 相等測試運算符==和賦值運算符= 4.8 結構化程序設計小結,√,√,14,,,循環(huán):在循環(huán)條件為真時反復執(zhí)行的一組指令。 循環(huán)分成兩類: 1)計數器控制的循環(huán); 2)標記控制的循環(huán);,4.2 循環(huán)的本質,15,4.2 循環(huán)的本質,一、計數器控制的循環(huán) 事先知道循環(huán)次數,又稱“定數循環(huán)”; 用控制變量來計算循環(huán)的次數??刂谱兞康闹翟诿看螆?zhí)行完一組循環(huán)指令后遞增(或遞減)。當控制變量的值達到預定的循環(huán)次數時,循環(huán)終止并繼續(xù)執(zhí)行循環(huán)結構后面的語句。,16,4.2 循環(huán)的本質,二、標記控制的循環(huán) 事先不知道循環(huán)次數,又稱“不定數循環(huán)”; 標記值表示獲取數據的結束。標記值是在所有合法數據項都提供給程序后鍵入的值,必須不同于正常的數據項。,17,提綱,4.1 switch多路選擇結構 4.2 循環(huán)的本質 4.3 計數器控制的循環(huán) 4.4 for循環(huán)結構 4.5 break和continue語句 4.6 邏輯運算符 4.7 相等測試運算符==和賦值運算符= 4.8 結構化程序設計小結,√,√,18,計數控制的循環(huán)要有: 1)控制變量(即循環(huán)計數器); 2)控制變量的初始值; 3)在每次循環(huán)中用來修改控制變量的遞增(或遞減)值; 4)測試控制變量最終值的條件。,4.3 計數器控制的循環(huán),19,提綱,4.1 switch多路選擇結構 4.2 循環(huán)的本質 4.3 計數器控制的循環(huán) 4.4 for循環(huán)結構 4.5 break和continue語句 4.6 邏輯運算符 4.7 相等測試運算符==和賦值運算符= 4.8 結構化程序設計小結,√,√,20,/*使用for結構的計數器控制的循環(huán)*/ main() { int counter; /*控制變量的初始化、循環(huán)條件、循環(huán)計數器*/ /*值的遞增(遞減)都包含在for結構的頭部*/ for (counter = 1; counter=10; counter++) printf(“%d\n”,counter) },4.4 for循環(huán)結構,for循環(huán)指定了計數循環(huán)所需的每一方面的內容,21,for語句的一般格式: 表達式1:初始化循環(huán)控制變量 表達式2:循環(huán)條件 表達式3:遞增(遞減)循環(huán)控制變量的值,4.4 for循環(huán)結構,for (表達式1; 表達式2; 表達式3),例外情況:當for循環(huán)體中有continue語句時,以后會講,22,4.4 for循環(huán)結構,表達式1和表達式3可以是用逗號格開的表達式列表。 如:for(i=1,j=50;i=20;i++, j-= 5 ) 在for結構中,表達式1和表達式3部分應該只放置包含控制變量的表達式。對其他變量的操作應該放在循環(huán)體之前或循環(huán)體之后; 循環(huán)控制條件要防止“丟一錯誤”,盡量用=)而不用)。如counter=10,而不寫成counter11; for結構中的三個表達式是可有可無的:如果在程序的其他地方初始化了控制變量,則可以省去表達式1;如果省略了表達式2,則假定條件為真,建立了一個“無限循環(huán)”;如果在for結構體中計算了遞增(遞減)表達式或者不需要遞增(遞減)表達式,則可以省去表達式3。,for (表達式1; 表達式2; 表達式3),23,4.4 for循環(huán)結構-應用舉例,Fibonacci數列示例: 1, 1, 2, 3, 5, 8, 13, 21, 34……,24,【算法1】每循環(huán)一次,求得一個值,求Fibonacci數列,25,求Fibonacci數列,【算法2】每循環(huán)一次,求得兩個值。且比算法一少用了一個變量。,26,#include main() { long int f1, f2; /*定義并初始化數列的頭2個數*/ int i; /*定義并初始化循環(huán)控制變量i*/ f1=1,f2=1; for(i=1 ; i=20; i++ ) { /*1組2個,20組40個數*/ printf(“%15ld%15ld”, f1, f2); /*輸出當前的2個數*/ if(i%2==0) printf(“\n”); /*輸出2次(4個數),換行*/ f1 += f2; /*計算下2個數*/ f2 += f1; } },求Fibonacci數列-【算法2】 的源程序,27,提綱,4.1 switch多路選擇結構 4.2 循環(huán)的本質 4.3 計數器控制的循環(huán) 4.4 for循環(huán)結構 4.5 break和continue語句 4.6 邏輯運算符 4.7 相等測試運算符==和賦值運算符= 4.8 結構化程序設計小結,√,√,28,為了使循環(huán)控制更加靈活,C語言提供了break語句和continue語句。 1.一般格式: break; continue; 2.功能 (1)break:強行結束循環(huán),轉向執(zhí)行循環(huán)語句的下一條語句。用于switch語句和循環(huán)語句中。 (2)continue:用于循環(huán)語句中。對于for循環(huán),跳過循環(huán)體其余語句,轉向循環(huán)變量增量表達式3的計算;對于while和do-while循環(huán),跳過循環(huán)體其余語句,轉向繼續(xù)循環(huán)條件的判定。,4.5 break和continue語句,29,#include #include main() { int x=1; while ( x=10 ){ if (x ==5) break; printf(“%d“,x); x++; } printf(“\nBroke out of loop at x = = %d“,x); system(“pause“); return 0; },,在while結構中使用break語句,4.5 break和continue語句,強行結束循環(huán),轉向執(zhí)行循環(huán)語句的下一條語句,30,#include #include main() { int x; for(x=1; x=10; x++ ){ if (x ==5) break; printf(“%d“,x); } printf(“\nBroke out of loop at x = = %d“,x); system(“pause“); return 0; },,在for結構中使用break語句,4.5 break和continue語句,31,#include #include main() { int x=1; while ( x=10 ){ if (x ==5) continue; printf(“%d“,x); x++; } printf(“\nBroke out of loop at x = = %d“,x); system(“pause“); return 0; },,在while結構中使用continue語句,4.5 break和continue語句,跳過循環(huán)體其余語句,轉向繼續(xù)循環(huán)條件的判定,32,4.5 break和continue語句,#include #include main() { int x; for(x=1; x=10; x++ ){ if (x ==5) continue; printf(“%d”,x); } system(“pause“); return 0; },,在for結構中使用continue語句,跳過循環(huán)體其余語句,轉向循環(huán)變量增量表達式3的計算,33,當for循環(huán)中有continue語句時,main() { int x; for(x=1; x=10; x++ ){ if (x ==5) continue; printf(“%d”,x); } system(“pause“); },main() { int x; x=1; while(x=10){ if (x==5){ x++; /*不可少*/ continue; } printf(“%d“,i); x++; } },,34,4.5 break和continue語句,#include #include main() { int x ,y; for(x =1; x = 2; x++ ){ for(y = 1; y = 10; y++ ){ if (y == 5) break; printf(“x:%2d ,y:%2d\n“,x,y); } } system(“pause“); return 0; },,循環(huán)嵌套時,break和continue只影響包含它們的最內層循環(huán),與外層循環(huán)無關,35,與全部使用標準控制流程編寫的程序相比,使用break和continue語句的結構較差。,36,提綱,4.1 switch多路選擇結構 4.2 循環(huán)的本質 4.3 計數器控制的循環(huán) 4.4 for循環(huán)結構 4.5 break和continue語句 4.6 邏輯運算符 4.7 相等測試運算符==和賦值運算符= 4.8 結構化程序設計小結,√,√,37,邏輯運算符:將簡單條件組合成復雜條件,包含&&的表達式如果已經知道結果為假、包含||的表達式如果已經知道結果為真就會停止進一步計算。所以在包含&&的表達式中,把最可能為假的條件放在最左邊;在包含||的表達式中,把最可能為真的條件放在最左邊,這樣可以減少程序執(zhí)行的時間。,4.6 邏輯運算符,38,4.6 邏輯運算符,例:假設a=1, b=2, c=3, d=4, m=1, n=1, 經過下列邏輯表達式計算后,m和n的值各是多少? (m=ab) && (n=cd) ∵ab的結果為0,所以m的值為0; ∴上述邏輯與表達式的結果為0,不用計算n=cd; ∴n的值沒有發(fā)生變化,為1。,39,提綱,4.1 switch多路選擇結構 4.2 循環(huán)的本質 4.3 計數器控制的循環(huán) 4.4 for循環(huán)結構 4.5 break和continue語句 4.6 邏輯運算符 4.7 相等測試運算符==和賦值運算符= 4.8 結構化程序設計小結,√,√,40,1.將相等測試運算符 錯寫成 賦值運算符 if (paycode==4) printf(“you get a bonus”) 錯寫成 if (paycode=4) printf(“you get a bonus”),C語言中,任何非0值都被解釋為真。,避免方式:將常量放在運算符的左邊,變量放在運算符的右邊,如: 4 == paycode,4.7 相等測試運算符==和賦值運算符=,41,2、將賦值運算符 錯寫成 相等測試運算符 x = 1; 錯寫成 x==1; 后者x的值并沒有改變,將導致程序的邏輯錯誤!,4.7 相等測試運算符==和賦值運算符=,42,提綱,4.1 switch多路選擇結構 4.2 循環(huán)的本質 4.3 計數器控制的循環(huán) 4.4 for循環(huán)結構 4.5 break和continue語句 4.6 邏輯運算符 4.7 相等測試運算符==和賦值運算符= 4.8 結構化程序設計小結,√,√,43,三種基本結構 順序結構 選擇結構 if、if-else、switch 循環(huán)結構 while、do-while、for,4.8 結構化程序設計小結,44,結構化程序設計規(guī)則: 1)從最簡單的流程圖開始; 2)任何矩形框(動作)都可以被兩個按順序放置的矩形框(動作)取代; 3)任何矩形框(動作)都可以被任何控制結構(順序、選擇、循環(huán))取代; 4)規(guī)則2和規(guī)則3可以按照任何順序運行多次。,4.8 結構化程序設計小結,45,,,,,,,規(guī)則2:棧式控制規(guī)則,規(guī)則3:嵌套式控制規(guī)則,規(guī)則1,4.8 結構化程序設計小結,46,結構化程序設計的優(yōu)點: 只使用少量的、簡單的單入口/單出口程序塊并且只用兩種方式組裝這些程序塊 C語言中,簡單的if結構可以實現任何選擇形式,while結構可以實現任何形式的循環(huán)。 因此,C語言程序所需的任何控制結構可以用以下三種控制結構完成: - 順序結構 - if結構 - while結構,4.8 結構化程序設計小結,- 配套講稿:
如PPT文件的首頁顯示word圖標,表示該PPT已包含配套word講稿。雙擊word圖標可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設計者僅對作品中獨創(chuàng)性部分享有著作權。
- 關 鍵 詞:
- 計算機 CC 語言 編程 程序控制
裝配圖網所有資源均是用戶自行上傳分享,僅供網友學習交流,未經上傳用戶書面授權,請勿作他用。
鏈接地址:http://www.3dchina-expo.com/p-2867003.html