请问如何将下列C语言程序改成matlab中的m文件?
void exchange(int *num)
{
for(int i=0; i<4; i++)
{
if(num[i] < 10)
{
num[i] = 0;
}
}
}
int main()
{
int i,a,b,c,d, number[4];
printf("请输入四个数字\n");
for(int i=0; i<4; i++)
{
scanf("%d",&number[i]);
}
exchange(number);
printf("修改后的数组为:\n");
for(int i=0; i<4; i++)
{
printf("%d ",number[i]);
}
} 展开
对于R2016b以前版本,脚本文件中不能定义函数,因此分为main.m脚本文件和exchange.m函数文件(函数文件名必须和函数名相同)两部分;
对于R2016b及以后的版本,脚本可以定义局部函数,这样可以将exchang.m的内容放在main.m中(必须放在main脚本末尾)
如果main.m定义成函数而不是脚本(一般不会这么做),可以不用分成两个文件,直接将exchange作为main的子函数(放在main函数后面),这时,如果要运行,需要在命令行调用main函数
文本代码如下:
[1] main.m 脚本:
disp('请输入四个数字')
number = zeros(1, 4, 'int32');
for ii = 1:4
number(ii) = input('');
end
number = exchange(number);
disp('修改后的数组为:');
for ii = 1:4
disp(number(ii));
end
[2] exchang.m 函数
function num = exchange(num)
num(num < 10) = 0;
end
代码流程基本和C语言一样,有三个点不同:
[1] main脚本中的number = exchange(number),因为Matlab没有指针实现,需要用返回值覆盖原数组
[2] exchang函数采用了向量化实现,num(num < 10) = 0表示将num数组中所有小于10的元素置零,如果要贴近C语言的形式,可以用下面的代码:
function num = exchange(num)
for ii = 1:4
if num(ii) < 10
num(ii) = 0;
end
end
[3] 下标变量不能用 i 或者 j 表示,可以用 ii,jj,k,m,n等,这是Matlab的遗留缺陷,i 和 j 本身是个全局变量(而且没有类似const这样的保护),表示单位纯虚数,如果用在循环中被修改值,可能造成不确定的错误计算结果