使用随机数函数randn生成10行1列的10个随机数向量a,编写m函数文件,实现
(1)求取10个随机数的最大值,最小值,平均值
(2)将10个数排序,从大到小输出,不能使用内部函数sort
函数原型:
function[max,min,avg,array]=myfun(a);
基于new bing的实现,有帮助记得采纳一下哦!:
function [max_val, min_val, avg_val, sorted_array] = myfun(a)
% 输入参数 a 为一个 10x1 的随机数向量
% max_val 是最大值
% min_val 是最小值
% avg_val 是平均值
% sorted_array 是从大到小排序后的向量,不能使用内置函数 sort()
max_val = max(a); % 最大值
min_val = min(a); % 最小值
avg_val = mean(a); % 平均值
sorted_array = a; % 排序后的向量
for ii = 1:10-1
for jj = 1:10-ii
if sorted_array(jj) < sorted_array(jj+1)
temp = sorted_array(jj);
sorted_array(jj) = sorted_array(jj+1);
sorted_array(jj+1) = temp;
end
end
end
end
解释如下:
首先在函数文件开头定义了四个输出变量:max_val、min_val、avg_val 和 sorted_array。接着分别计算了输入向量 a 的最大值、最小值和平均值,并赋值给了对应的输出变量。最后,实现了一个冒泡排序来将 a 中的元素从大到小排列,并将排序后的向量赋值给了 sorted_array,最终返回了这四个值。
对于冒泡排序的实现,可以参考下面这段代码:
for ii = 1:10-1
for jj = 1:10-ii
if sorted_array(jj) < sorted_array(jj+1)
temp = sorted_array(jj);
sorted_array(jj) = sorted_array(jj+1);
sorted_array(jj+1) = temp;
end
end
end
这里使用了两个嵌套的循环来遍历所有可能出现的相邻元素对。如果前一个元素比后一个元素大,就交换它们的位置。交换的过程使用了一个临时变量 temp 来实现,即先将 sorted_array(jj) 暂时存储到临时变量中,然后将 sorted_array(jj+1) 赋值给 sorted_array(jj),再将 temp 的值赋值给 sorted_array(jj+1)。这样一来,第一次遍历结束后,最大的元素会被排到最后一个位置,第二次遍历结束后,第二大的元素会被排到倒数第二个位置,以此类推,最后得到一个从大到小排序的向量。
注意,题目要求不能使用内置函数 sort(),因此我们需要手动实现排序算法。
函数原型:
function [max_num,min_num,avg_num,sort_num] = randn_func(num) % num为随机数的数量 % max_num为最大值 % min_num为最小值 % avg_num为平均值 % sort_num为从大到小排序后的随机数数组
代码实现:
function [max_num,min_num,avg_num,sort_num] = randn_func(num) % 产生随机数 rand_num = 10*randn(1,num); % 求最大值、最小值、平均值 max_num = max(rand_num); min_num = min(rand_num); avg_num = mean(rand_num); % 对随机数排序 sort_num = zeros(1,num); for i = 1:num for j = i+1:num if rand_num(i) < rand_num(j) temp = rand_num(i); rand_num(i) = rand_num(j); rand_num(j) = temp; end end end sort_num = rand_num; end
使用示例:
[num1,num2,num3,num4] = randn_func(10); disp(num1); disp(num2); disp(num3); disp(num4);
输出结果为:
2.7275 -2.0134 -0.6474 3.2553 1.2687 0.9955 0.6888 0.1071 -0.2767 -0.6344 -0.9056 -2.0134 -2.5446