ページ 11

格納について

Posted: 2009年6月09日(火) 20:47
by まる
#include <stdio.h>
int main(void)
{
int sum=0,i;
int a[10]={80,15,30,50,70,90,55,88,45,95,};

  for(i=0;i<10;i++){
  sum +=a;
  }
printf("sum=%d\n",sum);
  
return 0;
}

このプログラムで1次配列a[1]~a[10]の各要素に任意の数値を格納した後すべての加算した合計値を出す。
という問題なのですが。格納の意味がいまいちわからなくこれだとa[0]~a[9]までの数値を格納したことに
なるのでしょうか?ということはa[10]をa[11]にしてfor(i=1;i<11;i++)とすれば求めている答えになりますでしょうか?

Re:格納について

Posted: 2009年6月09日(火) 20:49
by まる
すいません
で囲んだはずなのですが見にくくなって申し訳ないです。

Re:格納について

Posted: 2009年6月09日(火) 20:57
by box
> int a[10]={80,15,30,50,70,90,55,88,45,95,};

10個の要素からなるaという配列を定義しています。
よって、アクセスできるのは、a[0]~a[9]の10個です。

> 1次配列a[1]~a[10]の各要素に任意の数値を格納した後

この問題に対応するには、11個の要素を持つ配列を定義して、
先頭の[0]は使わずに、残りの[1]~[10]の要素を計算に使います。

Re:格納について

Posted: 2009年6月09日(火) 21:15
by 山崎
こんばんは。

「格納」という言葉の意味がはっきりしない、ということでしょうか?
格納というのは、主に「ある変数に値を代入する」意味で使われることが多いですね。
質問にあるように、配列に値を代入することも格納と言います。

>これだとa[0]~a[9]までの数値を格納したことになるのでしょうか?
そのとおりですね。
配列のインデックス0から順番に格納していく、という意味になっています。

>ということはa[10]をa[11]にしてfor(i=1;i<11;i++)とすれば求めている答えになりますでしょうか?
そのとおりです。
a[1]からa[10]までの要素に値を入れるということは、
a[0]からa[10]までの11個の要素が必要ということになります。
つまり、
int a[11];
というふうに配列を準備する必要があります。
あと、a[10]にも数値を格納しておかなければいけませんね。
そしてa[1]からa[10]までの合計を求めるので、
for文のカウンタの値の範囲は1~10であるひつようがあるので、for(i=1;i<11;i++)でOKです。

その課題ですと、要素a[0]の意味がほとんど無いですね。
ホントは a[0]からa[9]までの10個の合計を求める という課題にしたかったはずが
間違えて a[1]からa[10] にしてしまった、という臭いがします・・・。
配列の個数やインデックス、ループのカウンタを理解させるため敢えてそうした課題なんでしょうかな~。

Re:格納について

Posted: 2009年6月09日(火) 21:41
by まる
#include <stdio.h>

int main(void)
{
int sum=0,i;
int a[11]={0,80,15,30,50,70,90,55,88,45,95,};

for(i=1;i<11;i++){
sum +=a;
}
printf("sum=%d\n",sum);

return 0;
}
ということはi=0をi=1に直し先ほどの合計を計算したい場合は80の前に0をいれてこういうプログラムになるということですかね?

Re:格納について

Posted: 2009年6月09日(火) 22:05
by box
> こういうプログラムになるということですかね?

コンパイルして動かしてみればわかるのではないでしょうか。
動かしてみて、題意に沿っていなければ、
ソースを修正して、コンパイルして、実行して…
の繰り返しです。

Re:格納について

Posted: 2009年6月09日(火) 23:06
by まる
みなさんご回答ありがとうございました。
#include <stdio.h> 

int main(void) 
{ 
int kei=0,i; 
int a[6]={0,1,2,3,4,5}; 

for(i=1;i<6;i++){ 
kei =a[1]*a[2]*a[3]*a[4]*a[5]; 
} 
printf("kei=%d\n",kei); 

return 0; 
}
というa[1]~a[5]の掛け算のプログラムを作ってみたのですがkei =a[1]*a[2]*a[3]*a[4]*a[5]の部分をもう少し短くすることは可能でしょうか?

Re:格納について

Posted: 2009年6月09日(火) 23:15
by pooka
>for(i=1;i<6;i++){
>kei =a[1]*a[2]*a[3]*a[4]*a[5];
>}
これだとfor文を使う必要はありませんね^^;
kei = 1;
for(i=1;i<6;i++)
	kei *= a;