admin 管理员组

文章数量: 1184232


2023年12月23日发(作者:margin padding区别)

matlab第三章课后局部答案

习题三

3-2 从键盘输入一个三位整数,将它反向输出。如输入639,输出为936

程序如下:

m=input('请输入一个三位整数:');

m1=fix(m/100);%求m的百位整数

m2=rem(fix(m/10),10);%求m的十位数字

m3=rem(m,10);%求m的个位数字

m=m3*100+m2*10+m1%反向输出m

3-3 输入一个百分制成绩,要求输出成绩等级A,B,C,D,E。其中90~100分为A,80~89分为B,70~79分为C,60~69分为D,60分以下为E。

要求:〔1〕分别用if语句和switch语句实现。

〔2〕输入百分制成绩后要判断该成绩的合理性,对不合理的成绩应输出出错信息。

程序如下:

〔1〕if语句

c=input('请输入成绩:');

if c>=90&c<=100

disp('A 成绩合理');

elseif c>=80&c<=89

disp('B 成绩合理');

elseif c>=70&c<=79

disp('C 成绩合理');

elseif c>=60&c<=69

disp('D 成绩合理');

elseif c<60

disp('E 成绩合理');

else

disp('成绩错误');

end

〔2〕switch语句

c=input('请输入成绩:switch fix(c)

case num2cell(90:100)

disp('A 成绩合理');

case num2cell(80:89)

disp('B 成绩合理');

case num2cell(70:79)

disp('C 成绩合理');

case num2cell(60:69)

disp('D 成绩合理');

case num2cell(0:59)

disp('E 成绩合理');

');

x=fix(rand(1,20)*89)+10;

x1=fix(sum(x)/20);

disp(['平均数是: ',num2str(x1)])

m=(rem(x,2)==0&x

n=find(m);

disp(['小于平均数的数是: ',num2str(x(n))]);

3-6 输入20个数,求其中最大数和最小数。要求分别用循环结构和调用MATLAB的max函数、min函数来实现。

程序如下:

主函数

c=input('请输入20个数:')

disp('最大值是:')

m=max(c)

disp('最小值是:')

n=min(c)

max函数

function m=max(a[])

m=a(1,20);

for i=2:20

if m>a(1,i)

m=a(1,i)

end

end

min函数

function n=min(a[])

m=a(1,20);

for i=2:20

if n

n=a(1,i)

end

end

3-8 当n分别取100、1000、10000时,求以下各式的值:

〔程序如下:

clear all

n=1:100;

b=1./(n.*n);

c=sum(b);

disp(['当n等于100时: ',num2str(c)])

n=1:1000;

b=1./(n.*n);

1〕1/1^2+1/2^2+1/3^2+···+1/n^2+···(=pi^2/6)

c=sum(b);

disp(['当n等于1000时: ',num2str(c)])

n=1:10000;

b=1./(n.*n);

c=sum(b);

disp(['当n等于10000时: ',num2str(c)])

结果:>> 当n等于100时: 1.635

当n等于1000时: 1.6439

当n等于10000时: 1.6448

(2) 1-1/3+1/5-1/7+···(=pi/4)

程序如下:

clear all

n=1:100;

b=1./(4.*n-3)-1./(4.*n-1);

c=sum(b);

disp(['当n等于100时: ',num2str(c)])

n=1:1000;

b=1./(4.*n-3)-1./(4.*n-1);

c=sum(b);

disp(['当n等于1000时: ',num2str(c)])

n=1:10000;

b=1./(4.*n-3)-1./(4.*n-1);

c=sum(b);

disp(['当n等于10000时: ',num2str(c)])

结果:>> 当n等于100时: 0.78415

当n等于1000时: 0.78527

当n等于10000时: 0.78539

(3)1/4+1/16+1/64+···+1/4^n+···(=1/3)

程序如下:

clear all

n=1:100;

b=1./(4.^n);

c=sum(b);

disp(['当n等于100时: ',num2str(c)])

n=1:1000;

b=1./(4.^n);

c=sum(b);

disp(['当n等于1000时: ',num2str(c)])

n=1:10000;

b=1./(4.^n);

c=sum(b);

disp(['当n等于10000时: ',num2str(c)])

结果:>> 当n等于100时: 0.33333

当n等于1000时: 0.33333

当n等于10000时: 0.33333

(4)···((2n)(2n)/(2n-1)(2n+1))···(=pi/2)

程序如下:

clear all

n=1:100;

b=((2*n).*(2*n))./((2*n-1).*(2*n+1));

c=prod(b);

disp(['当n等于100时: ',num2str(c)])

n=1:1000;

b=((2*n).*(2*n))./((2*n-1).*(2*n+1));

c=prod(b);

disp(['当n等于1000时: ',num2str(c)])

n=1:10000;

b=((2*n).*(2*n))./((2*n-1).*(2*n+1));

c=prod(b);

disp(['当',num2str(c)])

结果:>> 当n等于100时: 1.5669

当n等于1000时: 1.5704

当n等于10000时: 1.5708

3-9假设两个连续自然数的乘积减1是素数,那么称这两个连续自然数是亲密数对,该素数是亲n等于10000时:

密素数。例如,2*3-1=5,由于5是素数,所以2和3是亲密数对,5是亲密素数。求[2,50]区间内:

〔1〕亲密数对的对数。

〔2〕与上述亲密数对对应的所有亲密素数之和。

程序如下:

clear all

p=0;

l=0;

H=[];

for m=2:49

a=m;

b=m+1;

c=a*b-1;

for k=1:c

if rem(c,k)==0

l=l+1;

end

end

if l==2

disp(['亲密数','(',num2str(a),',',num2str(b),')'])

p=p+1;

对是

H=[H,c];

end

l=0;

end

sum=sum(H);

disp(['亲密数对的个数是:',num2str(p)])

disp(['亲密数对的和是: ',num2str(sum)])

3-10 根据y=1+1/3+1/5+···+1/(2n-1),求:

〔1〕y<3时的最大n值。

〔2〕与〔1〕的n值对应的y值。

程序如下:sum=0;

for n=1:100

sum=sum+1/(2*n-1);

if sum>3&(sum-1/(2*n-1))<3

disp(n-1)

disp(sum-1/(2*n-1))

end

end

方法2

clear all

n=1;

y=0;

while(y<3)

x=1/(2*n-1);

n=1+n;

y=y+x;

end

disp(['y<3时n的最大值是: ',num2str(n-2)])

disp(['相应的y值是: ',num2str(y-x)])

3-12 编写一个函数文件,用于求两个矩阵的乘积和点乘,然后在命令文件中调用该函数。

程序如下:

mul函数 %用于求两个矩阵的乘积和点乘

function [x,y]=mul(a,b)

x=a*b;

y=a.*b;

main%主函数

a=input('请输入一个矩阵:');

b=input('请再输入一个矩阵:〔注意:两矩阵要可以相乘〕');

[x,y]=mull(a,b);

disp('这两个矩阵的乘积为:');

x

disp('这两个矩阵的点乘为:');

y

3-14 先用函数的递归调用定义一个函数文件求∑I,然后调用该函数文件求∑k+∑k^2+∑1/k

程序如下:

定义一个求和函数:

function sum=add(n,m)

if n<1

sum=0;

else

sum=n^m+add(n-1,m);

end

主函数:

clear all

y=add(100,1)+add(50,2)+add(10,-1);

disp(y)


本文标签: 成绩 函数 矩阵 输入 调用