数学实验答案

2025年02月23日 05:37
有2个网友回答
网友(1):

1. 请编写函数fun1,它的功能是: 求出 1 到 n之内能被 7 或11整除、但不能同时被 7 和 11 整除的所有整数并将它们放在 a所指的数组中,并计算出这些数的个数。
Step1:编写函数式m文件如下
function [a s]=fun1(n)
a=[];s=0;
for k=1:n
if mod(k,7)*mod(k,11)==0&mod(k,7)+mod(k,11)~=0& mod(k,77)~=0
a=[a k];
s=s+1;
end
end
step2:在命令窗口或其他m文件中调用上述函数,如n取100的调用方式为
[a s]=fun1(100)
2. 请编写函数fun2, 函数的功能是: 判断字符串是否为回文? 若是, 函数返回1,主函数中输出: YES, 否则返回0, 主函数中输出NO。回文是指顺读和倒读都一样的字符串。
例如, 字符串LEVEL是回文, 而字符串123312就不是回文。
Step1:编写函数式m文件如下
function y=fun2(s)
% 输入参数s是字符串
ss=s(end:-1:1);
if s==ss
y=1;disp('yes');
else
y=0;disp('no');
end
step2:在命令窗口或其他m文件中调用上述函数,如考察LEVEL是否为回文的调用方式为
y=fun2('LEVEL ');考察123312是否为回文的调用方式为y=fun2('123312 ')
3. 请编写函数fun3,函数的功能是:使矩阵左下三角元素中的值乘以n 。
例如:若n的值为3,a 数组中的值为
a = ,则返回主程序后a数组中的值应为
解1:function y=fun3(a,n)
%输入参数a是要考察的矩阵,n是要成的数
a1=tril(a);
y=(n-1)*a1+a1
解2:
function y=fun33(a,n)
%输入参数a是要考察的矩阵,n是要成的数
[k l]=size(a);y=[];
for i=1:k
for j=1:l
if i y(i,j)=a(i,j);
else
y(i,j)=a(i,j)*n;
end
end
end
对题目中所给数据,调用方式为 y=fun3([1 9 7;2 3 8;4 5 6],3)
4 .利用以下所示的简单迭代方法求方程:cos(x)-x=0 的一个实根。

迭代步骤如下:
(1)取 x1 初值为a;
(2)x0 = x1,把x1的值赋给 x0;
(3)x1 = cos(x0),求出一个新的x1;
(4)若x0 - x1的绝对值小于 0.000001,执行步骤(5),否则执行步骤(2);
(5)所求x1就是方程 cos(x)-x=0 的一个实根,作为函数值返回。
a=input('初值');
x0=a;x1=cos(x0);
while abs(x0-x1)>=0.000001
x0=x1;
x1=cos(x0);
end
gen=x1
wucha=x1-cos(x1)
5. 将M行N列的字符矩阵中的字符数据, 按行的顺序依次放到一个字符串中,然后将不是字符的删除。
例如, 二维矩阵s中的数据为:
3 W S H
T 5 V A
C D 4 E
则字符串中的内容应是: WSHTVACDE。
解1:命令式文件
s=input('输入一个m行n列的矩阵 ','s');
a=[];
[m n]=size(s);
for i=1:m
for j=1:n
if (abs(s(i,j))>=abs('A')&abs(s(i,j))<=abs('Z'))|(abs(s(i,j))>=abs('a')&abs(s(i,j))<=abs('z'))
a=[a s(i,j)];
end
end
end
a
解2:函数式文件
function a=fun5(s)
%s是一个矩阵,其中可以含有字母
a=[];
[m n]=size(s);
for i=1:m
for j=1:n
if (abs(s(i,j))>=abs('A')&abs(s(i,j))<=abs('Z'))|(abs(s(i,j))>=abs('a')&abs(s(i,j))<=abs('z'))
a=[a s(i,j)];
end
end
end
题目中所给矩阵的调用方式为:a=fun5('[3 W S H;T 5 V A;C D 4 E]')
6.删去一维数组中所有相同的数, 使之只剩一个。
例如: 一维数组中的数据是:2 2 2 3 4 4 5 6 6 6 6 7 7 8 9 9 10 10 10。
删除后,数组中的内容应该是: 2 3 4 5 6 7 8 9 10。
解1:命令式文件
s=input('键盘输入待考察的向量 ');
a=[];
for i=1:length(s)
for j=i+1:length(s)
if s(i)==s(j)
break;
end
end
if j==length(s)
a=[a s(i)];
end
end
a
解2:函数式文件
function a=fun6(s)
%s是一个向量
a=[];
while size(s)~=[0 0]
k=find(s==s(1));
a=[a s(1)];
s(k)=[];
end
题目中所给矩阵的调用方式为:fun6([2 2 2 3 4 4 5 6 6 6 6 7 7 8 9 9 10 10 10])。
以s=[2 3 3 2 2 5 5 2]为例代入检验,分析这两种删除方式有什么不同。
7. 将s所指字符串中ASCII值为偶数的字符删除,串中剩余字符形成一个新串放在t所指的数组中。
例如,若s所指字符串中的内容为:"ABCDEFG12345",其中字符B的ASCII码值为偶数、…、字符2的ASCII码值为偶数、… 都应当删除,其它依此类推。最后y的内容应是:"ACEG135"。
s=input('键盘输入一个字符串 ');
t=abs(s);
k=find(mod(t,2)==0);
t(k)=[];
char(t)
8. 请编写函数fun8, 其功能是计算并输出当x<0.97时下列多项式的值
直到 为止。
例如, 给x输入0.21后,输出为:s=1.100000。
Step1: 编写求阶乘的函数文件
function f=jc(n)
if n>=2
f=jc(n-1)*n;
else
f=1;
end
Step2: 编写解本题的函数文件
function s=fun8(x)
s=[1 0.5*x];n=1;
while abs(s(end)-s(length(s)-1))>=0.000001
s1=1;n=n+1;
for k=1:n
s1=s1+((0.5*(-1)^(k+1)*prod(1:2:(2*k-3)))/(2^(k-1)*jc(k)))*x^k;
end
s=[s s1];
end
s=s(end)
9. 编写函数fun9,其功能是:根据以下公式求P的值,结果由函数值带回。m 与n 为两个正整数且要求m > n。

例如,m=12,n=8时,运行结果为495.000000。
function p=fun9(m,n)
if m>0&n>0&fix(m)==m&fix(n)==n&m>n
p=jc(m)/(jc(n)*jc(m-n))
else
disp('请检查你给的m,n是否合法')
end
10. 函数fun10的功能是:将两个两位数的正整数a、b合并形成一个整数放在c 中。合并的方式是:将a数的十位和个位数依次放在c数的百位和个位上, b数的十位和个位数依次放在c数的千位和十位上。
例如,当a=45,b=12。调用该函数后,c=1425。
function c=fun10(a,b)
if a>0&a<100&b>0&b<100&fix(a)==a&fix(b)==b
c=fix(b/10)*1000+fix(a/10)*100+mod(b,10)*10+mod(a,10)
else
disp('请检查你给的a,b是否合法')
end

网友(2):

题目呢?