使用指针和数组来解决线性系统

时间:2013-11-19 06:44:28

标签: c++ arrays pointers

我被分配了一个问题,要求我们使用数组和指向该数组的指针来解决2方程式系统。它是一种线性代数方式,x_1 =(DE-BF)/(AD-BC)和x_2 =(AF-CE)/(AD-BC)。系统是Ax_1 + Bx_2 = C和Dx_1 + Ex_2 = F.我的代码编译正常但是吐出垃圾。谁能帮我?我确定这是我的指针错误但我不知道如何纠正它。非常感谢提前。

#include "stdafx.h"
#include <iostream>

using namespace std;

int main(){
    double A,B,C,D,E,F;
    cout << "Please enter a value for A: " << endl;
    cin >> A;
    cout << "Please enter a value for B: " << endl;
    cin >> B;
    cout << "Please enter a value for C: " << endl;
    cin >> C;
    cout << "Please enter a value for D: " << endl;
    cin >> D;
    cout << "Please enter a value for E: " << endl;
    cin >> E;
    cout << "Please enter a value for F: " << endl;
    cin >> F;
    double paramarray[6] = {A,B,C,D,E,F};
    double* p;
    p = &paramarray[6];
    double x1 = (p[3]*p[4] - p[1]*p[5])/(p[0]*p[3] - p[1]*p[2]);
    double x2 = (p[0]*p[5] - p[2]*p[4])/(p[0]*p[3] - p[1]*p[2]);
    cout << "X_1 = " << x1 << endl;
    cout << "X_2 = " << x2 << endl;
    int f;
    cin >> f;
    return 0;
}    

2 个答案:

答案 0 :(得分:0)

p = &paramarray[6];

这就是问题所在。这意味着您将paramarray [6]的地址分配给p。 paramarray [6]没有定义,你试图访问越界数组。

尝试将其更改为

p = paramarray;

此外,如果您首先检查零分母并相应地更新您的等式,那将会更好。

答案 1 :(得分:0)

您的指针应该使用数组的基数进行初始化,该数组是第一个元素的地址。在你的程序中,你将它初始化为一个超出界限的地址,这是一个索引6,其中数组的最后一个索引是5本身。 大小为6的数组表示第一个索引为0,最后一个索引为5.

所以改变你的行:

p = &paramarray[6];

p = paramarray; //or p=&paramarray[0].Both are same here

上面这一行将把第一个元素的地址存储在指针p中。