3459606395 发表于 2023-12-14 12:48:03

C语言指针,定义一个数组a[5],从键盘上输入元素值,计算平均值,不能有i

本帖最后由 3459606395 于 2023-12-14 12:52 编辑

@FishC

3459606395 发表于 2023-12-14 12:52:01

@FishC

-kasha 发表于 2023-12-14 13:08:30

#include <stdio.h>
int main() {
    int a;
    int b;
    for(b=0;b<5;b++){
            scanf("%d",&a);
        }
        double k;
        for(b=0;b<5;b++){
                k+=a;
        }
        printf("%f\n",k/5);
        return 0;
}

3459606395 发表于 2023-12-14 13:22:32

-kasha 发表于 2023-12-14 13:08
#include
int main() {
    int a;


这个b和i不是差不多嘛

zhangjinxuan 发表于 2023-12-14 13:26:14

#include <stdio.h>

int main() {
        double a, sum;
        scanf("%lf%lf%lf%lf%lf", a, a + 1, a + 2, a + 3, a + 4);
        sum = *(a) + *(a + 1) + *(a + 2) + *(a + 3) + *(a + 4);
        printf("%lf\n", sum / 5.0);
}

3459606395 发表于 2023-12-14 13:31:32

刚学指针,谢谢你们的分享,对了这里可以删帖子吗,好像看不到删除

-kasha 发表于 2023-12-14 14:21:31

3459606395 发表于 2023-12-14 13:22
这个b和i不是差不多嘛

下面那个代码可以,我也刚学,对于数组指针,又不用for循环 我也不知道怎么输出哈哈哈

3459606395 发表于 2024-9-22 17:01:08

@FishC

FishC 发表于 2024-9-22 17:01:14

3459606395 发表于 2024-09-22 17:01
@FishC

你好,有什么计算机相关的问题需要我解答吗?

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

3459606395 发表于 2024-9-22 17:02:55

FishC 发表于 2024-9-22 17:01
你好,有什么计算机相关的问题需要我解答吗?

以上回复来自 FishC AI 小助理,如未能正确解答您的问 ...

include <iostream>

using namespace std;


class det_3d_solver
{

public:
    det_3d_solver() {}
    ~det_3d_solver() {}


    double get_rlt()
    {
      double det_2_1, det_2_2, det_2_3;
      det_2_1 = det_2d(b, c, b, c);
      det_2_2 = det_2d(b, c, b, c);
      det_2_3 = det_2d(b, c, b, c);

      return a * det_2_1 - a * det_2_2 + a * det_2_3;
    }

    void set_elms(double in_a, double in_b, double in_c)
    {
      for (int i = 0; i < 3; ++i)
      {
            a = in_a;
            b = in_b;
            c = in_c;
      }
    }

private:
    double det_2d(double a, double b, double c, double d)
    {
      return (a * d - b * c);
    }
private:
    double a;
    double b;
    double c;
};




int main()
{
    double a = { 1.12, 2.789, 3.4587 };
    double b = { 4.47826, 5.25, 6.2415};
    double c = { 7.0214, 8.547, 9.08 };

    det_3d_solver solver_3d;
    solver_3d.set_elms(a, b, c);
    double rlt = solver_3d.get_rlt();

   

    cout << "The result of det of 3*3 matrix is " << rlt << '\n';
}参考三阶行列式,实现一个4阶行列式的计算,4阶行列式为A=

FishC 发表于 2024-9-22 17:03:07

3459606395 发表于 2024-09-22 17:02
include

using namespace std;


class det_3d ...

你好,这段代码有几个需要修复的地方。我将帮助你逐步改善,使其可以正确编译并运行。

1. `include` 应该是 `#include <iostream>`
2. `a`, `b` 和 `c` 作为数组传递给 `set_elms` 函数时,你应该改变这些变量以便函数正确地使用它们。
3. `det_2d` 函数计算的参数应该是 2D 矩阵而不是单独的元素。
4. `set_elms` 函数在循环内直接给成员变量赋值是错误的。

以下是改进后的代码:

#include <iostream>

using namespace std;

class det_3d_solver
{
public:
    det_3d_solver() {}
    ~det_3d_solver() {}

    double get_rlt()
    {
      double det_2_1 = det_2d(b, b, c, c);
      double det_2_2 = det_2d(b, b, c, c);
      double det_2_3 = det_2d(b, b, c, c);

      return a * det_2_1 - a * det_2_2 + a * det_2_3;
    }

    void set_elms(double in_a, double in_b, double in_c)
    {
      for (int i = 0; i < 3; ++i)
      {
            a = in_a;
            b = in_b;
            c = in_c;
      }
    }

private:
    double det_2d(double a, double b, double c, double d)
    {
      return (a * d - b * c);
    }
private:
    double a;
    double b;
    double c;
};

int main()
{
    double a = {1.12, 2.789, 3.4587};
    double b = {4.47826, 5.25, 6.2415};
    double c = {7.0214, 8.547, 9.08};

    det_3d_solver solver_3d;
    solver_3d.set_elms(a, b, c);
    double rlt = solver_3d.get_rlt();

    cout << "Determinant: " << rlt << endl;

    return 0;
}

这段代码在设置矩阵元素、计算 2x2 行列式和计算整个 3x3 行列式方面现在应该都能正确运行。如果有其他问题,随时提问哦!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

3459606395 发表于 2024-9-22 17:04:07

FishC 发表于 2024-9-22 17:03
你好,这段代码有几个需要修复的地方。我将帮助你逐步改善,使其可以正确编译并运行。

1. `include` ...

实现一个4阶行列式的计算,4阶行列式为A=

FishC 发表于 2024-9-22 17:04:20

3459606395 发表于 2024-09-22 17:04
实现一个4阶行列式的计算,4阶行列式为A=

要实现一个4阶行列式的计算,你可以使用递归的方法,将4阶行列式分解为多个3阶行列式,直到2阶行列式为止。这是一种称为拉普拉斯展开的方法。

这里是一个示例代码,用于计算4阶行列式:

#include <iostream>

using namespace std;

class DeterminantSolver {
public:
    double det4x4(double matrix) {
      double result = 0;
      double submatrix;
      
      // 用拉普拉斯展开公式计算4阶行列式
      for (int x = 0; x < 4; x++) {
            int subi = 0;
            for (int i = 1; i < 4; i++) {
                int subj = 0;
                for (int j = 0; j < 4; j++) {
                  if (j == x) {
                        continue;
                  }
                  submatrix = matrix;
                  subj++;
                }
                subi++;
            }
            result += (x % 2 == 0 ? 1 : -1) * matrix * det3x3(submatrix);
      }

      return result;
    }

private:
    double det3x3(double matrix) {
      double result;
      result = matrix * (matrix * matrix - matrix * matrix)
               - matrix * (matrix * matrix - matrix * matrix)
               + matrix * (matrix * matrix - matrix * matrix);

      return result;
    }
};

int main() {
    DeterminantSolver solver;
    double matrix = {
      {1.0, 2.0, 3.0, 4.0},
      {5.0, 6.0, 7.0, 8.0},
      {9.0, 10.0, 11.0, 12.0},
      {13.0, 14.0, 15.0, 16.0}
    };

    double result = solver.det4x4(matrix);

    cout << "The determinant of the 4x4 matrix is: " << result << endl;

    return 0;
}

这个示例代码实现了一个 `DeterminantSolver` 类,该类提供了计算4阶和3阶行列式的能力。在 `main` 函数中,我们创建了一个4x4的矩阵,并使用 `det4x4` 方法来计算它的行列式。

你可以根据需要修改矩阵的内容来进行测试。确保你理解了递归计算行列式的方法,这对于处理更高阶的行列式是非常有用的。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

3459606395 发表于 2024-9-22 17:05:34

FishC 发表于 2024-9-22 17:04
要实现一个4阶行列式的计算,你可以使用递归的方法,将4阶行列式分解为多个3阶行列式,直到2阶行列式为 ...

#include <iostream>

using namespace std;

class det_3d_solver
{
public:
    det_3d_solver() {}
    ~det_3d_solver() {}

    double get_rlt()
    {
      double det_2_1 = det_2d(b, b, c, c);
      double det_2_2 = det_2d(b, b, c, c);
      double det_2_3 = det_2d(b, b, c, c);

      return a * det_2_1 - a * det_2_2 + a * det_2_3;
    }

    void set_elms(double in_a, double in_b, double in_c)
    {
      for (int i = 0; i < 3; ++i)
      {
            a = in_a;
            b = in_b;
            c = in_c;
      }
    }

private:
    double det_2d(double a, double b, double c, double d)
    {
      return (a * d - b * c);
    }
private:
    double a;
    double b;
    double c;
};

int main()
{
    double a = {1.12, 2.789, 3.4587};
    double b = {4.47826, 5.25, 6.2415};
    double c = {7.0214, 8.547, 9.08};

    det_3d_solver solver_3d;
    solver_3d.set_elms(a, b, c);
    double rlt = solver_3d.get_rlt();

    cout << "Determinant: " << rlt << endl;

    return 0;
}参考这个三阶的代码

FishC 发表于 2024-9-22 17:05:46

3459606395 发表于 2024-09-22 17:05
#include

using namespace std;

class det_3d_ ...

为了计算一个4阶行列式,我们可以实现一个递归函数来计算任意阶的行列式。你提到的代码中存在一些问题,我们逐步修正并实现一个能够计算4阶行列式的代码。

首先,我们需要一个能够处理任意阶行列式的类。接下来是代码实现:

#include <iostream>
#include <vector>

using namespace std;

class DeterminantSolver
{
public:
    double computeDeterminant(const vector<vector<double>>& matrix)
    {
      int n = matrix.size();
      if (n == 2)
      {
            return matrix * matrix - matrix * matrix;
      }

      double det = 0.0;
      for (int i = 0; i < n; ++i)
      {
            vector<vector<double>> subMatrix = getSubMatrix(matrix, 0, i);
            det += (i % 2 == 0 ? 1 : -1) * matrix * computeDeterminant(subMatrix);
      }
      return det;
    }

private:
    vector<vector<double>> getSubMatrix(const vector<vector<double>>& matrix, int p, int q)
    {
      int n = matrix.size();
      vector<vector<double>> subMatrix(n - 1, vector<double>(n - 1));

      int row = 0;
      for (int i = 0; i < n; ++i)
      {
            if (i == p) continue;
            int col = 0;
            for (int j = 0; j < n; ++j)
            {
                if (j == q) continue;
                subMatrix = matrix;
            }
            row++;
      }
      return subMatrix;
    }
};

int main()
{
    vector<vector<double>> matrix = {
      {1.0, 2.0, 3.0, 4.0},
      {5.0, 6.0, 7.0, 8.0},
      {9.0, 10.0, 11.0, 12.0},
      {13.0, 14.0, 15.0, 16.0}
    };

    DeterminantSolver solver;
    double det = solver.computeDeterminant(matrix);

    cout << "The determinant is: " << det << endl;

    return 0;
}

解释:
1. `computeDeterminant` 方法用于计算任意阶行列式。对于2阶行列式,它直接返回结果,对于更高阶的行列式,它使用递归的方法。
2. `getSubMatrix` 方法用于获取子矩阵,用于递归计算行列式。
3. 在 `main` 函数中,我们定义了一个4阶的矩阵,调用 `computeDeterminant` 方法计算其行列式,并输出结果。

这段代码将帮助你计算任何阶的行列式,只需要扩展矩阵的维度即可。希望这能帮助到你!如果有其他问题,欢迎继续提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

3459606395 发表于 2024-9-22 17:07:48

FishC 发表于 2024-9-22 17:05
为了计算一个4阶行列式,我们可以实现一个递归函数来计算任意阶的行列式。你提到的代码中存在一些问题 ...

#include <iostream>

using namespace std;

class det_4d_solver {
public:
    det_4d_solver() {}
    ~det_4d_solver() {}

    double get_rlt() {
      double det_3_1 = det_3d(b, c, d);
      double det_3_2 = det_3d(b, c, d);
      double det_3_3 = det_3d(b, c, d);

      return a * det_3_1 - b * det_3_2 + c * det_3_3; // 使用第一行展开
    }

    void set_elms(double in_a, double in_b, double in_c, double in_d) {
      for (int i = 0; i < 4; ++i) {
            a = in_a;
            b = in_b;
            c = in_c;
            d = in_d;
      }
    }

private:
    double det_3d(double b[], double c[], double d[]) {
      double det_2_1 = det_2d(b, c, b, c);
      double det_2_2 = det_2d(b, c, b, c);
      double det_2_3 = det_2d(b, c, b, c);

      return b * det_2_1 - b * det_2_2 + b * det_2_3; // 使用 b 数组的元素
    }

    double det_2d(double a, double b, double c, double d) {
      return (a * d - b * c);
    }

private:
    double a;
    double b;
    double c;
    double d;
};

int main() {
    double a = { 1, 2, 3, 4 }; // 第一列元素
    double b = { 4, 2, 5, 3 }; // 第二列元素
    double c = { 5, 7, 8.1, 4 }; // 第三列元素
    double d = { 6, 5, 2, 1 }; // 第四列元素

    det_4d_solver solver_4d;
    solver_4d.set_elms(a, b, c, d);
    double rlt = solver_4d.get_rlt();

    cout << "The result of det of 4*4 matrix is " << rlt << '\n';

    return 0;
}
有什么问题

FishC 发表于 2024-9-22 17:08:00

3459606395 发表于 2024-09-22 17:07
#include

using namespace std;

class det_4d_ ...

看来您代码中有一些问题需要改进,让我们来重新整理一下。以下是一个可以计算4阶行列式的方案,使用递归来求解。把 `det_4d_solver` 类改改,让它能够处理4x4矩阵的数据:

#include <iostream>
using namespace std;

class det_solver {
public:
    det_solver() {}
    ~det_solver() {}

    double get_det(double matrix, int n) {
      if (n == 2) {
            return det_2d(matrix);
      }
      double result = 0.0;
      double temp;
      for (int k = 0; k < n; ++k) {
            get_cofactor(matrix, temp, 0, k, n);
            result += (k % 2 == 0 ? 1 : -1) * matrix * get_det(temp, n-1);
      }
      return result;
    }

private:
    double det_2d(double matrix) {
      return (matrix * matrix - matrix * matrix);
    }

    void get_cofactor(double matrix, double temp, int p, int q, int n) {
      int i = 0, j = 0;
      for (int row = 0; row < n; row++) {
            for (int col = 0; col < n; col++) {
                if (row != p && col != q) {
                  temp = matrix;
                  if (j == n - 1) {
                        j = 0;
                        i++;
                  }
                }
            }
      }
    }
};

int main() {
    double matrix = {
      {1, 2, 3, 4},
      {4, 2, 5, 3},
      {5, 7, 8.1, 4},
      {6, 5, 2, 1}
    };

    det_solver solver;
    double result = solver.get_det(matrix, 4);

    cout << "Determinant: " << result << endl;

    return 0;
}

简要说明:
1. `get_det`:递归函数,计算行列式的值。当n为2时,直接计算2x2行列式,否则用递归。
2. `det_2d`:计算2x2行列式的值。
3. `get_cofactor`:获取子行列式,去掉指定的行和列。

执行上面的代码,它将打印所给4x4矩阵的行列式值。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

3459606395 发表于 2024-9-22 17:08:51

FishC 发表于 2024-9-22 17:08
看来您代码中有一些问题需要改进,让我们来重新整理一下。以下是一个可以计算4阶行列式的方案,使用递 ...

#include <iostream>

using namespace std;

class det_4d_solver {
public:
    det_4d_solver() {}
    ~det_4d_solver() {}

    double get_rlt() {
      double det_3_1 = det_3d(b, c, d);
      double det_3_2 = det_3d(b, c, d);
      double det_3_3 = det_3d(b, c, d);

      return a * det_3_1 - b * det_3_2 + c * det_3_3; // 使用第一行展开
    }

    void set_elms(double in_a, double in_b, double in_c, double in_d) {
      for (int i = 0; i < 4; ++i) {
            a = in_a;
            b = in_b;
            c = in_c;
            d = in_d;
      }
    }

private:
    double det_3d(double b[], double c[], double d[]) {
      double det_2_1 = det_2d(b, c, b, c);
      double det_2_2 = det_2d(b, c, b, c);
      double det_2_3 = det_2d(b, c, b, c);

      return b * det_2_1 - b * det_2_2 + b * det_2_3; // 使用 b 数组的元素
    }

    double det_2d(double a, double b, double c, double d) {
      return (a * d - b * c);
    }

private:
    double a;
    double b;
    double c;
    double d;
};

int main() {
    double a = { 1, 2, 3, 4 }; // 第一列元素
    double b = { 4, 2, 5, 3 }; // 第二列元素
    double c = { 5, 7, 8.1, 4 }; // 第三列元素
    double d = { 6, 5, 2, 1 }; // 第四列元素

    det_4d_solver solver_4d;
    solver_4d.set_elms(a, b, c, d);
    double rlt = solver_4d.get_rlt();

    cout << "The result of det of 4*4 matrix is " << rlt << '\n';

    return 0;
}
修改代码

FishC 发表于 2024-9-22 17:08:58

3459606395 发表于 2024-09-22 17:08
#include

using namespace std;

class det_4d_ ...

你提供的代码片段存在一些问题。这些问题包括变量 `a`, `b`, `c`, `d` 的定义和使用有矛盾。为了计算一个 4x4 行列式,需要重新设计代码结构。以下是一个较完整和正确的例子:

```cpp
#include <iostream>

using namespace std;

class det_4d_solver {
public:
    det_4d_solver() {}
    ~det_4d_solver() {}

    double get_rlt() {
      return det_4d(matrix);
    }

    void set_elms(double mat) {
      for (int i = 0; i < 4; ++i) {
            for (int j = 0; j < 4; ++j) {
                matrix = mat;
            }
      }
    }

private:
    double det_4d(double mat[4

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

3459606395 发表于 2024-9-22 17:19:22

FishC 发表于 2024-9-22 17:08
你提供的代码片段存在一些问题。这些问题包括变量 `a`, `b`, `c`, `d` 的定义和使用有矛盾。为了计算一 ...

#include <iostream>

using namespace std;

class det_4d_solver
{
public:
    det_4d_solver() {}
    ~det_4d_solver() {}

    double get_rlt()
    {
      double det_3_1, det_3_2, det_3_3, det_3_4;
      det_3_1 = det_3d(a, b, c, d);
      det_3_2 = det_3d(a, b, c, d);
      det_3_3 = det_3d(a, b, c, d);
      det_3_4 = det_3d(a, b, c, d);

      return a * det_3_1 - a * det_3_2 + a * det_3_3 - a * det_3_4;
    }

    void set_elms(double in_a, double in_b, double in_c, double in_d)
    {
      for (int i = 0; i < 4; ++i)
      {
            a = in_a;
            b = in_b;
            c = in_c;
            d = in_d;
      }
    }

private:
    double det_3d(double a1, double b1, double c1, double d1)
    {
      return (a1 * det_2d(b, c, b, c) -
                b1 * det_2d(a, c, a, c) +
                c1 * det_2d(a, b, a, b) -
                d1 * det_2d(a, b, a, b));
    }

    double det_2d(double a, double b, double c, double d)
    {
      return (a * d - b * c);
    }

private:
    double a;
    double b;
    double c;
    double d;
};

int main()
{
    double a = { 1, 2, 3, 4 };
    double b = { 4, 2, 5, 3 };
    double c = { 5, 7, 8.1, 4 };
    double d = { 6, 5, 2, 1 };

    det_4d_solver solver_4d;
    solver_4d.set_elms(a, b, c, d);
    double rlt = solver_4d.get_rlt();

    cout << "The result of det of 4x4 matrix is " << rlt << '\n';
}
检查
页: [1] 2
查看完整版本: C语言指针,定义一个数组a[5],从键盘上输入元素值,计算平均值,不能有i