浮点指针错误

来源:百度知道 编辑:UC知道 时间:2024/05/21 17:27:19
以下以高斯消元法程序,主要辅以动态数组:

#include<stdio.h>
#include<math.h>

void equations_read(int n,double **a,double *b)
{
int i,j;
double len;
a=(double **)malloc(n*sizeof(double *));
for(i=0;i<n;i++) a[i]=(double *)malloc(n*sizeof(len));
b=(double *)malloc(n*sizeof(len));
printf("please input matrix A:\n");
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%f",&a[i][j]);
printf("please input matrix B:\n");
for(i=0;i<n;i++)
scanf("%f",&b[i]);
}

int guass_elimination(int n,double **a,double *b,double *x,double esp)
{
int i,j,k;
double *l,len,s;
l=(double *)malloc(n*sizeof(len));
x=(double *)malloc(n*sizeof(len));
for(k=0;k<n-1;k++)
{
if(abs(a[k][k])<esp)
{
printf("

你出错的重要原因是,因为你在子函数中初始化矩阵A和B,又在另一个子函数中使用这个数,由于你传递给guass_elimination的矩阵指针都是以形参的方式传送,所以你用malloc赋给a的指针值没有传递给主函数中的矩阵,那么你在主函数中再调用guass_elimination时,穿过去的仍然是没有初始化的矩阵。
我把程序简单修改一下,注意注释和main函数
#include "stdafx.h"
#include<stdio.h>
#include<math.h>
#include <stdlib.h>

void equations_read(int n,double **a,double *b)
{
int i,j;
printf("please input matrix A:\n");
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%f",&a[i][j]);
printf("please input matrix B:\n");
for(i=0;i<n;i++)
scanf("%f",&b[i]);
}

int guass_elimination(int n,double **a,double *b,double *x,double esp)
{
int i,j,k;
double *l,len,s;
l=(double *)malloc(n*sizeof(len));
for(k=0;k<n-1;k++)
{
if(abs(a[k][k])<esp)
{
printf("|a[%d][%d]|<esp ,the algorithm failed:(&q