Matlab实验三答案.docx
试验三MATLAB语言的程序设计一、试验目的:1、熟悉MATLAB程序编辑与设计环境2、驾驭各种编程语句语法规则及程序设计方法3、函数文件的编写和设计4、了解和熟悉跨空间变量传递和赋值二、试验基本学问:1、程序流程限制语句for循环结构语法:fori=初值:增量:终值语句1语句nend说明:1.i=初值:终值,则增量为1。2.初值、增量、终值可正可负,可以是整数,也可以是小数,只须符合数学逻辑。while循环结构语法:while逻辑表达式循环体语句end说明:1、WhiIe结构依据逻辑表达式的值推断是否执行循环体语勾。若表达式的值为真,执行循环体语句一次、在反复执行时,每次都要进行推断。若表达式的值为假,则程序执行end之后的语句。2、为了避开因逻辑上的失误,而陷入死循环,建议在循环体语句的适当位置加break语句、以便程序能正常执行。(执行循环体的次数不确定;每一次执行循环体后,确定会变更WhiIe后面所跟关系式的值。)3、While循环也可以嵌套、其结构如下:WhiIe逻辑表达式1循环体语句1While逻辑表达式2循环体语句2end循环体语句3endif-else-end分支结构if表达式1语句1elseif表达式2(可选)语句2else(可选)语句3endend说明:Lif结构是一个条件分支语句,若满足表达式的条件,则往下执行;若不满足,则跳出if结构。2 .elseif表达式2与else为可选项,这两条语句可依据具体状况取舍。3 .留意:每一个if都对应一个end,即有几个if,记就应有几个end,SWitCh-CaSe结构语法:SWitCh表达式CaSe常量表达式I语句组1CaSe常量表达式2语句组2otherwise语句组nend说明:1.SWiteh后面的表达式可以是任何类型,如数字、字符串等。2.当表达式的值与CaSe后面常量表达式的值相等时,就执行这个CaSe后面的语句组假如全部的常量表达式的值都与这个表达式的值不相等时,则执行OtherWiSe后的执行语句。程序流程限制指令break>returnpause2、函数文件的结构和编写方法函数只能在函数体内对变量进行操作,也就是只能访问函数本身工作空间中的变量。M函数文件的结构(1)函数定义行(funciion)(2)HI行(函数帮助文本的第一行)(3)函数帮助文本(4)函数体(5)注释函数文件编写后,保存时,其文件名必需与函数名相同。留意:函数名不要与MATLAB自身的函数叮嘱相同。三、试验内容:2、用for循环语句实现求1100的和编程:SUm=0;fori=k!00sum=sum+i;endsum运行结果:»Ijiasum=50503、用for循环语句实现编写一个求阶乘的函数文件。编程:functiony=ycheng(n)y=i;fori=l:ny=y*i;endy运行结果:假设n=5»jcheng(5)y=120ans=1204、找到一个!>10网的值(利用上题的阶乘函数文件)编程:i=l;while(l)y=jcheng(i);ify>l0100break;endi=i+l;endi运行结果:»zhaony=24y=120y=720y=5040y=40320y=3628803628800y=39916800y=479001600y=6.2270e+009y=8.7l78e+010y=1.3077e+012y=2.0923e+013y=3.5569e+0141.2165e+017y=2.4329e+018y=5.1O91e+O19y=1.1240e+021y=2.5852e+O22y=6.2045e+023y=1.551le+O25y=4.0329e+0263.0489e+029y=8.8418e+O3Oy=2.6525e+032y=8.2228e+O33y=2.6313e+O35y=8.6833e+O36y=2.9523e+O38y=1.0333e+0401.3764e+043y=5.2302e+044y=2.0398e+046y=8.1592e+047y=3.3453e+049y=1.4050e+051y=6.0415e+052y=2.6583e+O54y=5.5026e+057y=2.5862e+O59y=1.2414e+061y=6.0828e+062y=3.0414e+064y=l.5511e+066y=8.0658e+067y=4.2749e+069y=1.2696e+073y=7.1100e+074y=4.0527e+076y=2.35O6e+O78y=1.3868e+O8Oy=83210e+081y=5.O758e+O83l.9826e+087y=1.2689e+O89y=8.2477e+090y=5.4434e+092y=3.647le+094y=2.4800e+096y=1.7ll2e+098y=l.l979e+1005、编写一个乘法表(9×9)编程:fori=l:9A=;frj=ki;A=A,sprintf(,%dx%d=%d'J,i,i*j);enddisp(八)end运行结果:»cfbIxl=I1x2=22x2=41x3=32x3=63x3=91x4=42x4=83x4=124x4=161x5=52x5=103x5=154x5=205x5=251x6=62x6=123x6=184x6=245x6=306x6=361x7=72x7=143x7=214x7=285x7=356x7=427x7=491x8=82x8=163x8=244x8=325x8=406x8=487x8=568x8=641x9=92x9=183x9=274x9=365x9=456x9=547x9=638x9=729x9=816、推断y向量的元素属于3、3+1或3+2,设y=3,5,7,9,11/6。编程:假设:将3n放进数组A,将3n+l放进数组B,将3n+2放进数组C。y=35791116;A=;B=;C=;j=l;k=l;m=l;fori=l:6x=rem(y(i),3);ifx=0A(j)=y(i)y=j+1;endifx=lB(k)=y(i);k=k+1;endifx=2C(m)=y(i);m=m+1;endenddisp(八)disp(B)disp(C)运行结果:»yush397165117、已知一维数组A=2,4,5,8,10、B=4,9,6,7,4,用for循环语句实现2441+1。求/=1和函数可用SUm().编程:A=245810;B=49674;C=;y=0;fori=l:5C(i)=(A(i)*B(5-i+l);y=y+C(i);endy运行结果:»timu7y=1788、(1)编写求解一维数组平均值的函数文件。(2)编写求解二维数组平均值的函数文件。编程1:functiony=ywjz(八)x=0;n=numel(八);fori=l:nx=x+A(i);endv=xn;运行结果:>>y=ywjz(l2345)y=3编程2:functiony=eujz(八)x=0;n=numel(八);fori=l:nx=x+A(i);endy=xn;运行结果:»y=ewjz(23;45;67;)y=4.5000调用验证:A=l33;557;y=ewjz(八);y»aay=49、编写验证魔方矩阵的函数文件,输出要求如下:(1)假如输入矩阵的维数小于3,输出显示Irror'(2)假如输入矩阵的不是方阵,输出显示'thesizeofmatrixXmustbeN-by-Nmatrix,(3)显示行、列和及其对角线求和后的值,并推断其和是否相同,若不同,显示,N。,,相同显示'Yes,编程:functionyanzh(x)r,c=size(x);ifr-=cdisp(,thesizeofmatrixXmustbeN-by-Nmatrix')elseifr<3disp(,eroor')endendS=sum(x,I)5sum(x,2)sum(diag(x)sum(diag(rot90(x)'ifS(1)=S(2)&S(2)=S(3)&S(3)=S(4)&S(1)=S(4)disp(,yes,)elsedisp(,no')end验证运行:»yanzh(816;357;492;)yes»yanzh(816;357;)thesizeofmatrixXmustbeN-by-Nmatrixno»yanzh(86;35;)eroorno»yanzh(826;357;492;)no