MATLAB 练习题

博客详细解析了一段MATLAB代码,该代码用于生成一个由星号和字母组成的特定形状的字符图形。输入是一个整数n,程序会输出n+2行的图形,核心部分由字母构成,外围由星号包围。内容涉及嵌套循环、条件判断以及字符输出,通过逐行解释展示了图形的生成过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

输入一个整数n<10
输入n+2行,如图的图形:核心n行,周边被*号保卫

输入

一个整数

输出

字符图形

样例输入 Copy

4

样例输出 Copy

     *     
    *A*    
   *BBB*   
  *CCCCC*  
 *DDDDDDD* 
***********

分析,该字符图形可以划分为5个部分,首先是第一部分,输出图形左边的空格:
在这里插入图片描述

n = input('');
for i = 1:n + 1
    for j = 1:n + 2 - i
        fprintf(' ');   % 输出 左边的空格
    end
    fprintf('*');    % 输出左边的 *号
    for j = 1:2 * i - 3
        fprintf('%c', 'A' + i - 2);    % 输出每行的字母
    end
    if i > 1          % 当输入的 行数 大于 n 时, 输出 右边的 * 号
        fprintf('*');
    end
    fprintf('\n');   % 每输出一行换行
end
for i = 2 * (n + 1) + 1: -1: 1    % 输出 最后一行的  ***********
    fprintf('*');
end
第一次循环

当 输入为4 时,n = 4,执行第一次循环 i = 1,总共循环5次

for i = 1:n + 1  

因为 n = 4,i = 1所以 n + 2 - i 总共循环5次,第一行打印5个空格

for j = 1:n + 2 - i  
    fprintf(' ');   % 输出 图形左边的空格   每一次循环会输出1个空格 
end

当以上空格打印完成后,会开始执行以下代码

fprintf('*');    % 输出左边的 *号

会打印出以下结果

     *

在*号前面会有4个空格,如果想清晰的看到前面输出的内容,可以把上面代码空格符替换成 ‘-’

for j = 1:n + 2 - i  
    fprintf('-');   % 将 空格换成 -
end

打印出结果:

-----*

可以清晰的看到在 * 前面会有四个 ‘-’ 符号

打印完 * 后,会执行以下代码

for j = 1:2 * i - 3
        fprintf('%c', 'A' + i - 2); 
end

首先代码会先计算 2 * i - 3 这一部分,由上面的程序执行可得到 i = 1的,所以会得到 结果 2 * 1 - 3 = -1显然在这个for循环中是不能够执行的,所以跳过该for循环,执行下面的代码

if i > 1       
    fprintf('*');
end

该代码段会先判断 i 是否大于 1,由上面的程序执行可得到 i = 1的,所以会得到结果返回 false,不执行if下面的代码

第一行的内容输出结束,执行下面的换行代码

fprintf('\n');  
第二次循环

执行第二次循环 i = 2, 剩余循环次数 3次

for i = 1:n + 1  

因为 n = 4,i = 2所以 n + 2 - i 总共循环4次,第二行打印4个空格

for j = 1:n + 2 - i  
    fprintf(' ');   % 输出 图形左边的空格   每一次循环会输出1个空格 
end

当以上空格打印完成后,会开始执行以下代码

fprintf('*');    % 输出左边的 *号

会打印出以下结果

     *
    *

在*号前面会有4个空格,如果想清晰的看到前面输出的内容,可以把上面代码空格符替换成 ‘-’

for j = 1:n + 2 - i  
    fprintf('-');   % 将 空格换成 -
end

打印出结果:

-----*
----*

可以清晰的看到在 * 前面会有四个 ‘-’ 符号

打印完 * 后,会执行以下代码

for j = 1:2 * i - 3
        fprintf('%c', 'A' + i - 2); 
end

首先代码会先计算 2 * i - 3 这一部分,由上面的程序执行可得到 i = 2的,所以会得到 结果 2 * 2 - 3 = 1,会循环一次,执行下面的代码

if i > 1       
    fprintf('*');
end

打印出结果:

     *
    *A

该代码段会先判断 i 是否大于 1,由上面的程序执行可得到 i = 2的,所以会得到结果返回 true,执行if下面的代码
打印出结果:

     *
    *A*

第二行的内容输出结束,执行下面的换行代码

fprintf('\n');  
第三次循环

执行第二次循环 i = 3, 剩余循环次数 2次

for i = 1:n + 1  

