# 本番試験レベル問題1 解答解説 ※メンバー共有用 ### 全体の流れ ![](https://i.imgur.com/phdT5hX.png) ### 手順 - 行列のサイズ(要素数)の入力、行列や変数の宣言 - 最初にキーボードか正の整数行列のサイズnを読み込む。これをnとする。 - 行列$x$を整数型で宣言するので、データ型はint型を持ち、<br>行列$x$は要素数nの2重配列$x[n][n]$として定義する。 - 条件分岐の変数としてcheck=1を整数型で宣言する。 - 配列xにn行、n列のそれぞれの要素を格納(行列の要素の入力) - 行を表す変数を整数型のi、列を表す変数を整数型のjとする。 - i、jともにn行までfor文でループさせ、行列$x$の要素を読み取る。 * 対角成分か否かで場合分け - i、jともにn行までfor文でループさせながら、以下の処理を行う。 - 対角成分が0ののときはcheck=1のままなのでcontinueでスキップする。 - 対角以外の成分が0のときはcheckに0を代入する。 * 出力 - check==1のときは1を出力 - check==0のときは0を出力 ## 解答例 ``` #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に1代入 } if (x[i][j] != 0) {  //対角成分以外の場合 check = 0;   //i≠jのとき、x[i][j]≠0ならばcheckに0代入 } } } /*条件分岐して出力*/ if (check) {   printf("1");  //check==1のとき1を返す } else { printf("0");  //check==0のとき0を返す } return 0; } ```