1 if 结构
1.1if语句的基本形式
但是这种方式只适用于简单的结构 。
1.2if语句的示例
输出量应为两个不相等的实数。两个相等的实数或两个复数。
3.写出算法本程序可分为三大块,它的函数分别为输入,运算过程和输出。我们把每一个大块分解成更小的,更细微的工作。根据判别式的值,可能有三种计算途径,读取输入的数据、 计算出根、 输入出根 ,所以我们要用到有三种选项的 if 结构。产生的伪代码如下
4.matlab代码如下
% 目的:
% 此程序解出一元二次方程的根
% 方程的形式为a*x^2 + b*x + c = 0。无论方程的根型如何,它都可以计算出答案。
%
% 定义变量:
% a --方程的x^2项系数
% b --方程的x项系数
% c --方程的常数项
% discriminant --方程的判别式
% imag_part --方程的虚部(对于复根)
% real_part --方程的实部(对于复根)
% x1 --方程的第一个解(对于实数根)
% x2 --方程的第二个解(对于实数根)
% 提示用户输入方程的系数
disp ('此程序解出一元二次方程的根');
disp ('方程的形式为A*X^2 + B*X + C = 0。');
a = input('请输入A的系数: ');
b = input('请输入B的系数: ');
c = input('请输入C的系数: ');
%计算判别式
discriminant = b^2 - 4 * a * c;
%根据判别式的值,解方程的根
if discriminant > 0 %方程有两个实数根
x1 = (-b + sqrt(discriminant)) / (2*a);
x2 = (-b - sqrt(discriminant)) / (2*a);
disp('此方程有两个实数根:');
fprintf('x1 = %f\n', x1);
fprintf('x2 = %f\n', x2);
elseif discriminant == 0 %方程有一个重根
x1 = ( -b ) / (2*a);
disp('此方程有两个相等的实数根:');
fprintf('x1 = x2 = %f\n', x1);
else %方程有复数根
real_part = (-b) / (2*a);
imag_part = sqrt( abs(discriminant)) / (2*a);
disp('此方程有复数根:');
fprintf('x1 = %f + i %f \n',real_part, imag_part);
fprintf('x1 + %f - i %f \n', real_part, imag_part);
end
5.检测这个程序
如果输入上面三个方程的系数得到对应的结果,则说明程序是正确的。运行结果:
1.3 关于 if 结构使用的注意事项
MATLAB 翻译器经常把把已知的 end 语句和它最近的 if 语句联合在一起,所以第一个end 语句和 if y<0 最靠近,而第二个 end 与 if x>0 最接近。对于一个编写正确的程序,它能工作正常。但如果程序员编写出错误,它将会使编译器出现混淆性错误信息提示。例如,假设我们编写一个大的程序,包括如下的一个结构:
这个程序包括了三个嵌套的 if 结构,在这个结构中可能有上千行的代码。现在假设第一个 end 在编辑区域突然被删除,那么 MATLAB 编译器将会自动将第二个 end 与最里面的if (test3)结构联合起来,第三个 end 将会和中间的 if(test2)联合起来。当编译器翻译到达文件结束的时候,那将发现第一个 if(test1)结构将永远没有结束,然后编译器就会产生一个错误提示信息,即缺少一个 end。但是,它不能告诉你问题发生在什么地方,这就使我们必须回过头去看整个程序,来找问题。在大多数情况下,执行一个算法,即可以用多个 else if 语句,也可以用 if 语句的嵌套。在这种情况下,程序员可以选择他喜欢的方式。
1.4if语句的不同表达形式
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
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
2 switch 结构
switch_expr 和每一个 case_expr 既可以是数值,也可以是字符值。注意在大多情况下只有一个语句块会被执行。当一个语句块被执行后,编译器就会跳到 end 语句后的第一个语句开始执行。如果 switch 表达和多个 case 表达式相对应,那么只有他们中的第一个将会被执行。让我们看一个简单的关于 switch 结构的例子。下面的语句用来判断 1 到 10 之间的数是奇数还是偶数。它用来说明一系列的 case 选项值的应用和 otherwise 语块的应用。
switch (value)
case {1, 3, 5, 7, 9},
disp('这个值是奇数。');
case {2, 4, 6, 8, 10},
disp('这个值是偶数。');
otherwise,
disp('这个值超出范围。');
end
3 try/catch 结构的应用
% 初始化数组
a = [1 -3 2 5];
try
% 尝试输出一个元素
index = input('请输入要显示的元素的下标: ');
disp(['a(' int2str(index) ') = ' num2str(a(index))] );
catch
% 如果出现错误则执行下面的代码
disp( ['非法下标: ' int2str(index)] );
end
运行结果: