はじめまして。
C言語を学習中です。
参考書の例文に、自分なりにコメントを付けて読み進めましたが、どうしても下記のfor文の処理が理解ずに困っております。
for (j = 0;j < i;j++) printf("%d\n",val[j]);
なぜval[j](ジェイ)が出てくるのかがわかりません。
val[j](ジェイ)はval[i](アイ)とどのような関連性があるのでしょうか。
また、最後のfor文はどのような処理をしているのでしょうか。
どうか教えていただきたく、お願い致します。
●例文
次のプログラムは、入力された数値の一覧を表示する例です。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void main(void)
{
int i,j,val[10];
char str[32],*ch;
fgets(str,sizeof(str),stdin);/*キーボードで入力された文字列strを読込む*/
ch = strtok(str,",\n"); /* 文字列strの中から単語を取り出して変数chに代入*/
for (i = 0;i < 10;i++) { /*for文(初期化i=0;条件式i<10;更新i++)*/
if (ch == NULL) { /*文字列strの中に単語が無ければ*/
break; /*ループを抜ける*/
} else { /*文字列strの中に単語があれば*/
val[i] = atoi(ch); /*文字列strの中の最初の単語を数値に変換して配列valの
i要素に代入する*/
}
ch = strtok(NULL,",\n"); /*文字列strの中の次の単語を取り出す*/
}
for (j = 0;j < i;j++) printf("%d\n",val[j]);
return;
}
このプログラムの実行結果は次の通りになります。
85,41,26,956,12 入力した文字列
85
41
26
956
12
No.2ベストアンサー
- 回答日時:
配列の[]の中は、その値が重要です。
val[i]だろうがval[j]だろうがval[nanika]だろうが、その[]の中を評価(計算)した最終的な値だけが関係します。
> なぜval[j](ジェイ)が出てくるのかがわかりません。
↓のjの値を使いたいからです。
> for (j = 0;j < i;j++) printf("%d\n",val[j]);
int k;を使うなら
for (k = 0;k < i;k++) printf("%d\n",val[k]);
int nanika;を使うなら
for (nanika = 0;nanika < i;nanika++) printf("%d\n",val[nanika]);
です。「j」には意味はありません。
> val[j](ジェイ)はval[i](アイ)とどのような関連性があるのでしょうか。
valは配列の名前です。
j==i ならval[j]==val[i] という関連があります。
> また、最後のfor文はどのような処理をしているのでしょうか。
見たままの処理です。単純にforループで、printfを繰り返しているだけです。
Cの文法では、forに{}は必ずしも必要ではありません。繰り返す式文が一つだけのときは、{}はいりません。
このとき、iは、その前にある
> for (i = 0;i < 10;i++) { /*for文(初期化i=0;条件式i<10;更新i++)*/
のループ終了時のiになります。このループの終了は、 i<10を満さなくなったときと、
> break; /*ループを抜ける*/
でループを抜けたときです。
それぞれ、iが何になるか、考えてみましょう。考えてわかなかったら
> ch = strtok(NULL,",\n"); /*文字列strの中の次の単語を取り出す*/
> }
printf("i:%d\n",i) ; /*ループ終了時のiを表示 */
> for (j = 0;j < i;j++) printf("%d\n",val[j]);
とでもして確認してください。
※ ところで
/*for文(初期化i=0;条件式i<10;更新i++)*/
というコメントはよくありません。プログラムをただ書き写しただけ。なんの説明にもなってません。
何のためのものか、どんな意味があるのか、を考えるようにしましょう。例えば
/* i = 0から9までの整数。順番に */
とか
No.3
- 回答日時:
配列の要素を指定することができれば、なんでもいい。
所詮、ただの変数名だし。
i でも j でもいいし yanbarukuina でもいい。
最後のfor は、 配列valの要素を一つずつ printfで表示させてるだけでしょ。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# str[j++]の意味 2 2022/08/30 16:20
- C言語・C++・C# C++のcinの動作 5 2023/02/26 00:13
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# C++のcase文の書き方 4 2023/02/24 20:50
- その他(プログラミング・Web制作) python質問 1 2023/08/14 11:54
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラムで関数は使わない方...
-
getchar()の記述
-
2÷3などの余りについて
-
「Aに対するBの割合」と「Aに対...
-
信頼区間の1.96や1.65ってどこ...
-
EXCELの分散分析表のP-値が....
-
fflush(stdin)の使い方とprintf...
-
プログラミングの問題です 「金...
-
ラップ関数とはどんなものですか?
-
O(n log n)について2
-
課題なんですが・・・
-
分数を表示するプログラム(長...
-
改行について 1行に何個かづ...
-
比較回数と交換回数表示について
-
計算に誤差が出る?
-
大学数学の問題です。 加法群Z/...
-
Enterキーを押されたら次の処理...
-
「n進法から10進法への変換」
-
空白を含んだ文字列がうまく格...
-
C言語で、「自然数nを入力し、n...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
break文でループを一気に抜ける...
-
ループを途中で抜けたいのですが。
-
入力した文字列から母音だけを...
-
do-while文が禁止される理由
-
入力した数値を倍々するプログラム
-
C言語forループが完結した場合...
-
if文の中にfor文なのか、for文...
-
プログラミングC言語についての...
-
エクセルVBAで Do While (1)って?
-
For文の終了値を関数にしても問...
-
エクセルでC言語のfor文と同じ...
-
Delphiで・・・
-
ループの特定入力終了
-
UWSCにてある一定の動作を無限...
-
C言語、自己参照構造体のプログ...
-
C言語 数字を削除する関数
-
Cプログラムが終了しない
-
Excel VBAで年度をまたぐ期間の...
-
プログラムで関数は使わない方...
-
VBScriptでSQLに接続し、CSV出...
おすすめ情報