• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C言語のプログラミングについて教えてください)

C言語のプログラミングについて教えてください

このQ&Aのポイント
  • C言語のプログラミングについて教えてください
  • 質問者は、データを読み込んでyの最大値とそのときのxの値を表示するプログラムを作成することが課題ですが、初心者で困っています。プログラムを書く方法が分からず、助けを求めています。
  • データはxとyの行列であり、2000個以上の数値があります。質問者の考えたプログラムを示しましたが、うまく動かなかったようです。

質問者が選んだベストアンサー

  • ベストアンサー
  • php504
  • ベストアンサー率42% (926/2160)
回答No.2

ファイルのyが全部負だと初期化時の0が最大値になってしまうんです 1個目を読み込んだ時にそれを仮の最大値にするのがいいでしょう ついでにデータの個数を数えるカウンタでもつけて int count = 0; while (fgets(buf, 1024, fin) !=NULL) { //buf配列に1行読み込む printf("%s",buf); //読み込んだ文字列を表示 sscanf(buf,"%f %f", &x, &y);//読み込んだ文字列から2個の小数を読み込む //追加 if (count == 0) { max_x = x;// 1個目の場合xとyを記憶 max_y = y; } count++; //追加終わり if(y > max_y){// 読み込んだyが記憶している値より大きい場合 max_x = x;// xとyを記憶しておく max_y = y; } } のようにしてみました

ash719
質問者

お礼

なるほど!だいぶ理解できました。 とても丁寧に回答していただきありがとうございました! 今回初めてこのような場所で質問しましたが、こんなに丁寧に教えていただけるとは思っていなくて今すごく感謝の気持ちでいっぱいです!自分の専門はプログラミングとは違いますが、自分の専門を極めてこんな風に回答してあげれたらなと思えてきました。 今回はほんとありがとうございました。

その他の回答 (1)

  • php504
  • ベストアンサー率42% (926/2160)
回答No.1

xとyをペアで扱うのでyの最大値を記憶する変数max_yとそのときのxの値を記憶する変数max_xを用意します。 ファイルから読み込むための変数もfloat型でxとyを用意します。 なおmain関数内で処理が完結するので自分で初期化すればstaticはいりません(あっても問題ではないですが) 処理はwhileループ内で1行ずつ行います。 scanfするのはファイルからではなく読み込んだchar buf[ ]になるのでfscanfではなくsscanfを使います。 float max_x = 0.0f, max_y = 0.0f; float x, y; while (fgets(buf, 1024, fin) !=NULL) { //buf配列に1行読み込む printf("%s",buf); //読み込んだ文字列を表示 sscanf(buf,"%f %f", &x, &y);//読み込んだ文字列から2個の小数を読み込む if(y > max_y){// 読み込んだyが記憶している値より大きい場合 max_x = x;// xとyを記憶しておく max_y = y; } } printf("yの最大値=%f x=%f\n", max_y, max_x); 正の数限定でいいんですよね

ash719
質問者

お礼

回答ありがとうございます。丁寧に教えていただきありがとございます。 データのxは正のみでyの値は負の値もあります。 回答のプログラムを用いたらうまくできたのですが、プログラム上で正と負だと違いがあるのですか? たびたびすみません。

関連するQ&A