---
# System prepended metadata

title: 本番試験レベル問題1 解答解説

---

# 本番試験レベル問題1 解答解説
## 解説
### 細分化
![](https://i.imgur.com/IKsOws2.png)


### 手順
- 行列のサイズnの入力、行列xや変数checkの宣言
    - 最初にキーボードから正の整数行列のサイズnを読み込む。これをnとする。
    - 行列$x$を整数型で宣言するので、データ型はint型を持ち、<br>行列$x$は要素数nの２重配列$x[n][n]$として定義する。
    - 対角化判定のためのboolean型変数check=trueを宣言する。
    - #include <stdbool.h>を入れる
    
- **２重配列$x[n][n]$に行列xのn行、n列のそれぞれの要素を格納（行列の要素の入力）**
    - 行を表す変数を整数型のi、列を表す変数を整数型のjとする。
    - 変数i、jともにn行までfor文でループさせ、行列$x$の要素を読み取る。
* **対角成分か否かで場合分け**
    - 変数i、jともにn行までfor文でループさせながら、以下の処理を行う。
    - 対角成分が０のときはcheck$==$trueのままなので、対角以外の成分が0か否かで場合分けを行う。
　    - 対角以外の成分が１のときはcheckにfalseを代入
　    - 対角以外の成分が０のときはcheck$==$trueのままなので、<br>条件分岐では考えなくて良い。
* 出力
    - checkの値を出力
    - check$==$trueなら１を出力
    - check$==$falseなら０を出力

## 解答例
```
#include <stdio.h>
#include <stdbool.h>　　　　　　　　//boolean型を用いるのに必要
int main(void) {
/*行列の要素数の宣言*/
  int n;
  scanf("%d", &n); 　　　　　　　　//入力から行列のサイズnを読み取る
  int x[n][n];    　　　　　　　　　//行列xを２重配列x[n][n]で定義
  bool check = true;  //boolean型の変数宣言(true==1,false==0)
  
  /*２重配列x[n][n]にn行、n列のそれぞれの要素を格納*/
  for (int i = 0; i < n; i++) {　　　　　　　//iをn行まで繰り返す
    for (int j = 0; j < n; j++) {　　//jをn列まで繰り返す
      scanf("%d", &x[i][j]);  　　　　　　　//行列の要素を読み取る
      /*対角以外の成分が０か否か*/
      if(i != j){
      　　if (x[i][j] != 0) {　　　　　　　　　　　　　//対角成分以外の場合
        　　check = false;　　　　　　　　　　　　　　　　　//i≠jのとき、x[i][j]≠0ならばcheckにfalse代入
      　　}
      }
    }
  }
/*checkを出力*/
    printf("%d", check);　　//check==trueなら１を出力
                           //check==falseなら０を出力
  return 0;
}
```