我得到了一项要求我编写两个C函数的作业:
1 - Read a matrix from the user.
2 - Write a matrix to the console.
未指定矩阵尺寸,因此我无法使用以下内容:
void matwrite(float m[3][3]) { ... }
这种情况有什么解决方法吗?
答案 0 :(得分:-1)
函数签名应该是这样的:
void matwrite(float** m, int w, int h);
然后你可以迭代这样的元素:
for (int i = 0; i < w; ++i) {
for (int j = 0; j < h; ++j) {
cout << m[i][j] << " "; // For example
}
cout << "\n";
}
您可以使用数组及其尺寸调用函数,例如:
float arr[][3] = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9},
{1, 2, 3}
};
matwrite(arr, 4, 3);
答案 1 :(得分:-1)
您可以在C中使用可变长度数组。
这些功能看起来像
void ReadMatrix( size_t n, float m[][n] );
void WriteMatrix( size_t n, float m[][n] );
例如
float m[3][3];
ReadMatrix( 3, m );
WriteMatrix( 3, m );
如果可能存在不是方阵的矩阵,则需要在函数中再添加一个参数。例如
void ReadMatrix( size_t m, size_t n, float m[][n] );
void WriteMatrix( size_t m, size_t n, float m[][n] );
这是一个示范程序
#include <stdio.h>
void ReadMatrix( size_t n, float m[][n] )
{
for ( size_t i = 0; i < n; i++ )
{
for ( size_t j = 0; j < n; j++ )
{
scanf( "%f", &m[i][j] );
}
}
}
void WriteMatrix( size_t n, float m[][n] )
{
for ( size_t i = 0; i < n; i++ )
{
for ( size_t j = 0; j < n; j++ )
{
printf( "%f ", m[i][j] );
}
puts( "" );
}
}
int main(void)
{
float m[3][3];
ReadMatrix( 3, m );
WriteMatrix( 3, m );
return 0;
}