どこが間違っているのかわかる方お願いします
・行列A,Bはファイルから読み込む
・行列A,Bの積Cの計算には関数を用いる
#include<stdio.h>
#define ROW 10
#define COL 10
void MatrixProduct(int a[][COL],int b[][ROW],int c[][ROW],int n,int m )
{
int i,j,k;
for(i=0;i<n;i++){
for(j=0;j<n;j++){
c[i][j]=0;
}
}
for(i=0;i<n;i++){
for(j=0;j<n;j++){
for(k=0;k<m;k++){
c[i][j]=c[i][j]+a[i][k]*b[k][j];
}
}
}
}
int main(void)
{
FILE *fp1,*fp2;
char fname1[64],fname2[64];
int a[ROW][COL],b[ROW][COL],c[ROW][COL],n,m;
int i,j,k;
printf("Input file name ?");
scanf("%s",fname1);
printf("Output file name ?");
scanf("%s",fname2);
fp1=fopen(fname1,"r");
fp2=fopen(fname2,"w");
fscanf(fp1,"%d %d",&n,&m);
MatrixProduct(a,b,c,n,m);
for(i=0;i<n;i++){
for(j=0;j<n;j++){
fprintf(fp2,"%3d",c[i][j]);
}
fprintf(fp2,"\n");
}
fclose(fp1);
fclose(fp2);
return(0);
}
fp1
3 4
1 2 3 4
2 3 4 5
3 4 5 6
1 2 3
2 3 4
3 4 5
4 5 6
No.4ベストアンサー
- 回答日時:
(「読み込み」部分についてのみのアドバイス)
#1補足>どのようにすればよいのでしょうか?
可変個のデータなので for文で回すのがよいかと。
下の2つの関数を、n, m を読み込んだ後で、呼び出して・・。
void DataInput( FILE *fp1, int a[][ COL ], int b[][ ROW ], int n, int m )
{
int i, j;
for( i = 0; i < n; i++ ){
for( j = 0; j < m; j++ ){
fscanf( fp1, "%d", &a[ i ][ j ] );
}
}
for( i = 0; i < m; i++ ){
for( j = 0; j < n; j++ ){
fscanf( fp1, "%d", &b[ i ][ j ] );
}
}
}
void DataCheck( int a[][ COL ], int b[][ ROW ], int n, int m )
{
int i, j;
for( i = 0; i < n; i++ ){
for( j = 0; j < m; j++ ){
printf( "%3d", a[ i ][ j ] );
}
printf( "\n" );
}
for( i = 0; i < m; i++ ){
for( j = 0; j < n; j++ ){
printf( "%3d", b[ i ][ j ] );
}
printf( "\n" );
}
}
No.3
- 回答日時:
> fscanf(fp1,"%d %d",&a[i][j],&b[i][j]);
このときの,i,jはどうなってますか?
この1行を追加しただけ、なら、「i,jを変えながら全部読み込む」なんて機能はありません。読み込むべきi,jを指定するようにしましょう。
あとデータは
3 4 ← A:3行4列、B:4行3列
1 2 3 4 ← Aの1行目
2 3 4 5 ← Aの2行目
3 4 5 6 ← Aの3行目
1 2 3 ← Bの1行目
2 3 4 ← Bの2行目
3 4 5 ← Bの3行目
4 5 6 ← Bの4行目
ということでしょうか?それだと、aを全部読み込み→bを全部読み込みとなるようにする必要があるため、 「fscanf(fp1,"%d %d",&a[i][j],&b[i][j]);」とはなりません。
void MatrixProduct(int a[][COL],int b[][ROW],int c[][ROW],int n,int m )
今回、ROW=COL=10なので問題にはなりませんが、ROWとCOLを間違えています。
main中の宣言を確認してください
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- C言語・C++・C# 並列プログラミングのπ計算について 1 2022/07/16 22:30
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- C言語・C++・C# c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。 3 2023/01/29 19:47
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
複数桁10進数の*桁目だけを抽出...
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
#define _CRT_SECURE_NO_WARNIN...
-
(int *)の意味
-
数字列を3桁ごとにカンマで区切...
-
比較回数と交換回数表示について
-
if と配列の組み合わせ
-
C言語で三目並べをするプログラ...
-
実数の整数部,小数部の取得
-
卒業研究でよく分からないとこ...
-
C言語で分からないところがあり...
-
C言語での奇数の和
-
アスタリスクで正方形
-
警告 W8065について。
-
入力された2つの整数の差を絶対...
-
【C++】関数ポインタの使い方
-
C言語 エラーの原因がわからな...
-
C言語
-
C言語初心者です、、、お助けく...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
複数桁10進数の*桁目だけを抽出...
-
#define _CRT_SECURE_NO_WARNIN...
-
ラップ関数とはどんなものですか?
-
卒業研究でよく分からないとこ...
-
【C++】関数ポインタの使い方
-
実数の整数部,小数部の取得
-
std::set<int> で、ある値が何...
-
C言語 エラーの原因がわからな...
-
c言語
-
system関数がうまくいかない
-
C++でvectorにテキストファイル...
-
acceptをalarmでタイムアウトさ...
-
if と配列の組み合わせ
-
return 1L
-
「{ } で囲むだけ」は正しい?
-
(マルチスレッド)_beginthrea...
-
PowerShellがうまくいかない
-
このプログラミング誰か教えて...
おすすめ情報