matlab编程练习
更新时间:2023-10-16 11:31:01 阅读量: 综合文库 文档下载
选择结构编程练习
1. 身高预测
每个做父母的都关心自己孩子成人后的身高,据有关生理卫生知识与数理统计分析表明,影响小孩成人后的身高的因素包括遗传、饮食习惯与体育锻炼等。小孩成人后的身高与其父母的身高和自身的性别密切相关。
设faHeight为其父身高,moHeight为其母身高,身高预测公式为
男性成人时身高=(faHeight + moHeight)×0.54cm 女性成人时身高=(faHeight×0.923 + moHeight)/2cm
此外,如果喜爱体育锻炼,那么可增加身高2%;如果有良好的卫生饮食习惯,那么可增加身高1.5%。
编程从键盘输入用户的性别(用字符型变量sex存储,输入字符F表示女性,输入字符M表示男性)、父母身高(用实型变量存储,faHeight为其父身高,moHeight为其母身高)、是否喜爱体育锻炼(用字符型变量sports存储,输入字符Y表示喜爱,输入字符N表示不喜爱)、是否有良好的饮食习惯等条件(用字符型变量diet存储,输入字符Y表示良好,输入字符N表示不好),利用给定公式和身高预测方法对身高进行预测。
syms f m Y N
faHeight=input('请输入父亲的身高:'); moHeight=input('请输入母亲的身高:'); x=input('请输入x的性别:');
sport=input('是否喜欢运动(Y/N):'); diet=input('饮食是否良好(Y/N):'); if x==m
child=(faHeight+moHeight)*0.54; else
child=(faHeight*0.923+moHeight)/2; end if sport==Y
child=child*1.02; else
child=child; end if diet==Y
child=child*1.015; else
child=child; end child
2. 简单的计算器
用switch语句编程设计一个简单的计算器程序,要求根据用户从键盘输入的表达式:
操作数1 运算符op 操作数2
计算表达式的值,指定的算术运算符为加(+)、减(-)、乘(*)、除(/)。
m=input('操作数1 运算符op 操作数2:','s'); q=find(m=='+'|m=='-'|m=='*'|m=='/'|m=='×'|m=='÷'); a=str2num(m(1:q-1)); b=m(q);
c=str2num(m(q+1:end)); switch b case '+' a+c case '-' a-c case '*' a*c case '×' a*c case '/' a/c case '÷' a/c
end
(1)如果要求程序能进行浮点数的算术运算,程序应该如何修改?如何比较实型变量data2和常数0是否相等?
format long
m=input('操作数1 运算符op 操作数2:','s'); q=find(m=='+'|m=='-'|m=='*'|m=='/'|m=='×'|m=='÷'); a=str2num(m(1:q-1)); b=m(q);
c=str2num(m(q+1:end)); switch b case '+' a+c case '-' a-c case '*' a*c case '×' a*c case '/' a/c case '÷' a/c
end
(2)如果要求输入的算术表达式中的操作数和运算符之间可以加入任意多个空白符,
那么程序如何修改?
format long
m=input('操作数1 运算符op 操作数2:','s'); m(find(isspace(m))) = []
q=find(m=='+'|m=='-'|m=='*'|m=='/'|m=='×'|m=='÷'); a=str2num(m(1:q-1)); b=m(q);
c=str2num(m(q+1:end)); switch b case '+' a+c case '-' a-c case '*' a*c case '×' a*c case '/' a/c case '÷' a/c
end (3)(选作题)如果要求连续做多次算术运算,每次运算结束后,程序都给出提示:
Do you want to continue(Y/N or y/n)?
用户输入Y或y时,程序继续进行其他算术运算;否则程序退出运行状态。那么,程序如何修改?
syms Y N y n format long
a=input('请输入操作数1:'); b=input('请输入运算符op,','s'); c=input('请输入操作数2:'); switch b case '+' a+c case '-' a-c case '*' a*c case '×' a*c case '/' a/c
case '÷'
a/c end
F=input('Do you want to continue(Y/N or y/n)'); while F==Y format long
a=input('请输入操作数1:'); b=input('请输入运算符op,','s'); c=input('请输入操作数2:'); switch b case '+' a+c case '-' a-c case '*' a*c case '×' a*c case '/' a/c case '÷' a/c
end
F=input('Do you want to continue(Y/N or y/n)'); End
(2) format long d='y';
while d=='Y'|d=='y'
m=input('操作数1 运算符op 操作数2:','s'); m(find(isspace(m))) = []
q=find(m=='+'|m=='-'|m=='*'|m=='/'|m=='×'|m=='÷'); a=str2num(m(1:q-1)); b=m(q);
c=str2num(m(q+1:end)); switch b case '+' a+c case '-' a-c case '*' a*c case '×' a*c
case '/' a/c case '÷'
a/c end
d=input('Do you want to continue(Y/N or y/n)?','s'); end
循环结构编程练习
猜数游戏
在这个实验中,我们将尝试编写一个猜数游戏程序,这个程序看上去有些难度,但是如果按下列要求循序渐进地编程实现,会发现其实这个程序是很容易实现的。那么,现在就开始吧,先编写第1个程序,然后试着在第1个程序的基础上编写第2个程序,??
程序1 编程先由计算机“想”一个1~100之间的数请人猜,如果人猜对了,则计算机给出提示“Right!”,否则提示“Wrong!”,并告诉人所猜的数是大(Too high)还是小(Too low),然后结束游戏。要求每次运行程序时机器所“想”的数不能都一样。
程序2 编程先由计算机“想”一个1~100之间的数请人猜,如果人猜对了,则结束游戏,并在屏幕上输出人猜了多少次才猜对此数,以此来反映猜数者“猜”的水平;否则计算机给出提示,告诉人所猜的数是太大还是太小,直到人猜对为止。
程序3 编程先由计算机“想”一个1~100之间的数请人猜,如果人猜对了,则结束游戏,并在屏幕上输出人猜了多少次才猜对此数,以此来反映猜数者“猜”的水平;否则计算机给出提示,告诉人所猜的数是太大还是太小,最多可以猜10次,如果猜了10次仍未猜中的话,结束游戏。
程序4 编程先由计算机“想”一个1~100之间的数请人猜,如果人猜对了,在屏幕上输出人猜了多少次才猜对此数,以此来反映猜数者“猜”的水平,则结束游戏;否则计算机给出提示,告诉人所猜的数是太大还是太小,最多可以猜10次,如果猜了10次仍未猜中的话,则停止本次猜数,然后继续猜下一个数。每次运行程序可以反复猜多个数,直到操作者想停止时才结束。
a=fix((100+1)*rand(1));
b=input('请输入一个大于0小于100的整数:'); for i=1:10 if a==b
disp('You win!')
disp(['你总共用了',num2str(i),'次'])
break; elseif b>a
disp(['Too high!You hava ',num2str(10-i),' chances!']) else
disp(['Too low!You hava ',num2str(10-i),' chances!']) end
b=input('请再输入一个整数:')
end
1 .猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半另一个,以后每天早晨都吃剩下的一半另一个,到第十天早晨再想吃时,就剩一个桃子。问第一天共摘了多少桃子。 要求:分别用三种语句编写程序。 (1) function Peach
clc
number=1; x(10)=number;
fprintf('计算结果如下:\\n');
for i=9:-1:1
x(i)=(x(i+1)+1)*2;
fprintf(' 第%d天有%d个桃子\\n',i,x(i)); end (2)
i=10;x=1; while i>1
i=i-1;
x=(x+1)*2; end;x (3)
function y=Eatpeach(x); y=x-(1/2*x+1);
for x=1:100000; y=x; for i=1:9
y=Eatpeach(y); end if y==1 x break end end
2 .编写程序验证下列结论:任何一个自然数 n 的立方都等于 n 个连续奇数之和。例如: 1 3 =1 ; 2 3 =3+5 ; 3 3 =7+9+11 。
要求:程序对每个输入的自然数计算并输出相应的连续奇数,直到输入的自然数为 0 时止。
n=input('请输入一个数字:'); k=n*n*n; s=0;
for 1:2:k; c=i; A=[]; s=0;
for b=i:n;
s=c+s; A=[c,A]; c=c+2; end if
s==k A break; end end
函数编程练习
1. 给小学生出加法考试题
编写一个程序,给学生出一道加法运算题,然后判断学生输入的答案对错与否,按下列要求以循序渐进的方式编程。
程序1 通过输入两个加数给学生出一道加法运算题,如果输入答案正确,则显示“Right!”,否则显示“Not correct! Try again!”,程序结束。
程序2 通过输入两个加数给学生出一道加法运算题,如果输入答案正确,则显示“Right!”,否则显示“Not correct! Try again!”,直到做对为止。
程序3 通过输入两个加数给学生出一道加法运算题,如果输入答案正确,则显示“Right!”,否则提示重做,显示“Not correct! Try again!”,最多给三次机会,如果三次仍未做对,则显示“Not correct! You have tried three times! Test over!”,程序结束。
程序4 连续做10道题,通过计算机随机产生两个1~10之间的加数给学生出一道加法运算题,如果输入答案正确,则显示“Right!”,否则显示“Not correct!”,不给机会重做,10道题做完后,按每题10分统计总得分,然后打印出总分和做错的题数。
程序5 通过计算机随机产生10道四则运算题,两个操作数为1~10之间的随机数,运算类型为随机产生的加、减、乘、整除中的任意一种,如果输入答案正确,则显示“Right!”,否则显示“Not correct!”,不给机会重做,10道题做完后,按每题10分统计总得分,然后打印出总分和做错题数。
format short
disp('小数保留4位小数'); j=0;
for i=1:10;
a=fix(1+9*rand(1)); b=fix(1+9*rand(1)); c=fix(1+4*rand(1)); switch c case 1
d=input([num2str(a),'+',num2str(b),'='],'s'); q=a+b;
if d==num2str(q)
disp('you are right!');
j=j+1;
else
disp('Not correct!');
end case 2
d=input([num2str(a),'-',num2str(b),'='],'s'); q=a-b;
if d==num2str(q)
disp('you are right!'); j=j+1; else
disp('Not correct!');
end case 3
d=input([num2str(a),'×',num2str(b),'='],'s'); q=a*b;
if d==num2str(q)
disp('you are right!'); j=j+1; else
disp('Not correct!'); end
case 4
d=input([num2str(a),'÷',num2str(b),'=']); if d==round((a/b)*10^4)/10^4 disp('you are right!'); j=j+1; else
disp('Not correct!'); end end end
score=10*j
【思考题】 如果要求将整数之间的四则运算题改为实数之间的四则运算题,那么程序该如何修改呢?请读者修改程序,并上机测试程序运行结果。
2.掷骰子游戏
编写程序模拟掷骰子游戏。已知掷骰子游戏的游戏规则为:每个骰子有6面,这些面包含1、2、3、4、5、6个点,投两枚骰子之后,计算点数之和。如果第一次投的点数和为7或11,则游戏者获胜;如果第一次投的点数和为2、3或12,则游戏者输;如果第一次投的点数和为4、5、6、8、9或10,则将这个和作为游戏者获胜需要掷出的点数,继续投骰子,直到赚到该点数时算是游戏者获胜。如果投掷7次仍未赚到该点数,则游戏者输。
【思考题】 将游戏规则改为:计算机想一个数作为一个骰子掷出的点数(在用户输入
数据之前不显示该点数),用户从键盘输入一个数作为另一个骰子掷出的点数,再计算两点数之和。其余规则相同,然后请读者重新编写该程序。
format short
d='y';
while d=='Y'|d=='y'
A=1+(6-1)*round(rand(1));%系统随机生成一个
disp(['如果第一次投的点数和为7或11,则游戏者获胜;如果第一次投的点数和为2、3或12,则游戏者输;如果第一次投的点数和为4、5、6、8、9或10,则将这个和作为游戏者获胜需要掷出的点数,继续投骰子,直到赚到该点数时算是游戏者获胜。如果投掷7次仍未赚到该点数,则游戏者输。'])
B=input('请随便输入数字1~6:');
a1=A(1)+B(1);
if a1==3|a1==11
disp(['因为第一个骰子值=',num2str(A),';第二个的=',num2str(B),';两个之和=',num2str(a1)]);
disp(['你赢了!']);
elseif a1==2||a1==7||a1==12 disp(['你输了']);
disp(['因为第一个骰子值=',num2str(A),';第二个的=',num2str(B),';两个之和=',num2str(a1)]);
elseif a1==4|a1==5|a1==6|a1==8|a1==9|a1==10 k=a1;
k1=0;
while k>0 k1=k1+1;
disp(['第',num2str(k1),'次丢的结果:','第一个骰子值=',num2str(A),';第二个的=',num2str(B),';两个之和=',num2str(a1)]);
disp(['未分出输赢,继续丢,【已丢了',num2str(k1),'次】']); A=1+(6-1)*round(rand(1));%系统随机生成一个 B=input('请随便输入数字1~6:');
a1=A(1)+B(1); if a1==k
disp(['你赢了!']);
disp(['因为第',num2str(k1+1),'次丢的结果是:','第一个骰子值=',num2str(A),';第二个的=',num2str(B),';两个之和=',num2str(a1)]);
break; elseif k1==7
disp(['你输了!']);
disp(['因为你已经花费了所有机会']); break; end end end
d=input('Do you want to continue(Y/N or y/n)?','s');
end
正在阅读:
matlab编程练习10-16
基层党支部换届改选工作程序12-25
信息化与电子政务工作总结05-09
一级消防工程师重点学习笔记01-06
人教版七年级上册语文(部编版)第1单元第1课《春》教案01-23
天宝GPS简易操作手册12-22
计算机组成原理实验 - 图文06-04
员工个人离职申请书通用模板04-04
虎年春联02-18
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 练习
- 编程
- matlab