pppphhhhyyyy 2023-07-15 23:35 采纳率: 80.6%
浏览 40
已结题

C语言计算行列式中的问题

有没有友友帮忙看一下这个计算行列式的代码哪里有问题,真的写不出了

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <malloc.h>
double det1(int arr[10][10], int n)
{
    int sight = 1; double sum = 0; double s = 0; int p = -1; int arr2[10][10] = { 0 }; /*int* arr2 = (int*)malloc(sizeof(int) * n * n);*/
    if (n == 1)
        return arr[0][0];
    else if (n == 2)
        return arr[0][0] * arr[1][1] - arr[0][1] * arr[1][0];
    else
    {
        int i = 0; int a = 0, b = 0;
        for (i = 0; i < n; i++)
        {
            int k = 0; int l = 0;
            for (l = 1; l < n; l++)
            {
                for (k = 0; k < n; k++)
                {
                    if (k == l)
                        continue;
                    else
                        arr2[a][b] = arr[l][k]; b++;
                }
                a++;
            }
            s += sight * arr[0][i] * det1(arr2, n - 1); sight = -sight;
        }
        sum += s;
    }
    return sum;
}
int main()
{
    int i = 0; int k = 0; int n = 0;int arr[10][10] = { 0 };
    printf("请输入行列式阶数:");
    scanf("%d", &n);
    /*int* arr = (int*)malloc(sizeof(int) * n * n);
    if (arr == NULL)
    {
        printf("NULL");
        return 0;
    }*/
    if (n > 10)
        return 0;
    else
    {
        printf("请输入数据:");
        for (i = 0; i < n; i++)
            for (k = 0; k < n; k++)
            {
                scanf("%d", arr + i * n + k);
            }
        int p = 0;
    }
        double sum = det1(arr, n);
    
    /*free(arr); arr = NULL;*/
    printf("sum=%lf", sum);
    return 0;
}

  • 写回答

2条回答 默认 最新

  • qzjhjxj 2023-07-16 12:17
    关注

    修改如下,改动处见注释,供参考:

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include <malloc.h>
    double det1(int arr[10][10], int n)
    {
        int sight = 1; double sum = 0; double s = 0; int p = -1; int arr2[10][10] = { 0 }; /*int* arr2 = (int*)malloc(sizeof(int) * n * n);*/
        if (n == 1)
            return  arr[0][0];
        else if (n == 2)
            return  arr[0][0] * arr[1][1] - arr[0][1] * arr[1][0];
        else
        {
            int i = 0; int a = 0, b = 0;
            for (i = 0; i < n; i++)
            {
                int k = 0; int l = 0;
                for (l = 1, a = 0; l < n; l++, a++) //for (l = 1; l < n; l++) 修改
                {
                    for (k = 0,b = 0; k < n; k++) // for (k = 0; k < n; k++)  修改
                    {
                        if (k == i) // if (k == l) 修改
                            continue;
                        else
                            arr2[a][b++] = arr[l][k]; //b++;  修改
                    }
                    //a++; 修改
                }
                s += sight * arr[0][i] * det1(arr2, n - 1); sight = -sight;
            }
            //sum += s;  修改
        }
        return s; //return sum; 修改
    }
    int main()
    {
        int i = 0; int k = 0; int n = 0;int arr[10][10] = { 0 };
        printf("请输入行列式阶数:");
        scanf("%d", &n);
        /*int* arr = (int*)malloc(sizeof(int) * n * n);
        if (arr == NULL)
        {
            printf("NULL");
            return 0;
        }*/
        if (n > 10)
            return 0;
        else
        {
            printf("请输入数据:");
            for (i = 0; i < n; i++)
                for (k = 0; k < n; k++)
                {
                    scanf("%d", &arr[i][k]);  // 修改
                    //scanf("%d", arr + i * n + k);
                }
            //int p = 0;  修改
        }
        double sum = det1(arr, n);
        
        /*free(arr); arr = NULL;*/
        printf("sum=%lf", sum);
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 7月25日
  • 已采纳回答 7月17日
  • 创建了问题 7月15日