c語言程序設(shè)計教程-選擇結(jié)構(gòu)程序設(shè)計_第1頁
c語言程序設(shè)計教程-選擇結(jié)構(gòu)程序設(shè)計_第2頁
c語言程序設(shè)計教程-選擇結(jié)構(gòu)程序設(shè)計_第3頁
c語言程序設(shè)計教程-選擇結(jié)構(gòu)程序設(shè)計_第4頁
c語言程序設(shè)計教程-選擇結(jié)構(gòu)程序設(shè)計_第5頁
已閱讀5頁,還剩44頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第2章數(shù)據(jù)類型與表達式【項目3】判斷三角形的類型

用C語言編寫一個程序,由鍵盤輸入三個整數(shù)作為三角形的三條邊,判斷是否能構(gòu)成一個三角形,若能組成三角形,判斷是等邊三角形、等腰三角形還是其它三角形?!緦W(xué)習(xí)重難點】

(1)選擇結(jié)構(gòu)編程思想

(2)if語句使用

(3)switch語句的使用【知識框架圖】

【知識儲備】(1)掌握順序結(jié)構(gòu)程序設(shè)計

(2)C語言程序編輯、調(diào)試過程

(3)掌握C語言程序的書寫規(guī)則

(4)掌握常用數(shù)據(jù)類型、運算符、表達式和函數(shù)的使用第3章選擇結(jié)構(gòu)程序設(shè)計本章的主要知識點如下:1、選擇結(jié)構(gòu)編程思想2、if語句的三種基本結(jié)構(gòu)3、if語句的嵌套4、switch語句的使用(1)又稱為分支結(jié)構(gòu),根據(jù)條件來判斷哪些語句被執(zhí)行。(2)先計算條件表達式的值。如果為真,則執(zhí)行程序段A,如果為假,則執(zhí)行程序段B。A程序段和B程序段是有選擇的進行執(zhí)行,不可能兩個模塊都執(zhí)行。(3)只有一個入口(a點)和一個出口(b點)。(4)主要用于解決不同條件選擇不同操作的多分支類的問題。第3章選擇結(jié)構(gòu)程序設(shè)計AB

p成立不成立3.1if語句(1)if語句功能:

可以實現(xiàn)選擇結(jié)構(gòu),根據(jù)給定的條件進行判斷,以決定是否執(zhí)行某個分支程序段。(2)if語句三種基本形式:

單分支選擇結(jié)構(gòu)、雙分支選擇結(jié)構(gòu)、多分支選擇結(jié)構(gòu)3.1if語句---3.1.1單分支選擇結(jié)構(gòu)(1)一般格式:if(表達式)語句(2)格式說明:①只有一個分支,根據(jù)給定的表達式來判斷是否要執(zhí)行語句部分。②執(zhí)行過程:先計算表達式的值,當表達式為真時執(zhí)行語句部分,否則不執(zhí)行語句部分,直接執(zhí)行if語句的下一條語句。

例如:if(score<60)printf(“成績不合格”);③if是C語言的關(guān)鍵字,表示if語句的開始,可理解為“如果”。④小括號中的表達式是判斷條件,可以是邏輯表達式或關(guān)系表達式,也可以是任意的數(shù)值類型(非0為真,0為假)。

例如,“if(2)printf(“true”);”⑤語句部分可以是單條語句,也可以是復(fù)合語句。復(fù)合語句:當包含多條語句時必須要用“{}”括起來組成復(fù)合語句,復(fù)合語句內(nèi)的所有語句是一個整體,如果執(zhí)行就全部執(zhí)行,否則就全部不執(zhí)行。

例如,if(a>b){temp=a;a=b;b=temp;}。注意:小括號不能省略且后面不加分號。3.1if語句---3.1.1單分支選擇結(jié)構(gòu)

注意:復(fù)合語句的“}”外不需要加分號。/*li3_1_1從鍵盤任意輸入一個整數(shù),輸出該數(shù)的絕對值*/#include<stdio.h>intmain(void){ intx; printf("輸入一個整數(shù):"); scanf("%d",&x); if(x<0)x=-x; printf("絕對值為:%d\n",x); return0;}3.1if語句---3.1.1單分支選擇結(jié)構(gòu)將程序運行了3次,每次輸入不同的整數(shù),結(jié)果分別如下:輸入一個整數(shù):-1絕對值為:1輸入一個整數(shù):0絕對值為:0輸入一個整數(shù):1絕對值為:1/*li3_1_2改寫2.5.5節(jié)程序:從鍵盤任意輸入三個整數(shù),輸出其中的最大數(shù)*/#include<stdio.h>intmain(void){ inta,b,c,max; printf("輸入三個整數(shù),用空格分隔:"); scanf("%d%d%d",&a,&b,&c); max=a; if(max<b) max=b; if(max<c) max=c;

