嵌入式C程序設計 選擇結構程序設計實例(講義)_第1頁
嵌入式C程序設計 選擇結構程序設計實例(講義)_第2頁
嵌入式C程序設計 選擇結構程序設計實例(講義)_第3頁
嵌入式C程序設計 選擇結構程序設計實例(講義)_第4頁
嵌入式C程序設計 選擇結構程序設計實例(講義)_第5頁
已閱讀5頁,還剩3頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

選擇結構程序設計實例綜合案例1用戶輸入三角形的三邊長度,程序輸出三角形是否是等邊或直角三角形。流程圖:源程序:#include<stdio.h>main(){inta,b,c,ok=-1;printf("輸入三角形的三邊長度(逗號分隔):\n");scanf("%d,%d,%d",&a,&b,&c);ok=a<b+c&&b<a+c&&c<a+bif(ok==1){printf("是三角形");if(a==b&&a==c&&b==c)printf("等邊三角形");if((a*a+b*b==c*c)||(a*a+c*c==b*b)||(a*a==b*b+c*c))printf("直角三角形");}elseprintf("不是三角形");}程序運行,輸入三邊長度,輸出結果如下綜合案例2自動售貨機為客戶提供各種飲料,飲料的價格有三種:2元、3元和5元。用戶投入2元錢,可以選擇“凈凈礦泉水”、“甜甜礦泉水”和“美美礦泉水”之一。用戶投入3元錢,可以選擇“爽口可樂”、“清涼雪碧”和“雪山果汁”之一。用戶投入5元錢,可以選擇“草原奶茶”、“青青咖啡”和“甜美酸奶”之一。流程圖:源程序:#include<stdio.h>main(){unsignedshortmoney;chardrinkKind;printf("投入金額:2,3,5元(回車確認):");scanf("%d",&money);getchar();//消耗回車if(money==2){printf("選擇凈凈礦泉水(A),甜甜礦泉水(B)和美美礦泉水(C)之一:\n");printf("輸入A,B或C:");drinkKind=getchar();switch(drinkKind){case'A':printf("得到凈凈礦泉水\n");break;case'B':printf("得到甜甜礦泉水\n");break;case'C':printf("得到美美礦泉水\n");break;default:printf("選擇錯誤");}}elseif(money==3){printf("選擇爽口可樂(A),清涼雪碧(B),和雪山果汁(C)之一:\n");printf("輸入A,B或C:");drinkKind=getchar();switch(drinkKind){case'A':printf("得到爽口可樂\n");break;case'B':printf("得到清涼雪碧\n");break;case'C':printf("得到雪山果汁\n");break;default:printf("選擇錯誤");}}elseif(money==5){printf("選擇草原奶茶(A),青青咖啡(B)和甜美酸奶(C)之一:\n");printf("輸入A,B或C:");drinkKind=getchar();switch(drinkKind){case'A':printf("得到草原奶茶\n");break;case'B':printf("得到青青咖啡\n");break;case'C':printf("得到甜美酸奶\n");break;default:printf("選擇錯誤");}}else{printf("輸入的錢幣不符合要求");}}程序運行,按要求輸入數據,輸出結果如下綜合案例3已知某公司員工的保底薪水salary為500,某月所接工程的利潤profit(整數)與利潤提成的關系如下(計量單位:元):profit≤1000 沒有提成;1000<profit≤2000 提成10%;2000<profit≤5000 提成15%;5000<profit≤10000 提成20%;10000<profit 提成25%。編程實現:統計員工實際薪水。【提示】定義變量salary表示員工實際薪水,變量profit表示員工所接工程的利潤,考慮到工程利潤與利潤提成的關系有五種情況,故采用多路分支結構編寫程序。為使用switch語句,必須將利潤profit與提成的關系,轉換成某些整數與提成的關系。分析本題可知,提成的變化點都是1000的整數倍(1000、2000、5000、……),如果將利潤profit整除1000,商用變量grade表示,則當:profit≤1000 grade可能為0、11000<profit≤2000 grade可能為1、22000<profit≤5000 grade可能為2、3、4、55000<profit≤10000 grade可能為5、6、7、8、9、1010000<profit grade可能為10、11、12、……為解決相鄰兩個區間的重疊問題,最簡單的方法就是:利潤profit先減1(最小增量),然后再整除1000即可。流程圖:源程序:#include<stdio.h>main(){longprofit;intgrade;floatsalary=500;printf("Inputprofit:");scanf("%ld",&profit);grade=(profit–1)/1000;switch(grade){case0:break; case1:salary+=profit*0.1;break;case2:case3:case4:salary+=profit*0.15;break; case5:case6:case7:case8:case9:salary+=profit*0.2;break;default:salary+=profit*0.25; }printf("salary=%.2f\n",salary);} 程序運行,輸入利潤為8768,輸出結果如下綜合案例4求任一元二次方程ax2+bx+c=0的解。(a、b、c為方程的系數,其中a≠0)【提示】求解一元二次方程的根有以下幾種可能性:①

當a=0時,不能構成一元二次方程。②

當b2-4ac=0時,一元二次方程有兩個相等的實根。③

當b2-4ac>0時,一元二次方程有兩個不等的實根。④

當b2-4ac<0時,一元二次方程有兩個共軛復根。為了編程方便,設變量disc表示一元二次方程判別式b2-4ac,由于實數在計算機中運算和存儲時,不可避免地有會有一些微小誤差,因此在判別disc(為實數)是否為零時,不能直接與零比較,正確的方法是判斷其絕對值小于一個很小的常數,如采用方法:if(fabs(disc)<=1E-6),而不是:if(disc==0.0)。流程圖:源程序:#include<stdio>#include<math.h">main(void){ floata,b,c,disc,x1,x2,p,q; printf("Pleaseinputa,b,c="); scanf(“%f,%f,%f”,&a,&b,&c);/*輸入一元二次方程系數*/ printf("Theequation:"); printf("%fx*x+%fx+%f=0”,a,b,c); if(fabs(a)<=1E-6)printf(“isnotquadratic\n”); else disc=b*b-4*a*c; if(fabs(disc)<=1e-6) { printf(“hastwoequalroot:\n”); printf(“x1=x2=%8.2f\n”,-b/(2*a)); } else if(disc>1e-6) {x1=(-b+sqrt(disc))/(2*a);x2=(-b-sqrt(disc))/(2*a);

printf("hasdistinctrealroots:\n"); printf("x1=%8.2f,x2=%8.2f\n",x1,x2);

}

溫馨提示

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

評論

0/150

提交評論