366個の気温データから最高最低平均気温を表示させたい

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
こんぺいとう
記事: 12
登録日時: 3年前

366個の気温データから最高最低平均気温を表示させたい

#1

投稿記事 by こんぺいとう » 3年前

はじめまして、こんぺいとうです。このような場で発言をするのに慣れていないため
テンプレートをお借りしました。

[1] 質問文
 [1.1] 自分が今行いたい事は何か
   授業の課題で「366個の気温データから月ごとの最高最低平均気温を表示させる」というものが出題されました。
   参考プログラムとして「気温データを読み込むと”何月何日何℃”と表示する」が載っていましたが、
   それすらもうまく動きません。気温データはtxtで保存されているので実行するときに <kion.txt とするようです。
 [1.2] どのように取り組んだか(プログラムコードがある場合記載)
   これは私がプリントに載っていた参考プログラム通りに入力したものです。

コード:

#include<stdio.h>

int main(void)
{
  int d[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
  int tuki,hi;
  double x;

  for(tuki=1;tuki<=12;tuki++){
    for(hi=1;hi<=d[tuki];hi++){
      scanf("%lf",&x);
      printf("%d月%d日 %f℃",tuki,hi.x);
    }
  }
  return 0;
}
これを改変して、”何月 平均何℃ 最高何℃ 最低何℃”とするようです。
 [1.3] どのようなエラーやトラブルで困っているか(エラーメッセージが解る場合は記載)
   上記のプログラムをコンパイルしようとするとこう出ます。ex5-4.cというのはファイル名です。
   ex5-4.c: In function ‘main’:
   ex5-4.c:12: error: request for member ‘x’ in something not a structure or union
 [1.4] 今何がわからないのか、知りたいのか
   int d[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};の意味
   なぜコンパイルエラーが起こるのか
   ここからどうすればよいか
  が知りたいです。

[2] 環境  
 [2.1] OS : 私のPCはWindows10ですがex5-4.cは学内のサーバーにあります。
 [2.2] gccでコンパイルしています。テラタームを使っています。

[3] その他
 ・どの程度C言語を理解しているか
   まだはじめてから一か月しかたっていません。if while for 配列 を習いました。
 ・ライブラリを使っている場合は何を使っているか
   よくわからないです。


よろしくお願いします。
最後に編集したユーザー こんぺいとう on 2017年6月23日(金) 02:54 [ 編集 1 回目 ]

かずま

Re: 366個の気温データから最高最低平均気温を表示させたい

#2

投稿記事 by かずま » 3年前

こんぺいとう さんが書きました:int d[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};の意味
配列は習っているんですよね。それなら、int d[13]; は分かりますね。
= {{0,31,29,31,30,31,30,31,31,30,31,30,31}; は、
その配列 d を初期化しているのです。
int d[13];
d[0] = 0; d[1] = 31; d[2] = 29; ... d[12] = 31;
と書いたのと同じ効果があります。。
こんぺいとう さんが書きました:なぜコンパイルエラーが起こるのか
エラーメッセージから、12行目の 'x' がエラーだと分かりますよね。
その直前の「,」が「.」になっているからです。
こんぺいとう さんが書きました:ここからどうすればよいか
次のようなコードを書く。

コード:

	for (tuki = 1; tuki <= 12; tuki++) {
		// double 合計 = 0, 最高 = -99, 最低 = 99;
		for (hi = 1; hi <= d[tuki]; hi++) {
			scanf("%lf", &x);
			// x を合計に加える
			// x が高ければ、最高を更新
			// x が低ければ、最低を更新
		}
		// tuki, 合計/d[tuki], 最高, 最低 を表示
	}
出来上がった解答を貼り付けてから、解決にしてくださいね。

こんぺいとう
記事: 12
登録日時: 3年前

Re: 366個の気温データから最高最低平均気温を表示させたい

#3

投稿記事 by こんぺいとう » 3年前

回答ありがとうございます!
配列について
  確かに何回もd[0]的なものを繰り返し書くのはめんどくさいですね。
コンパイルエラーについて
  全く気が付きませんでした。今後は ; とともによく確認します。
そして完成したプログラムがこれです。

コード:

#include<stdio.h>

int main(void)
{
  int d[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
  int tuki,hi;
  double kion,sum,max,min,heikin;

  for(tuki=1;tuki<=12;tuki++){
    sum=0.0;
    max=-99;
    min=99;
    for(hi=1;hi<=d[tuki];hi++){
      scanf("%lf",&kion);
      sum=sum+kion;
      if(kion>max){
        max=kion;
      }
      if(kion<min){
        min=kion;
      }
    }
    heikin=sum/d[tuki];
    printf("%2d月 平均 %4.1f℃ 最高 %4.1f℃ 最低 %4.1f℃\n",tuki,heikin,max,min);
  }
  return 0;
}
という感じになりました。かずまさん、ありがとうございました。


返信

“C言語何でも質問掲示板” へ戻る