printf("最大值為:%d\n",max); return0;}3.1if語句---3.1.1單分支選擇結(jié)構(gòu)程序運行結(jié)果為:輸入三個整數(shù),用空格分隔:163最大值為:63.1if語句---3.1.2雙分支選擇結(jié)構(gòu)(1)一般格式:if(表達式)

語句1;else語句2;(2)格式說明:①根據(jù)給定的條件來判斷要執(zhí)行兩個分支中的哪個語句塊。②執(zhí)行過程:先計算表達式的值,當表達式為真時執(zhí)行語句1部分,如果為假則執(zhí)行語句2部分。語句1和2只能執(zhí)行其中一個。if(score<60)printf(“成績不合格”);elseprintf(“成績合格”);3.1if語句---3.1.2雙分支選擇結(jié)構(gòu)③if和else都是c語言的關(guān)鍵字,可理解為“如果…否則…”。else后沒有小括號和條件,默認為與if小括號中條件相反的所有條件。else不能單獨使用,必須與if一起構(gòu)成if…else結(jié)構(gòu)。④書寫程序時if和else成對出現(xiàn),關(guān)系平行,所以對齊。兩條printf語句右縮進。if(score<60)printf(“成績不合格”);elseprintf(“成績合格”);3.1if語句---3.1.2雙分支選擇結(jié)構(gòu)/*li3_1_3改寫li2_4_4:輸入年份,判斷是否是閏年。*/#include<stdio.h>intmain(void){ intyear;printf("輸入年份:"); scanf("%d",&year); if(((year%4==0)&&(year%100!=0))||(year%400==0)) printf("Yes\n"); else printf("No\n"); return0;}程序運行結(jié)果為:輸入年份:2012Yes3.1if語句---3.1.2雙分支選擇結(jié)構(gòu)/*li3_1_4,改寫程序li2_4_8:輸入2個字符,若是小寫字母則轉(zhuǎn)換為大寫字母輸出,否則照原樣輸出。*/#include<stdio.h>intmain(void){

charch1,ch2;

printf("輸入2個字符:");

scanf("%c%c",&ch1,&ch2);

if(ch1>='a'&&ch1<='z')

printf("%c",ch1-32);

else

printf("%c\n",ch1);程序運行結(jié)果為:輸入2個字符:c!C!

if(ch2>='a'&&ch2<='z')

printf("%c\n",ch2-32);

else

printf("%c\n",ch2);

return0;}3.1if語句---3.1.2雙分支選擇結(jié)構(gòu)/*li3_1_5輸入一個整數(shù),判斷該數(shù)是奇數(shù)還是偶數(shù),如果是奇數(shù)就輸出odd,偶數(shù)就輸出even*/#include<stdio.h>intmain(void){ intx; printf("輸入一個整數(shù):"); scanf("%d",&x); if(x%2==0) printf("even\n"); else printf("odd\n"); return0;}程序運行結(jié)果為:輸入一個整數(shù):8even3.1if語句---3.1.2雙分支選擇結(jié)構(gòu)/*li3_1_6某公園門票的票價是每人50元,一次購票滿30張,每張可少收2元。輸入一個正整數(shù)表示購票的數(shù)量。輸出一個實數(shù)表示用戶實際需要支付的金額,保留兩位小數(shù)*/#include<stdio.h>intmain(void){ intn;

doublemoney; printf("輸入購票數(shù)量:"); scanf("%d",&n); if(n>=30) money=n*48.0; else money=n*50.0; printf("%.2f\n",money); return0;}程序運行結(jié)果為:輸入購票數(shù)量:301440.003.1if語句---3.1.2雙分支選擇結(jié)構(gòu)/*li3_1_7輸入一個三位正整數(shù),判斷其是否是水仙花數(shù),如果是則輸出yes,否則輸出no。水仙花數(shù)是指一個三位數(shù),它的各位數(shù)字的立方和等于其本身,如153=13+53+33*/#include<stdio.h>intmain(void){intnum,b,s,g;printf(“輸入一個三位正整數(shù):”);scanf("%d",&num);b=num/100;g=num%10;s=(num-100*b)/10;if(b*b*b+s*s*s+g*g*g==num)

