octave结构化程序设计流程结构

一、条件转移结构

基本形式:

f 条件表达式

  语句段

end

执行流程:若表达式条件成立,执行语句段,否则跳过语句段的执行。

若需要多条件转移,一般是三个或以下:

if 条件表达式1

  语句段1

elseif 条件表达式2

  语句段2

else 

  语句段3

end

注意事项:if或else中的语句无需{}包围

       一组if语句必须以end结尾

 1 function y = ifSam()
 2     x = input('please input x:');
 3     y = 0; 
 4     if x < 0
 5         y = -1;
 6     elseif x == 0
 7         y = 0; 
 8     else 
 9         y = 1; 
10     end 

也可以直接输入上述语句执行,为了方便,我封装成了函数而已,以下也都一个做法。

二、开关结构,多分支结构,通常多过3个

基本形式:

switch 开关表达式

  case 表达式1

    语句段1

  case 表达式2

    语句段2

      …

  case 表达式n

    语句段n

  oterwise

    语句段n+1

  end

执行流程:根据开关表达式的结果,与接下来的一系列case后的表达式1...n比较,任一条件满足,则执行对应的语句段;若没有符合的表达式,则执行otherwise下的语句段n+1

注意事项:开关表达式只能是标量或字符串

     case中的语句段后不需要break,执行完自动退出,若多个case的语句段一样,可以用{}将借个表达式包括,用逗号隔开即可

     otherwise中的语句段是case所有语句段的保险语句,不能省略。切记,不要混用成c语言中的default了

 1 function switchSam()
 2     g = input('please input grade: ', 's');
 3     
 4     switch (g)
 5         case{'a', 'A'}
 6             disp('85~100');
 7         case{'b', 'B'}
 8             disp('70~84');
 9         case{'c', 'C'}
10             disp('60~69');
11         case{'d', 'D'}
12             disp('< 60');
13         otherwise
14             disp('input error!')
15     end 

三、循环结构for和while,前者用于提前已知循环的次数的循环结构,后者通常用于无法提前预知循环的次数的循环结构中

基本形式:

for 循环变量 = v  %v通常为行向量        while 条件表达式

  语句段                    语句段

end                      end

执行流程:for循环执行时,每次从v中取一个数值,执行一次语句段;

     再次从v中取一个数值,并再次执行语句段;

     直到v中的数据全部被取完为止。for循环停止执行

     while循环执行,先行判断条件表达式是否成立;

     若成立,则执行语句段,除非是需要死循环,否则,语句段中一定会包含让条件表达式变化的语句;

     再次判断while后的条件表达式,若成立,则像上一步一样继续执行;

     直至到while后面的表达式不成立,则跳出循环,结束循环。

注意事项:绝大多数的循环都可以同时用for和while实现,根据需要自己选择

     无论是for还是while中都可以加入break和continue语句,前者是退出整个循环,continue则是退出当次的循环

1 function resul = forSam(init, n)
2     for i = 1 : n
3         resul = init^2 - 1;
4         init = resul;
5     end 
1 function resul = whileSam(init, n)
2     while n > 0 
3         resul = init^2 - 1;
4         %init = resul;                            %每次不输出init>的结果        
5         init = resul                                %每次输出中间结>6         n = n - 1;
7     end  

这两种循环都是可以的,开心就好,随意选择。

四、试探结构

基本形式:

try

  语句段1

catch

  语句段2

end

执行流程:先行执行语句段1,若没有出现错误,跳过语句段2;

     执行语句段1出现错误,执行语句段2

注意事项:提供了一种错误的捕获机制

 1 function trySam()                                                           
 2     var1 = rand(3, 4);
 3     var2 = magic(5);
 4     try
 5         var1 * var2;
 6         disp(var1 * var2);
 7     catch
 8         disp(var1);
 9         disp(var2);
10     end

代码第5行是将矩阵相乘,但是var1和var2不满足相乘条件,但是依旧吧第8 9行执行了

1 function val = trySamV2(a)
2     index = input('input the element index: ');
3 
4     try
5         %disp(int2str(a(index)));
6         disp(a(index));                                                     
7     catch
8         disp('out of range!');
9     end

向量下标越界也能自动处理了

posted @ 2023-06-05 12:18  叕叒双又  阅读(55)  评论(0编辑  收藏  举报