(优雅的使用)matlab脚本编程习题3

matlab脚本编程习题3

第三次作业:switch和循环
1.从键盘输入两个数和运算符,用switch语句实现一个简单的四则运算计算器。采用循环设置10个题目,输出做对多少题。

题目描述不太清晰,不必纠结,就是写个四则运算器

count=0;
for i=1:10
    fprintf('第%d题\n',i);
    x=input('x=');
    y=input('y=');
    m=input('input the + or - or * or /:','s');
    answer=input('input your answer:');
    result=0;
    
    switch m
        
        case '*'
            result=x*y;
            fprintf('x*y=%.4f\n',result); 
        case '/'
            if y==0
                result=NaN;
                fprintf('error');
            else
                result=x/y;
                fprintf('x/y=%.4f\n',result); 
            end
        case '+'
            result=x+y;
            fprintf('x+y=%.4f\n',result); 
        case '-'
            result=x-y;
            fprintf('x-y=%.4f\n',result); 
    end
    if answer==result
        count=count+1;
    end
end
fprintf('total right: %d',count);

2.百钱买百鸡的问题算是一套非常经典的不定方程的问题,题目很简单:公鸡5文钱一只,母鸡3文钱一只,小鸡3只一文钱,用100文钱买一百只鸡, 其中公鸡,母鸡,小鸡都必须要有,问公鸡,母鸡,小鸡要买多少只刚好凑足100文钱

我一开始还以为是贪心来着。。是我想多了
代码里的步长4、7是解方程得的,i,j的初值是逆推出来的,只是为了降低算法复杂度而已

for i=0:4:15
    for j=4:7:26
        k=100-i-j;
        if (i*7+4*j==100)&&(mod(k,3)==0&&(i*j*k~=0))
            fprintf('公鸡%d只,母鸡%d只,小鸡%d只\n',i,j,k);
        end
    end
end

3.验证哥德巴赫猜想:任何一个大于4的偶数都可以表示为两个素数的和。

验证猜想也就是把数num拆成两个数x和num-x嘛
遍历x可能的值,同时num-x也为素数就可以证明了

sushu.m
用了函数,sushu判断数字n是否为素数,判断大于2的数是否为素数的方法自行百度~

function [k]=sushu(n)
    k=1;
    if n==2
        k=1;
    else
        for i=2:round(sqrt(n))
            if (mod(n,i)==0)
                k=0;
            end
        end
    end

homework3_3.m
第一种,输出6-2000以内的偶数,并表示为两素数之和的形式,跟百钱百鸡类似

for i=6:2:2000
    for x=2:2000
        y=i-x;
        flag1=sushu(x);
        flag2=sushu(y);
        if flag1*flag2==1
            fprintf('%d=%d+%d\n',i,x,y);
            break;
        end
    end
end

第二种,随便输入一个数并验证哥德巴赫猜想

n=input('输入任意大于4的偶数:');
for x=2:n-1
        y=n-x;
        flag1=sushu(x);
        flag2=sushu(y);
        if flag1*flag2==1
            fprintf('%d=%d+%d\n',n,x,y);
            break;
        end
end

4.输入一个10进制整数,转换为二进制输出。

最坑的地方在于matlab里没有数据类型,默认不会向下取整,注意数组维度

n=input('请输入一个10进制整数(0~1023):');
A=zeros(1,10);
i=1;
while 1   
    A(i)=floor(mod(n,2));
    n=floor(n/2);
    i=i+1;  
    if n==0
        break;
    end
end
for i=10:-1:1
    fprintf('%d',A(i));
end

5.斐波那契数列:又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(3)=2,F(n)=F(n-1)+F(n-2)(n>=4,n∈N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用,为此,美国数学会从1963年起出版了以《斐波纳契数列季刊》为名的一份数学杂志,用于专门刊载这方面的研究成果。

要求:(1)编写函数fibo,功能是求斐波那契数列的第n项。(2)编写测试脚本,调用fibo函数,输出斐波那契数列的前30项。

用了递归,简单理解就是 根据递推式F(n)=F(n-1)+F(n-2)
只要有初项F(1)F(2),后面所有项都可以递推地求出来,在程序中就表现为我自己调用我自己,感兴趣可以再去做做汉诺塔问题

fibo.m

function [x]=fibo(n)
    if n==1||n==2
        x=1;
    else
        x=fibo(n-2)+fibo(n-1);
    end

homework3_5.m

for i=1:30
    f=fibo(i);
    fprintf('斐波那契数列第%d项为:%d\n',i,f);
end
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值