アプリ版:「スタンプのみでお礼する」機能のリリースについて

5×5の転置行列を求めるC言語のプログラミングの問題なのですが、変な値が出力されて困っています。どこがおかしいですかね?
#include <stdio.h>
int main(void){
int n[4][4],m[4][4];
int a,b;
printf("5×5行列を入力してください。\n");
for (a = 0; a <5; a++){
for(b = 0; b <5; b++){
scanf("%d", &n[a][b]);
m[b][a] = n[a][b];
printf("%d", m[a][b]);
}
printf("\n");
}
return 0;
}

質問者からの補足コメント

  • すみません、[4][4]ではなく[5][5]でした。
    しかしそれでも正しい答えが出ないです。

      補足日時:2021/01/23 23:40
  • 上三角の部分だけ変な値になります

      補足日時:2021/01/23 23:55
  • stdlibとかcharというのが、よく分からないんですけど...

      補足日時:2021/01/25 22:17

A 回答 (6件)

stdlibとかcharというのが、よく分からないんですけど...



stdlib.h
https://www.k-cube.co.jp/wakaba/server/func/stdl …

【C言語入門】文字・文字列(char)の使い方:
https://www.sejuku.net/blog/25592
    • good
    • 1

そりゃ当然。



例えばaが2,bが3の場合を考えてみよう。
scanf("%d", &n[a][b]);
この文を実行してn[2][3]に5が代入されたとする。

m[b][a] = n[a][b];
ここでm[3][2]に5が代入される。

この直後の文
printf("%d", m[a][b]);
この時m[2][3]を表示する。ではこの時m[2][3]の値はいくつであろうか?
aの値は0,1,2まで変化しているがまだ3には至っていない。
そのためm[*][3] (*は0~4)にはまだ数値が代入されていない!!だから表示しようとするとでたらめな数値が表示される。

あらかじめm[][]を初期化しておくと、半分近くが初期値そのままで表示されるはずである。
    • good
    • 1

なんにも値を設定しないのに表示すれば, そりゃ「変な値」になってもしょうがないよ.

    • good
    • 1

> しかしそれでも正しい答えが出ないです。



そもそも、仕様が良く分からん。

1. 行列がn、mと2つ用意されてるが、結果mしか出力しようとしていない。nはホントに必要なの?
2. printf("%d", m[a][b]);と書いてるが、これだとm[a][b]は順繰りに出力されていくが、ただそれだけである。とてもじゃないけど「行列には見えない」。

とか。

一番簡単なやり方だと次のようにすれば良いでしょう。別に行列を2つも用意する必要はなく、単に「縦に」入力値が並んでいくように配列に数値をツッコんでいけばいい。

#include <stdio.h>
#include <stdlib.h>

int main(void) {
 int m[5][5];
 char s[5];
 int a, b;
 puts("5 x 5行列を入力してください。");
 for (a = 0; a < 5; a++) {
  for (b = 0; b < 5; b++) {
   scanf("%4s%*[^\n]%*c", s);
   m[b][a] = atoi(s);
  }
 }
 for (a = 0; a < 5; a++) {
  printf("|");
  for (b = 0; b < 5; b++) {
   printf("%5d", m[a][b]);
  }
  printf("|\n");
 }
 return 0;
}
「5×5の転置行列を求めるC言語のプログラ」の回答画像3
    • good
    • 0

変な値が出力されて困っています。


m[b][a] = n[a][b];
printf("%d", m[a][b]);
で直前に代入したのではない項目を出力しているから


printf("%d", m[b][a]);
にするか、あるいは、mに全部代入してから出力すれば良いでしょう
    • good
    • 1

> 5×5の転置行列を求める



のに

> int n[4][4],m[4][4];

なんですか?
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!