欢迎光临散文网 会员登陆 & 注册

条件语句 -- 北太天元学习8

2023-07-18 20:25 作者:卢朓  | 我要投稿

条件语句

算法的三种基本结构是顺序结构,循环结构 和 分支结构。北太天元学习2
讲了顺序结构(这个没有强调,就是按照顺序一个一个地执行语句), 北太天元5和7讲
循环结构(for循环和while循环)。 这个短文,我们讲分支结构.
分支实现的方式包括 if条件语句和 switch条件语句. 条件语句也被称为选择语句.

if语句的形式是“如果A,那么B”。在北太天元中,基本的if语句如下所示:

if  逻辑表达式
  特定代码段
end

只有当逻辑表达式为true时,才运行if 和 end 圈定的特定代码段.
通常,当逻辑表达式为假时,我们希望执行一些不同的操作。在这种情况下,我们可能需要
if-else语句, 如下所示:

if 逻辑表达式

    特定代码段A

else

    特定代码段B

end

如果逻辑表达式为true,则执行特定代码段A。如果逻辑表达式不为真,那么
则执行特定代码段B。

例如,我们在命令行窗口输入如下的代码
if pi > 2
    disp("pi > 2 是真的");
else
    fprintf("pi > 2 是假的\n");
end
得到的输出是
  1x1 string
    "pi > 2 是真的"
这是因为 pi > 2 返回的是 true,  北太天元执行disp("pi >2 是真的")这个语句。

如果要编写一个具有两种以上可能性的条件语句,我们可能需要在if和else中间
插入一个或者多个elseif, 例如

if 逻辑表达式1

    特定代码段A

elseif 逻辑表达式2

    特定代码段B

elseif 逻辑表达式3

    特定代码段C

else

    特定代码段D

end
对于本例,如果 逻辑表达式1 为真,则执行特定代码段A。否则,如果逻辑表达式2为真,
则执行特定代码段B。如果逻辑表达式1和逻辑表达式2都为false,并且逻辑表达式3为true,
则执行特定代码段C。如果这些逻辑表达式中没有一个为真则执行特定代码段D。请注意,这个例子中特定代码段A、B、C和D中有且仅有一个会被执行到.

此外,最后一个else语句不是必须的。如果没有else和后面的特定代码段D,那么在前面的逻辑表达式1,2,3都是假的时候,北太天元就什么都不做,直接去执行与if配对的 end 之后的语句。

条件语句有一个很重要的应用就是用在for循环或while循环中,当满足某个条件的时候,
选择使用关键词 break 或者 return 来跳出循环。

信息下面的代码段取1到10之间的每个数字,并显示它是否能够被2、3或者5整除
然而,如果这个数字可以被其中多个整除,那么它只显示它是可被其中最小的一个整除。
例如,如果i是6,那么它将显示它可以被2整除,虽然它也能被3整除,但是没有被检查到.

n=10;
for i=2:n
    if rem(i, 2) == 0
        disp([num2str(i), '可被2整除']);
    elseif rem(i, 3) == 0
        disp([num2str(i), '可被3整除']);
    elseif rem(i, 5) == 0
        disp([num2str(i), '可被5整除']);
    else
        break;
    end
end

请注意,内置函数disp命令有一个参数,它的参数是是一个char matrix,
这个char matrix 实际上只有一行,是一个char行向量,
[num2str(i), '可被2整除'] 这里的逗号前后都是char向量, 然后
被连接成了一个更长的char向量。 numstr也是一个内置函数,把一个数转成char mat.

当存在许多个条件时,还可以使用switch语句,而且此时switch代码阅读起来更加简单。
假设我们有一个开关变量,希望根据这个变量的值运行不同的代码段。
每个变量的每个特定值称为一个case。 switch语句的样式如下:

swithc  s %开关变量
    case A

        特定代码段A

    case B

        特定代码段B

    case {C1,C2,C3} % 用{ } 把C1,C2,C3做成case的集合

        特定代码段C

    otherwise

        特定代码段D

end

如果开关变量s的值匹配了 A 那么执行特定代码段A后程序不再检查别的case,直接跳到
与switch配对的end后的语句执行。 case 后面的值可以是一个值的集合,开关变量s
的值如果在这个集合中,例如对于 case {C1,C2,C3} ,在前面s与A和B都不匹配的时候,
只要 s == C1 或者 s==C2或者s==C3成立,则执行 特定代码段C, 前面所有的case都不匹配,
执行otherwise关键词之后的特定代码段D. 这里的otherwise 语句不是必须的,
如果没有otherwise 语句,则前面的case如果都不匹配,那么北太天元什么都不干,
直接跳到与switch配对的end后面的语句去执行。

看看下面这段代码输出的是什么?
name =  'Jack' ;
switch name
case {'Rose', 'Jack'}
    fprintf("My name is Rose or Jack\n");
case 'Jack'
    fprintf("My name is Jack\n");
end

答案:是输出 "My name is Rose or Jack", 原因是在 Jack 与 {'Rose', 'Jack'}中的'Jack'
匹配,执行了 fprintf("My name is Rose or Jack\n"); 之后就跳到end之后了, 不会
再检查 case 'Jack' 是否匹配。


条件语句 -- 北太天元学习8的评论 (共 条)

分享到微博请遵守国家法律