【问题标题】:Jordans elimination float to float argument乔丹消除浮动到浮动的论点
【发布时间】:2015-12-21 13:55:02
【问题描述】:

所以我试图编写有关Jordan's elimination 的代码。当我遇到问题时:

无法将 'float' 转换为 'float ()[100]' 以将参数 '1' 转换为 'int diabase(float ()[100])

这是什么意思?我该如何解决?

#include<stdio.h>
#define N 100

int read(float A[N][N]);
int jordan(float A[N][N],int n);
int print(float A[N][N],int n);

int main()
{
    int i, j, k, n, y;
    float A[N][N+1], c, x[N];
    n = read(A[N][N]);
    jordan(A[N][N]], n);
    print(A[N][N], n);
    return(0);
}

int read(float A[N][N]){
    int n,i,j;
    printf("Enter the size of matrix: ");
    scanf("%d",&n);
    printf("Enter the elements of augmented matrix row-wise:");
    for(i=1; i<=n; i++)
    {
        for(j=1; j<=(n+1); j++)
        {
            printf(" A[%d][%d]:", i,j);
            scanf("%f",&A[i][j]);
        }
    }   
    return n;
}

int print( float A[N][N],int n){
    int i;
    float x[n];
    printf("The solution is:");
    for(i=1; i<=n; i++)
    {
        x[i]=A[i][n+1]/A[i][i];
        printf("n x%d=%fn",i,x[i]);
    }
    return 0;
}

int jordan(float A[N][N],int n){
    int i,j,k;
    float c;
    for(j=1; j<=n; j++)
    {
        for(i=1; i<=n; i++)
        {
            if(i!=j)
            {
                c=A[i][j]/A[j][j];
                for(k=1; k<=n+1; k++)
                {
                    A[i][k]=A[i][k]-c*A[j][k];
                }
            }
        }
    }
    return 0;
}

【问题讨论】:

  • 为了便于阅读,请缩进您的代码
  • n=read(A[N][N]);你给函数一个浮点值,它采用“float A[N][N]”(它是 float*[N] 类型)。试试“n=read(A);”
  • @user3514538 float A[N][N] 不是 float **
  • @Holt 是的,我更正了
  • @user3514538:缺少父级:float (*)[N]

标签: c++ dev-c++


【解决方案1】:

在所有这些函数调用中

n=read(A[N][N]);
jordan(A[N][N]],n);
print(A[N][N],n);

您传递的是数组的元素而不是数组。如果要传递数组,只需使用不带任何索引的数组名称

n=read(A);
jordan(A,n);
print(A,n);

您将遇到另一个问题,因为您的函数需要一个 100 x 100 的二维数组,但是您在 main() 中创建的数组是 100 x 101,这是不匹配的。您要么需要在main() 100 x 100 中制作数组,要么更改您的函数以 100 x 101 的数组

【讨论】:

    【解决方案2】:

    当您执行function (A[N][N]) 时,您会将单个float 值传递给function,所以在这里:

    n = read(A[N][N]);
    jordan(A[N][N], n);
    print(A[N][N], n);
    

    您将单个值传递给readjordanprint。顺便说一句,您正在访问不存在的单元格(A[N] 超出范围,因为Afloat [N][N + 1]

    如果您想将A 传递给您的函数,只需执行以下操作:

    n = read(A);
    jordan(A, n);
    print(A, n);
    

    除此之外,您的代码中还有一些错误:

    1. 您的函数需要 float [N][N],但 Afloat [N][N+1],因此您必须进行一些修改。

    2. 您正在访问从1n/n+1 的单元格,C 数组的单元格从0n-1/n,所以您的循环应该从0n-1/n.

    【讨论】:

      【解决方案3】:

      你的主要应该是

      int main()
      {
          float A[N][N];
          int n = read(A);
          jordan(A, n);
          print(A, n);
          return(0);
      }
      

      【讨论】:

        猜你喜欢
        • 2013-03-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-20
        • 2012-06-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多