#include<iostream.h>
int main()
{ int i;
int ninzu=0;
int tensu[6];
int rakudai[6];
cout<<"6人の点数を入力!\n";
for(i=0; i<6;i++)
{ cout<<i+1<<"番:";
cin>>tensu[i];
if(tensu[i]<60)
{ rakudai[ninzu]=i;
ninzu++;}
}
cout<<"60点未満は"<<ninzu<<"人です。\n";
for(i=0; i<ninzu; i++)
cout<<rakudai[i]+1<<"番:"<<tensu[rakudai[i]]<<"点\n";
return(0);
}
というテストの点数が60点未満の学生の一覧表を出力するというプログラムなんですが、12行目からの rakudai[ninzu]...以降が
よくわかりません。配列の数を指定するところに数字以外のものが来るというのはいったいどういうことなのでしょう?どなたか教えてください。
No.6ベストアンサー
- 回答日時:
>rakudai[ninzu]=iの、=iっていうのがピンときません。
iは何番目の人かを表します。
え~と、まず落第者が1人目(48点)と6人目(54点)だったとしましょうか。(点数の格納処理は省略して説明します)
この場合落第者は2名なのでrakudai配列は2コマ使われるわけですが、この2コマにi、つまり何番目の人だったかを記録します。
1人目の処理はiが0から始まりますので「0番目の人」として処理されます。
そしてninzuも0から始まる為、rakudai[0]に「0番目の人」として記録されます。
そしてninzuは1加算され次の落第者の格納に備えます。
引き続いて1番目、2番目・・・4番目と処理されますが、何れも落第点ではないのでrakudai配列には格納されません。
次に5番目の人(実際には6人目)ですが落第点ですのでrakudai配列に格納されます。
先程ninzuが1になっていたことを思い出してください。
つまりここではrakudai[1]にi、つまり5が格納されたのです。
で、再びninzuがインクリメントされ、2になります。
そして引き続き6番目以降の人の処理が行われますが、落第者は以上でしたね。
結果を見てみましょう。
rakudai[0] → 0が入っている
rakudai[1] → 5が入っている
ninzu → 2になっている
これを結果表示するときは、
cout<<"60点未満は"<<ninzu<<"人です。\n";
と
cout<<rakudai[i]+1<<"番:"<<tensu[rakudai[i]]<<"点\n";
ですから
60点未満は2人です。
1番:48点
6番:54点
となります。
解りにくいかな?(^_^;
なるほど!!非常によくわかりました。やっぱり、具体的に言って頂くと、ものすごく良く分かります。それにしてもやっぱりプログラムってややこしいですね。
でも、分かるとカイカンです。みなさん、いろいろありがとうございました!!!
これからも、勉強つづけて、わかんなくなったらまたここに来たいとおもいます。
No.5
- 回答日時:
再びです。
>rakudai[ninzu]=iの、=iっていうのがピンときません
ということなので、補足いたします。
08 for(i=0; i<6;i++)
09 { cout<<i+1<<"番:";
10 cin>>tensu[i];
11 if(tensu[i]<60)
12 { rakudai[ninzu]=i;
13 ninzu++;}
14 }
※わかり易いように行数つけました。
で、rakudai[ninzu]=i;の i ですが、8行目で、for文のカウンタになっています。
For文は14行目まで続き、繰り返しています。
9行目は、画面表示です。10行目の、入力を促しています。
11行目で、入力された、点数を比較しています。60店以下、残念ながら落第さんの処理に入ります。
12行目で、rakudai配列 ninzu人目(落第の人数だけ)に、i(何番目に入力された受験者か)を代入します。
13行目で、ninzuを+1します。(落第の人数が増えましたから。)
なので、iは、受験番号、ninzuは、落第した人間の数 といった感じです。
この辺で、理解できますでしょうか?
わからなかったら、補足ください。
でわ
早速のご回答ありがとうございます。iはforのカウンタですか・・・。やっとわかりました。しかし、まだひとつ疑問点があるのですが、なぜ、iをrakudai配列にiを代入するんでしょう?いまいちピンときません。しつこいようですが、ご回答頂けたら嬉しいです。
No.4
- 回答日時:
更に補足させて頂きます。
>if(tensu[i]<60)
>{ rakudai[ninzu]=i;
>ninzu++;}
>}
特にこの部分だと思いますのでここを重点的に。
まずif文の条件としては「i番目の人の点数は60点未満?」としていますよね。
次にその条件を満たした場合の処理なのですが、rakudaiという配列にはボーダーラインを割った人が誰であるか(つまり何番目の人か:但しここでは0番目からの通番)を記録していきます。
最初の落第者はrakudaiの0番目に記録されるのですが、これはninzuが0で初期化されていますので問題ないですよね?
次の行ではninzuをインクリメントしています。
これはrakudaiの次の落第者を格納する位置に移動する為であると同時に、この変数の名前が示すように落第者の人数そのものを数える役目にもなっています。
こんな感じですが・・・、混乱してしまうようなら無視して下さいね。(^_^;
お返事ありがとうござます。
説明して頂いた内容はわかったんですが、rakudai[ninzu]=iの、=iっていうのが
ピンときません。これの意味を教えていただければ嬉しいです。
No.3
- 回答日時:
こんにちは。
Haizyさんが書かれたように、配列の要素の指定には
変数を使うことが出来ます。
これができないと、例えば
int a[100];
という配列の全ての要素に1を入れたい時に
a[0] = 1;
a[1] = 1;
...
a[99] = 1;
とすべて書かなくてはならなくなります。
for(int i = 0; i < 100; i++)
a[i] = 1;
なら簡単です。
そうですね。配列の要素に変数使うと、便利ですね。そこまで、本に書いてなかった(というか、まだそこまで進んでなくて)混乱してしまいました。
ありがとうございました。
No.2
- 回答日時:
こんにちは。
itohhといいます。>for(i=0; i<6;i++)
>{ cout<<i+1<<"番:";
>cin>>tensu[i];
>if(tensu[i]<60)
ここのiについては、おわかりですか?
> rakudai[ninzu]=i;
だけが、わからないというのもヘンですよ!
例を出して解説すると。
rakudaiというタンスが有ったとします。
タンスの抽斗は6個です。
iというカードを見てカードに書かれている数字が60未満だったら、
ninzuというカウンタ(手のひらの中に入れてカチカチすると数字があがる器械)
の数字と同じ番号の抽斗にiというカードをしまいます。
そして、ninzuというカウンタをカウントアップ(カチカチとする)します。
ちょっと下手くそな、こんな説明で解りますかねぇ!!
お返事ありがとうございます。rakudai[ninzu]=1の部分なんですが、rakudaiという配列の数は、ninzuの数に依存するということなんですよね?つまり、最初は0なんですよね?でも、まだいまいち分からないのは、=iの部分なんです。iというカードをみるっていうところがいまいち分からないんですが・・・・・。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C++初心者です stirng 2 2022/09/20 20:43
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# 10人分の生徒の英語の点数{32,34,41,38,40,26,14,46,42,50} と数学の点 2 2022/05/26 21:31
- C言語・C++・C# C言語 3 2022/11/09 13:27
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- C言語・C++・C# C++のcinの動作 5 2023/02/26 00:13
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
array関数で格納した配列の型を...
-
ExcelのINDEXとMATCH関数でスピ...
-
Excelのセルの色指定をVBAから...
-
配列がとびとびである場合の書き方
-
表にフィルターをかけ、絞った...
-
[エクセル]連続する指定範囲か...
-
DataSetから、DataTableを取得...
-
エクセルで、絶対値の平均を算...
-
スプレットシートのGetTextにつ...
-
【VBA】ユーザーフォーム リス...
-
Datatableへの代入
-
Excel VBA 配列の分割について
-
.NET - 配列変数を省略可能の引...
-
仮想リストコントロールの表示
-
[VBA]改行入りのセルの値を配列...
-
エクセルVBAで変数をセルに一行...
-
【VBA】配列に数式を仕込む方法...
-
配列のSession格納、及び取得方...
-
VBAでの100万行以上のデータの...
-
VBAで指定期間の範囲を抽出し、...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelのセルの色指定をVBAから...
-
array関数で格納した配列の型を...
-
ExcelのINDEXとMATCH関数でスピ...
-
[エクセル]連続する指定範囲か...
-
エクセルで、絶対値の平均を算...
-
VBA listBoxについて
-
配列がとびとびである場合の書き方
-
表にフィルターをかけ、絞った...
-
VBA 配列に格納した値の平均の...
-
[VBA]改行入りのセルの値を配列...
-
エクセルでエラーを無視して一...
-
iniファイルのキーと値を取得す...
-
二次元配列の中の各行の要素を...
-
SUMPRODUCT関数を用いた最小値
-
【VBA】ユーザーフォーム リス...
-
Split関数でLong配列に格納する...
-
【VBA】配列に数式を仕込む方法...
-
.NET - 配列変数を省略可能の引...
-
スプレットシートのGetTextにつ...
-
Excelのオートフィルタで抽出し...
おすすめ情報