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