電子技術-matlab chinese第三章分支語句和編程設計_第1頁
電子技術-matlab chinese第三章分支語句和編程設計_第2頁
電子技術-matlab chinese第三章分支語句和編程設計_第3頁
電子技術-matlab chinese第三章分支語句和編程設計_第4頁
電子技術-matlab chinese第三章分支語句和編程設計_第5頁
已閱讀5頁,還剩35頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第三章分支語句和編程設 例 測試 if結 if結構舉 例 例 關于if結構使用的注意事 例 switch結 try/catch結構的應 測試 控制x,y軸繪圖的上下 子圖 例 例 例 測試 總 結 練 面的章節(jié)中,我們開發(fā)了幾個完全運轉的程序。但是這些程序都十分樣的程序我們稱之順序結構程序。它首先輸入,然后運算得到所需結果,打印出結在下面的兩章中,向大家介紹大量的語句,這些語句允許我們來控單。為了幫助大家避免在編程過程中出現(xiàn)大量的錯誤,向大家介紹正式的編程步我發(fā)現(xiàn)在工作中我遇到的大多數(shù)都是對所要解決問題的理解。一旦你真正理解了問的系數(shù)可能有其預先存在的順序,我們的新程序必須能按照順序它們。相似地,也需 都會將偽代碼一句一句地轉化為合適地語句。 大眾使用之前,必須經(jīng)過一系列地檢測(3.2)。檢測的第一步有時被稱為單元檢測(unit子程序添加到程序中子程序添加到程序中betaalphabetaalpha在整個程序被組合之后,調(diào)試繼續(xù)進行。程序第一個版本我們通常稱之為“alpha版之。當許許多多大的錯誤從程序中去除,一個新的版本出現(xiàn)了,我們稱之“beta版被更正后,這個程序就能夠給公眾使用了。因為本程序都比較小,沒有必要進程序設計的基本步驟如下 在大的編程項目中,花在編程序的時間是出奇的少。FrederickPBrooks在他的theMythicalMan-Month書,對于大的軟件工程來說,三分之一的時間花在計劃如何來我們可以用偽代碼的形式建立算法的結構。偽代碼是和英語的混合體。和 例2.3的算法偽代碼PromptusertoentertemperatureindegreesFahrenheitReadtemperatureindegreesFahrenheit(temp_f)temp_kinkelvins←(5/9)*(temp_f-32)+273.15Writetemperatureinkelvins賦值號與等號的。在把它們轉化為代碼之前,偽代碼將有助于你思想的組種形式的運算符可以在中關系得到true/false:關系運算符和邏輯運算符。生結果true或false。關系運算的基本形式如下a1op如果兩者的關系為真(true)時,那么這個運算將會返回1值;否則將會返回0值。3.1運算 運 3<13<=13==03>04<=1'A'<1a

111 2 1 同的大小。例如a2 1,b2 1,表達式a>=b將會產(chǎn)生結果 果它們有不同的長度,比較運算將會產(chǎn)生一個錯誤。在第六章中會學到一個更普遍的兩個符號,初學者極易。符號==是一個比較運算符,返回一個邏輯數(shù),而符號=是在運算的層次中,關系運算在所有數(shù)算的之后進行。所以下面兩個表達式是等價的,均產(chǎn)生結果1。7+3<2+(7+3)<(2+不等運算符(~=)如果兩變量值不同則返回1,相則返回0。種錯誤叫做roundoff錯誤。例如,考慮下面的兩個數(shù),兩者均應等于0。a=b=計算所產(chǎn)生的結果的是>>a=>>b=>>a==bans=0a和broundoffsin(pi)產(chǎn)生了1.2246×10160roundoff錯誤而失之發(fā)生了細微的會產(chǎn)生roundoff錯誤。例如測試>>abs(a-b)<1.0E-ans1a與broundoff相等的值不相等了。這時你可以在roundoff錯誤的范圍內(nèi)它是不是近似相等。

l1opop系為true,那么運算將會返回值1,否則將會產(chǎn)生0。3.2 個數(shù)的值不為0,那么將把看作true,如3.3與或非l1&l1|000001010111100110111100 產(chǎn)生結果 a 0,b

1a|b產(chǎn)生的結果

0 value1=value2=value3=-邏輯表達 結 value1| value1& value1&value2| value1&(value2| ~(value1& 函 用

表 a不是一個數(shù)則返1,否則返回0 a=b=-c=d=1.a>2.b>3.a>b&c>4.a==5.a&b>6.a= b 1--0c=0 d=-212 01~(a>a>c&b>c<=a= b=c= d=a*b^2>d|bb>(d|b)>a= b=-c= d=a>b& 中有三種具體的形式:if結構,switch結構和try/catch結構。ififcontrol_expr_1Statement1Statement2Block Statement1Statement2Block Statement1Statement2Block3 control_expr_2control_expr_20,那么程序將會執(zhí)行語句塊2(block2),然后跳到end后面的第一個可執(zhí)行語句繼續(xù)執(zhí)行。如果所有的控制表達式(controlexpression)均為0,那么程序將會執(zhí)行與else相關的語句塊。ifelseifelse語句最多有一個。只要上面每一個控制表達式均為0,那么下一個控制表達式將會被檢測。一旦其中的一個表達式的值非的控制表達式(controlexpression)均為0,那么程序將會執(zhí)行else語句。如果沒有else語句,程序將會執(zhí)行end后面的語句,而不執(zhí)行if結構中的部分。注意在if結構中的關鍵字end與第二章中提到的返回已知下標最大值函數(shù)end完全不同。通過end在M文件中的上下文來區(qū)分開它的兩個用途。在大多數(shù)情條件為真時,運算結果為非0,則對應的語句塊,就會被執(zhí)行。例如,一元二次方程的基本形式如下ax2+bx+c=

-b±b2-b±b2-if(b^2-4*a*c)<Writemsgthatequationhastwocomplexroots.elseif(b^2-4*a*c)==0Writemsgthatequationhastwoidenticalrealroots.Writemsgthatequationhastwodistinctreal if(b^2-4*a*c)<disp('Thisequationhastwocomplexroots.');elseif(b^2-4*a*c)==0disp('Thisequationhastwoidenticalrealroots.');disp('Thisequationhastwodistinctreal回憶一下,判斷為真時,關系運算符將會返回一個非0值,從而導致對應語句的執(zhí)行。ifx<y=和ifx<0;y=abs(x);ax2+bx+c= Prompttheuserforthecoefficientsa,b,andReada,b,andcdiscriminant←b^2-4*a*cifdiscriminat>0x1←(-b+sqrt(discriminant))/(2*a)x1←(-b-sqrt(discriminant))/Writemsgthatequationhastwodistinctrealroots.Writeoutthetworoots.elseifdiscriminant==0x1←-b/(2*a)Writemsgthatequationhastwoidenticalrealroots.Writeouttherepeatedroots.

real_part←-b/imag_part←sqrt(abs(discriminant))/(2*a)Writemsgthatequationhastwocomplexroots.Writeoutthetworoots.%Scriptfile:%%%Thisprogramsolvesfortherootsofaquadratic%oftheforma*x^2+b*x+c=0.Itcalculatesthe%regardlessofthetypeofrootsthattheequation%%Recordof Descriptionof S.J. Original%%Define% --Coefficientofx^2termof% --Coefficientofxtermof% --Constanttermof% --Discriminantofthe% --Imagpartofequation(forcomplex% --Realpartofequation(forcomplex% --Firstsolutionofequation(forreal% --Secondsolutionofequation(forreal%Prompttheuserforthecoefficientsoftheequationdisp('Thisprogramsolvesfortherootsofaquadratic');disp('equationoftheformA*X^2+B*X+C=0.');a=input('EnterthecoefficientA:b=input('EnterthecoefficientB:c=input('EnterthecoefficientC:%Calculatediscriminantdiscriminant=b^2-4*a*c;%Solvefortheroots,dependingonthevlaueofthediscriminant.ifdiscriminant>0 %therearetworealroots,so...x1=(-b+sqrt(discriminant))/(2*a);x2=(-b-sqrt(discriminant))/(2*a);disp('Thisequationhastworealroots:');fprintf('x1=%f\n',x1);fprintf('x2=%f\n',elseifdiscriminant==0%thereisonerepeatedroot,so...x1=(-b)/(2*a);disp('Thisequationhastwoidenticalrealroots:');fprintf('x1=x2=%f\n',x1);else%therearecomplexroots,so...real_part=(-b)/(2*a);imag_part=sqrt(abs(discriminant))/(2*a);disp('Thisequationhascomplexroots:');fprintf('x1=%f+i%f\n',real_part,imag_part);fprintf('x1+%f-i%f\n',real_part,

x2+5x+6= x=-2,andx=-x2+4x+4= x=-x2+2x+5= x=-1±>>ThisprogramsolvesfortherootsofaquadraticequationoftheformA*X^2+B*X+C=0.EnterthecoefficientA:1EnterthecoefficientB:5EnterthecoefficientC:Thisequationhastworealx1=-x2=->>ThisprogramsolvesfortherootsofaquadraticequationoftheformA*X^2+B*X+C=0.EnterthecoefficientA:1EnterthecoefficientB:4EnterthecoefficientC:Thisequationhastwoidenticalrealroots:x1=x2=-2.000000>>ThisprogramsolvesfortherootsofaquadraticequationoftheformA*X^2+B*X+C=0.EnterthecoefficientA:1EnterthecoefficientB:2EnterthecoefficientC:Thisequationhascomplexroots:x1=-1.000000+i2.000000x1+-1.000000-ix+xx+

x≥0andx≥0andf(x,y)=x2+ x<0andx2+ x<0and答案式,檢查用戶輸入的x,y的正負符號是必要的。f(x,y)4種選擇,選PrompttheuserforthevaluesxandyReadxandyifx≥0andy≥0fun←x+yelseifx≥0andy<0fun←x+y^2elseifx<0andy≥0fun←x^2+yfun←x^2+Writeout%Scriptefile:%%%Thisprogramsolvesthefunctionf(x,y)for%user-specifiedxandy,wheref(x,y)isdefined |x+ x>=0and |x+ x>=0and f(x,y)=|x^2+ x<0and |x^2+ x<0and %%Recordof Descriptionof Original%%Define% --Firstindependent% % --Resulting%Prompttheuserforthevaluesxandyx=input('Enterthexcoefficient:');y=input('Entertheycoefficient:%Calculatethefunctionf(x,y)based%thesignsofxandy.ifx>=0&y>=0fun=x+y;elseifx>=0&y<0fun=x+y^2;elseifx<0&y>=0fun=x^2+y;

fun=x^2+%Writethevalueofthedisp(['Thevlaueofthefunctionis'下一步,須輸入實數(shù)來檢測這個程序。因這個程序有四個可能的路徑。所以在f(2,3)=2+3=f(2,-3)=2+(-3)2=f(-2,3)=(-2)2+3=f(-2,-3)=(-2)2+(-3)2=>>Enterthexcoefficient:2Entertheycoefficient:Thevlaueofthefunctionis>>Enterthexcoefficient:2Entertheycoefficient:-3Thevlaueofthefunctionis>>Enterthexcoefficient:-2Entertheycoefficient:3Thevlaueofthefunctionis7>>Enterthexcoefficient:-2Entertheycoefficient:-Thevlaueofthefunctionisif結構是非常靈活的,它必須含有一個if語句和一個end語句。中間可以有任意個兩者為嵌套關系。下面是兩個if語句的嵌套。ifx>ify<

工作正常。但如果程序員編寫出錯誤,它將會使編譯器出現(xiàn)性錯誤信息提示。例如,ififif

這個程序包括了三個嵌套的if結構,在這個結構中可能有上千行的代碼?,F(xiàn)在假設第一個end在編輯區(qū)域突然被刪除,那么 if(test3)結構,第三個end將會和中間的if(test2)。當編譯器翻譯到達文誤提示信息,即缺少一個end。但是,它不能告訴你問題發(fā)生在什么地方,這就使級grade> 95≥grade> 86≥grade> 76≥grade> 66≥grade ifgrade>elseifgrade>86.0elseifgrade>76.0elseifgrade>66.0disp('Thegradeisifgrade>disp('Thegradeis

ifgrade>ifgrade>ifgrade>disp('Thegradeis

if語句將會比if的嵌套結構簡單的多。用if的嵌套結構。casecase_expr_1,Statement1Statement2Block1 Statement2Block Statement1Statement2Blockn switch_expr的值與case_expr_1相符,那么第一個代碼塊將會被執(zhí)行,然后程序用相同的方法來對待其他的情況。otherwise語句塊是可選的。如果它存在的話,當witch_expr的值與其他所有的選項都不相符,那么這個結構中的任何一個語句塊都不會被執(zhí)行。這種情況下的結果可以看作沒有選擇結構,直接執(zhí)行語言。switch表達式和表中任何一個表達式相匹配,那么這個語句塊將switchcase{case_expr_1,case_expr_2,Statement1Statement2Block1 Statement1Statement2Blockn 是奇數(shù)還是偶數(shù)。它用來說明一系列的case選項值的應用和otherwise語塊的應用。switchcase{1,3,5,7,case{2,4,6,8,10},disp('Thevalueiseven.');disp('Thevalueisoutof程序在運行時遇到了一個錯誤,這個程序就會中止執(zhí)行。try/catch結構修改了這個默認行Statement2Try Statement2Catch 將中止執(zhí)行try語句塊,并立即執(zhí)行catch語句塊。try語句塊一般會在這個程序中執(zhí)行,只有當try語句塊執(zhí)行出錯,catch語句塊將會發(fā)生錯誤。a=[1-325];%Trytodisyanindex=input('Entersubscriptofelementtodisy:disp(['a('int2str(index)')='num2str(a(index))]%Ifwegethereanerrordisp(['Illegalsubscript:'int2str(index)]>>Entersubscriptofelementtodisy:3a(3)=2>>Entersubscriptofelementtodisy:8Illegalsubscript:8出一條關于平方根函數(shù)參數(shù)的錯誤信息。并把sqrt_x歸零。算并打印出fun值。 分鐘,越過300公里的部分一律按0.20 ifvolts>ifvolts<105disp('Linevoltageiswithinswitch(color);case'red',case'yellow',case'green',iftemperature>disp('Humanbodytemperatureexceeded.');elseiftemperature>100disp('Boilingpointofwaterexceeded.');顯示這些數(shù)據(jù)的一部分非常有用,這時你可以應用axis命令/函數(shù)。為了說明axis的應用,畫出函數(shù)f(x)=sinx從-2π到2π之間的圖象,然后限定坐標的區(qū)域為0≤x≤π,0≤y≤1。4元素行向量[xminxmaxyminymax]xminxmaxyminymax代表x,y軸的上下限axis([xminxmaxyminxminxmaxyminymax設定縱軸的下限及上axisaxisaxisaxisaxis函數(shù):axis([020035])。遇到這樣的情況怎么辦?axison;axison;garbagegarbage12garbagegarbage('1','2',title('Plottitle('Plotofsin(x)vslimits= 1修改坐標軸的上下限可以調(diào)用函數(shù)axis([0pi01])。在一般情況下,創(chuàng)建一個新的圖象就要用到一個plot命令,前面的數(shù)據(jù)就會自動消都會疊加在原來存在的圖象。holdoff命令可恢復默認情況,用新的圖象來替代原來的圖holdon;holdoff;legend('sinx','cosholdon;holdoff;legend('sinx','cos些圖象窗口,圖象數(shù)是一個小的正整數(shù)。第一個圖象窗口稱為圖1,第二個圖象窗口為圖窗口不存在,那么將會自動創(chuàng)建。當前圖象也可以用鼠標單擊選擇。M第二個用來展示e象,而且subplot4是當前子圖象。中的4種附加的屬性。6,每個標識為紅色邊緣和綠色內(nèi)核,如圖3.6。streammodifiersstreammodifier是一個特殊的字符streammodifier插入一個文本字符串中,它持續(xù)發(fā)揮作用,直到這個字符串的結束或。如果一個modifier后在跟著一個{},只有{}中的文本起作用。這些字符。這些轉義序列是支持TEX語言的特殊序列的一個子集。在表3.6中向大家展示 如果要打印轉義符\,{,},_,或^就必須面加上一個反斜杠。下面的例子用于說明streammodifier和特殊字符的應用。\tau_{ind}versus\thetavariesfrom0\circto\bf{B}τindversusθvariesfrom0oto3.6α∫βγΓ~δΔ\i∞ε±η≤θ≥λΛ≠μ∝ν÷πΠ°φ?ρ←σΣ→τ↑ω?↓后面觀眾的噪聲信號。一個心形麥克風的增益gain是關于角度θ的函數(shù),關系式如下 麥克風的g是0.5,畫出函數(shù)Gain的極坐標圖。如圖3.7所示。注意這種麥克風叫做心形麥克風,所以得出來曲線的形狀像顆心。%%Scriptfile:%%%Thisprogramplotsthegainpatternofa%%%Recordof%DateProgrammerDescriptionof%==============%12/10/97S.J.ChapmanOriginal%%%Define%g--Microphonegain%gain--Gainasafunctionof%theta--Anglefrommicrophoneaxis%Calculategainversusangleg=0.5;theta=gain=%Plotpolar(theta,gain,'r-title('GainversusangleR+R+-C成。輸出電壓V0與輸入電壓Vi的電壓比為Vo

1+為法拉。j為-1%%Scriptfile:%%%Thisprogramplotstheamplitudeandphase%ofalow-paddRC%%Recordof%DateProgrammerDescriptionof%==============%12/29/98S.J.ChapmanOriginal%%Define%%%%%%--Capacitiance--Frequencyofinputsignal--Phase--%InitializeR&RR=16000;%16kohmsC=1.0E-6;%1uF%Createarrayofinputfrequenciesf=1:2:1000;%Calculateres=1./(1+j*2*pi*f*R*Camp=abs(res);phase=angle(res);%Createplotstitle('AmplitudeResponse');xlabel('Frequency(Hz)');gridon;semilogx(f,phase);title('PhaseResponse');gridon;子想象成一個剛性,每次碰撞,總動能不會改變。這樣的氣體可以用三個變量來描(P,體積(T P代表氣壓,單位為千帕,V代表氣體的體積,單位為升,n代表分子的摩爾數(shù),T代2pixel。在圖象上包含有一個大標題,x,y軸的,還有各軌跡的圖例。off命令。我們也必須指定軌跡的顏色,樣式和寬度,并指定為黑體。%Scriptfile:%% Thisprogramplotsthepressureversusvolumnof ideal%%Recordof Descriptionof Original%%Define% --Numberofatoms% % --Idealgasconstant(LkPa/mol% % --volume%Initializen=1; %MolesofatomsR=9.314; %IdealgasconstantT= %Temperature%Createarrayofinputpressures.Notethat%arraymustbeguitedensetocatchthe%changesinvolumeatlowpressures.P=1:0.1:1000;V=(n*R*T)./P;%Createfirstplot.loglog(P,V,'r-','LineWidth',2);title('\bfVolumevsPressureinanIdealGas');xlabel('\bfPressure(kPa)');gridon;hold%NowincreaseT= %TemperatureV=(n*R*T)./P;%Addsecondlineto

溫馨提示

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

評論

0/150

提交評論