如果你们中的一些人发现我的问题很愚蠢且容易解决,我首先道歉,但我是“c”的初学者。
我的任务是使用不同的函数创建3x3矩阵的逆。
我现在要做的是告诉用户输入3x3矩阵的值,然后打印它们。我创建了两个读取和打印值的函数,但是我调用它们有问题,因为我无法在printf
中直接调用数组。
现在我可以运行程序,输入值并输出错误的结果,从而导致无响应程序。
#include <stdio.h>
#include <stdlib.h>
#define SIZE 3 //defining the size of the matrix (3x3)
//prototyping the functions used to calculate the inverse of the matrix
void readMatrix(double a[SIZE][SIZE]);
void printMatrix(double a[SIZE][SIZE]);
main()
{
double a[SIZE][SIZE];
int i,j;
printf("Enter the values for the matrix:\n", i, j);
readMatrix(a);
printf("Your Matrix:%d\n",a[i][j]);
printMatrix(a);
return 0;
}
//function 1
//letting the user to enter a matrix
void readMatrix(double a[SIZE][SIZE]){
int i,j;
for(i = 0; i < SIZE; i++){
for(j = 0; j < SIZE; j++){
scanf("%d", &a[i][j]);
}
}
}
//function 2
//outputing the given matrix
void printMatrix(double a[SIZE][SIZE]){
int i,j;
for(i = 0; i < SIZE; i++){
for(i = 0; i < SIZE; j++){
printf("Your matrix is: %d", a[i][j]);
}
}
}
答案 0 :(得分:2)
在$(function(){
$(".flash .close").on("click", function(){
$(this).parent().removeClass("active");
})
});
和printf
中,传递与指针类型匹配的确切格式说明符至关重要。如果格式说明符与提供的参数不匹配,则结果为未定义的行为。
实际上,这个
scanf
需要替换为
scanf("%d", &a[i][j]);
同样适用于scanf("%lf", &a[i][j]);
- &gt; printf("Your matrix is: %d", a[i][j]);
此外,在printf("Your matrix is: %lf", a[i][j]);
中,您已在内循环中使用了循环变量printMatrix
两次。你想要的是
i
编辑:正如@cse在评论中指出的那样,请在for(i = 0; i < SIZE; i++){
for(j = 0; j < SIZE; j++){
printf("%lf ", a[i][j]);
printf("\n");
}
中删除此行:
main
由于此时printf("Enter the values for the matrix:\n", i, j);
和i
未初始化,因此它们包含垃圾。
答案 1 :(得分:1)
for(j = 0; j < SIZE; j++){
printf("Your matrix is: %d", a[i][j]);
}
答案 2 :(得分:1)
以上代码存在以下问题:
printf("Your Matrix:%d\n",a[i][j]);
函数的行main()
中,因为变量i
和j
未初始化,因此它包含垃圾值。因此,请勿在{{1}}打印价值,因为它可能导致a[i][j]
。 OR 使用有效值初始化segmentation fault
和i
,即数组j
中的有效索引。 您也可以将double a[][]
中的行printf("Enter the values for the matrix:\n", i, j);
更改为main()
。由于此处未使用printf("Enter the values for the matrix:\n");
和i
。j
的第scanf("%d", &a[i][j]);
行。由于您正在阅读void readMatrix(double a[SIZE][SIZE])
原始数据类型,因此您应使用double
格式化程序而不是%lf
。功能%d
中的行printf("Your matrix is: %d", a[i][j])
也是如此。void printMatrix(double a[SIZE][SIZE])
的第for(i = 0; i < SIZE; j++)
行。它应该是void readMatrix(double a[SIZE][SIZE])
,即内循环中使用的变量应为for(j = 0; j < SIZE; j++)
而不是j
。您可以在更正代码后找到工作代码here 。
答案 3 :(得分:1)
要打印输出:您需要实际打印出整个内容而不是一个接一个的值,对吗?
printf ("matrix is:\n")
char outstr[64]; //arbitrary but plenty big enough
char * pout; //points to a point in the string
for(j = 0; j < SIZE; j++){
pout = outstr;
for(i = 0; i < SIZE; i++){
pout += sprintf (pout, "%lf," a [i][j]);
*(--pout) = 0; //end the string one char earlier (dangling ',')
printf ("[%s]\n", outstr);
}
将打印:
matrix is:
[1,2,3]
[4,5,6]
[7,8,9]
数字当然是数组中的数字。
除非您打算以柱状方式填充矩阵,否则应该在输入函数上切换i
和j
循环。您将矩阵存储在内存转置中。 (此代码假定您不是)