鱼C论坛

 找回密码
 立即注册
查看: 1763|回复: 3

数据类型

[复制链接]
发表于 2020-5-1 13:23:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
#define N 2


int main()
{
        void getAStart(double arcs[N][N], int n, double ans[N][N]);
        int getA(double arcs[N][N], int n);

        double arcs[N][N];
        double astar[N][N];
        int i, j;
        int n;

        scanf_s("%d", &n);
        for (i = 0; i < n; i++)
        {
                for (j = 0; j < n; j++)
                {
                        scanf_s("%lf", &arcs[i][j]);
                }
        }

        int a = getA(arcs, n);
        if (a == 0)
        {
                printf("can not transform!\n");
        }
        else
        {
                getAStart(arcs, n, astar);
                for (i = 0; i < n; i++)
                {
                        for (j = 0; j < n; j++)
                        {
                                printf("%.3lf ", (double)astar[i][j] / a);
                        }
                        printf("\n");
                }
        }
        printf("\n");




        return 0;
}


//

void getAStart(double arcs[N][N], int n, double ans[N][N])//计算每一行每一列的每个元素所对应的余子式,组成A*
{
        int getA(double arcs[N][N], int n);
        if (n == 1)
        {
                ans[0][0] = 1;
                return;
        }
        int i, j, k, t;
        double temp[N][N];
        for (i = 0; i < n; i++)
        {
                for (j = 0; j < n; j++)
                {
                        for (k = 0; k < n - 1; k++)
                        {
                                for (t = 0; t < n - 1; t++)
                                {
                                        temp[k][t] = arcs[k >= i ? k + 1 : k][t >= j ? t + 1 : t];
                                }
                        }


                        ans[j][i] = getA(temp, n - 1);
                        if ((i + j) % 2 == 1)
                        {
                                ans[j][i] = -ans[j][i];
                        }
                }
        }
}

//

int getA(double arcs[N][N], int n)//按第一行展开计算|A|
{
        if (n == 1)
        {
                return (double)arcs[0][0];
        }
        double ans = 0;
        double temp[N][N];
        int i, j, k;
        for (i = 0; i < n; i++)
        {
                for (j = 0; j < n - 1; j++)
                {
                        for (k = 0; k < n - 1; k++)
                        {
                                temp[j][k] = arcs[j + 1][(k >= i) ? k + 1 : k];

                        }
                }
                double t = getA(temp, n - 1);
                if (i % 2 == 0)
                {
                        ans = ans + arcs[0][i] * t;                     (1)
                }
                else
                {
                        ans = ans - arcs[0][i] * t;                       (2)
                }
        }
        return (double)ans;
}

矩阵求逆,但是数据类型总是出现说数据丢失,我已将int型改为double型,但还是出现数据丢失,不知怎么回事,(1),(2)处出现问题。
还有一个问题老是说程序是垃圾文件,怎么解决








想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-5-1 14:14:16 | 显示全部楼层
上面的n可以输入2,再输入二阶矩阵(如1.25   -0.75   -0.75    1.25)
现在的问题是输入整数可以,输入小数就数据丢失了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-1 14:20:11 | 显示全部楼层
就是说我想把数据全部改为double型
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-1 14:41:11 | 显示全部楼层
问题已解决
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-14 18:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表