C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

C# for分について

[トピック内 9 記事 (1 - 9 表示)]  << 0 >>

■102270 / inTopicNo.1)  C# for分について
  
□投稿者/ ゆい (28回)-(2023/08/11(Fri) 16:36:43)

分類:[.NET 全般] 

for分で1から9まで画面に出力はわかるのですけど
for分を2重にしたら1111111122222222となるのですけど
なんでそうなるのか理解ができてないので解説お願いします。

1回目で掛け算のプログラム 1×9までの出力してます
for(int d=1; d<=9; d++)
{
Console.WriteLine("1x{0}={1}", d,d);
}


2重for分で出力した分です
for(int e = 1; e <= 9; e++)
{
for (int f = 2; f <= 9; f++)
Console.WriteLine("{0}", e);


引用返信 編集キー/
■102271 / inTopicNo.2)  Re[1]: C# for分について
□投稿者/ ゆい (29回)-(2023/08/11(Fri) 17:39:52)
No102270 (ゆい さん) に返信
> for分で1から9まで画面に出力はわかるのですけど
> for分を2重にしたら1111111122222222となるのですけど
> なんでそうなるのか理解ができてないので解説お願いします。
>
> 1回目で掛け算のプログラム 1×9までの出力してます
> for(int d=1; d<=9; d++)
> {
> Console.WriteLine("1x{0}={1}", d,d);
> }
>
>
> 2重for分で出力した分です
> for(int e = 1; e <= 9; e++)
> {
> for (int f = 2; f <= 9; f++)
> Console.WriteLine("{0}", e);
>
> 2重で掛け算のプログラム
for (int e = 1; e <= 9; e++)
{
for (int f = 1; f <= 9; f++)
Console.WriteLine("{0}*{1}", e,f);
}
1から9までの掛け算が出力できるのは何となくわかるのですけど


引用返信 編集キー/
■102272 / inTopicNo.3)  Re[1]: C# for分について
□投稿者/ Hongliang (1290回)-(2023/08/11(Fri) 17:41:18)
> for(int e = 1; e <= 9; e++)
> {
> for (int f = 2; f <= 9; f++)
> Console.WriteLine("{0}", e);
出力してるのはeだけなので、内部のforの2から9まで、eの値が8回連続して出力されるのはごく自然な挙動に思えます。
一体どこが疑問なのでしょうか?
引用返信 編集キー/
■102273 / inTopicNo.4)  Re[2]: C# for分について
□投稿者/ ゆい (30回)-(2023/08/11(Fri) 18:13:37)
No102272 (Hongliang さん) に返信
>>for(int e = 1; e <= 9; e++)
>> {
>> for (int f = 2; f <= 9; f++)
>> Console.WriteLine("{0}", e);

そうですね内部処理がりかいできていので
for (int d = 1; d < 10; d++)
{
Console.WriteLine("1x{0}={1}", d, d);

for分一回の処理なら dに初期値1を入れて次にdの値が10より小さいとき1増加していく
といったことはわかるのですけど

2重になったらどういった処理で1111111122222222といった
処理になるのかですね。内部処理の順序がわかってないですかね

引用返信 編集キー/
■102274 / inTopicNo.5)  Re[2]: C# for分について
□投稿者/ 魔界の仮面弁士 (3678回)-(2023/08/11(Fri) 20:13:21)
No102271 (ゆい さん) に返信
>>なんでそうなるのか理解ができてないので解説お願いします。
どこが分からないのかが分からない…。

> for (int e = 1; e <= 9; e++)
> {
>  for (int f = 1; f <= 9; f++)
>   Console.WriteLine("{0}*{1}", e,f);
> }
> 1から9までの掛け算が出力できるのは何となくわかるのですけど


for (int e = 1; e <= 9; e++)
{
  for (int f = 1; f <= 9; f++)
  {
    Console.Write("{0}*{1}={2} ", e, f, e * f);
  }
  Console.WriteLine();
}
https://paiza.io/projects/eDQqy8Qn2vTh4atk98zHlA

というコードにおいて、変数 e や f が、どのタイミングでどのように変化するか、理解できていますか?
「ステップ実行」を使って、変数の変化を追いかけてみてください。
引用返信 編集キー/
■102275 / inTopicNo.6)  Re[3]: C# for分について
□投稿者/ 魔界の仮面弁士 (3679回)-(2023/08/11(Fri) 20:22:01)
No102274 (魔界の仮面弁士) に追記
> for (int e = 1; e <= 9; e++)
> {
>   for (int f = 1; f <= 9; f++)
>   {
>     Console.Write("{0}*{1}={2} ", e, f, e * f);
>   }
>   Console.WriteLine();
> }
> https://paiza.io/projects/eDQqy8Qn2vTh4atk98zHlA

上記に相当するループ処理を、for を一切使わずに表記するとこうなります。
https://paiza.io/projects/YGJewdhsIZOE_8Oj7-rHsg


int e = 1; // 外側変数 e の初期値は 1
while (e <= 9) // 外側のループ継続条件
{
  int f = 1; // 内側のループ変数 f。外側のループのたびに、毎回 1 にリセットされる。
  while (f <= 9) // 内側のループ継続条件
  {
    Console.Write("{0}*{1}={2} ", e, f, e * f);
    f = f + 1; // 内側のループ変数を +1 した後、内側の継続条件を再検査
  }
  Console.WriteLine();
  e = e + 1; // 外側のループ変数を +1 した後、外側の継続条件を再検査
};
引用返信 編集キー/
■102276 / inTopicNo.7)  Re[1]: C# for分について
□投稿者/ 魔界の仮面弁士 (3680回)-(2023/08/11(Fri) 20:33:17)
元質問で末尾の波括弧が不足していたので、少し整形しています。

No102270 (ゆい さん) に返信
> for(int e = 1; e <= 9; e++)
> {
>  for (int f = 2; f <= 9; f++)
>   Console.WriteLine("{0}", e);
> }

そのコードは、下記と同義です。

 for(int e = 1; e <= 9; e++)
 {
  for (int f = 2; f <= 9; f++)
  {
   Console.WriteLine("{0}", e);
  }
 }


内側のループは 8 回繰り返されます。
これは、変数 f が 2 以上 9 以下の範囲で増加するからです。

Console に渡している処理では変数 f は使わず、変数 e のみが渡されています。
内側のループ中では変数 e の値を変化させていないので、同じ値の e が 8 回連続で出力されます。


外側は、変数 e が 1 以上 9 以下の範囲で変化させる for ループなので、
最終結果が「8回"1"を出力」「8回"2"を出力」「8回"3"を出力」…「8回"9"を出力」となります。

e = 1
 f = 2
 f = 3
  :
 f = 9
e = 2
 f = 2
 f = 3
  :
 f = 9
e = 3
 :
e = 9
 f = 2
 f = 3
  :
 f = 9
引用返信 編集キー/
■102277 / inTopicNo.8)  Re[2]: C# for分について
□投稿者/ ゆい (31回)-(2023/08/11(Fri) 22:38:47)
No102276 (魔界の仮面弁士 さん) に返信
ありがとうございます
わかりやすく解説してもらい丁寧に
勉強になります
自分でも考えてみます
解決済み
引用返信 編集キー/
■102278 / inTopicNo.9)  Re[4]: C# for分について
□投稿者/ ゆい (32回)-(2023/08/12(Sat) 00:22:17)
No102275 (魔界の仮面弁士 さん) に返信
参考にいろいろと試してみます
魔界のさんのプログラムを参考にしてみます
わからなかったらお願いします
解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