打印Matrix C ++的值

时间:2017-01-31 23:35:57

标签: c++ matrix

我编写了这个由两个文件组成的代码:main.cpp和matrice.cpp。

我的问题是:矩阵不会写出我指示的值。我希望你在主对角线上写1:A [i] [i] = 1;但结果却不同。

错误是什么? 当我打印出矩阵的值时,为什么会出现6.86636e-44?

main.cpp中:

#include <iostream>
#include <stdio.h>
#include "matrice.h"
#include "stampaMatrice.h"


using namespace std;
#define N 10
#define Inizio 0.00
#define Fine 1.00

float dy=(Fine-Inizio)/N;

int main()
{
    float ** A = matrice(dy, N);
    stampaMatrice(&A[0][0],N,N);

    //Clean up array
    for (int i = 0; i < N; i++)
          { delete [] A[i]; }
    delete [] A;
    A = 0;

    return 0;
}

matrice.cpp:

#include <stdlib.h>
#include <stdio.h>
#include <iostream>
using namespace std;

float** matrice(float dy, int N){

float** A=0;
A=  new float*[N];
for(int i=0; i<N; i++){
A[i]=new float[N];
}

//Assegnazione valori
for(int i=0; i<N; i++){
//A[i][i+1]=1;
//A[i][i-1]=1/dy;
A[i][i]=1;

}


return A;
}

结果:

Result

3 个答案:

答案 0 :(得分:3)

您误读了结果。主对角线上的所有值都是1,就像设置它们一样。仔细看。

您没有将主对角线的值设置为任何特定值。因此,您没有理由期望任何特定的价值观。你会得到任何垃圾。

答案 1 :(得分:2)

您必须将非对角线元素设置为零。如果您没有明确说明,C ++ 不会执行零初始化。

BTW,float** A=0; 不会将矩阵的元素设置为零。你碰巧得到了很多零,因为这可能是那些内存地址的谎言。

答案 2 :(得分:0)

&#34;定影&#34;这很简单:只需更改

A[i]=new float[N];

A[i]=new float[N]();

现在,您只需要20行代码即可拥有C ++的所有怪癖。