計算後に配列の中身が入れ替わってしまう
内容を見ていただき、ありがとうございます。私は現在Cを勉強中で、練習の一環として次のようなプログラムを作っていました。
このプログラムは、2つのグループの人数をキーボードから入力して、それぞれのグループの割合を表示するというものです。そこで私の書いたソースは以下の通りです。
/******************
#include<stdio.h>
main(){
double score[2];
int i = 0;
double sum;
++i;
printf("グループ%dの人数:",i);
scanf("%lf",&score[i]);
++i;
printf("グループ%dの人数:",i);
scanf("%lf",&score[i]);
sum = score[1] + score[2];
score[1] = score[1] / sum *100;
score[2] = score[2] / sum *100;
printf("人数の割合は\nグループ1 グループ2\n");
printf("%9.1lf%%%9.1lf%%",score[1],score[2]);
return 0;
}
***************/
ソースを見る限り、それぞれのグループの割合が表示されるはずだと思ったのですが、これを実行するとグループ2の割合が常に100%になってしまいます。検証してみますと、16行目の
sum = score[1] + score[2];
のあとでscore[2]の人数がsumと入れ替わっているようです。この原因は、配列を0から始めなかったことと関係があるのではないかと思い、末尾のプログラムのように配列の開始番号を0からにすると狙い通りに作動しました。
しかし、未だに何故このような動きになるのかがわかりません。このような事態をどのように表現して良いのかもわかりませんので、検索もできませんでした。
そこで、どなたかこの現象についてご存知の方がいらっしゃいましたら、ご教授願えないでしょうか。よろしくお願いいたします。
/*********************
#include<stdio.h>
main(){
double score[2];
int i = 0;
double sum;
printf("グループ%dの人数:",i+1);
scanf("%lf",&score[i]);
++i;
printf("グループ%dの人数:",i+1);
scanf("%lf",&score[i]);
++i;
sum = score[0] + score[1];
score[0] = score[0] / sum *100;
score[1] = score[1] / sum *100;
printf("人数の割合は\nグループ1 グループ2\n");
printf("%9.1lf%%%9.1lf%%",score[0],score[1]);
return 0;
}
***********/