二维数组实验题:按如下公式递归计算矩阵行列式的值:(C语言)

简介: 二维数组实验题:按如下公式递归计算矩阵行列式的值:(C语言)

二维数组实验题:按如下公式递归计算矩阵行列式的值:


20201217223623592.png


提示信息:“Please enter matrix size n(1<=n<20):” “Please input matrix line

by line:\n” “matrix a:\n”

**输出格式要求:“Submatrix:\n” “DValue of the Submatrix is %6.1f\n” “%6.1f\t” “result = %f\n”


程序运行结果如下:


Please enter matrix size n(1<=n<20):3


Please input matrix line by line:


1 2 3


4 5 7


8 9 11


matrix a:


1.0 2.0 3.0


4.0 5.0 7.0


8.0 9.0 11.0


(注意:此处有一个空行)


Submatrix:


5.0 7.0


9.0 11.0


DValue of the Submatrix is -8.0


Submatrix:


4.0 7.0


8.0 11.0


DValue of the Submatrix is -12.0


Submatrix:


4.0 5.0


8.0 9.0


DValue of the Submatrix is -4.0


result = 4.000000


下面是代码:


#include <math.h>
#include <stdio.h>
#define  CONST 1e-6
#define  SIZE 20
void InputMatrix (double a[][SIZE], int n);
double DeterminantValue(double a[][SIZE], int n);
void SubMatrix(double a[][SIZE], double b[][SIZE], int n, int row, int col);
void PrintMatrix(double a[][SIZE], int n);
int main(void)
{                        
    double  a[SIZE][SIZE];
    int     n;
    double  result;
    printf("Please enter matrix size n(1<=n<%d):", SIZE);
    scanf("%d", &n);
    printf("Please input matrix line by line:\n");
    InputMatrix(a, n);
    printf("matrix a:\n");
    PrintMatrix(a, n);
    printf("\n");
    result = DeterminantValue(a, n);
    printf("result = %f\n", result);
    return 0;
}                        
//  函数功能: 输入一个n×n矩阵的元素
void InputMatrix (double a[][SIZE], int n)
{                        
    int i, j;
    for (i = 0; i < n; i++)
    {                        
        for (j = 0; j < n; j++)
        {                        
            scanf("%lf", &a[i][j]);
        }
    }
}                        
//  函数功能: 计算n×n矩阵的行列式的值
double DeterminantValue(double a[][SIZE], int n)
{                        
    int    i = 0, j = 0;
    double temp, result, b[SIZE][SIZE];
    if (n == 1)
    {                        
        result = a[0][0];
    }
    else if (n == 2)
    {                        
        result = a[0][0] * a[1][1] - a[0][1] * a[1][0];
    }
    else
    {                        
        result = 0.0;
        for (j = 0; j < n; j++)
        {                        
            SubMatrix(a, b, n, i, j);
            printf("Submatrix:\n");
            PrintMatrix(b, n - 1);
            temp = DeterminantValue(b, n - 1);
            result += pow(-1, i + j) * a[0][j] * temp;
            printf("DValue of the Submatrix is %6.1f\n", temp);
        }
    }
    return result;
}                        
//  函数功能: 计算n×n矩阵a中第row行col列元素的(n-1)×(n-1)子矩阵b
void SubMatrix(double a[][SIZE], double b[][SIZE], int n, int row,
               int col)
{                        
    int i, j, ii = 0, jj = 0;
    for (i = 0; i < n; i++)
    {                        
        jj = 0;
        for (j = 0; j < n; j++)
        {                        
            if (i != row && j != col)
            {                        
                b[ii][jj] = a[i][j];
                jj++;
            }
        }
        if (i != row && j != col)
        {                        
            ii++;
        }
    }
}                        
//  函数功能: 输出一个n×n矩阵的元素
void PrintMatrix(double a[][SIZE], int n)
{                        
    int i, j;
    for (i = 0; i < n; i++)
    {                        
        for (j = 0; j < n; j++)
        {                        
            printf("%6.1f\t", a[i][j]);
        }
        printf("\n");
    }
}                       
相关文章
|
4月前
|
机器学习/深度学习 C语言
九/十:《初学C语言》— 扫雷游戏实现和函数递归基础
【8月更文挑战第5天】本篇文章用C语言采用多文件编写实现了一个基础的扫雷游戏(附源码),并讲解了关于函数递归的基础概念及其相对应的习题练习(附源码)
46 1
九/十:《初学C语言》— 扫雷游戏实现和函数递归基础
|
1月前
|
存储 人工智能 算法
数据结构实验之C 语言的函数数组指针结构体知识
本实验旨在复习C语言中的函数、数组、指针、结构体与共用体等核心概念,并通过具体编程任务加深理解。任务包括输出100以内所有素数、逆序排列一维数组、查找二维数组中的鞍点、利用指针输出二维数组元素,以及使用结构体和共用体处理教师与学生信息。每个任务不仅强化了基本语法的应用,还涉及到了算法逻辑的设计与优化。实验结果显示,学生能够有效掌握并运用这些知识完成指定任务。
51 4
|
2月前
|
机器学习/深度学习 C语言
【c语言】一篇文章搞懂函数递归
本文详细介绍了函数递归的概念、思想及其限制条件,并通过求阶乘、打印整数每一位和求斐波那契数等实例,展示了递归的应用。递归的核心在于将大问题分解为小问题,但需注意递归可能导致效率低下和栈溢出的问题。文章最后总结了递归的优缺点,提醒读者在实际编程中合理使用递归。
69 7
|
2月前
|
C语言
c语言回顾-函数递归(上)
c语言回顾-函数递归(上)
41 2
|
2月前
|
C语言
大学生期末C语言实验(学生成绩和鞍点)
大学生期末C语言实验(学生成绩和鞍点)
249 0
大学生期末C语言实验(学生成绩和鞍点)
|
2月前
|
存储 编译器 C语言
【C语言】数组(一维、二维数组的简单介绍)
【C语言】数组(一维、二维数组的简单介绍)
|
2月前
|
C语言
c语言回顾-函数递归(下)
c语言回顾-函数递归(下)
42 0
|
3月前
|
存储 人工智能 C语言
数据结构基础详解(C语言): 栈的括号匹配(实战)与栈的表达式求值&&特殊矩阵的压缩存储
本文首先介绍了栈的应用之一——括号匹配,利用栈的特性实现左右括号的匹配检测。接着详细描述了南京理工大学的一道编程题,要求判断输入字符串中的括号是否正确匹配,并给出了完整的代码示例。此外,还探讨了栈在表达式求值中的应用,包括中缀、后缀和前缀表达式的转换与计算方法。最后,文章介绍了矩阵的压缩存储技术,涵盖对称矩阵、三角矩阵及稀疏矩阵的不同压缩存储策略,提高存储效率。
479 8
|
3月前
|
存储 人工智能 C语言
C语言程序设计核心详解 第八章 指针超详细讲解_指针变量_二维数组指针_指向字符串指针
本文详细讲解了C语言中的指针,包括指针变量的定义与引用、指向数组及字符串的指针变量等。首先介绍了指针变量的基本概念和定义格式,随后通过多个示例展示了如何使用指针变量来操作普通变量、数组和字符串。文章还深入探讨了指向函数的指针变量以及指针数组的概念,并解释了空指针的意义和使用场景。通过丰富的代码示例和图形化展示,帮助读者更好地理解和掌握C语言中的指针知识。
132 4
|
3月前
|
存储 人工智能 C语言
C语言程序设计核心详解 第六章 数组_一维数组_二维数组_字符数组详解
本章介绍了C语言中的数组概念及应用。数组是一种存储同一类型数据的线性结构,通过下标访问元素。一维数组定义需指定长度,如`int a[10]`,并遵循命名规则。数组元素初始化可使用 `{}`,多余初值补0,少则随机。二维数组扩展了维度,定义形式为`int a[3][4]`,按行优先顺序存储。字符数组用于存储字符串,初始化时需添加结束符`\0`。此外,介绍了字符串处理函数,如`strcat()`、`strcpy()`、`strcmp()` 和 `strlen()`,用于拼接、复制、比较和计算字符串长度。