Matlab的if語句switch語句for迴圈while迴圈語句練習

gsls200808發表於2015-04-25

1、 輸入一組整數a,輸出其中奇偶數、奇偶數的和、積以及個數。

m檔案程式碼

clear
clc
n=input('輸入數字個數');
for i=1:n
     x(i)=input('輸入數字:');
end
j=1;k=1;
%y向量存奇數,z向量存偶數
for i=1:n
     if mod(x(i),2)
         y(j)=x(i);
         j=j+1;
     else
         z(k)=x(i);
         k=k+1;
     end         
end
%輸出奇數和偶數
y
z
%輸出所有奇數和、所有偶數和
sum(y)
sum(z)
%輸出所有奇數連乘積、所有偶數乘積
prod(y)
prod(z)
%輸出所有奇數個數、所有偶數個數
length(y)
length(z)


其他方法(下面的方法輸入必須是矩陣形式,如:[2 3 4 5 6 7 8],前一個用除法,後一個用find函式)

clear
a=input('input some numbers:')
n=length(a);
j=0;k=0;
for i=1:n
   if rem(a(i),2)==0
      j=j+1;
      b(j)=a(i);
   else
      k=k+1;
      c(k)=a(i);
   end
end
a
b,j
c,k
----------------------
a=input('input some numbers:')
b=a(find(rem(a,2)==0))
j=length(b)
c=a(find(rem(a,2)~=0))
k=length(c)
-------------



2、計算s=e-(1/1+1/1!+1/2!+...+1/N!)使得s<10^(-6),求最小的N

m檔案程式碼

clear
clc
s=exp(1);
i=0;
while(1)
    s=s-1.0/factorial(i);
    if(s<1e-6)
        break;
    end
    i=i+1;
end
i

結果為9

注:階乘除了可以用factorial(i),還可以用prod(1:i),prod是連乘函式

3、 試計算以下迴圈語句將進行多少步操作

(1) for i= 32768:32767

(2) for j= 32768:32767

(3) for k=2:4:3

(4) for m=ones(5,5)

m檔案程式碼

count=0;
for i= -32768:32767
    count=count+1;
end
count
count=0;
for j= 32768:32767
    count=count+1;
end
count
count=0;
for k=2:4:3
    count=count+1;
end
count
count=0;
for m=ones(5,5)
    count=count+1;
end
count

結果為65536、0、1、5

4、 觀察以下迴圈語句,試計算每個迴圈次數和迴圈結束之後iresx的值

(1) ires=1;

while mod(ires,10)~=0

ires=ires+1;

end

(2) ires=2;

while ires<=200

ires=ires^2;

end

(3) ires=2;

while ires>200

ires=ires^2;

end

4x = 500;

while x > 0

    if isprime(x)

        break;

    end

    x = x -1;

end

m檔案程式碼

ires=1;
while mod(ires,10)~=0
ires=ires+1;
end
ires
ires=2;
while ires<=200
ires=ires^2;
end
ires
ires=2;
while ires>200
ires=ires^2;
end
ires
x = 500;
while x > 0
    if isprime(x)
        break;
    end
    x = x -1;
end
x

結果為:10、256、2、449

注:isprime(x)為求素數函式,如果是素數返回1,否則返回0

ISPRIME True for prime numbers.
    ISPRIME(X) is 1 for the elements of X that are prime, 0 otherwise.

5、分別用ifswitch多分支語句計算稅款,使用者輸入貨價,輸出相應的稅款:

貨價<2000,免稅;

貨價在20005000之間,超過2000部分抽稅2%

5000以上,除2%以外,5000以上抽稅5%,加收手續費60元。

if語句

m檔案程式碼

clear  
clc  
price=input('請輸入價格:'); 
taxes=0;
fee=0;
if price<2000
    taxes=0;
elseif price<5000
    taxes=(price-2000)*0.02;
else
    taxes=(5000-2000)*0.02+(price-5000)*0.05;
    fee=60;
end
taxes
fee

switch語句

m檔案程式碼

clear  
clc  
price=input('請輸入價格:'); 
taxes=0;
fee=0;
switch floor(price/1000)
    case {0,1}
        taxes=0; 
    case {2,3,4}
        taxes=(price-2000)*0.02; 
    otherwise
        taxes=(5000-2000)*0.02+(price-5000)*0.05;
        fee=60;        
end        
taxes
fee

6、分別用ifwhile做,m=1+2+2^2+...+2^n,直到1000為止,求最大的N

只用if的話,用遞迴可以實現

儲存下面兩個m檔案

sum2n.m

%matlab遞迴計算1+2+2^2+...+2^n
function num=sum2n(n)
if n==0
    num=1;
else
    num=2^n+sum2n(n-1);
end
sum2nbigm.m

%判斷1+2+2^2+...+2^n是否大於m,引數為m,n的初值(n的初值建議取0)
%對於本題呼叫方法為sum2nbigm(1000,0)
function num=sum2nbigm(m,n)
if sum2n(n)>m
    num=n;
else
    num=sum2nbigm(m,n+1);
end

然後呼叫sum2nbigm(1000,0),結果為9

while迴圈方法

m檔案程式碼

clear
clc
m=0;
i=0;
while m<1000
    m=m+2^i;
    i=i+1;
end
n=i-1;
n

7、‘The quick brown fox jumps over the lazy dog’,26個字母至少出現過一次,統計每個字母出現的次數。

逐個遍歷即可

方法一:sum函式遍歷

m檔案程式碼

%利用sum函式遍歷
clear
clc
str='The quick brown fox jumps over the lazy dog';
str=lower(str);       %將字串中的大寫轉換為小寫
for i=1:26
    x(i)=sum(str==char('a'-1+i));
end
x

方法二:逐個遍歷累加

m檔案程式碼

%逐個遍歷累加
clear
clc
str='The quick brown fox jumps over the lazy dog';
str=lower(str);
z=zeros(1,26);
for i=1:length(str)
    if(str(i)<='z'&&str(i)>='a') 
        z(str(i)-'a'+1)=z(str(i)-'a'+1)+1;
    end
end
z

8、輸入一個字元,如果是大寫字母,輸出小寫;如果是小寫字母,輸出大寫;其他字元,原樣輸出。

m檔案

clear
clc
n=input('請輸入一個字元','s');
n=n(1);%即使輸入多個字元也只取第一個
if(n>='a'&&n<='z')
    n=char(n-32);
elseif(n>='A'&&n<='Z')
    n=char(n+32);
else
    n=n;
end
n

9、利用rand函式編制一個新的函式rand10,該函式能夠產生在[-1010]之內的隨機數。

rand10.m

function num=rand10()
num=rand()*20-10;
end


10、對上題的函式加以修改,使得產生的隨機數在[low,high]之間,其中lowhigh為使用者輸入引數。

randLowToHigh.m

%呼叫示例:randLowToHigh(-50,100)
function num=randLowToHigh(low,high)
num=rand()*(high-low)+low;
end









相關文章