printf("yes\n");

else

printf("no\n");

return0;}程序運行結(jié)果為:153Yes3.1if語句---3.1.3多分支選擇結(jié)構(gòu)(1)功能:根據(jù)給定的條件判斷要執(zhí)行下面多個分支中的哪一個分支語句。(2)實現(xiàn)語句形式:if-elseif語句、嵌套的if…else語句、switch語句。3.1if語句---3.1.3多分支選擇結(jié)構(gòu)---ifelseif語句3.1if語句---3.1.3多分支選擇結(jié)構(gòu)---ifelseif語句/*li3_1_9字符類型判斷:輸入一個字符,如果該字符是大寫字母,則輸出upper;若是小寫字母,則輸出low;若是數(shù)字字符,則輸出digit;若是其它字符,則輸出other。*/#include<stdio.h>intmain(void){ charch; scanf("%c",&ch); if((ch>='a')&&(ch<='z')) printf("lower\n"); else if((ch>='A')&&(ch<='Z')) printf("upper\n"); elseif((ch>='0')&&(ch<='9')) printf("digit\n"); else printf("other\n"); return0;}將程序運行了4次,結(jié)果分別如下:alowerZupper0digit!other3.1if語句---3.1.3多分支選擇結(jié)構(gòu)---ifelseif語句/*li3_1_10分段函數(shù)求值:任意輸入一個整數(shù)x,輸出y的值。*/#include<stdio.h>#include<math.h>intmain(void){ intx,y; printf(“輸入一個整數(shù):”); scanf("%d",&x);

if(x<-2)y=7-2*x;elseif(x>=-2&&x<3) y=5-abs(3*x+2);else y=3*x+4;printf("%d\n",y);return0; }將程序運行了3次,結(jié)果分別如下:輸入一個整數(shù):-21輸入一個整數(shù):-313輸入一個整數(shù):3133.1if語句---3.1.3多分支選擇結(jié)構(gòu)---ifelseif語句/*li3_1_11計算員工薪水。公司規(guī)定,銷售人員工資由基本工資和銷售提成兩部分組成,其中基本工資是1500元/月,銷售提成規(guī)則如下:銷售額小于等于10000時,安照5%提成;大于10000但小于等于50000時,超出10000部分按照3%提成;大于50000時,超出50000部分按照2%提成。輸入一個整數(shù)x表示銷售額,輸出員工薪水,保留2位小數(shù)。*/#include<stdio.h>#include<math.h>intmain(void){intx;doublesalary;salary=1500;scanf("%d",&x);if(x<=10000)salary=salary+x*0.05;elseif((x>10000)&&(x<=50000))salary=salary+10000*0.05+(x-10000)*0.03;elsesalary=salary+10000*0.05+40000*0.03+(x-50000)*0.02;printf("%.2f",salary); return0;}將程序運行了3次,每次輸入不同的數(shù),以測試每條if語句,結(jié)果分別如下:100002000.00600003400.00500003200.003.1if語句---3.1.3多分支選擇結(jié)構(gòu)---ifelseif語句3.1if語句---3.1.3多分支選擇結(jié)構(gòu)---ifelseif語句/*li3_1_8改寫li3_1_2節(jié)程序:從鍵盤任意輸入三個整數(shù),輸出其中的最大數(shù)。*/#include<stdio.h>intmain(void){inta,b,c,max;printf("輸入三個整數(shù),用空格分隔:");scanf("%d%d%d",&a,&b,&c);

if(a>=b)max=a;elseif(b>=c) max=b;else max=c;printf("最大數(shù)為:%d\n",max); return0;}將程序運行了3次,結(jié)果分別如下:輸入三個整數(shù),用空格分隔:13-1最大數(shù)為:3輸入三個整數(shù),用空格分隔:1-1-2最大數(shù)為:1輸入三個整數(shù),用空格分隔:123最大數(shù)為:33.1if語句---3.1.4if語句的嵌套(1)定義:當if語句中又包含一個或多個if語句稱為if語句的嵌套。(2)一般形式:if(表達式1)if(表達式2)

語句1;else

語句2;elseif(表達式3)

語句3;else

