1.程序流程控制结构
(1) for 循环结构
【思考】
(1)下列程序的运行结果:j1=?j2=?% sk1.m
a=1:4; b=a'; j1=0; for i=a j1=j1+1; end; j2=0; for i=b j2=j2+1; end;
答:运行结果:j1 = 4, j2 = 1。
(2)分析下列程序的功能和运行结果 % sk2.m
data(:,:,1)=[3 9 45 6; 7 16 -1 5]; data(:,:,2)=[1 2 3 4; 8 7 6 5]; data k=0; for n=data n k=k+1; x=n(1)-n(2) end k
答:
程序功能:遍历每一列,计算每列第一行和第二行元素差值;
运行结果:x = -1, k = 8。
(2) while 循环结构
【思考】
(1)while 循环与for 循环的区别是什么?
答:for循环一般用于循环次数已知的情况下;
while 循环一般用于满足条件已知的情况下。
(2) 从键盘输入若干个数,当输入0时结束输入,求这些数的总和及其平均值。% sk3.m
答:
data = []; num = input('pls input a number: '); while(isempty(num) || num ~= 0) data = [data num]; num = input('pls input a number: '); end sum(data) mean(data)
【练习】
(1) 请把 exp2.m 函数文件用 while 循环改写。
答:
function s=exp2(x) s = 0; n = 1; while n<=x s=s+n; n=n+1; end
(2) 用 π /4≈1-1/3+1/5-1/7+…公式求 π 的近似值,直到最后一项的绝对值小于 10-6 为止,试编写其 M 脚本文件。
答:
sum = 1; n = 1; k = 1; while k*(-1)^(n+1)>10^(-6) k = -(2*n-1)/(2*n+1)*k sum = sum + k; n = n+1; end pai = sum * 4
循环时间稍微有点久,可以按 ctrl + c 停止
(3) if-else-end 分支结构
【思考】
输入一个字符,若为大写字母,则输出其后继字符,若为小写字母,则输出其前导字符,若为其他字符则原样输出。% sk4.m
ch = input('pls input: ') num= abs(ch) if ch > 'A' && ch < 'Z' num = num + 1 elseif ch > 'a' && ch < 'z' num = num - 1 end char(num)
(4) switch-case 结构
【思考与练习】
PM2.5 是指大气中直径小于或等于2.5微米的可吸入颗粒物,是衡量空气质量的重要指标。假定空气质量等级
以 PM2.5 数值划分为6级。
PM2.5数值在[0,35)空气质量为优;[35,75)为良,[75,115)为轻度污染;[115,150)为中度污
染;[150,250)为重度污染,大于等于250为严重污染。
编写程序,输入PM2.5数值,输出空气质量等级。
(1)用6个单分支结构实现
答:
pm = input('pls input: '); % 方法1:6个单分支结构 if pm>=0 && pm<35 disp('空气质量为优'); end if pm>=35 && pm<75 disp('空气质量为良'); end if pm>=75 && pm<115 disp('空气质量为轻度污染'); end if pm>=115 && pm<150 disp('空气质量为中度污染'); end if pm>=150 && pm<250 disp('空气质量为重度污染'); end if pm>=250 disp('空气质量为严重污染'); end
(2)用多分支if语句实现
pm = input('pls input: '); % 方法2:多分支if结构 if pm>=0 && pm<35 disp('空气质量为优'); elseif pm>=35 && pm<75 disp('空气质量为良'); elseif pm>=75 && pm<115 disp('空气质量为轻度污染'); elseif pm>=115 && pm<150 disp('空气质量为中度污染'); elseif pm>=150 && pm<250 disp('空气质量为重度污染'); elseif pm>=250 disp('空气质量为严重污染'); end
(3)用switch语句执行
pm = input('pls input: '); % 方法3:switch结构 switch pm case num2cell(0: 35) disp('空气质量为优'); case num2cell(35: 75) disp('空气质量为良'); case num2cell(75: 115) disp('空气质量为轻度污染'); case num2cell(115: 150) disp('空气质量为中度污染'); case num2cell(150: 250) disp('空气质量为重度污染'); otherwise disp('空气质量为严重污染'); end
2.子函数和参数传递
【练习】
(1) 编写求矩形面积函数 rect,当没有输入参数时,显示提示信息;当只输入一个参数时,则以该参数作为正方形的边长计算其面积;当有两个参数时,则以这两个参数为长和宽计算其面积。
答:
function area = rect(x, y) if nargin>2 error('too many input') end if nargin==1 area = x*x; else area = x*y; end
(2) 编写一个字符串加密函数 nch=my_code( ch , x),其中 ch 是字符串参数,x 为整数;加密方法是:把 ch 的每一个字符的 ASCII 码值加上 x,得到的即为加密后的新的字符串 nch。由于可显示 ASCII 码值是有范围的(32,126),因此当得到的 ASCII码值大于 126 时,需要减去 93 。同理,再编写一个解码函数 nch=my_dcode( ch , x)。
提示:char(32:126) 可获得 ASCII 码值为 32~126 的字符。
答:
function nch=my_code(ch , x) num = abs(ch); num = num + x; if num > 126 num = num - 93; end char(num)
function nch=my_dcode(ch , x) num = abs(ch); num = num - x; if num < 32 num = num + 93; end char(num)