プロが教える店舗&オフィスのセキュリティ対策術

こんばんは。最近C言語について学びはじめた高校生です。
ある程度学校の授業で学習するのですが、明日から実際にプログラミングを始めるみたいです。

予習しようと思い、visualC++をインストールして練習しております。
そこで、いくつか思い通りにいかない問題がありましたのでご回答、アドバイスなどいただけると嬉しいです。

内容はC言語の基礎中の基礎だと思います><

「1」 5個の整数データを配列に代入にそれらの合計と平均を求めるプログラムをつくれ。

「2」 問「1」のデータの最大値を求めるプログラムをつくれ。
「3」 問「1」の5つのデータを大きい順に並べ変えろ。

というみっつの問題です。

C言語は先週から学びはじめたばかりなのでまだまだ知識不足ですが、
下記に一番を自分なりに作ってみました。

#include <stdio.h>
int main (void)
{
int box[5]={0,0,0,0,0};
int goukei,i;
float heikin;
goukei=0;
for(i=1;i<=5;i++){
scanf("%d",&i);
goukei=goukei+i;
}
heikin=(float)heikin/5.0;
printf("合計は%d",goukei);
printf("平均は%f",heikin);
return0;
}

やはり思い通りの結果が出ず困っております。
正答とアドバイスいただけると嬉しいです。

よろしくおねがいします。

A 回答 (5件)

No4です。


すいません。for文のところは、コメントの閉じ忘れがあります。
訂正します。
for(i = 0; i < 5; i++){ /* i は 0, 1, 2, 3, 4 となる(iが5になったらループを抜ける。)*/
    • good
    • 0

他の人がいろいろと解説をしているので、とりあえず答えになってると思う。


人によってのコードの書き方はあると思うので、突っ込まないで下さい。

#include <stdio.h>

int main(void)
{
int ten[5] = {0, 0, 0, 0, 0};
int goukei = 0;
int i;
float heikin;

/* 配列の先頭は ten[0]から始まります。 */
for(i = 0; i < 5; i++){ /* i は 0, 1, 2, 3, 4 となる(iが5になったらループを抜ける。)
scanf("%d", &ten[i]);
goukei = goukei + ten[i]; /* goukei += ten[i] でもOK */
}

heikin = goukei / 5.0; /* 5.0で計算しているので、キャストしなくてもいいと思う */

printf("合計は、%d\n", goukei);
printf("平均は、%f\n", heikin);

return (0);
}
    • good
    • 0

> 「1」 5個の整数データを配列に代入にそれらの合計と平均を求めるプログラムをつくれ。



配列に代入することになっていますね。そのために

> int box[5]={0,0,0,0,0};

という入れ物を用意しているのではないでしょうか。そこで、

> scanf("%d",&i);
> goukei=goukei+i;

iに読み込んでそれを合計に加えるのではなく、
box[i]に読み込んでそれを合計に加えてください。
なお、

> for(i=1;i<=5;i++){

これは正しくありません。C言語の配列の添字はゼロで始まります。
    • good
    • 0

まず、デバッグする事を覚えましょう



うまく動かなかったら、とりあえず printf をいれて
変数の中身を確認してください。

for(i=1;i<=5;i++){
printf("A:i=%d\n",i); // デバッグ行 A
scanf("%d",&i);
printf("B:i=%d\n",i); // デバッグ行 B
goukei=goukei+i;
printf("C:goukei=%d\n",goukei); // デバッグ行 C
}

こうすると、
A:i=1
5 ← 5と入力
B:i=5
C:goukei=5
で終了しますよね

for でi=1; i<=5 としていて、
デバッグ行 B を見ると i=5 で for の条件が成立しているのが
わかります。

そうすると、 for のループの変数と
scanf の変数が同じなので、ここがおかしい
とわかるはず、
うまく動いたら、
デバッグの printf をはずして、次の怪しい箇所に
デバッグ行を入れる、

まずは、その繰り返しです
    • good
    • 0

えぇと....


scanf で i を書換えちゃダメだよ....
「データを記憶しておく変数」を用意して, scanf ではそこに読み込むようにする.
で, guokei を求めるときにはその値を加える, と.
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!