C言語でファイルから行列の値を読み込むときにセグメンテーションエラーが発生しました。
C言語
1#include <stdio.h> 2#include <math.h> 3#define N 4 4#define M 1 5#define nl 10 6 7void lnqgj(double a[][N+M], int n, int m, double epsl, int *isw) 8{ 9 int j; 10 int i; 11 int k; 12 int ip; 13 14 double p; 15 double w; 16 double a_kk; 17 double a_ik; 18 19 for(k = 0 ; k < n ; k++){ 20 p = 0.0; 21 22 for(i = k;i < n; i++){ 23 if(p < fabs(a[i][k])){ 24 p = fabs(a[i][k]); 25 ip = i; 26 } 27 } 28 29 if(p <= epsl){ 30 *isw = 1; 31 printf("\n\t isw = %d\n", *isw); 32 return ; 33 } 34 35 for(j = k;j < (n + m) ; j++){ 36 w = a[k][j]; 37 a[k][j] = a[ip][j]; 38 a[ip][j] = w; 39 } 40 41 a_kk = a[k][k]; 42 for(j = k;j < (n + m); j++){ 43 a[k][j] /= a_kk; 44 } 45 46 for (i = 0; i < n ; i++){ 47 if(i != k){ 48 a_ik = a[i][k]; 49 for(j = k; j<(n + m);j++) 50 a[i][j] -= (a_ik * a[k][j]); 51 } 52 } 53 } 54 55 *isw = 0; 56 return ; 57 } 58 59main(){ 60 int a; 61 int b; 62 int s = N; 63 int t = M; 64 int *isw; 65 double min = 1.0e-5; 66 double z[s][s+t]; 67 FILE *fpin; 68 FILE *fpout; 69 70 if((fpin = fopen("kadai17.dat", "r"))==0){ 71 fprintf(stderr, "\n\tSorry! I can't open kadai17.dat\n"); 72 return 0; 73 } 74 if((fpout = fopen("kadai17ans.dat", "w"))==0){ 75 fprintf(stderr, "\n\tSorry! I can't open kadai17ans.dat\n"); 76 return 0; 77 } 78 79 for( a = 0; a < 4 ;a++){ 80 printf("\n%d\n",a); 81 for( b = 0; b < 5 ;b++){ 82 fscanf(fpin,"%lf",&(z[a][b])); 83 printf("%lf\t",z[a][b]); 84 } 85 } 86 87 lnqgj(z,s,t,min,isw); 88 89 fprintf(fpout,"isw = %d\n",*isw); 90 for( a = 0; a < 4;a++){ 91 printf("\n\t%lf\n",z[a][4]); 92 fprintf(fpout, "\tX%d =%lf\n",a+1 , z[a][4]); 93 } 94 95 fclose (fpin); 96 fclose (fpout); 97 return 0; 98} 99 100
試したこと
読み込んでいるファイルの中身はこちらです
3 2 7 1 8
1 5 1 -1 5
4 1 3 -2 7
1 6 4 3 13
printfで読み込まれたデータを表示するのですが、a<4とすると4行目の値が表示されず上のprintfで表示している行数のみが表示されます
0
3.000000 2.000000 7.000000 1.000000 8.000000
1
1.000000 5.000000 1.000000 -1.000000 5.000000
2
4.000000 1.000000 3.000000 -2.000000 7.000000
3
セグメンテーション違反です
回答3件
あなたの回答
tips
プレビュー