一、程序目的和要求
- 了解M文件的结构与功能;
- 掌握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