matlab第二次.pdf
Matlab 素质拓展课第二次作业第二次课知识点 if 选择语句 for while 循环语句 子函数(多个输入参数输出参数)递归 二分法 秦九韶算法等3.3 写一个名为 nexthour 的函数,接收一个整数参数,该参数是一天内的某个小时,然后返回下一个小时。假定是 12 小时制,所以例子中 12 的下一个小时是 1.% 3.3 写一个名为 nexthour 的函数,% 接收一个整数参数,该参数是一天内的某个小时,然后返回下一个小时。% 假定是 12 小时制,所以例子中 12 的下一个小时是 1.function y=nexthour(n)if n=1&nnvec=m:-1:n;elseif mvec=m:n;elsevec=m;end3.17 写一个脚本,它能生产一个随机整数,并且打印该随机整数是一个偶数还是一个奇数。%dy_chapter3_17.mclc;clear;A=randint(1,1,0,10000);if mod(A,2)=0fprintf(%d 是偶数n,A);elsefprintf(%d 是奇数n,A);end3.18.写一个名为 isdivby4 的函数,接收整数作为输入参数,如果输入参数能够被 4 整除,则返回逻辑 1,如果不能整除,则返回逻辑假。function R=dy_chapter3_18(n)%写一个名称为 mydiv4 的函数,接收整数作为输入参数,%如果输入整数能被 4 整除,则返回 1,如果不能整除,则返回0if mod(n,4)=0R=1;elseR=0;endend3.20 一个毕达哥拉斯(勾股)三角形是一组正整数 (a,b,c),它满足 a2=b2+c2.写一个名为ispythag 的函数接收三个正整数(按照 a,b,c 的顺序), 如果这三个数能形成该三角形则返回1,不能则返回 0.function y=ispythag(a,b,c)if a2=b2+c2y=1;elsey=0;endend3.26 云层一般分为高、中和低三层。云的高度是决定性因素,但是划分范围还取决于温度。例如,在热带地区的分类可以取决于下面的高度范围(单位英尺)低: 06500中650020000高20000%dy_chapter3_26.mclc;clear;A=input(请输入以英尺为单位的云层的高度:);if A0&A6500&AcolA2(i)colA2(i)=A(i,j); %每列中的最大值endendendfor i=1:3for j=1:5if A(i,j)rowA2(j)colA2(j)=A(i,j); %每行中的最大值endendendfor i=1:3for j=1:5if A(i,j)maxA2maxA2=A(i,j); %矩阵中的最大值endendend4.19 写一个 beautyofmath 脚本,产生下面的输出。脚本应该从第 1 行到第 9 行重复按左对齐方式生成如下表达式, 执行指定的操作来获得等式右边显示的结果, 严格按下面显示格式打印。4.20 写一个脚本,打印出下面乘法表:124369481216510152025%dy_chapter4_20.mclc;clear;for i=1:5for j=1:ifprintf(%2d ,i*j);endfprintf(n);end4.29 写一个脚本,连续提示用户输入正数,并把它们存储到一个向量变量中,直到用户输入一个负数为止。0.17 给出 20 个数,1,3,7,13,其规律是:第一个数是 1,第二个数比第一个数大2,第三个数比第二个数大 4.,请写出相应的 matlab 源码。0.18 中国网通规定:拨打市内电话时,如果不超过3 分钟,则收取话费 0.22 元;如果通话时间超过 3 分钟,则超出部分按每分钟0.1 元收取通话费,不足一分钟按一分钟计算。设通话时间为 t(分钟),通话费用 y(元),设计一个程序,计算通话的费用.请写出相应的 matlab源码。0.19 写出已知函数,输入x 的值,求 y 的值。请写出相应的 matlab 源码。0.20. 编写一个程序,求 1!+2!+10!的值.0.21. 求满足 1+2+3+n500 的最小的自然数 n.0.22. 求的值。0.23. 已知函数,请编写程序,输入自变量x 的值,输出其相应的函数值。0.24. 已知 S=5+9+13+101,分别用 for 和 while 写出相应的源码。0.25. 某市固定电话(市话)的收费标准为:3 分钟之内(包括 3 分钟)收取 0.2 元;超过 3 分钟,每分钟(不足 1 分钟,按 1 分钟计算)按 0.1 元收费。设计一个算法,根据通话时间计算话费。16. 用秦九韶算法求多项式f(x)=2x4+3x3+x2+5x-4,当 x=2 是的函数值。17.已知 编写一个程序,对每输入一个x 值,都得到相应的函数值。18. 编写一个程序,计算n 个数的和: 。19. 利用,编写程序求的近似值。20. 求 10999 中的水仙花数,所谓水仙花数是一个三位数,它的各位数字的立方和等于该数,例如 153 是一个水仙花数,因为153=13+53+33.试编写程序,找出所有的水仙花数。clc;%清空 command window 中的内容clear;%清空内存中的临时变量%水仙花数是指一个 n 位数 ( n3 ),%它的每个位上的数字的 n 次幂之和等于它本身。%(例如:13 + 53 + 33 = 153)%三位水仙花共有 4 个,153,370,371,407%方法一,用字符串有利于位数较多的情况% % n = 3;% % p = (0:9) . n;%预先算好 0 到 9 的 n 次方% % tempStr = 0 * ones(1, n);% % % for x = (10(n-1) : (10n - 1)% %digits = num2str(x, %d) - tempStr;% %s = sum(p(digits + 1);% %if s = x% %fprintf(%dn, x);% %end% % end%方法二,用子函数clc;clear;%调用 my42(i)子函数for i=100:999y=my42(i);if y=0disp(y)endend%判断某个三位数是否为水仙花数function y=my42(x)y=0;x1=fix(x/100);% 百位数字x2=rem(fix(x/10),10);%十位数字x3=rem(x,10);%个位数字if x=x13+x23+x33y=x;endend21.设计算法,交换两个变量a,b 的值,并输出交换前后的值。22.输入三个正实数 x,y,z,以它们为三边是否可以构成直角三角形?编写程序输出结果。23. 写出按从小到大的顺序重新排列x,y,z三个数值的算法。24. 判断直线 ax+by+c=0 与圆(x-x0)2+(y-y0)2=r2的位置关系。25. 输入一个 x 的值,输出 f(x)=2x2+3 的一个函数值。26.有一函数,写一程序,输入自变量的值,输出函数值。27.产生 20 个两位随机整数,输出其中小于平均值的偶数。28.输入 20 个数,求其中最大数和最小数。 要求分别用循环结构和调用MATLAB的 max函数、min 函数来实现。29.编写一个函数文件,求小于任意自然数n 的 Fibnacci 数列各项。Fibnacci 数列定义如下:30.找出 mn 之间的全体素数。function u=fq(m,n)找出 m 到 n 的全体素数 fq(m,n)若仅有一个参数则 m= 2,给出参数作为 n若没有参数则 m = 2,n = 1001999.3ifnargin = 0,m = 2; n = 100;elseif nargin = 1,n = m; m = 2;endi=1;fort = m:n,if t = 2;forr = 2:t1,iffix(t/r)r = t/rr,breakendendif r=t1,u(i)=t;i=i+1;endelseu(i)=t;i=i+1;endend31.输出全部三位的水仙花数。clc;%清空 command window 中的内容clear;%清空内存中的临时变量%水仙花数是指一个 n 位数 ( n3 ),%它的每个位上的数字的 n 次幂之和等于它本身。%(例如:13 + 53 + 33 = 153)%三位水仙花共有 4 个,153,370,371,407%方法一,用字符串有利于位数较多的情况% % n = 3;% % p = (0:9) . n;%预先算好 0 到 9 的 n 次方% % tempStr = 0 * ones(1, n);% % % for x = (10(n-1) : (10n - 1)% %digits = num2str(x, %d) - tempStr;% %s = sum(p(digits + 1);% %if s = x% %fprintf(%dn, x);% %end% % end%方法二,用子函数clc;clear;%调用 my42(i)子函数for i=100:999y=my42(i);if y=0disp(y)endend%判断某个三位数是否为水仙花数function y=my42(x)y=0;x1=fix(x/100);% 百位数字x2=rem(fix(x/10),10);%十位数字x3=rem(x,10);%个位数字if x=x13+x23+x33y=x;endend32.编程求出 Fibonacci 数列中第一个大于 1000 的元素及序号。%主函数clc;clear;Fib index=my43()%子函数function Fib index=my43()a=1;b=1;Fib=a+b;index=3;while Fib=1000a=b;b=Fib;Fib=a+b;index=index+1;endend33.求100,1000范围内的全部素数之和。%主函数clc;clear;x=150;result=;for i=100:1000y=my44(i);if y=1result=result i;endendresult%子函数function result=my44(x)result=1;for i=2:x/2if mod(x,i)=0result=0;break;endendend34.求 1100 的平方、平方根和立方根之和。%主函数clc;clear;for x=1:100my1 my2 my3=my45(x)end%子函数function my1 my2 my3=my45(x)my1=x*x;%平方my2=sqrt(x); %平方根my3=x(1/3); %立方根end35.求 n!, n=1,2, ,10.%主函数clc;clear;for i=1:10y=my46(i)end%子函数,递归function y=my46(n)if n=1y=1;elsey=n*my46(n-1);endend36.建一个命令文件将变量a,b(包括矩阵)的值互换。%主函数clc;clear;A=1 2;B=3 4;5 6;M N=my47(A,B)%子函数,交换 A,Bfunction M N=my47(A,B)M=B;N=A;end37.求一元二次方程的根。%主函数clc;clear;a=11;b=2;c=1;result=my48(a,b,c)%子函数function result=my48(a,b,c)%a,b,c 为系数if b*b-4*a*cmymaxmymax=M(i);endif M(i)mymin=M(i);endendend40.多项式相加,p1=1 5 4, p2= 1 6 11 6;%主函数clc;clear;p1=1 2 1 5 4p2= 1 6 11 6p=my51(p1,p2)%子函数function p=my51(p1,p2)m1,n1=size(p1);m2,n2=size(p2);if n1-n20temp=zeros(1,n1-n2);p2=temp p2;elseif n1-n20temp=zeros(1,n2-n1);p1=temp p1;endp=p1+p2;end41.鸡兔同笼,头有 36,脚共 100,求鸡兔各多少?%主函数clc;clear;head=36;foot=100;chicken rabbit=my52(head,foot)%子函数function chicken rabbit=my52(head,foot)chicken=-1;rabbit=-1;for i=0:headfor j=0:headif i+j=head & 2*i+4*j=footchicken=i;rabbit=j;break;endendendend42.分别用 if 语句和 switch 语句实现以下计算,其中、 、的值从键盘输入。43.产生 20 个两位随机整数,输出其中小于平均值的偶数。44. 设,数列是否收敛?若收敛,其值为多少?编程计算其收敛的近似值,精确到6 位有效数字。45.请至少用三种方法编程求。46.计算 1-100 之间所有偶数之和。47.创建 Hilbert 矩阵,其中 a(i,j)=1/(i+j-1)。%方法一clc;%清除 command window 中的内容clear;%清除 Matlab 工作空间中保存的变量M=3;N=4;for i=1:Mfor j=1:Na(i,j)=1/(i+j-1); %Hilbert矩阵近似解endenda%方法二clc;%清除 command window 中的内容clear;%清除 Matlab 工作空间中保存的变量M=3;N=4;%format%恢复默认数据格式format rat%用分数形式表示for i=1:Mfor j=1:Na(i,j)=1/(i+j-1); %Hilbert矩阵endenda48.任给一组输入 x,求函数 y=|x|的值。%clc;%清除 command window 中的内容clear;%清除 Matlab 工作空间中保存的变量x=-1y=abs(x)%对单个变量求绝对值t=-2,-1,0,1,2y=abs(t)%对一维矩阵求绝对值m=-1 -2;1 2y=abs(m)%对多维矩阵求绝对值49.从键盘输入若干个数,当输入0 时结束输入,求这些数的平均值和它们之和。%本程序实现从键盘输入若干数据,遇0 结束,然后求其平均值!clc;%清除 command window 中的内容clear;%清除 Matlab 工作空间中保存的变量m=input(请输入数据,输入 0 结束:);M=;while m=0M=M m;m=input(请输入数据,输入 0 结束:);endM%取值结束后的矩阵B=sum(M)%求和row col=size(M);avg_B=B/col%求平均50.求108,288之间第一个能被 13 整除的整数;求第一个同时能被 11、13 整除的整数。clc;%清除 command window 中的内容clear;%清除 Matlab 工作空间中保存的变量m=108;n=288;for i=m:nif mod(i,11)=0 &mod(i,13)=0num=i;break;endendnum