我需要帮助!我试图编写一个基于控制台的C程序,它解决了几个方程组。
练习:
程序接收一个输入文件(用户输入的输入和输出文件名),包含n,m和一串将填充矩阵的数字。该矩阵是一个扩展矩阵,它有n行和n + m列(其中m是要求解的系统数)。第一个"子矩阵"必须使用带旋转的高斯消除法减少nxn。
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int gauss_pivot (double **a, int n, int m, double tol);
void resol (double **a, int n, int m);
int main(void) {
double **ampliada;
int n, m;
int i, j;
FILE *entrada, *sortida;
char nomE[31], nomS[31];
printf("Noms dels fitxers d'entrada i sortida\n");
scanf("%s %s", nomE, nomS);
entrada = fopen(nomE, "r");
sortida = fopen(nomS, "w");
if (entrada == NULL || sortida == NULL){
if (entrada == NULL){
printf("Error en el fitxer d'entrada\n");
exit(1);
}
else{
printf("Error en el fitxer de sortida\n");
exit(1);
}
}
fscanf(entrada, "%d", &n);
fscanf(entrada, "%d", &m);
ampliada = (double**)malloc(n*sizeof(double*));
if (ampliada == NULL) {
printf("Memòria insuficient\n");
exit(1);
}
for (i=0; i<n; i++){
ampliada[i] = (double*)malloc(m*sizeof(double));
if (ampliada[i] == NULL){
printf("Memòria insuficient\n");
exit(1);
}
}
for (i=0; i<n; i++){
for (j=0; j<=m; j++){
fscanf(entrada, "%le", &liada[i][j]);
}
}
gauss_pivot(ampliada, n, m, 10^(-16));
resol(ampliada, n, m);
return 0;
}
int gauss_pivot (double **a, int n, int m, double tol){
float q;
double pivot, aux;
int r;
for (int j = 0; j < n; j++){
pivot = 0;
for (r = j; r < n; r++){
if (fabs(a[r][j]) > pivot){
pivot = a[r][j];
}
}
if (pivot != a[j][j]){
for (int s = 0; s < (n+m); s++){
aux = a[r][s];
a[r][s] = a[j][s];
a[j][s] = aux;
}
}
for (int i = 0; i < n; i++){
if(i > j){
q = a[i][j]/a[j][j];
for (int k = 0; k < (n+m); k++){
a[i][k] = a[i][k] - q*a[j][k];
}
}
}
}
return 0;
}
void resol (double **a, int n, int m){
double resultats[n], suma;
for (int s = 1; s <= m; s++){
printf("Solució al sistema %d:\n", s);
resultats[n]=a[n][n+1]/a[n][n];
for(int i = n-1; i >= 1; i--){
suma=0;
for(int j=i+1; j<=n; j++){
suma=suma+a[i][j]*resultats[j];
}
resultats[i]=(a[i][n+1]-suma)/a[i][i];
}
for (int r = 1; r <= n; r++){
printf("X_%d = %f", r, resultats[r]);
}
}
}
它崩溃了以下几行(有时一个,其他一些):
aux = a[r][s];
a[r][s] = a[j][s];
a[j][s] = aux;
我收到以下错误消息:
主题1:EXC_BAD_ACCESS(代码= EXC_I386_GPFLT)
我做错了什么?