使用系统调用以类似矩阵的样式打印结果
print results in a matrix-like style with system calls
我需要仅使用系统调用打印出矩阵乘法的结果。我得到了正确的结果,但格式不正确。我得到 1000x1000 行,但我需要 1000 列 x 1000 行。知道怎么做吗?
这是我写的代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#define N 1000
// Matrix
long long int A[N][N],B[N][N],R[N][N];
int main(int argc, char *argv[])
{
int x,y,z;
char str[100];
/* Matrix inicialization */
for(y=0;y<N;y++)
for(x=0;x<N;x++)
{
A[y][x]=x;
B[y][x]=y;
R[y][x]=0;
}
/* Matrix multiplication */
for(y=0;y<N;y++)
for(z=0;z<N;z++)
for(x=0;x<N;x++)
{
R[y][x]+= A[y][z] * B[z][x];
}
/* Printing result */
for(y=0;y<N;y++)
for(x=0;x<N;x++)
{
sprintf(str, "%lli\n", R[y][x]);
write(1, str, strlen(str));
}
exit(0);
}
提前致谢!
将sprintf()
改为用空格分隔数字,并在矩阵的每一行末尾输出一个换行符:
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#define N 1000
// Matrix
long long int A[N][N], B[N][N], R[N][N];
int main(void)
{
int x, y, z;
char str[100];
/* Matrix inicialization */
for (y = 0; y < N; y++)
{
for (x = 0; x < N; x++)
{
A[y][x] = x;
B[y][x] = y;
R[y][x] = 0;
}
}
/* Matrix multiplication */
for (y = 0; y < N; y++)
{
for (z = 0; z < N; z++)
{
for (x = 0; x < N; x++)
{
R[y][x] += A[y][z] * B[z][x];
}
}
}
/* Printing result */
for (y = 0; y < N; y++)
{
const char *pad = "";
for (x = 0; x < N; x++)
{
sprintf(str, "%s%lli", pad, R[y][x]);
write(1, str, strlen(str));
pad = " ";
}
write(1, "\n", 1);
}
return(0);
}
我对矩阵乘法算法是否正确持保留意见;我为每个单元格打印了相同的值 (332833500
)。
我需要仅使用系统调用打印出矩阵乘法的结果。我得到了正确的结果,但格式不正确。我得到 1000x1000 行,但我需要 1000 列 x 1000 行。知道怎么做吗?
这是我写的代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#define N 1000
// Matrix
long long int A[N][N],B[N][N],R[N][N];
int main(int argc, char *argv[])
{
int x,y,z;
char str[100];
/* Matrix inicialization */
for(y=0;y<N;y++)
for(x=0;x<N;x++)
{
A[y][x]=x;
B[y][x]=y;
R[y][x]=0;
}
/* Matrix multiplication */
for(y=0;y<N;y++)
for(z=0;z<N;z++)
for(x=0;x<N;x++)
{
R[y][x]+= A[y][z] * B[z][x];
}
/* Printing result */
for(y=0;y<N;y++)
for(x=0;x<N;x++)
{
sprintf(str, "%lli\n", R[y][x]);
write(1, str, strlen(str));
}
exit(0);
}
提前致谢!
将sprintf()
改为用空格分隔数字,并在矩阵的每一行末尾输出一个换行符:
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#define N 1000
// Matrix
long long int A[N][N], B[N][N], R[N][N];
int main(void)
{
int x, y, z;
char str[100];
/* Matrix inicialization */
for (y = 0; y < N; y++)
{
for (x = 0; x < N; x++)
{
A[y][x] = x;
B[y][x] = y;
R[y][x] = 0;
}
}
/* Matrix multiplication */
for (y = 0; y < N; y++)
{
for (z = 0; z < N; z++)
{
for (x = 0; x < N; x++)
{
R[y][x] += A[y][z] * B[z][x];
}
}
}
/* Printing result */
for (y = 0; y < N; y++)
{
const char *pad = "";
for (x = 0; x < N; x++)
{
sprintf(str, "%s%lli", pad, R[y][x]);
write(1, str, strlen(str));
pad = " ";
}
write(1, "\n", 1);
}
return(0);
}
我对矩阵乘法算法是否正确持保留意见;我为每个单元格打印了相同的值 (332833500
)。