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

下載本文檔

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

文檔簡(jiǎn)介

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

1.身高預(yù)測(cè)

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

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

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

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

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

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

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

增加身高1.5%。

編程從鍵盤(pán)輸入用戶(hù)的性別(用字符型變量sex存儲(chǔ),輸入字符F表示女性,輸入字符

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

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

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

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

symsfmYN

faHeight=inputC請(qǐng)輸入父親的身高:);

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

x=input(,請(qǐng)輸入x的性別:力

sport=input。是否喜歡運(yùn)動(dòng)(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.簡(jiǎn)單的計(jì)算器

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

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

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

m=inputC操作數(shù)1運(yùn)算符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)行浮點(diǎn)數(shù)的算術(shù)運(yùn)算,程序應(yīng)該如何修改?如何比較實(shí)型變量

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

formatlong

m=input(操作數(shù)1運(yùn)算符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ù)和運(yùn)算符之間可以加入任意多個(gè)空白符,

那么程序如何修改?

formatlong

m=input(操作數(shù)1運(yùn)算符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ù)運(yùn)算,每次運(yùn)算結(jié)束后,程序都給出提示:

Doyouwanttocontinue(Y/Nory/n)?

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

序如何修改?

symsYNyn

fbnnatlong

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

b=inpu4請(qǐng)輸入運(yùn)算符op,7s');

c=input(,請(qǐng)輸入操作數(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(,請(qǐng)輸入操作數(shù)1:1);

b=input。請(qǐng)輸入運(yùn)算符op,7s');

c=input(請(qǐng)輸入操作數(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運(yùn)算符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ù)游戲

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

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

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

程序1編程先由計(jì)算機(jī)“想”一個(gè)1?100之間的數(shù)請(qǐng)人猜,如果人猜對(duì)了,則計(jì)算

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

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

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

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

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

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

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

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

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

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

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

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

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

止時(shí)才結(jié)束。

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

b=input(,請(qǐng)輸入一個(gè)大于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(請(qǐng)?jiān)佥斎胍粋€(gè)整數(shù):)

end

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

的一半另一個(gè),到第十天早晨再想吃時(shí),就剩一個(gè)桃子。問(wèn)第一天共摘了多少桃子。

要求:分別用三種語(yǔ)句編寫(xiě)程序。

(1)functionPeach

clc

number=l;

x(10)=number;

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

fori=9:-l:l

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

fprintf。第%(1天有%d個(gè)桃子\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.編寫(xiě)程序驗(yàn)證下列結(jié)論:任何一個(gè)自然數(shù)n的立方都等于n個(gè)連續(xù)奇數(shù)之和。例如:I3

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

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

n=input。請(qǐng)輸入一個(gè)數(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é)生出加法考試題

編寫(xiě)一個(gè)程序,給學(xué)生出一道加法運(yùn)算題,然后判斷學(xué)生輸入的答案對(duì)錯(cuò)與否,按下列

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

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

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

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

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

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

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

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

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

法運(yùn)算題,如果輸入答案正確,則顯示“Right!”,否則顯示“Notcorrect!”,不給機(jī)會(huì)重做,

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

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

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

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

打印出總分和做錯(cuò)題數(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ù)之間的四則運(yùn)算題改為實(shí)數(shù)之間的四則運(yùn)算題,那么程序

該如何修改呢?請(qǐng)讀者修改程序,并上機(jī)測(cè)試程序運(yùn)行結(jié)果。

2.擲骰子游戲

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

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

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

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

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

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

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

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

formatshort

d=y;

whiled=,Y,|d==y

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

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

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

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

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

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

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

ifal=3|al=ll

disp([f因?yàn)榈谝粋€(gè)骰子值=',num2str(A);;第二個(gè)的=\num2str(B);;兩個(gè)之和

=\num2str(al)]);

di

溫馨提示

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

評(píng)論

0/150

提交評(píng)論