实验4 Matlab程序设计

一、程序目的和要求

  1. 了解M文件的结构与功能;
  2. 掌握M文件的建立和运行方式。

二、实验内容和步骤(本实验中内容要求通过M文件完成)

1.建立命令文件,实现从键盘输入一个3位整数,输出它的逆序数。

程序:

clear;clc;
x=input('请输入一个三位整数:');
a=floor(x/100);
b=floor((x-a*100)/10);
c=rem(x,10);
y=c*100+b*10+a;
fprintf('输入数的逆序数为:%.0f\n',y);

运行结果:

请输入一个三位整数:189

输入数的逆序数为:981

2.随机产生1000个0~9之间的整数,统计数字6出现的次数。要求通过以下三种方式完成:(1)直接在命令窗口中完成;(2)通过命令文件完成;(3)定义函数文件完成。

程序:

(1)

a=randi([0,9],1,1000);length(a(a==6))

(2)

clear;clc;
a=randi([0,9],1,1000);
b=a(a==6);
fprintf('数字6出现的次数:');
disp(length(b));
%每次运行结果不一定相同

(3)

function cn=count6number(a)
cn=length(a(a==6));
end

运行结果:

(1)ans =    97

(2)数字6出现的次数:    98

(3)

 a=randi([0,9],1,1000);count6number(a)

ans =   108

3.分别编写函数文件,用来求下列级数的和。并给出n分别为100、1000、10000时,下列各式的值。

(1)

(2)

程序:

(1)①

clear;clc;
s=0;
%用for循环完成计算
for i=1:1:100
    s=s+1/i^2;
end
fprintf('前100项和为:%f\n',s);
for i=101:1:1000
    s=s+1/i^2;
end
fprintf('前1000项和为:%f\n',s);
for i=1001:1:10000
    s=s+1/i^2;
end
fprintf('前10000项和为:%f\n',s);

function[y,i]=total1(n)
y=[];i=1;
while(i<=n)
    y(i)=1/i^2;
    i=i+1;
end
fprintf("前%.0f项和是",n);
disp(sum(y));
clear;
end

(2)

clear;clc;
s=1;
%用for循环完成计算
for i=1:1:100
    s=s*2*i*2*i/((2*i-1)*(2*i+1));
end
fprintf('前100项和为:%f\n',s);
for i=101:1:1000
    s=s*2*i*2*i/((2*i-1)*(2*i+1));
end
fprintf('前1000项和为:%f\n',s);
for i=1001:1:10000
    s=s*2*i*2*i/((2*i-1)*(2*i+1));
end
fprintf('前10000项和为:%f\n',s);

运行结果:

(1)①

前100项和为:1.634984

前1000项和为:1.643935

前10000项和为:1.644834

 total1(100)

前100项和是    1.6350

total1(1000)

前1000项和是    1.6439

 total1(10000)

前10000项和是    1.6448

(2)

前100项和为:1.566894

前1000项和为:1.570404

前10000项和为:1.57075

4.随机产生n个0~9之间的整数,统计各个数字出现的次数,这里n分别取100、1000、10000。要求通过以下三种方式完成:(1)直接在命令窗口中完成;(2)通过命令文件完成;(3)定义函数文件完成。

程序:

(2)

clear;clc;
n=input('请给出n的值:n=');
a=randi([0 9],1,n);
fprintf('数字0~9出现的次数依次为:\n');
c=[0,0,0,0,0,0,0,0,0,0];
for i=1:1:10
    c(i)=length(a(a==(i-1)));  %数组索引必须为正整数或逻辑值
end
disp(c);
%每次运行结果不一定相同

运行结果:

(2)

请给出n的值:n=100

数字0~9出现的次数依次为:

    11     5    13    12     8     9    12    13     8     9

请给出n的值:n=1000

数字0~9出现的次数依次为:

    92   103   106    96   110   102   106    99    98    88

请给出n的值:n=10000

数字0~9出现的次数依次为:

  列 1 至 6

        1019         994        1046        1011         940         970

  列 7 至 10

        1003        1008        1017         992

(3)

counteachnumber(100)

ans =

    15     6    14     7     7    11     9    14    11     6

counteachnumber(1000)

ans =

   110   107   105   110    93    99    97    92    92    95

 counteachnumber(10000)

ans =

  列 1 至 6

         946        1006         928        1029        1013        1023

  列 7 至 10

        1021        1008        1025        1001

5.通过函数文件实现:随机产生n个数,输出其中的最大数、最小数以及所在的位置。

function[maxnum,minnum,ipa1,ipi2]=findnum(n)
l=rand(1,n)*100;
len=length(l);
maxnum=max(l);
minnum=min(l);
for i=1:1:len
    if(l(i)==maxnum)
        ipa1=i;
    elseif(l(i)==minnum)
        ipi2=i;
    end
end
clc;
fprintf('生成的随机数是:\n');
disp(l);
fprintf('随机数中的最大数是%f,它的下标是%.0f;\n最小数是%f,它的下标是%.0f\n',maxnum,ipa1,minnum,ipi2);
clear;
end

输入:

findnum(10)

生成的随机数是:

  列 1 至 7

   15.7613   97.0593   95.7167   48.5376   80.0280   14.1886   42.1761

  列 8 至 10

   91.5736   79.2207   95.9492

随机数中的最大数是97.059278,它的下标是2;

最小数是14.188634,它的下标是6

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

苏妹妹的第2333任男友

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值