語句4;注:內(nèi)嵌的if語句既可以出現(xiàn)在if后的語句部分,也可以出現(xiàn)在else后的語句部分,既可以單分支的,也可以是雙分支的或者多分支的。配對原則是:else總是與它上面的最近的未配對的if配對。3.1if語句---3.1.4if語句的嵌套if(表達式1)if(表達式2)

語句1;else

語句2;if(表達式1){if(表達式2)

語句1;}else語句2;可以使用花括號改變if與else的配對關(guān)系及增加程序的可讀性從鍵盤任意輸入三個整數(shù),輸出其中的最大數(shù)(改li3_1_8)/*li3_1_12分段函數(shù)求值:任意輸入一個整數(shù)x,輸出y的值。*/3.1if語句---3.1.4if語句的嵌套#include<stdio.h>intmain(void){ intx,y; printf("輸入一個整數(shù):"); scanf("%d",&x);

if(x>=0)

if(x==0) y=0;

else

y=1;

else

y=-1; printf("x=%d,y=%d\n",x,y);}將程序運行了3次,結(jié)果分別如下:輸入一個整數(shù):0x=0,y=0輸入一個整數(shù):1x=1,y=1輸入一個整數(shù):-1x=-1,y=-1/*li3_1_13由鍵盤輸入三個整數(shù)作為三角形的三條邊,判斷是否能構(gòu)成一個三角形,若能組成三角形,判斷是等邊三角形、等腰三角形還是其它三角形*/。3.1if語句---3.1.4if語句的嵌套#include<stdio.h>intmain(void){inta,b,c;printf("輸入三個正整數(shù),用空格分隔:");scanf("%d%d%d",&a,&b,&c);

3.1if語句---3.1.4if語句的嵌套if(a+b>c&&a+c>b&&b+c>a){if(a==b&&b==c) printf("能構(gòu)成一個等邊三角形\n");elseif(a==b||b==c||c==a) printf("能構(gòu)成一個等腰三角形\n");elseif(a*a+b*b==c*c||a*a+c*c==b*b||b*b+c*c==a*a) printf("能構(gòu)成一個直角三角形\n");elseprintf("能構(gòu)成一個一般三角形\n");}elseprintf("不能構(gòu)成一個三角形\n");return0;

}輸入三個正整數(shù),用空格分隔:345能構(gòu)成一個直角三角形3.1if語句最常用的3種if語句形式:1.if(表達式)語句1(沒有else子句)2.if(表達式)語句1else語句2(有else子句)3.if(表達式1)

語句1elseif(表達式2)語句2elseif(表達式3)語句3

┆elseif(表達式m)語句melse語句m+1(在else部分又嵌套了多層的if語句)3.1if語句說明:整個if語句可寫在多行上,也可寫在一行上但都是一個整體,屬于同一個語句if(x>0)y=1;elsey=-1;if(x>0)y=1;elsey=-1;if(x>0)y=1;elsey=-1;

條件

y=1

y=-1YN3.2switch語句(1)功能:實現(xiàn)多分支選擇結(jié)構(gòu)(2)舉例1:學(xué)生成績等級分類等級A:90分以上;B:80≤score<90;C:70≤score<80,D:60≤score<70;E:score<60。舉例2:設(shè)計一個簡單的計算器該計算器能實現(xiàn)加、減、乘、除、乘方等功能。(3)優(yōu)點:上例也可以用嵌套的if語句來實現(xiàn),但由于分支較多,所以嵌套的if語句層數(shù)多,程序長,可讀性差,容易出錯,使用switch語句則相對清晰簡單。3.2switch語句格式說明:①執(zhí)行過程:首先計算switch后圓括號內(nèi)的表達式的值,然后用該值逐個與case后的常量表達式進行比較。當找到相匹配的值時,就執(zhí)行其后的語句。如果所有case后面的常量表達式的值都不匹配時,則執(zhí)行default后的語句。switch語句格式為:switch(表達式){case常量表達式1:語句1;[break;]case常量表達式2:語句2;[break;]

……case常量表達式n:語句n;[break;]default:語句n+1;}3.2switch語句格式說明:②switch、case、break和default都是關(guān)鍵字。switch的語句體必須用{}括起來。表達式的值可以是整型、字符型或枚舉型數(shù)據(jù),要用小括號括起來且后面沒有分號。switch語句格式為:switch(表達式){case常量表達式1:語句1;[break;]case常量表達式2:語句2;[break;]

……case常量表達式n:語句n;[break;]default:語句n+1;}3.2switch語句格式說明:③case與常量表達式之間必須用空格隔開。每個case后面常量表達式的值必須互不相同,否則就會出現(xiàn)互相矛盾的現(xiàn)象,即對于表達式的同一個值,卻有兩種或多種不同的處理語句。switch語句格式為:switch(表達式){case常量表達式1:語句1;[break;]case常量表達式2:語句2;[break;]

……case常量表達式n:語句n;[break;]default:語句n+1;}3.2switch語句格式說明:④break語句是可選項。如果沒有break語句,程序?qū)⒔又鴪?zhí)行case后面語句,如果有break語句,則不再執(zhí)行后面的case里的語句,而是立即跳出switch語句,去執(zhí)行switch的后續(xù)語句?!癱ase常量表達式”只是起語句標號作用。switch語句格式為:switch(表達式){case常量表達式1:語句1;[break;]case常量表達式2:語句2;[break;]

……case常量表達式n:語句n;[break;]default:語句n+1;}3.2switch語句switch語句格式為:switch(表達式){case常量表達式1:語句1;[break;]case常量表達式2:語句2;[break;]

……case常量表達式n:語句n;[break;]default:語句n+1;}格式說明:⑤當case后包含多個語句時,可以不用花括號括起來,系統(tǒng)會自動識別并順序執(zhí)行所有語句。3.2switch語句格式說明:⑥當有break語句時,各個case的出現(xiàn)的次序不影響執(zhí)行結(jié)果,可以交換順序。多個case可以共用一組執(zhí)行語句。例:

