- ベストアンサー
C言語のプログラミングについて教えてください
- C言語のプログラミングについて教えてください
- 質問者は、データを読み込んでyの最大値とそのときのxの値を表示するプログラムを作成することが課題ですが、初心者で困っています。プログラムを書く方法が分からず、助けを求めています。
- データはxとyの行列であり、2000個以上の数値があります。質問者の考えたプログラムを示しましたが、うまく動かなかったようです。
- みんなの回答 (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; } } のようにしてみました
その他の回答 (1)
- php504
- ベストアンサー率42% (926/2160)
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); 正の数限定でいいんですよね
お礼
回答ありがとうございます。丁寧に教えていただきありがとございます。 データのxは正のみでyの値は負の値もあります。 回答のプログラムを用いたらうまくできたのですが、プログラム上で正と負だと違いがあるのですか? たびたびすみません。
お礼
なるほど!だいぶ理解できました。 とても丁寧に回答していただきありがとうございました! 今回初めてこのような場所で質問しましたが、こんなに丁寧に教えていただけるとは思っていなくて今すごく感謝の気持ちでいっぱいです!自分の専門はプログラミングとは違いますが、自分の専門を極めてこんな風に回答してあげれたらなと思えてきました。 今回はほんとありがとうございました。