matlab選擇結(jié)構(gòu)編程練習(xí)_第1頁
matlab選擇結(jié)構(gòu)編程練習(xí)_第2頁
matlab選擇結(jié)構(gòu)編程練習(xí)_第3頁
matlab選擇結(jié)構(gòu)編程練習(xí)_第4頁
matlab選擇結(jié)構(gòu)編程練習(xí)_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

選擇結(jié)構(gòu)編程練習(xí)

1.身高預(yù)測

每個做父母的都關(guān)心自己孩子成人后的身高,據(jù)有關(guān)生理衛(wèi)生知識與數(shù)理統(tǒng)計分析表

明,影響小孩成人后的身高的因素包括遺傳、飲食習(xí)慣與體育鍛煉等。小孩成人后的身高與

其父母的身高和自身的性別密切相關(guān)。

設(shè)faHeight為其父身高,moHeight為其母身高,身高預(yù)測公式為

男性成人時身高=(fhHeight+moHeight)xO.54cm

女性成人時身高=(fhHcightx0.923+moHcight)/2cm

此外,如果喜愛體育鍛煉,那么可增加身高2%;如果有良好的衛(wèi)生飲食習(xí)慣,那么可

增加身高1.5%。

編程從鍵盤輸入用戶的性別(用字符型變量sex存儲,輸入字符F表示女性,輸入字符

M表示男性)、父母身高(用實型變量存儲,faHeight為其父身高,moHeight為其母身高)、

是否喜愛體育鍛煉(用字符型變量sports存儲,輸入字符Y表示喜愛,輸入字符N表示不

喜愛)、是否有良好的飲食習(xí)慣等條件(用字符型變量diet存儲,輸入字符Y表示良好,輸

入字符N表示不好),利用給定公式和身高預(yù)測方法對身高進(jìn)行預(yù)測。

symsfmYN

faHeight=inputC請輸入父親的身高:);

moHeight=input(,請輸入母親的身高:);

x=input(,請輸入x的性別:力

sport=input。是否喜歡運動(Y/N):);

diet=inpu4飲食是否良好(Y/N):);

ifx==m

child=(faHeight+moHeight)*0.54;

else

child=(faHeight*0.923+moHeight)/2;

end

ifsport==Y

child=child*1.02;

else

child=child;

end

ifdiet==Y

child=child*1.015;

else

child=child;

end

child

2.簡單的計算器

用switch語句編程設(shè)計一個簡單的計算器程序,要求根據(jù)用戶從鍵盤輸入的表達(dá)式:

操作數(shù)1運算符op操作數(shù)2

計算表達(dá)式的值,指定的算術(shù)運算符為加(+)、減(-)、乘(*)、除(/)。

m=inputC操作數(shù)1運算符op操作數(shù)2:

q=find(m—+,|m=*-,|m—7,|m==,x,|m=='-^');

a=str2num(m(1:q-1));

b=m(q);

c=str2num(m(q+l:end));

switchb

case

a+c

case

a-c

case'*'

a*c

case*x'

a*c

case7'

a/c

case

a/c

end

(1)如果要求程序能進(jìn)行浮點數(shù)的算術(shù)運算,程序應(yīng)該如何修改?如何比較實型變量

data2和常數(shù)0是否相等?

formatlong