case10: case9:printf("A");break;switch語句格式為:switch(表達式){case常量表達式1:語句1;[break;]case常量表達式2:語句2;[break;]

……case常量表達式n:語句n;[break;]default:語句n+1;}3.2switch語句/*li3_2_1五級制成績:輸入一個百分制成績score(0~100的整數(shù)),輸出對應(yīng)的等級。轉(zhuǎn)換關(guān)系:等級A:90分以上;B:80≤score<90;C:70≤score<80,D:60≤score<70;E:score<60*/#include<stdio.h>intmain(void){

intscore,i;

printf("輸入成績0~100的整數(shù):");

scanf("%d",&score);

i=score/10;

switch(i) {

case10:

case9:printf("A\n");break;

case8:printf("B\n");break;

輸入成績0~100的整數(shù):80B

case7:printf("C\n");break;

case6:printf("D\n");break;

default:printf("E\n");

}

return0;}3.2switch語句/*li3_2_2輸入一個年份和月份,輸出該月的天數(shù)*/#include<stdio.h>intmain(void){intyear,month;printf("輸入年和月用空格分隔:");scanf("%d%d",&year,&month);switch(month){ case2:if(year%400==0||(year%4==0&&year%100!=0)) printf("29天\n"); else printf("28天\n");break;輸入年和月用空格分隔:2012229天輸入年和月用空格分隔:2013228天輸入年和月用空格分隔:2012430天輸入年和月用空格分隔:2012331天case4:case6:case9:case11:printf("30天\n");break;default:printf("31天\n");break;}return0;} /*li3_2_3輸入一個簡單的四則運算表達式,包含兩個實數(shù)和一個運算符,如s1ops2,其中s1和s2是兩個實數(shù),op表示運算符+、-、*、/,也可能是其它字符。如果運算符合法,輸出表達式的值,保留兩位小數(shù),如果運算符不合法或進行除法運算時除數(shù)是0,則輸出wrong。*/#include<stdio.h>#include<math.h>intmain(void){doubles1,s2,result;charop;intflag=1;printf(“輸入一個四則運算表達式:”);scanf("%lf%c%lf",&s1,&op,&s2);3.2switch語句輸入一個四則運算表達式:2*36.00輸入一個四則運算表達式:10/33.33輸入一個四則運算表達式:10+-37.00輸入一個四則運算表達式:10/0Wronginput!輸入一個四則運算表達式:3@2Wronginput!3.2switch語句switch(op){ case'+':result=s1+s2;break; case'-':result=s1-s2;break; case'*':result=s1*s2;break; case'/':

if(fabs(s2)>1e-10)

result=s1/s2;

else

flag=0;

break; default:flag=0;}if(flag) printf("%.2lf\n",result);else printf("Wronginput!\n");return0;}選擇結(jié)構(gòu)程序綜合舉例

方程的解。解題思路:處理以下各情況①

a=0,不是二次方程②

,有兩個相等實根

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論