• ベストアンサー

C言語 プログラミング

3個の整数値のなかで2番目に大きい値を求めて表示するにはどういったプログラムを書けばいいのですか?教えてください。

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

/* 配列から2番目に多きい値を求める */ #include <stdio.h> int main(void){ int data[]={ 254, 14, 36}; int i,j,c; int size=sizeof(data)/sizeof(int); for(i=0;i<size;i++){ c=0; for(j=0;j<size;j++){ if(data[i]<data[j]) /* 自分より要素の大きいものを数える */ c++; } if(c==1)/* 自分より大きい要素は1つしかない、つまり自分は2番 */ break; } printf("2番目に大きい値は、%d です\n",data[i]); return 0; }

fxaito
質問者

お礼

ありがとうございます。丁寧なプログラムなので理解することができました。また御力貸して頂ければ幸いです。

その他の回答 (3)

  • mac_res
  • ベストアンサー率36% (568/1571)
回答No.3

ちょっと変わった方法として #include <stdio.h> int main(void) { char buf[BUFSIZ]; int a[3]; int i,mid; while(fgets(buf,BUFSIZ,stdin) != 0) { sscanf(buf,"%d %d %d",&a[0],&a[1],&a[2]); i = 0; if (a[0] <= a[1]) i++; if (a[1] <= a[2]) i += 2; if (a[2] <= a[0]) i += 4; switch(i) { case 2: case 5: mid = a[0]; break; case 1: case 6: mid = a[2]; break; default: mid = a[1]; } printf("mid = %d\n", mid); } }

  • myfrend
  • ベストアンサー率37% (17/45)
回答No.2

質問の回答だけであれば素直に比較処理でいいのでは ないでしょうか。 表示関数は、printf();でも何でもいいとしますね。 役割的に比較と表示は別なのでメソッドに分けます。 また等しい数がないと仮定しますね。 void CalcurateSecLargeNumber( void ) {  if ( a < b )  {       // aよりbが大きい場合   if ( b < c )   {      // bよりcが大きい    表示(b);   }  }  else  {       // bよりaが大きい場合   if ( a < c )   {      // aよりcが大きい    表示(a);   }  }  表示(c);   // cよりaが大きい場合 } // 但し、3個の中でというのではなく将来的に拡張 // する予定があるのであれば、例えばn個の中で2番 // 目に大きい数字を求める。 // または、n個の中でm番目に大きな数字を求める。 // 求めた数字を表示する。 // というのであれば全く違ってきます。

  • ymmasayan
  • ベストアンサー率30% (2593/8599)
回答No.1

いくつかやり方がありますが、並べ替えの方法で。 1番目のマスからA,B,Cとします。 1.AとBを比べ左が大きくなるように入れ替えます。 2.BとCを比べて入れ替えます。   この状態では1マス目と2マス目がどちらかが最大でどちらかが2番目です。 3.1マス目と2マス目を比べて交換します これで2番めのマスが2番目に大きいです。 これで駄目なら、IF分で場合わけしていくしかありません。

関連するQ&A