关于if结构使用的注意事项
if结构是非常灵活的,它必须含有一个if语句和一个end语句。中间可以有任意个elseif语句,也可以有一个else语句。联合它的这些特性,我们可以创建出我们需要的各种各样的选择结构。
还有if语句是可以嵌套的。如果if结构完全是另一个if结构的一个语句块,我们就称两者为嵌套关系。下面是两个if语句的嵌套。
if x > 0
...
if y < 0
...
end
...
end
MATLAB翻译器经常把把已知的end语句和它最近的if语句联合在一起,所以第一个end语句和if y<0最靠近,而第二个end与if x>0最接近。对于一个编写正确的程序,它能工作正常。但如果程序员编写出错误,它将会使编译器出现混淆性错误信息提示。例如,假设我们编写一个大的程序,包括如下的一个结构:
...
if (test1)
...
if (test2)
...
if (test3)
...
end
...
end
...
end
这个程序包括了三个嵌套的if结构,在这个结构中可能有上千行的代码。现在假设第一个end在编辑区域突然被删除,那么MATLAB编译器将会自动将第二个end与最里面的if (test3)结构联合起来,第三个end将会和中间的if(test2)联合起来。当编译器翻译到达文件结束的时候,那将发现第一个if(test1)结构将永远没有结束,然后编译器就会产生一个错误提示信息,即缺少一个end。但是,它不能告诉你问题发生在什么地方,这就使我们必须回过头去看整个程序,来找问题。
在大多数情况下,执行一个算法,即可以用多个else if语句,也可以用if语句的嵌套。在这种情况下,程序员可以选择他喜欢的方式。
例3.4
给出等级分数
假设我们要编写一个程序,输入一个数值分数,输出等级分数,即是A级,B级和C级
grade > 95A
95 ≥ grade > 86B
86 ≥ grade > 76C
76 ≥ grade > 66D
66 ≥ grade >0F
用两种方式写出这个程序,第一种方式用多个elseif语句,第二种方式用if的嵌套。
答案:
(a)用多个elseif语句
if grade > 95.0
disp('The grade is A.');
elseif grade > 86.0
disp('The grade is B.');
elseif grade >76.0
disp('The grade is C.');
elseif grade > 66.0
disp('The grade is D.');
else
disp('The grade is F.');
end
(b)用if嵌套结构
if grade > 95.0
disp('The grade is A.');
else
if grade > 86.0
disp('The grade is B.');
else
if grade > 76.0
disp('The grade is C.');
else
if grade > 66.0
disp('The grade is D.');
else
disp('The grade is F.');
end
end
end
end
从上面的例子中,我们可以看到如果有多个选项的话,在一个if结构中用到多个else if语句将会比if的嵌套结构简单的多。
好的编程习惯
对于有许多选项的选择结构来说,最好在一个if结构中使用多个elseif语句,尽量不用if的嵌套结构。
|