MATLAB 条件语句
决策结构要求程序员应指定一个或多个要由程序评估或测试的条件,如果确定条件为真,则应指定要执行的一个或多个语句,如果条件为真,则可以选择要执行的其他语句。条件确定为假。
以下是大多数编程语言中常见的典型决策结构的一般形式:
flowchart TD
start[Start] --> condition{condition}
condition -->|condition is true| conditional_code[conditional code]
conditional_code --> end[End]
condition -->|condition is false| end
1. if 语句
if
语句是最基本的条件语句,用于在条件为真时执行特定的代码块。
基本语法
1 2 3 4 if condition statements end
代码示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 x = 10 ; if x > 5 disp ('x 大于 5' ); end number = -3.5 ; if number > 0 disp ('这是一个正数' ); end if number < 0 disp ('这是一个负数' ); end if number == 0 disp ('这是零' ); end name = 'MATLAB' ; if strcmp(name, 'MATLAB' ) disp ('欢迎使用 MATLAB!' ); end
2. if-else 语句
if-else
语句提供了两个执行路径:当条件为真时执行一个代码块,当条件为假时执行另一个代码块。
基本语法
1 2 3 4 5 6 7 if condition statements1 else statements2 end
代码示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 num = 15 ; if mod (num, 2 ) == 0 fprintf('%d 是偶数\n' , num); else fprintf('%d 是奇数\n' , num); end score = 85 ; if score >= 60 disp ('及格' ); else disp ('不及格' ); end temperature = 25 ; if temperature > 30 disp ('天气很热' ); else disp ('天气还好' ); end
3. if-elseif-else 语句
当需要测试多个条件时,可以使用 elseif
来创建多分支结构。
基本语法
1 2 3 4 5 6 7 8 9 10 11 12 13 if condition1 statements1 elseif condition2 statements2 elseif condition3 statements3 else statements4 end
代码示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 score = 88 ; if score >= 90 grade = 'A' ; elseif score >= 80 grade = 'B' ; elseif score >= 70 grade = 'C' ; elseif score >= 60 grade = 'D' ; else grade = 'F' ; end fprintf('分数: %d, 等级: %s\n' , score, grade); month = 7 ; if month >= 3 && month <= 5 season = '春季' ; elseif month >= 6 && month <= 8 season = '夏季' ; elseif month >= 9 && month <= 11 season = '秋季' ; else season = '冬季' ; end fprintf('第%d月是%s\n' , month, season); weight = 70 ; height = 1.75 ; bmi = weight / (height^2 ); if bmi < 18.5 category = '体重过轻' ; elseif bmi < 25 category = '正常体重' ; elseif bmi < 30 category = '超重' ; else category = '肥胖' ; end fprintf('BMI: %.2f, 分类: %s\n' , bmi, category);
4. switch 语句
switch
语句用于基于变量的值执行不同的代码块,特别适合处理多个离散值的情况。
基本语法
1 2 3 4 5 6 7 8 9 10 switch expression case value1 statements1 case value2 statements2 case {value3, value4, value5} statements3 otherwise statements4 end
代码示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 day = 3 ; switch day case 1 dayName = '星期一' ; case 2 dayName = '星期二' ; case 3 dayName = '星期三' ; case 4 dayName = '星期四' ; case 5 dayName = '星期五' ; case {6 , 7 } dayName = '周末' ; otherwise dayName = '无效的日期' ; end fprintf('第%d天是%s\n' , day, dayName); a = 10 ; b = 5 ; operation = '+' ; switch operation case '+' result = a + b; fprintf('%.2f + %.2f = %.2f\n' , a, b, result); case '-' result = a - b; fprintf('%.2f - %.2f = %.2f\n' , a, b, result); case '*' result = a * b; fprintf('%.2f * %.2f = %.2f\n' , a, b, result); case '/' if b ~= 0 result = a / b; fprintf('%.2f / %.2f = %.2f\n' , a, b, result); else disp ('除数不能为零' ); end otherwise disp ('不支持的运算符' ); end color = 'red' ; switch lower(color) case {'red' , 'crimson' , 'scarlet' } disp ('这是红色系' ); case {'blue' , 'navy' , 'azure' } disp ('这是蓝色系' ); case {'green' , 'lime' , 'forest' } disp ('这是绿色系' ); otherwise disp ('未知颜色' ); end
MATLAB 循环语句
循环语句允许我们重复执行一段代码,直到满足某个条件为止。MATLAB提供了几种不同类型的循环结构来满足不同的编程需求。
1. for 循环
for
循环用于已知循环次数的情况,是最常用的循环结构之一。
基本语法
1 2 3 4 5 6 7 8 9 10 for variable = start:step:end statements end for variable = array statements end
代码示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 disp ('1到10的数字:' );for i = 1 :10 fprintf('%d ' , i ); end fprintf('\n' ); disp ('0到20的偶数:' );for i = 0 :2 :20 fprintf('%d ' , i ); end fprintf('\n' ); disp ('倒计时:' );for i = 10 :-1 :1 fprintf('%d ' , i ); end disp ('发射!' );numbers = [2 , 4 , 6 , 8 , 10 ]; sum_total = 0 ; for num = numbers sum_total = sum_total + num; end fprintf('数组元素的和: %d\n' , sum_total); disp ('九九乘法表:' );for i = 1 :9 for j = 1 :i fprintf('%d×%d=%d\t' , j , i , i *j ); end fprintf('\n' ); end matrix = [1 , 2 , 3 ; 4 , 5 , 6 ; 7 , 8 , 9 ]; disp ('原矩阵:' );disp (matrix);for i = 1 :size (matrix, 1 ) for j = 1 :size (matrix, 2 ) matrix(i , j ) = matrix(i , j ) * 2 ; end end disp ('乘以2后的矩阵:' );disp (matrix);
2. while 循环
while
循环在条件为真时重复执行代码块,适用于不确定循环次数的情况。
基本语法
1 2 3 4 5 while condition statements end
代码示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 count = 1 ; while count <= 5 fprintf('第%d次循环\n' , count); count = count + 1 ; end n = 5 ; factorial = 1 ;i = 1 ;while i <= n factorial = factorial * i ; i = i + 1 ; end fprintf('%d的阶乘是: %d\n' , n, factorial ); target = 42 ; guess = 0 ; attempts = 0 ; guesses = [25 , 50 , 40 , 42 ]; guess_index = 1 ; while guess ~= target && guess_index <= length (guesses) guess = guesses(guess_index); attempts = attempts + 1 ; if guess < target fprintf('猜测 %d: 太小了!\n' , guess); elseif guess > target fprintf('猜测 %d: 太大了!\n' , guess); else fprintf('猜测 %d: 恭喜你猜对了!\n' , guess); end guess_index = guess_index + 1 ; end fprintf('总共用了 %d 次猜测\n' , attempts); n = 10 ; a = 0 ; b = 1 ; count = 1 ; fprintf('斐波那契数列的前%d项:\n' , n); fprintf('%d ' , a); while count < n fprintf('%d ' , b); temp = a + b; a = b; b = temp; count = count + 1 ; end fprintf('\n' ); x = 2 ; tolerance = 1e-6 ; max_iterations = 100 ; iteration = 0 ; fprintf('使用牛顿法求sqrt(2):\n' ); while iteration < max_iterations x_new = 0.5 * (x + 2 /x); error = abs (x_new - x); fprintf('迭代 %d: x = %.8f, 误差 = %.2e\n' , iteration+1 , x_new, error); if error < tolerance fprintf('收敛成功!\n' ); break ; end x = x_new; iteration = iteration + 1 ; end
3. 循环控制语句
3.1 break 语句
break
语句用于立即退出循环。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 for i = 1 :20 square = i ^2 ; if square > 50 fprintf('第一个大于50的平方数是 %d^2 = %d\n' , i , square); break ; end end sum_val = 0 ; i = 1 ;while true sum_val = sum_val + i ; if sum_val > 100 fprintf('当i=%d时,累加和首次超过100,和为%d\n' , i , sum_val); break ; end i = i + 1 ; end
3.2 continue 语句
continue
语句用于跳过当前迭代的剩余部分,直接进入下一次循环。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 disp ('1到10中的奇数:' );for i = 1 :10 if mod (i , 2 ) == 0 continue ; end fprintf('%d ' , i ); end fprintf('\n' ); numbers = [5 , -2 , 8 , -1 , 3 , 0 , 7 , -4 ]; positive_sum = 0 ; positive_count = 0 ; for num = numbers if num <= 0 continue ; end positive_sum = positive_sum + num; positive_count = positive_count + 1 ; end if positive_count > 0 average = positive_sum / positive_count; fprintf('正数的平均值: %.2f\n' , average); else disp ('没有正数' ); end
4. 复杂循环应用示例
4.1 质数判断和生成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 disp ('1到100之间的质数:' );primes = [];for num = 2 :100 is_prime = true ; for i = 2 :sqrt (num) if mod (num, i ) == 0 is_prime = false ; break ; end end if is_prime primes = [primes , num]; end end fprintf('找到 %d 个质数:\n' , length (primes )); for i = 1 :length (primes ) fprintf('%d ' , primes (i )); if mod (i , 10 ) == 0 fprintf('\n' ); end end fprintf('\n' );
4.2 矩阵操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 matrix = rand (5 , 5 ) * 100 ; matrix = round (matrix); disp ('随机矩阵:' );disp (matrix);max_val = -inf ; max_row = 0 ; max_col = 0 ; for i = 1 :size (matrix, 1 ) for j = 1 :size (matrix, 2 ) if matrix(i , j ) > max_val max_val = matrix(i , j ); max_row = i ; max_col = j ; end end end fprintf('最大值 %d 位于第 %d 行第 %d 列\n' , max_val, max_row, max_col);
4.3 数值分析应用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 a = 0 ; b = 1 ; n = 1000 ; h = (b - a) / n; f = @(x) x.^2 ; integral_approx = (f(a) + f(b)) / 2 ; for i = 1 :n-1 x = a + i * h; integral_approx = integral_approx + f(x); end integral_approx = integral_approx * h; integral_exact = 1 /3 ; fprintf('数值积分结果: %.6f\n' , integral_approx); fprintf('理论值: %.6f\n' , integral_exact); fprintf('误差: %.6f\n' , abs (integral_approx - integral_exact));
总结
MATLAB的条件语句和循环语句为程序提供了强大的控制流功能:
条件语句 :
if
语句:处理简单条件判断
if-else
语句:提供二选一的执行路径
if-elseif-else
语句:处理多条件分支
switch
语句:适合处理离散值的多分支选择
这些条件语句之间可以互相嵌套,包括与下面的循环语句
循环语句 :
for
循环:适用于已知循环次数的情况
while
循环:适用于条件驱动的循环
break
和
continue
:提供循环控制的灵活性