m=input(操作數(shù)1運算符op操作數(shù)2:

q=find(m=,+,|rn==,-,|m=,*,|m===7,|m=,><,|m=--^');

a=str2num(m(1:q-1));

b=m(q);

c=str2num(m(q+l:end));

switchb

case

a+c

case

a-c

case

a*c

case'x,

a*c

case7,

a/c

case中

a/c

end

(2)如果要求輸入的算術(shù)表達(dá)式中的操作數(shù)和運算符之間可以加入任意多個空白符,

那么程序如何修改?

formatlong

m=input(操作數(shù)1運算符op操作數(shù)2:M);

m(find(isspace(m)))=[]

q=find(m—+*|m--|m-*||m=7,|m—x'|m=='-);

a=str2num(m(1:q-1));

b=m(q);

c=str2num(m(q+l:end));

switchb

case

a+c

case

a-c

case

a*c

caseX

a*c

case

a/c

case

a/c

end

(3)(選作題)如果要求連續(xù)做多次算術(shù)運算,每次運算結(jié)束后,程序都給出提示:

Doyouwanttocontinue(Y/Nory/n)?

用戶輸入Y或y時,程序繼續(xù)進(jìn)行其他算術(shù)運算;否則程序退出運行狀態(tài)。那么,程

序如何修改?

symsYNyn

fbnnatlong

a=inpu《請輸入操作數(shù)I:1);

b=inpu4請輸入運算符op,7s');

c=input(,請輸入操作數(shù)2:);

switchb

case

a+c

case

a-c

case***

a*c

case'x'

a*c

case71

a/c

case

a/c

end

F=input(*Doyouwanttocontinue(Y/Nory/n),);

whileF=Y

formatlong

a=input(,請輸入操作數(shù)1:1);

b=input。請輸入運算符op,7s');

c=input(請輸入操作數(shù)2:);

switchb

case

a+c

case

a-c

case

a*c

case*

a*c

case71

a/c

case

a/c

end

F=input(*Doyouwanttocontinue(Y/Nory/n),);

End

(2)formatlong

d=Y;

whiled=='Yr|d=y

m=input(操作數(shù)1運算符op操作數(shù)2:7s*);

m(find(isspace(m)))=[]

q=find(m==,+'|m==,-,|m=,*'|m==7,|m==,X'|m=='4-');

a=str2num(m(1:q-1));

b=m(q);

c=str2num(m(q-i-l:end));

switchb

case

a+c

case

a-c

case

a*c

case

a*c

case7,

a/c

case+

a/c

end

d=input(*Doyouwanttocontinue(Y/Nory/n)?7s');

end

循環(huán)結(jié)構(gòu)編程練習(xí)

猜數(shù)游戲

在這個實驗中,我們將嘗試編寫一個猜數(shù)游戲程序,這個程序看上去有些難度,但是如

果按下列要求循序漸進(jìn)地編程實現(xiàn),會發(fā)現(xiàn)其實這個程序是很容易實現(xiàn)的。那么,現(xiàn)在就開

始吧,先編寫第1個程序,然后試著在第1個程序的基礎(chǔ)上編寫第2個程序,……

程序1編程先由計算機“想”一個1?100之間的數(shù)請人猜,如果人猜對了,則計算

機給出提示“Right!”,否則提示“Wrong!”,并告訴人所猜的數(shù)是大(Toohigh)還是小(Toolow),

然后結(jié)束游戲。要求每次運行程序時機器所“想”的數(shù)不能都一樣。

程序2編程先由計算機“想”一個1?100之間的數(shù)請人猜,如果人猜對了,則結(jié)束

游戲,并在屏幕上輸出人猜了多少次才猜對此數(shù),以此來反映猜數(shù)者“猜”的水平;否則計

算機給出提示,告訴人所猜的數(shù)是太大還是太小,直到人猜對為止。

程序3編程先由計算機“想”一個1?100之間的數(shù)請人猜,如果人猜對了,則結(jié)束

游戲,并在屏幕上輸出人猜了多少次才猜對此數(shù),以此來反映猜數(shù)者“猜”的水平;否則計

算機給出提示,告訴人所猜的數(shù)是太大還是太小,最多可以猜10次,如果猜了10次仍未猜

中的話,結(jié)束游戲。

程序4編程先由計算機“想”一個1?100之間的數(shù)請人猜,如果人猜對了,在屏幕上輸

出人猜了多少次才猜對此數(shù),以此來反映猜數(shù)者“猜”的水平,則結(jié)束游戲;否則計算機給

出提示,告訴人所猜的數(shù)是太大還是太小,最多可以猜10次,如果猜了10次仍未猜中的話,

則停止本次猜數(shù),然后繼續(xù)猜下一個數(shù)。每次運行程序可以反復(fù)猜多個數(shù),直到操作者想停

止時才結(jié)束。

a=fix((l00+1)*rand(1));

b=input(,請輸入一個大于0小于100的整數(shù):,);

fori=l:10

ifa=b

disp('Youwin!')

disp(['你總共用了',num2str⑴;次])

break;

elseifb>a

disp(['ToohighlYouhava',num2str(10-i),'chances!'])

else

disp(['Toolow!Youhava',num2str(10-i),'chances!'])

end

b=input(請再輸入一個整數(shù):)

end

1.猴子吃桃問題。猴子第一天摘下若干個桃子,當(dāng)即吃了一半另一個,以后每天早晨都吃剩下

的一半另一個,到第十天早晨再想吃時,就剩一個桃子。問第一天共摘了多少桃子。

要求:分別用三種語句編寫程序。

(1)functionPeach

clc

number=l;

x(10)=number;

fprintff計算結(jié)果如下:\nf);

fori=9:-l:l

x(i)=(x(i+1)4-1)*2;

fprintf。第%(1天有%d個桃子\n;i,x⑴);

end

(2)

i=10;x=l;

whilei>l

i=i-l;

x=(x+l)*2;

end;x

(3)

functiony=Eatpeach(x);

y=x-(l/2*x+l);

forx=l:100000;

y=x;

fori=l:9

y=Eatpeach(y);

end

ify=l

x

break

end

end

2.編寫程序驗證下列結(jié)論:任何一個自然數(shù)n的立方都等于n個連續(xù)奇數(shù)之和。例如:I3

=1;23=3+5;33=7+9+11o

要求:程序?qū)γ總€輸入的自然數(shù)計算并輸出相應(yīng)的連續(xù)奇數(shù),直到輸入的自然數(shù)為0時止。

n=input。請輸入一個數(shù)字:力

k=n*n*n;

s=0;

forl:2:k;

c=i;

A=[];

s=0;

fbrb=i:n;

s=c+s;

A=[c,A];

c=c+2;

end

if

s=k

A

break;

end

end

函數(shù)編程練習(xí)

1.給小學(xué)生出加法考試題

編寫一個程序,給學(xué)生出一道加法運算題,然后判斷學(xué)生輸入的答案對錯與否,按下列

要求以循序漸進(jìn)的方式編程。

程序1通過輸入兩個加數(shù)給學(xué)生出一道加法運算題,如果輸入答案正確,則顯示

“Right!,r,否則顯示“Notcorrect!Tryagain!",程序結(jié)束。

程序2通過輸入兩個加數(shù)給學(xué)生出一道加法運算題,如果輸入答案正確,則顯示

“Right!”,否則顯示"Notcorrect!Tryagain!",直到做對為止。

程序3通過輸入兩個加數(shù)給學(xué)生出一道加法運算題,如果輸入答案正確,則顯示

"Right!”,否則提示重做,顯示"Notcorrect!Tryagain!”,最多給三次機會,如果三次仍未做

對,,則顯示“Notcorrect!Youhavetriedthreetimes!Testover!”,程序結(jié)束。

程序4連續(xù)做10道題,通過計算機隨機產(chǎn)生兩個1?10之間的加數(shù)給學(xué)生出一道加

法運算題,如果輸入答案正確,則顯示“Right!”,否則顯示“Notcorrect!”,不給機會重做,

10道題做完后,按每題10分統(tǒng)計總得分,然后打印出總分和做錯的題數(shù)。

程序5通過計算機隨機產(chǎn)生10道四則運算題,兩個操作數(shù)為1?10之間的隨機數(shù),

運算類型為隨機產(chǎn)生的加、減、乘、整除中的任意一利,,如果輸入答案正確,則顯示“Right!”,

否則顯示“Notcorrect!”,不給機會重做,10道題做完后,按每題10分統(tǒng)計總得分,然后

打印出總分和做錯題數(shù)。

formatshort

disp('小數(shù)保留4位小數(shù),);

j=0;

fori=l:10;

a=fix(l+9*rand(1));

b=fix(I+9*rand(1));

c=fix(1+4*rand(1));

switchc

case1

d=input([num2str(a),'+',num2str(b),-'],'s');

q=a+b;

ifd=num2str(q)

dispCyouareright!');

j=j+l;

else

disp(*Notcorrect!');

end

case2

d=input([num2str(a),,-\num2str(b),-'],,s,);

q=a-b;

ifd=num2str(q)

disp(,youareright!1);

j=j+l;

else

dispCNotcorrect!*);

end

case3

d=input([num2str(a),,x\num2str(b),-,],,s,);

q=a*b;

ifd=num2str(q)

disp(,youareright!1);

j=j+l;

else

dispCNotcorrect!1);

end

case4

d=input([num2str(a),t^-,,num2str(b),'-]);

ifd=round((a/b)*10A4)/l0A4

disp(,youareright!!);

Fi+i;

else

dispCNotcorrect!1);

end

end

end

score=10*j

【思考題】如果要求將整數(shù)之間的四則運算題改為實數(shù)之間的四則運算題,那么程序

該如何修改呢?請讀者修改程序,并上機測試程序運行結(jié)果。

2.擲骰子游戲

編寫程序模擬擲骰子游戲.已知擲骰子游戲的游戲規(guī)則為:每個骰子有6面,這些面包

含1、2、3、4、5、6個點,投兩枚骰子之后,計算點數(shù)之和。如果第一次投的點數(shù)和為7

或11,則游戲者獲勝;如果第一次投的點數(shù)和為2、3或12,則游戲者輸;如果第一次投的

點數(shù)和為4、5、6、8、9或10,則將這個和作為游戲者獲勝需要擲出的點數(shù),繼續(xù)投骰子,

直到賺到該點數(shù)時算是游戲者獲勝。如果投擲7次仍未賺到該點數(shù),則游戲者輸。

【思考題】將游戲規(guī)則改為:計算機想一個數(shù)作為一個骰子擲出的點數(shù)(在用戶輸入

數(shù)據(jù)之前不顯示該點數(shù)),用戶從鍵盤輸入一個數(shù)作為另一個骰子擲出的點數(shù),再計算兩點

數(shù)之和。其余規(guī)則相同,然后請讀者重新編寫該程序。

formatshort

d=y;

whiled=,Y,|d==y

A=1+(6?1)*round(rand(I));%系統(tǒng)隨機生成一個

dispd如果第一次投的點數(shù)和為7或11,則游戲者獲勝;如果第一次投的點數(shù)和為2、3

或12,則游戲者輸;如果第一次投的點數(shù)和為4、5、6、8、9或10,則將這個和作為游戲

者獲勝需要擲出的點數(shù),繼續(xù)投骰子,直到賺到該點數(shù)時算是游戲者獲勝。如果投擲7次仍

未賺到該點數(shù),則游戲者輸???

B=input(請隨便輸入數(shù)字K6:');

al=A(l)+B(l);

ifal=3|al=ll

disp([f因為第一個骰子值=',num2str(A);;第二個的=\num2str(B);;兩個之和

=\num2str(al)]);

di

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論