gpt4 book ai didi

c - 读取和显示矩阵

转载 作者:太空宇宙 更新时间:2023-11-04 08:42:01 25 4
gpt4 key购买 nike

我在这个问题上遇到了一个小问题,我真的可以用另一双眼睛来解决这个问题。我基本上是在尝试读取我输入的矩阵,然后显示该矩阵。

程序总是返回一个空矩阵(所有位置上都为 0)。矩阵的大小(列/行)很好。我做错了什么?

#include <stdio.h>
#include <stdlib.h>

#define MAXN 10

void display_matrix(int n, int m, double a[MAXN][MAXN], char ch)
{
int i, j;

printf("\n MATRIX %c\n", ch);
for(i = 0; i < n; i++)
{
for(j = 0; j < m; j++) printf("%8.2lf ",a[i][j]);
printf("\n");
}
}

void read_matrix(int *n, int *m, double a[MAXN][MAXN])
{
int i,j;
printf("\nInput of size and elements of a matrix\n");
printf("\n\tNumber of rows, n=");
scanf("%d", n);
printf("\n\tNumber of columns, m=");
scanf("%d", m);
printf("\n\tThe elements of the matrix\n");
for (i = 0; i < *n; i++)
{
for(j = 0; j < *m; j++)
{
printf("a[%d,%d]=", i, j);
scanf("%lf",&a[i][j]);
}
}
printf("\n");
}

void main()
{
int n, m;
double a[MAXN][MAXN];
read_matrix(&n, &m, a);
display_matrix(n, m, a, 'X');
return 0;
}

最佳答案

您的代码看起来基本没问题(main() 的返回类型应该是 int,并且您应该始终检查 scanf()< 的返回值),可能除了以下行:

printf("%8.2lf ",a[i][j]);

在 C99 标准之前,l 修饰符未与 f 转换说明符一起定义。将两者结合使用会导致未定义的行为。我不知道可能性有多大,但你有一个 C99 之前的 C 库,它要么行为不端,要么实现了 %lf 以匹配完全不同的东西,也许是 long double

要打印 double 值,您应该使用 %f 转换说明符:

printf("%8.2f ",a[i][j]);

不过,这只是救命稻草。它可能不会为您带来任何改变。

背景

scanf() 函数对 float (%f) 和 double (%lf), 因为它需要知道相应的指针参数指向的确切类型。

但是,当您将 float 传递给可变参数函数(例如 printf())时,默认参数提升 会将 floatdouble。因此,printf() 函数不需要 float 的转换说明符,因为无法将 float 传递给它。 C99 标准添加了 l 修饰符只是为了与 scanf() 函数对称。

引用资料

关于c - 读取和显示矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23174411/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com