ページ 11

独習C、例5.1.1の1次配列を使い、最高気温、最低気温を求める方法について

Posted: 2012年12月30日(日) 16:10
by パクパク
[1] 質問文
 [1.1] 自分が今行いたい事は何か

<問題>
1次配列を使い、ある月の毎日の正午の気温を受け取って、その月の平均気温と最高気温、最低気温を報告して下さい。

<疑問点>
独習C、例5.1.1の最高気温、最低気温を求める方法なんですが、正答だと初期値の0と200のままになってしまします。この場合の初期値をなぜそのように設定するのかわかりません。また、この場合のもっと良いコードがあれば合わせてご教授お願い致します。

 [1.2] どのように取り組んだか(プログラムコードがある場合記載)
 
<独習Cの例5.1.1の正答になります>

コード:

/* ch05-02.c */
#include <stdio.h>

int main(void)
{
  int temp[31], i, min, max, avg;
  int days;

  printf("月の日数は? ");
  scanf("%d", &days);

  for (i = 0; i < days; i++) {
    printf("%d 日の正午の気温を入力してください: ", i + 1);
    scanf("%d", &temp[i]);
  }

  /* 平均を求める */
  avg = 0;
  for (i = 0; i < days; i++)
    avg = avg + temp[i];
  printf("平均気温: %d\n", avg / days);

  /* 最高気温と最低気温を求める */
  min = 0;  /* minとmaxを初期化 */
  max = 200;
  for (i = 0; i < days; i++) {
    if (min < temp[i])
      min == temp[i];
    if (max > temp[i])
      max == temp[i];
  }

  printf("最低気温: %d\n", min);
  printf("最高気温: %d\n", max);

  return 0;
}


[2] 環境  
 [2.1] OS : Windows
 [2.2] コンパイラ名 : VC++ 2010 Express

Re: 独習C、例5.1.1の1次配列を使い、最高気温、最低気温を求める方法について

Posted: 2012年12月30日(日) 16:22
by softya(ソフト屋)
これ本当に正解として載っていたものですか?
これが本に載っているのなら間違っていますので、サイトなどの正誤表を確認してください。
版がわからないので第4版のリンクを紹介しておきます。
https://www.shoeisha.co.jp/book/errata/ ... =all&mode=

Re: 独習C、例5.1.1の1次配列を使い、最高気温、最低気温を求める方法について

Posted: 2012年12月30日(日) 16:50
by あたっしゅ
「教授(きょうじゅ)」は、「教示(きょうじ)」です。

28 行目 min == temp;
30 行目 min == temp;

の == は、= の間違いでは ?

== は比較、= は代入です。C 言語の初心者が、よく間違うところです。

よくみたら、24 行目から 31 行目、ほとんど書き直しが必要か。

コード:

  min = 200;  /* minとmaxを初期化 */
  max = 0;
  for (i = 0; i < days; i++) {
    if (min > temp[i]) {
      min = temp[i];
    }
    if (max < temp[i]) {
      max = temp[i];
    }
  }
if や for は、一行しかなくても、(エラーは出ませんが) { と } で囲ったほうがいいです。

おっと、レスを書いているうちに softya さんの書き込みが。

Re: 独習C、例5.1.1の1次配列を使い、最高気温、最低気温を求める方法について

Posted: 2012年12月30日(日) 17:07
by パクパク
あたっしゅ さんが書きました:「教授(きょうじゅ)」は、「教示(きょうじ)」です。

28 行目 min == temp;
30 行目 min == temp;

の == は、= の間違いでは ?

== は比較、= は代入です。C 言語の初心者が、よく間違うところです。


ご教示ありがとうございます。一生間違って使うところでした……。

== は私がなんとかならないかと足掻いた箇所です。正答では=です。

所持している独習Cは第4版第8刷なので、上記以外は正答のはず……です。

返信ありがとうございます。