質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.81%

C言語乱数配列 平均値より大きい小さい値の参照

解決済

回答 3

投稿

  • 評価
  • クリップ 1
  • VIEW 403

Ssanswer

score 9

前提・実現したいこと

Cで配列を使って以下の条件を満たしたプログラムを作りたいです

(1)長さ5のint型の配列を作成する。
(2)(1)の各要素に、1から10までの乱数を代入する。
(3)配列の内容をすべて表示する。
(4)配列の値の合計値と、平均値を表示する。
(5)平均値よりも大きい数を表示する
(6)平均値よりも小さい数を表示する。

発生している問題・エラーメッセージ

実行結果
5  6  9  3 10

合計値:33
平均値:6
平均値より大きい数:  9
平均値より小さい数:  5

上記のようにエラーは出ていませんが
平均値より大きい数、小さい数が正しく表示されません。
改善するべき点を教えていただきたいです。

エラーメッセージ
```

該当のソースコード

C言語

include <stdio.h>

include <stdlib.h>

include <time.h>

int main(void){
// Your code here!
int a[5],i,sum=0,ave=0,avel=0,aves=0;
srand((unsigned)time(NULL));
a[0] = rand()%10+1;
a[1] = rand()%10+1;
a[2] = rand()%10+1;
a[3] = rand()%10+1;
a[4] = rand()%10+1;

for(i = 0; i < 5; i++){
printf("%3d",a[i]);
sum = sum +a[i];
ave = sum / 5;

}
printf("\n\n合計値:%d\n",sum);
printf("平均値:%d\n",ave);
printf("平均値より大きい数:");
for(i = 0; i < a[i]; i++){
if(a[i] > ave){
printf("%3d",a[i]);
}
}
printf("\n平均値より小さい数:");
for(i = 0; i < a[i]; i++){
if(a[i] < ave){
printf("%3d",a[i]);
}
}
return 0;
}

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • cateye

    2020/07/01 12:32 編集

    ave = sum / 5;・・・aveはintにはならないのでは?
    また、if(a[i] < ave)やif(a[i] > ave)では、a[i] == aveのとき、どうするか考えましたか?

    キャンセル

  • Ssanswer

    2020/07/01 12:59

    aveがdoubleではなくintなのは意図的にしております。

    キャンセル

  • Ssanswer

    2020/07/01 13:07

    平均値より大きい小さい値の参照なのでa[i] == aveの時の時、偽になるので考えていません

    キャンセル

回答 3

check解決した方法

0

平均より大きい小さい値を求めるfor 文の
for(i = 0; i < a[i]; i++){
if(a[i] > ave){
printf("%3d",a[i]);
}
の i < a[i]の部分がa[i]をfor文で回すたびに値が増えるのでエラーは出ませんがうまく結果が出ませんでした。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

for(i = 0; i < 5; i++){
  printf("%3d",a[i]);
  sum = sum +a[i];
  ave = sum / 5; // 平均は全部足したあとじゃないと! 
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/07/01 12:35

    結果的に合計を5で割るからヨシ!
    (型的に良くない気もするが,そこは仕様に依る)

    キャンセル

  • 2020/07/01 12:37

    a[i]/5 を積み上げるんならギリ許せるけどさぁ...

    キャンセル

0

データ群の値と平均値とが与えられたときに,
「平均値よりも小さい値」を探すにはどのようにすればよいのか?
その方法をまず日本語で既述するところからスタートすべき.

日本語が書けたら,現状のコードがそれを正しく表現しているかをチェックする.


e.g.
for(i = 0; i < a[i]; i++)とは,

  • 0 < a[0] か?
  • 1 < a[1] か?
  • 2 < a[2] か?
  • ...

という比較を行っていくわけだが,これが本当に,前述の事前に考えた方法に即しているのか?

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.81%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る