
魔法陣を二次元配列で求めるプログラムです
#include <stdio.h>
int main(void)
{
int box[6][6]={17,24,1,8,15,0,
23,5,7,14,16,0,
4,6,13,20,22,0,
10,12,19,21,3,0,
11,18,25,2,9,0,
0,0,0,0,0,0};
int i,j,sum=0;
for(i=0;i<5;i++){
for(j=0;j<5;j++){
sum+=box[i][j];
}
box[i][5]=sum;
sum=0;
}
for(j=0;j<5;j++){
for(i=0;i<5;i++){
sum+=box[i][j];
}
box[5][j]=sum;
sum=0;
}
for(i=0;i<5;i++){
for(j=0;j<5;j++){
if(i==j){
sum+=box[i][j];
}
}
box[5][5]=sum;
for(i=0;i<6;i++){
for(j=0;j<6;j++){
printf("%3d",box[i][j]);
}
printf("\n");
}
}
なんですが、
for(i=0;i<5;i++){
for(j=0;j<5;j++){
sum+=box[i][j];
}
box[i][5]=sum;
sum=0;
と、
for(i=0;i<5;i++){
for(j=0;j<5;j++){
if(i==j){
sum+=box[i][j];
と、
box[5][5]=sum;
for(i=0;i<6;i++){
for(j=0;j<6;j++){
printf("%3d",box[i][j]);
}
は、一体何をするプログラムなのか教えて下さいませんか。お願いします
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
ご質問ですが、切り出す箇所が中途半端です。
forやif等は {から}までがセットになっています。その途中で切ったら意味が通じません。
一つ目です。
sum=0; の位置が、間違いではないけど、この位置では意図がつかみずらいです。
これは
sum=0; /* プログラムの意図を考えると、ここに置くのが妥当 */
for(j=0;j<5;j++){
sum+=box[i][j];
}
box[i][5]=sum;
/* sum=0 ; */ /* 次の処理のために初期化。上に書くのとほぼ同じ効果は得られるけど、意図が伝わりにくい */
というプログラムを
for(i=0;i<5;i++){ 〜 }
で i を変化させながら繰り返すものです。
これでもわからなければ
・最初はi=0
・sum=0
・最初はj=0 だから sum += box[0][0] ;
・次にj=1 になるから sum += box[0][1] ;
...
・jのループが終ったので box[0][5]= sum ;
・次にi=1
・sum=0
...
と具体的な数字を入れて考えてみましょう。
次のブロックは、上記の縦横を入れかえたもの。
3つ目のブロックは、ifが入っているので複雑そうに見えますが、要するに i==jのときだけがsum+=〜を実行する、というものです。
つまり、 jを変化させる必要はありません。
sum = 0 ;
for(i=0;i<5;i++){
j=i ; /* for(j=0;j<5;j++){} で変化させる必要無し */
sum+=box[i][j]; /* if(i==j){} で判定する必要無し */
}
box[5][5]=sum; /* この行は、こちらのブロックに属する処理です */
これだと単純なforループですから、意味がわかるのでは?
最後も
for(j=0;j<6;j++){
printf("%3d",box[i][j]);
}
printf("\n");
を
for(i=0;i<6;i++){}
で繰り返すものです。
> 魔法陣を二次元配列で求める
の「求める」という言葉をどんな意味で使っていますか?
このプログラムは「魔方陣を自動的に作ってくれる」ものではありません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語階乗の総和を求める
-
c言語for文
-
C言語・最大値を算出するプロ...
-
c言語プログラミングで1から100...
-
for文の中にswitch文はいれられ...
-
配列を関数に渡す方法
-
プログラミングに関して
-
while文について、c言語...
-
10進数からN進数に変換するプロ...
-
構文エラー";"が型の前にあり...
-
#if 1 #elseの意味について
-
全角文字の判定
-
Aの値からBの値を除するとは??
-
「Aに対するBの割合」と「Aに対...
-
信頼区間の1.96や1.65ってどこ...
-
プログラミング python
-
EXCEL AVEREGE関数について
-
C言語の問題です。 標準入力 (...
-
入力された数字を大きい順に並...
-
画面上をクリックするとクリッ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
構文エラー";"が型の前にあり...
-
#if 1 #elseの意味について
-
for文の中にswitch文はいれられ...
-
配列を関数に渡す方法
-
プログラム
-
C言語の二分法のプログラムにつ...
-
C言語階乗の総和を求める
-
C言語です
-
初心者です。for文、if文を使っ...
-
C言語 数字以外を入力させない...
-
配列を使って魔方陣
-
C言語で電卓を作成する。
-
C言語初心者です。次の問題で質...
-
scanfが実行されません
-
直角三角形を表示するプログラム
-
C言語 マスターマインドゲーム...
-
getcの改行判定
-
while文について、c言語...
-
C言語のwhile文を使った素数判...
-
行列をべき乗させるプログラム
おすすめ情報