第一篇:MATLAB 编程题总结
MATLAB 编程题总结
LY 1.输出x,y两个中值较大的一个值。
x=input('x=');y=input('y=');if x>y x else y end 2.输入x,计算y的值。计算函数的值yx1,x0
2x1,x0x=input('x=');if x<0 y=x+1 else y=2*x-1 End 3.输入一学生成绩,评定其等级。方法是:90~100分为“优秀”,80~89分为“良好”,70~79分为“中等”,60~69分为“及格”,60分以为“不合格”
x=input('x=');if x>100 | x<0 y='输入错误' elseif x>=90 y='优秀' elseif x>=80 y='良好' elseif x>=70 y='中等'
elseif x>=60 y='及格' else
y='不合格' end
4.某购物超市节日期间举办购物打折扣的促销活动,优惠办法是:每位顾客当天一次性购物在100元以上者,按九五折优惠;在200元以上者,按九折优惠;在300元以上者,按八五折优惠;在500元以上者,按八折优惠。则可以根据顾客购物款数计算出优惠价。
x=input('x=');if x>=500
y=x*0.8 elseif x>=300 y=x*0.85 elseif x>=200 y=x*0.9 else
y=x*0.95 end
5.编程计算:S=1+2+3+„+100
sum=0;
for i=1:100 sum=sum+i;end sum
6.计算1~100的奇数和.sum=0;
for i=1:2:100 sum=sum+i;end Sum 或
sum=0;
for i=1:100
if mod(i,2)==1 sum=sum+i;end
end sum
7.百元买百鸡问题。假定小鸡每只5角,公鸡每只2元,母鸡每只3元。现在有100元钱要求买100只鸡,编程列出所有可能的购鸡方案。
设母鸡、公鸡、小鸡各为x、y、z只,根据题目要求,列出方程为:
x+y+z=100 3x+2y+0.5z=100
三个未知数,两个方程,此题有若干个解。
for x=1:33
for y=1:50
for z=1:200
if x+y+z==100 & 3*x+2*y+0.5*z==100 [x,y,z] end end end end
8.我国有13亿人口,按人口年增长0.8%计算,多少年后我国人口超过26亿。分析:解此问题两种方法,可根据公式:26=13*(1+0.008)n
LiYang
第 1 页 / 共 6 页
MATLAB 编程题总结
LY n=1;m=13;while m<26 m=m*(1+0.008);n=n+1;end n 9.求水仙花数,水仙花数是指一个 n 位数(n≥3),它的每个位上的数字的 n 次幂之和等于它本身。(例如:1^3 + 5^3 + 3^3 = 153)(求出1000以内)
for i=100:999 a(1)=fix(i/100);a(2)=fix((i-a(1)*100)/10);a(3)=i-a(1)*100-a(2)*10;if a(1)^3+a(2)^3+a(3)^3==i i end end 10.鸡兔同笼问题:鸡和兔子关在一个笼子里,已知共有头36个,脚100个,求笼内关了多少只兔子和多少只鸡?
for i=1:50 for j=1:36 if i+j==36&i*2+j*4==100 [i,j] end end end 1.用matlab编程求算式xyz+yzz=532中x,y,z的值(其中xyz和yzz分别表
示一个三位数)。
for x=1:9
for y=1:9 for z=1:9
i=100*x+10*y+z+100*y+10*z+z;
if i==532 [x,y,z] end end end end
2.用matlab编程完成用一元人民币换成一分、两分、五分的所有兑换方案(即输出所有的组合方式)。
for i=0:20
for j=0:50
k=100-i*5-j*2;if(k>=0)[i,j,k] end end end
3.有1020个西瓜,第一天卖一半多两个,以后每天卖剩下的一半多两个,问几天后可以卖完,请用matlab编程计算。
day=0;x1=1020 while(x1)
x2=x1/2-2;x1=x2;
day=day+1;
end day
4.有一堆零件(100到200之间),如果分成4个零件一组的,则多2个零件;若分成7个零件一组的,则多3个零件;若分成9个零件一组的,则多5个零件。用matlab编程求这堆零件总数。
for i=100:200
if(mod(i-2,4)==0)
if(mod(i-3,7)==0)
if(mod(i-5,9)==0)i end end end end
5.编写程序,求1000至9999之间的回文数.回文数是指正读与反读都一样的数,如1221.for i=1000:1000:9999 for j=0:9
n=i+j*100+j*10+i/1000 end 6.作函数
yend sin(x),x[0,2]的图象,用蓝色五角星表示点。
x=0:pi/10:2pi;y=sin(x);
plot(x,y,’b-p’);
LiYang
第 2 页 / 共 6 页
MATLAB 编程题总结
LY 1: 编写M函数 32fx2xx6.3, x20.05x3.14计算f(1)f(2)f2(3)
function y= fun1(x)y=(x^36.3)/(x^2 + 0.05*x-3.14);fun1(1)*fun1(2)+fun1(3)*fun1(3)ans =-12.6023 2:编写M函数x1,x2f(x)3x,2x84x5,8x20,cosxsinx,x20计算f(0.1),f(1),f(9),f(22),f(2)
function y=fff(x)if x<2 y=x+1;elseif x>=2 & x<=8 y=3*x;elseif x>8 & x<=20 y=4*x-5;else y=cos(x)+sin(x);end 3:根据pi*pi/6=1/1^2+1/2^2+1/3^2+„„+1/n^2,求pi的近似值。当n分别取100,1000,10000时,结果是多少?
y=0;n=100;
for i=1:n y=y+1/i/i;end y y =
1.6350 pi=sqrt(6*y)pi =
3.1321 y=0;n=1000;for i=1:n y=y+1/i/i;end y y =
1.6439 pi=sqrt(6*y)pi =
3.1406 y=0;n=10000;for i=1:n y=y+1/i/i;end y y =
1.6448 pi=sqrt(6*y)pi =
3.1415(2)y=0;n=8;
y=1./2*n-1;y y=
4:编程求[100,200]之间第一个能被21整除的整数。
for n=100:200 if rem(n,21)~=0 continue end break end
n
5:编写函数文件求半径为r的圆的面积和周长。
function [s,p]=fcircle(r)s=pi*r*r;p=2*pi*r;
6:根据y=1+11,求: 3152n-1(1)y<3时的最大n值。(2)与(1)的n值对应的y值。
y=1;n=1;while(y<3)n=n+2;y=y+1/n;
end
y=y-1/n n=(n+1)/2 运行结果: y =
2.9944
n =
LiYang
第 3 页 / 共 6 页
MATLAB 编程题总结
LY 57 7: 已知f11,n1f20,n2f31,n3
fnfn12fn2fn3,n3求f中:
1~f100最大值、最小值、各数之和。
f(1)=1;f(2)=0;f(3)=1;for i=4:100
f(i)=f(i-1)-2*f(i-2)+f(i-3);end max(f)min(f)sum(f)
1.编程计算3+33+333+3333+„..前10项之和。
m=3;n=0;s=0;for i=1:10 n=10*n+m;s=s+n;end s
2.编程求
1-1/2+1/3-1/4+.......+1/99-1/100的值。
s=0;
for i=1:100
s=s+(-1)^(i-1)*1/i;end
s3.编写程序,求 1-3+5-7+„-99+101的值。
s=0;j=1;
for i=1:2:101
s=s+(-1)^(j-1)*i;j=j+1;end
s4.编写程序,输出从公元1000年至2000年所有闰年的年号。判断公元年是否为闰年的条件是:
(1)公元年数如能被4整除,而不能被100
整除,则是闰年;
(2)公元年数能被400整除也是闰年。
for year=1000:2000
if(mod(year,4)==0&mod(year,100)~=0)|mod(year,400)==0 year end end
5.将10个整数输入到一个数组中,然后再将
其按输入顺序的逆序进行排列并输出。
for i=1:10
a(i)=input('x=');end
for i=10:-1:a(i)end
6.一球从100米高度自由落下,每次落地后反跳回原高度的一半,再落下。求它在第10次落地时,共经过多少m?第10次反弹多高?
Sn=100;Hn=Sn/2;for n=0:10
Sn=Sn+2*Hn;Hn=Hn/2;end Sn Hn
7.猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上再想吃时,见只剩一个桃子了。求第一天共摘多少桃子。
day=9;x=1;while(day>0)x=(x+1)*2;day=day-1;end x
LiYang
第 4 页 / 共 6 页
MATLAB 编程题总结
LY 附:
matlab期中试卷及答案
一、计算题
1.已知A=[1 2 3;4 5 6;7 8 9],B=[1 5 0;1 0 3;0 3 4],试写出下列指令运行的结果: A<=2=,A*B=,A(1, :)*A(:, 3)=。
2.设a= [1,-2,3;4,5,9;6,3,-8], b= [2,6,1;-3,2,7;4,8,-1]。
(1)求a.*b
(2)求a.^2
(3)求 2-a
(4)求a(1:2,2:3)
(5)求min(a(:))
二、计算下列程序运行的结果
1、mysum=0;i=1;
while(i<100)
mysum=mysum+i;
i=i+1;
end
mysum
2、A=[1,2,3;4,5,6;7,8,9];
C=[A;[10,11,12]];
D=C(1:3,[2 3]);
E=C(1:3,:)
写出C、D、E的结果
3、x=[0,1,0,10,1,0,1];
for i=1:7 if x(i)==0
x(i)=1;
else
500≤price<1000
5%折扣
x(i)=0;
1000≤price<2500
8%折扣
end
2500≤price<5000
10%折扣
end 5000≤price
14%折扣
x
输入所售商品的价格,求其实际销售价格。
4、c=6;d=[4,0,6;0,8,0];(3)fibonccci数组的元素满足fibonacci规则:
x=d & c ak+2=ak+ak+1,(k=1,2,…);且a1=a2=1。现要求求出该数组中
y=d|c 第一个大于10000的元素。
z=~d
(4)计算1!+2!+3!+4!+5!+6!+„+n!值的程
写出x、y、z的结果
序。(n可以自由输入)
三、(1)建立M函数完成下列运算(函数名为
五、分析下面程序运行后s1,n1,s2,n2,m的值.jygxfun)
s1=0;s2=0;n1=0;n2=0
f(x,y,z)ze(xy)xyzsin(xy3z)x=[1,-4,-8,3,10,-9,7,-3,10, 8,-5,-2,2,0 ];
m=length(x);(2)若x=1,y=2,z=3,采取调用jygxfun方式计算
for i=1:m f值, 试编程.if x(i)<0
四、(1)编程计算下面问题, x值由键盘输入
s1=s1+x(i);2n1=n1+1;
yx1,x1else x2,1x
1s2=s2+x(i);
n2=n2+1;
(input语句).x21,x1 end
end
(2)某商场对顾客所购买的商品实行打折销
s1,n1,s2,n2,m 售,标准如下(商品价格用price来表示):
2.(1)
price<200
没有折扣
2-12
200≤price<500
3%折扣
a.*b=-12 10
24
LiYang
第 5 页 / 共 6 页
MATLAB 编程题总结
LY(2)1 a.^2= 16 25 81 36 9
64(3)2-a= 1
4-1-2
–7(4)-4
-1-2 a(1:2,2:3)= 5
(5)min(a(:))=-8 二1、4950
2、C =1 10 D = E = 1
3、x =1
0
0
0
4、x = 1
0
0
0
y = 1 z = 0
0
0
三、解:(1)
function [f]=jygxfun(x,y,z)
f=z*exp(-(x+y))+sqrt(x+y+z)*sin(x+y+3*z);(2)
x=1;y=2;z=3;f= jygxfun(x,y,z)
四、(1)解: x=input('x=?');
if x>=1
y=x^2+1;else if x<-1 y=x^2-1;else y=x^2;end end
y
(2)price=input('请输入商品价格');switch fix(price/100)
0 case {0,1}
%价格小于200 rate=0;
case {2,3,4} %价格大于等于200但小于500
rate=3/100;
case num2cell(5:9)%价格大于等于500但小于1000
rate=5/100;
case num2cell(10:24)%价格大于等于1000但小于2500
rate=8/100;
case num2cell(25:49)%价格大于等于2500但小于5000
rate=10/100;
otherwise %价格大于等于5000 rate=14/100;end
price=price*(1-rate)%输出商品实际销售价格(3)
(4)n=input('n=')
s=0
for i=1:n
m=1
for j=1:i
m=m*j;
end
s=s+m;end s
五、s1=-31;n1=6;s2=41;n2= 8;m= 14
LiYang
第 6 页 / 共 6 页
第二篇:Matlab编程习惯总结
好的编程习惯
为了增强程序的可读性,在if 结构体开头缩进两格或更多的空间。编程隐患
确保变量名的前三十一个字符是独一无二的,否则,MATLAB 将辨认不出两变量的不 同。编程隐患
如果变量名与MATLAB 中的函数或命令重名,那么这个函数或命令将不能被访问 好的编程习惯
给你的变量起一个描述性的且易于记忆的变量名。例如,货币汇率可以exchange_rate 为变量名。这种方法将使得你的程序更加明确且易于理解。好的编程习惯
在每次用到一个变量时,我们要确保变量名的大小写的精确匹配。在变量名中只使用
小写字母是一个好的编程习惯。好的编程习惯
在MATLAB 赋值语句后加上一个分号来禁止变量值在命令窗口(The Command Windows)的重复。这将大大提高编译的速度。好的编程习惯 如果你在调试程序时需要检测一个语句的结果,可能把句后的分号去掉,这样结果将
会出现在命令窗口(The Command Windows)。编程隐患
不要重定义有意义的预定义变量。否则将后患无穷,制造成出小而难以发现的错误。编程隐患
fprintf 函数只能复数的实部,所以在有复数参加或产生的计算中,可能产生错误的结 果。好的编程习惯
如果数据需要在MATLAB 和其他程序之间交换使用,那么以ASCII 格式存储数据。
如果只在MATLAB 中使用那么,应以mat 文件的形式存储数据。好的编程习惯
以“dat”的扩展名保存ASCII 数据文件,以区别于以“mat”为扩展名的mat 文件。编程隐患
在你的MATLAB 代码中,仔细区分数组运算和矩阵运算。数组乘法和矩阵乘法极易混 淆。好的编程习惯 当你读取和写入数据时,使用适当的单位
自上而下的编程方法是我们正规编程设计的基础。1.清晰地陈述你所要解决的问题
编写的程序大多数情况下要满足一些感觉上的需要,但这种需要不一定能够被人清晰地
表达出来。例如,用户需要一个解线性方程组的表达式。像这样的要求就不够清楚,程序员
就很难编出一个使他满意的程序。他必须弄清楚要有多少问题需要解决?在这些方程式中有
没有对称的形式使我们的开发变得简单?程序设计者必须和使用者讨论所需的程序,他们必
须要对完成的任务有一个精确细致的描述。对问题清晰的描述可以防止误解,并且能够帮助
程序员合理的组织他的思想。上面的例子对问题合适的陈述应为: 设计一个用于解决联立线性方程组的程序,这些方程中未知数的系数为实数,最多有 20 个未知数。
2.定义程序所需的输入量和程序所产生的输出量
指定输入量和输出量,只有这样新的程序才能适应全过程计划。在这个例子中方程式的
系数可能有其预先存在的顺序,我们的新程序必须能按照顺序读取它们。相似地,也需要产 生出这个程序所要求的结果,即输出量,我们还要以一定的格式打印出来。
3.设计你的程序得以实现的算法
算法是指为某个问题找到答案一步接一步的程序。在这个阶段自上而下的编程方法发挥
了作用。编程设计者开始对这个问题进行逻辑划分,把它逐步分解为一个又一个子工作。这
个过程叫做分解(decomposition)。如果一些子工作还是比较大,设计者还可以把他它分解成
更小的块。这个过程将会继续到问题被分解成许多简单且易理解的小块为止。
在问题被分解成小块之后,每一个小块要被进一步的求精,这个过程叫做逐步求精
(stepwise refinement)。在这个过程中,设计者开始于对本小块代码总括性的描述,然后开始
一步一步地定义所需的函数,越来越具体,直到他能够转化为MATLAB 语句。逐步求精的
过程中,我们要用到的伪代码将会在下节为大家介绍。
在算法开发过程中,这个方法是非常有用的。如果设计者真正理解了解决问题这个些步
骤,他将会对问题进行分解和逐步求精。4.把算法转化为代码 如果分解和逐步求精的过程已经顺利完成,那么这一步将会异常地简单。所有程序员都
会将伪代码一句一句地转化为合适地MATLAB 语句。5 检测产生的MATLAB 程序
这一步是真正的拦路虎。首先,程序的每一部分将会被单独地检测,如果有可能的话,整个程序还要被检测一遍。在我们检测程序时,我们必须证明所有合法输入数据值都能够正
常运行。用标准的输入值检测程序,看它是否产生了值。如果在一个程序中执行的算法包含
了不同的分支,你必须检测每一个分支,以保证产生正确的答案。大程序在交付大众使用之
前,必须经过一系列地检测(图3.2)。检测的第一步有时被称为单元检测(unit testing)。在单
元检测过程中,程序的子程序将会被独立地检测以证明它的正确性。当单元检测结束之后,这个程序将进行一系列的组合,把独立的子程序联合产生出最后的程序。程序第一步的联合
通常只包括很少的子程序。通过组合这些子程序,经常用检查子程序或函数之间的联系。在
一系列地组合过程中,越来越多的子程序被加了进来,直到整个程序的完成。在每一次组合 的过程中,每一个错误都会被发现并在进行下一次组合之前纠正过来。好的编程习惯
在我们检测两数值是否相等时一定要小心,因为round off 错误可能会使两个本来应该
相等的值不相等了。这时你可以在round off 错误的范围内它是不是近似相等。好的编程习惯
if 结构体经常缩进2 到3 个空格,以增强程序的可读性。好的编程习惯
对于有许多选项的选择结构来说,最好在一个if 结构中使用多个elseif 语句,尽量不用 if 的嵌套结构。好的编程习惯
对于for 循环体总是要缩进两个或更多空格,以增强程序的可读性。好的编程习惯
在循环执行开始之前,总是要预先分配一个数组,这样能大大增加循环运行的速度。好的编程习惯
那种既可以用向量可以解决的问题,也可以用循环解决的问题,最好用向量解决,这
是因为向量执行的速度快。好的编程习惯
把大的程序分解成函数,有很多的好处,例如,程序部分的独立检测,代码的可复用
性,避免意想不到的错误。好的编程习惯
最是把全局变量声明在函数的开头,这样可以区别于本地变量。好的编程习惯
在函数中的初始注释行之后和第一个可执行性语句之前声明全局变量。好的编程习惯
在两次函数调用之间有持久内存保存本地数据。好的编程习惯
用子函数或私有函数来隐藏特殊目的的函数,这些隐藏的函数只能被其他函数调用。
隐藏这些函数防止了它们偶然的使用,也能防止与其他公共函数重名时发生的冲突。编程隐患
当我们应用关系运算符对复数运算时,一定要小心。关系运算符>,<,<=或>=只比较
复数的实部,而不是它们的模。如果你要用这些关系运算符对一复数进行运算,比较两复 数的模将更加常见。好的编程习惯
用char 函数创建二维字符数组,我们就不用担心每一行的长度不相同了。好的编程习惯
当你访问一单元阵列时,不要把()与{}混淆。它们完全不同的运算。编程隐患
不要创建一个与已存在的数字数组重名的元阵列。如果得名了,MATLAB 会认为你把
单元阵列的内容赋值给一个普通的数组,这将会产生一个错误信息。在创建单元阵列之前,确保同名的数字数字数组已经被删除。编程隐患
应用函数text 从ascii 文件中按行格式读取数据,这个ascii 文件可能是其他语言生成的,或是由其他的应用程序生成的,例如表格。好的编程习惯
除非我们必须与非MATLAB 程序进行数据交换,存储和加载文件时,都应用mat 文
件格式。这种格式是高效的且移植性强,它保存了所有MATLAB 数据类型的细节。好的编程习惯
对于那些必须进行人工检查的数据,或对于那些必须在不同的计算机上运行的数据,用格式化文件创建数据。对于那些不需要进行人工检查的数据且在相同类型的计算机创建
并运行的数据,用无格式文件创建数据,当I/O 速度缓慢时,用格式化文件创建数组。
第三篇:编程题总结
C作业汇总
1.short a,b=32767;/*short类型在内存中占2B*/ a=b+1;问:a的值是多少?并分析原因。
2.有一4位数整数,假设用abcd表示,请把这个4位数的每个数位用表达式表示出来。3.从键盘输入圆的半径r,计算并输出圆的面积s(要求:半径r定义为float型;圆周率定义为符号常量;面积s保留2位小数)#define PI 3.14159 #include
4.输入m>=3的正整数,判断m是否素数。画出算法流程图及NS图
5.有一函数:
x1 x y2x1 1x10
3x-11 x10 写一段程序,输入x,输出y值。
要求x,y声明为float类型,y保留2位小数。#include
if(x<1)
y=x;else
if(x<10)
y=2*x-1;
else
y=3*x-11;
}
printf(“y=%.2fn”,y);
x3x5x7x9,6.课后习题4.17(P159)利用泰勒级数sinxx计算sinx的3!5!7!9!值。要求最后一项的绝对值小于10,并统计出此时累加了多少项。#include
/*记录每个项数*/ int n=1,count=0;/*count记录累加了多少项*/
printf(“请输入x值(弧度):n”);scanf(“%f”,&x);
term=x/n;while(fabs(term)>1e-5)
/* while循环*/ {
sinx+=term;
count++;
n+=2;
term=-term*x*x/((n-1)*n);}
/* do
/*do while循环*/ {
sinx+=term;
count++;
n+=2;
term=-term*x*x/((n-1)*n);}while(fabs(term)>1e-5);
*/
printf(“sin(%.2f)=%.4fn”,x,sinx);printf(“一共累加了:%d项。n”,count);}
7.用牛顿迭代法求下面方程在1.5附近的根:
2x4x3x60 325
牛顿迭代公式:
x1x0f(x0)f(x0)
#include
/*y1记录f(x0),y2记录f(x0)的导数*/
do {
x0=x1;
y1=2*x0*x0*x0-4*x0*x0+3*x0-6;
y2=6*x0*x0-8*x0+3;
x1=x0-y1/y2;}while(fabs(x1-x0)>1e-5);
printf(“the root is:%.2fn”,x1);}
8.写一函数,输入一个16进制整数,输出相应的10进制数。例:从键盘输入2a,输出结果是42。
要求:若输入数据不合法,则输出提示信息。如输入了35g,输出“您输入的16进制数不合法!”。
#include
printf(“请输入一个16进制数字:n”);
while((c=getchar())!='n'){
if(c>='0' && c<='9')
sum=sum*16+c-'0';
else
if(c>='a' && c<='f')
sum=sum*16+c-87;
else
if(c>='A' && c<='F')
sum=sum*16+c-55;
else
{
printf(“您输入的16进制不合法.n”);
exit(0);
} }
printf(“相应的10进制数是:%dn”,sum);} 方法2:用字符串处理的方式 #include
printf(“请输入一个16进制数字:n”);gets(str);
for(i=0;str[i];i++){
if(str[i]>='0' && str[i]<='9')
sum=sum*16+str[i]-'0';
else
if(str[i]>='a' && str[i]<='f')
sum=sum*16+str[i]-87;
else
if(str[i]>='A' && str[i]<='F')
sum=sum*16+str[i]-55;
else
{
printf(“您输入的16进制不合法.n”);
exit(0);
} }
printf(“相应的10进制数是:%dn”,sum);} 方法3:用字符数组及指针处理的方式 #include
{ char str[20],*p=str;int sum=0;
printf(“请输入一个16进制数字:n”);gets(p);
while(*p){
if(*p>='0' && *p<='9')
sum=sum*16+*p-'0';
else
if(*p>='a' && *p<='f')
sum=sum*16+*p-87;
else
if(*p>='A' && *p<='F')
sum=sum*16+*p-55;
else
{
printf(“您输入的16进制不合法.n”);
exit(0);
}
p++;}
printf(“相应的10进制数是:%dn”,sum);} 9.编写一个小函数,其功能是计算两个整数的平均值,该函数要在主函数中调用。
#include
avg=average(x,y);
printf(“%d,%d的平均值是:%.2fn”,x,y,avg);}
float average(int x,int y)
{ return(x+y)/2.0;}
10.有N(N用宏定义为符号常量)个元素的一维整型数组,该数组中各元素值从键盘随机输入。然后,将这个整型数组中的值逆序存放。例如,原来5个元素的顺序为8、1、4、6、5,逆序之后各元素的值是5、6、4、1、8 #define N 5 #include
printf(“输入%d个整数,用空格或回车分隔:n”,N);for(i=0;i scanf(“%d”,&a[i]); printf(“数组原来的值是:n”);for(i=0;i printf(“%dt”,a[i]); for(i=0;i t=a[i]; a[i]=a[N-1-i]; a[N-1-i]=t;} printf(“n逆序之后数组的值是:n”);for(i=0;i printf(“%dt”,a[i]); printf(“n”);} 11.有N(N用宏定义为符号常量)个元素的一维整型数组,该数组中各元素值从键盘随机输入。然后,对该数组元素进行由小到大排序(要求,该功能用函数实现),输出数组中各元素值。最后,从键盘随机输入一个整数,并把该整数插入上述数组中(该功能用函数实现),使得插入该整数后的数组仍然有序,输出数组中各元素的值。#define N 5 #include int i,x;void sort(int array[],int n);void insert(int array[],int n,int x); printf(“输入%d个整数,用空格或回车分隔:n”,N);for(i=0;i scanf(“%d”,&a[i]); sort(a,N); /*调用sort对数组进行排序*/ printf(“n升序排序之后数组的值是:n”);for(i=0;i printf(“%d ”,a[i]); printf(“n输入一个x值插入到数组中:n”);scanf(“%d”,&x); insert(a,N,x); printf(“n插入%d之后数组的值是:n”,x);for(i=0;i printf(“%d ”,a[i]); printf(“n”);} void sort(int array[],int n)/*用选择法对数组array升序排序*/ { int i,j,t,min; for(i=0;i min=i; for(j=i+1;j if(array[j] min=j; if(min!=i) { t=array[i]; array[i]=array[min]; array[min]=t; } } } void insert(int array[],int n,int x){ int i,pos; for(i=0;i pos=i; for(i=n-1;i>=pos;i--) array[i+1]=array[i]; array[pos]=x;} 12.有一整型数组,N(N用宏定义为符号常量)个元素,该数组中各元素值从键盘随机输入。从键盘随机输入一个整数x,删除该数组中值与x相同的所有元素(该功能用函数实现),输出数组中各元素的值。#define N 5 #include printf(“输入%d个整数,用空格或回车分隔:n”,N);for(i=0;i scanf(“%d”,&a[i]); printf(“数组原来的值是:n”);for(i=0;i printf(“%dt”,a[i]); printf(“n请输入要删除的值x:n”);scanf(“%d”,&x); n=delet(a,N,x); /*n值是删除与x相同的元素后,数组剩余元素的个数。*/ printf(“删除%d之后数组的值是:n”,x);for(i=0;i printf(“%d ”,a[i]); printf(“n”); } int delet(int a[],int n,int x){ int i,j; for(i=0,j=0;i if(a[i]!=x) a[j++]=a[i]; return j;} 13.从键盘随机输入一字符串,将所有ASCII值为偶数的字符输出。例如:输入abc123,输出结果是b2(因为b的ASCII值是98,2的ASCII值是50,其他字符的ASCII值都是奇数) #include printf(“输入字符串:n”);gets(str); printf(“ASCII码是偶数的字符有:”);for(i=0;str[i];i++) if(str[i]%2==0)putchar(str[i]); printf(“n”);} 14.从键盘输入两个字符串s1,s2,把s2连接到s1的末尾。不能用strcat函数 #include printf(“输入两个字符串,输入回车键结束:n”);gets(str1);gets(str2); mystrcat(str1,str2); printf(“连接在一起的字符串是:n”);puts(str1); } void mystrcat(char *p1,char *p2){ while(*p1)p1++;while(*p2) *p1++=*p2++;*p1=' ';} 15.从键盘输入一个字符串,把其中最长的单词输出。单词定义为连续的一串英文字母。如输入I am a student.输出结果为student #include { char str[80];int i,start,len=0,lenthest=0,lenstart=0;int word=0; printf(“input a string:n”);gets(str); for(i=0;str[i];i++){ if(str[i]>='a' && str[i]<='z' || str[i]>='A'&&str[i]<='Z') if(!word) { word=1; start=i; } else { len++; } else if(word) { word=0; } } if(len>lenthest){ lenthest=len;lenstart=start;} len=0; printf(“the lenthest word is:n”);for(i=lenstart;i<=lenstart+lenthest;i++) putchar(str[i]); printf(“n”);} 16.有一整型数组,N(N用宏定义为符号常量)个元素,该数组中各元素值从键盘随机输入。编写函数calculate,计算出所有元素的最大值、最小值、平均值,结果在主函数中输出。#define N 5 #include printf(“输入%d个整数,用空格或回车分隔:n”,N);for(i=0;i scanf(“%d”,&a[i]); calculate(a,&max,&min,&avg); printf(“数组中所有元素的最大值、最小值、平均值分别是:n”);printf(“最大值max=%d,n”,max);if(word)if(len>lenthest){ lenthest=len; lenstart=start;} printf(“最小值min=%d,n”,min);printf(“平均值avg=%.2f,n”,avg); } void calculate(int a[],int *pmax,int *pmin,float *pavg){ int i;int sum; *pmax=*pmin=sum=a[0]; for(i=1;i if(a[i]>*pmax) *pmax=a[i]; if(a[i]<*pmin) *pmin=a[i]; sum=sum+a[i];} *pavg=(float)sum/N;} 大家必须掌握每种类型的1-3题。 题号考点要求 48、将两个两位数的整数合并成一个整数 65、两个正整数合并成一个整数 71、两个正整数合并成一个整数 77、两个正整数合并成一个整数 81、两个正整数合并成一个整数 84、两个正整数合并成一个整数 87、两个正整数合并成一个整数 91、两个正整数合并成一个整数 8、s=1+1/(1+2)+1/(1+2+3)+...+1/(1+2+3+.....+n) 9、p=m!/(n!*(m-n)!) 26、连加 68、s=1+1/1!+1/2!+1/3!+........70、s=1/(1*2)+1/(2*3)+...+1/(n*(n+1)) 76、s=1+0.5*x+(0.5*(0.5-1)*x*x/2!+......86、连加 90、连加 92、连加 93、连加 97、连加 100、连加 (2、) 类似素数或者闰年算法 2、求出1到1000之间能被7或11整除、但不能同时被7和11整除的所有整数,并将他们放在a所指的数组中,通过n返回这些数的个数。 58、求n以内同时能被3与7整除的所有自然数之和的平方根s3、求出能整除x且不是偶数的各整数,并按从小到大的顺序放在pp所指的数组中,这些除数的个数通过形参n返回。 27、求出1到m之间能被7或11整除的整数,放在数组中,通过n返回这些数的个数 63、求n的所有因子(不包括1与自身) 98、计算n以内能被5或9整除的所有自然数的倒数之和 15、w是大于10的无符号整数,若w是n(n>=2)位的整数,则函数求出w的后n-1位的数作为函数值返回。 24、将数字字符串转化为一个整数 16、对变量中的值保留两位小数,对第三位四舍五入 (3、) 1、一维数组中,将低于平均分的人数作为函数值返回,低于平均分的分数放在below所指的数组中。 82、计算一维数组中n门课程的平均分 96、一维数组中每相邻元素之平均值的平方根之和 28、找出一维数组中最大的值和它所在的下标,两者通过形参返回 7、求出数组的最大元素在数组中下标并存放在k所指的存贮单元中。 43、从num个字符串中找出最长的一个字符串,并通过形参指针传回 39、移动数组中的内容,前p个数移动到数组后面 40、移动数组中的内容,前m个字符移动到后面 5、将大于整数m且紧靠m的k个素数存入xx所指的数组中。 20、求出小于变量m的所有素数并放在一个数组中 51、将大于1小于m的非素数存入xx所指数组中,个数通过形参返回 99、计算3到n之间所有素数的平方根之和 29、将字符串中下标为奇数位置上的字母转化为大写 47、字符串中所有下标为奇数的字母转为大写 31、将字符串中除了下标为偶数、同时ASCII码也为偶数的字符外,其余的全都删除;串中剩余字符放在t字符串中 32、除了下标为奇数、同时ASCII码也为奇数的字符外,其余的全都删除;串中剩余字符放在t字符串中 49、将字符串中下标为偶数且ASCII码为奇数的字符删除 19、从字符串中删除指定字符 64、将字符串中ASCII值为奇数的字符删除,剩余字符放在t所指字符串中 72、将字符串中下标为偶数的字符删除 78、字符串中ASCII为偶数的字符删除 35、删除字符串中所有空格 6、删除一个字符串中指定下标的字符。 60、删去一维有序数组中所有相同的数,使之只剩一个 33、删除字符串中尾部*号,使不超过n个 36、把字符串中的前导*号全部移到字符串尾部 45、删除字符串中前导和尾部的*号 56、字符串中,除了尾部*号外,字符串中其余*号全部删除 73、删除字符串中除了前导和尾部*号外的所有*号 83、字符串中尾部*号删除 88、字符串中除了前导*外,删除其余*号 94、字符串中,前导*号全部删除 95、字符串中前导*号不得多于n个 66、删除字符串中所有*号 (4、) 17、字符串内容逆置 23、判断字符串是否为回文 25、比较两个字符串的长度(不能用strlen) 52、实现两个字符串连接 59、将字符串数组中的字符串依次合并到一个字符串中 21、字符串中字符按降序排列(选择法排序) 4、统计在tt字符串中“a”到“z”26个字母各自出现的次数,并依次放在pp所指数组中。 38、求出字符串中指定字符的个数 44、统计长度为2的字符串在另一个字符串出现的次数 62、统计一行字符串中单词个数 11、二维数组构成矩阵,使数组左下半三角元素中的值全部置成042、二维数组,将右上半角元素中的值乘以m80、二维数组中左下半三角中元素中的值乘以312、求出数组周边元素的平均值 14、求出二维数组周边元素之和 18、矩阵行列互换 53、矩阵B=A+A130、求出二维数组中最大元素的值,此值返回给调用函数 55、M行N列的二维数组中的数据,按行的顺序依次放到一维数组中 41、将二维数组中的字符,按列的顺序依次放到一个字符串中 75、二维数组中数按列的顺序放到一维数组中 13、求出二维数组每列中最小元素,并依次放在pp所指一维数组中 37、结构体数组(学号、8门成绩、平均成绩),求出每个学生的平均成绩 34、把结构体数组(学号、成绩)中分数最高的学生放到h数组中,函数返回人数 74、把结构体数组(学号、成绩)中分数最低的学生数据放在h所指数组中 50、结构体数组(学号、成绩),找出成绩最高的学生记录,通过形参返回 54、结构体数组(学号、成绩),低于平均分的学生数据放在b所指数组中 89、结构体数组(学号、成绩),高于等于平均分的学生人数通过形参返回 57、结构体数组(学号、姓名),把指定范围内的学生数据放在所指数组中 67、结构体数组(学号、成绩)返回指定学号的学生数据(查找) 46、结构体数组(学号、成绩),按分数降序排列(选择法排序) 22、链表结构中,找出数值最大的结点,并由函数值返回 85、链表中,求出平均成绩 10、迭代法求方程的实根 61、统计各年龄段人数(建议采用if else) 69、递归函数 MATLAB游戏编程实例(拼图) 这是一个简单的游戏,只要把数字按顺序排好就可以了。游戏方法是用鼠标点中数字,如果该数字相邻的格子为空,则自动移到到该空格。 本程序是由realghost编写,如果有问题可以与 slqinyi@163.com 联系。 附图如下: function pintu1()A = gen() G = [1 2 3;4 5 6;7 8 0];drawmap(A); while 1 [xpos,ypos] = ginput(1);col = ceil(xpos);row = 3-ceil(ypos)+1;num = A(row,col); if row>1&A(row-1,col)==0 A(row-1,col)= num; A(row,col)= 0; end if row<3&A(row+1,col)==0 A(row+1,col)= num;A(row,col)= 0; end if col>1&A(row,col-1)==0 A(row,col-1)= num;A(row,col)= 0; end if col<3&A(row,col+1)==0 A(row,col+1)= num;A(row,col)= 0; end drawmap(A) zt = abs(A-G); if sum(zt(:))==0 msgbox('ÄãÒѾ-³É¹¦Æ´ºÃͼ£¡')break end end function drawmap(A)clf;hold on line([0 3],[0 0],'linewidth',4);line([3 3],[0 3],'linewidth',4);line([0 3],[3 3],'linewidth',4);line([0 0],[0 3],'linewidth',4); for i = 1:3 for j = 1:3 drawrect([j-1 3-i],[j 3-i],[j 3-i+1],[j-1 3-i+1],'y',A(i,j)); end end axis equal axis off function drawrect(x1,x2,x3,x4,color,num)x = [x1(1)x2(1)x3(1)x4(1)];y = [x1(2)x2(2)x3(2)x4(2)];fill(x,y,color)if num==0 text(0.5*(x1(1)+x2(1)),0.5*(x1(2)+x4(2)),' ','fontsize',24)else text(0.5*(x1(1)+x2(1))-0.05,0.5*(x1(2)+x4(2)),num2str(num),'fontsize',24)end function y = gen()y = inf*ones(1,9);for i = 1:9 while 1 a = randint(1,1,9); if isempty(find(y==a))y(i)= a;break end end end y = reshape(y,3,3); 当然可以啦,其实图像就是数字矩阵,图像的拼接就是矩阵的拼接,横着拼得行数相等,竖着拼得列数相等就行 例子 clc;clear; a=imread('我的图片.jpg');[m n t]=size(a); b=a(1:fix(m/2),:,:);%取图像的上半部分 c=a(fix(m/2)+1:end,:,:);%取图像的下半部分 figure(1);imshow(b); figure(2);imshow(c); %注意,上下拼接要求两幅图的列数要相同 %左右拼行数要相同 figure(3);d=[b;c];%把b,c拼起来,若左右拼接d=[b,c];imshow(d);第四篇:编程题总结
第五篇:MATLAB游戏编程实例(拼