因为 n = 4,i = 2所以 n + 2 - i 总共循环3次,第三行打印3个空格

for j = 1:n + 2 - i  
    fprintf(' ');   % 输出 图形左边的空格   每一次循环会输出1个空格 
end

当以上空格打印完成后,会开始执行以下代码

fprintf('*');    % 输出左边的 *号

会打印出以下结果

     *
    *
   * 

在*号前面会有4个空格,如果想清晰的看到前面输出的内容,可以把上面代码空格符替换成 ‘-’

for j = 1:n + 2 - i  
    fprintf('-');   % 将 空格换成 -
end

打印出结果:

-----*
----*
---*

可以清晰的看到在 * 前面会有四个 ‘-’ 符号

打印完 * 后,会执行以下代码

for j = 1:2 * i - 3
        fprintf('%c', 'A' + i - 2); 
end

首先代码会先计算 2 * i - 3 这一部分,由上面的程序执行可得到 i = 2的,所以会得到 结果 2 * 2 - 3 = 1,会循环一次,执行下面的代码

if i > 1       
    fprintf('*');
end

打印出结果:

    *
   *A*
  *BBB 

该代码段会先判断 i 是否大于 1,由上面的程序执行可得到 i = 2的,所以会得到结果返回 true,执行if下面的代码
打印出结果:

    *
   *A*
  *BBB*

第三行的内容输出结束,执行下面的换行代码

fprintf('\n');  
### MATLAB 练习题示例 以下是几个常见的 MATLAB 练习题及其对应的代码实现: #### 1. 寻找所有的水仙花数 水仙花数是一个三位数,其各个位上的数字立方之和等于该数本身。 ```matlab % 初始化变量 narcissisticNumbers = []; for i = 100:999 % 遍历所有三位数 hundreds = floor(i / 100); % 百位 tens = floor(mod(i, 100) / 10); % 十位 units = mod(i, 10); % 个位 if (hundreds^3 + tens^3 + units^3 == i) % 判断是否满足条件 narcissisticNumbers = [narcissisticNumbers, i]; end end disp('所有的水仙花数:'); disp(narcissisticNumbers); ``` 这段代码通过遍历所有三位数并计算每一位的立方和来找符合条件的水仙花数[^1]。 --- #### 2. 使用 `find` 函数查找矩阵中大于某个阈值的元素位置 给定一个矩阵,找到其中所有大于指定数值的位置索引。 ```matlab A = [1, 5, 8; 7, 2, 6; 3, 9, 4]; % 输入矩阵 threshold = 5; % 设定阈值 indices = find(A > threshold); % 查找大于阈值的元素位置 [row, col] = ind2sub(size(A), indices); disp('大于阈值的元素位置:'); disp([row, col]); ``` 此代码展示了如何利用 `find` 和 `ind2sub` 函数获取矩阵中特定条件下的元素坐标[^2]。 --- #### 3. 子矩阵的操作——提取、赋值与删除 创建一个矩阵,并演示如何对其进子矩阵的提取、重新赋值以及部分删除操作。 ```matlab B = magic(4); % 创建一个 4×4 的魔方矩阵 C = B(1:2, 3:4); % 提取左上角的一个子矩阵 D = zeros(2, 2); % 新定义一个小矩阵 D B(1:2, 3:4) = D; % 将原矩阵对应区域替换为新矩阵 D E = B(:, 2); % 删除第二列数据 B(:, 2) = []; % 实际执删除操作 disp('修改后的矩阵:'); disp(B); ``` 上述代码说明了如何对矩阵进切片访问、更新以及移除某些或列的操作方法。 --- #### 4. 编写自定义函数 `fun` 按照需求编写一个简单的函数,接受输入参数并返回相应的结果。 ```matlab function result = fun(x) % 计算平方加一的结果 result = x.^2 + 1; end testValues = [-2, -1, 0, 1, 2]; % 测试向量 outputResults = arrayfun(@fun, testValues); disp('测试值及其对应输:'); disp([testValues', outputResults']); ``` 这里展示了一个基本的用户定义函数的例子,它接收数组作为输入并对每个元素应用相同的逻辑运算。 --- #### 5. Cody 平台上的经典题目实践 可以尝试登录 MathWorks 官方提供的在线解题平台 **Cody** 进一步提升技能水平。例如完成一些基础挑战如 “Times 2”,即让给的数据乘以二;或者更复杂的任务像字符串匹配等[^3]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值