---
# System prepended metadata

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

---

# 本番試験レベル問題１ 解答解説
### 全体の流れ
![](https://i.imgur.com/phdT5hX.png)

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

## 解答例
```
#include <stdio.h>
int main(void) {
/*行列の要素数の宣言*/
  int n;
  scanf("%d", &n); //入力から行列のサイズnを読み取る
  int x[n][n];　　　//行列xを定義
  int check = 1;  //条件分岐のboolean型変数宣言
  
  /*配列xに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) {　　//対角成分の場合
        continue;　//i=jのとき、x[i][j]≠0ならばcheckに１代入
      }
      if (x[i][j] != 0) {　　//対角成分以外の場合
        check = 0;　　　//i≠jのとき、x[i][j]≠0ならばcheckに0代入
      }
    }
  }
/*条件分岐して出力*/
  if (check) {　　
    printf("1");　　//check==1のとき１を返す
  } else {
    printf("0");　　//check==0のとき0を返す
  }
  return 0;
}
```