• ベストアンサー

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

  • C言語のプログラミングについて

    私は大学2年なのですが、現在留年するかしないかというぎりぎりのところに立っています。好意で単位をなんとかしてくれる教授を探し出し、C言語の宿題を出されました。ですが私は根っからの文型で、プログラミングなどしたこともありません。教科書を図書館で借りて読んでみるものの、すぐ理解できるような難易度ではないことだけがわかりました。 そこでもしよろしければ、プログラムを教えてもらいたいです。 1.キーボードから整数の入力を繰り返す。0以下の値が入力されたら終了し、入力した値の中の最小値を表示する。また、それが何番目に入力された値かもあわせて表示する。(6つの整数を入力、最後の整数は0を入力することとする。) 実行結果例 整数を入力: 6 整数を入力: 5 整数を入力: 4 整数を入力: 3 整数を入力: 2 整数を入力: 1 整数を入力: 0 最小値は6番目の1 2.キーボードから整数の入力を4回繰り返し、それらの値を2次元配列Aの各要素に順に代入し、その行列のそれぞれの要素と行列式を表示するプログラムを作成せよ。 実行結果例 1行1列の要素? 6 1行2列の要素? 5 2行1列の要素? 4 2行2列の要素? 3 行列A = 6 5 4 3 行列式 = 2 3.キーボードから西暦年を入力し,その年が閏年のときは「○○年はうるう年です」と表示し,そうでないならば「○○年はうるう年ではありません」と表示するプログラムを作成しなさい. なお,閏年の定義は以下の通りである. ・西暦年が4で割り切れる年は閏年 ・ただし,西暦年が100で割り切れる年は平年 ・ただし,西暦年が400で割り切れる年は閏年 実行結果例 西暦年を入力してください. 1987 1987 年はXXXXXXXX 一時的ではありますが、皆様のお力をお借りしたいです。 もちろん、ここでお答えをもらってもわからないままにせずに、無事進級することができたら独学で勉強しようとは思ってます。 なお、理系の人たちはVisualBasicというソフトを使っているようです。よろしくお願い致します。

  • C言語についてなんですが

    プログラムの作成で分からないところがあります。 「二つの整数値を読み込み、小さいほうの数以上で大きい数以下の 整数を全て加えた値を表示するプログラムをdo文を使って 作成せよ。」 下の図のようにしたいです。 2つの整数を入力せよ。 整数A:37 整数B:28 28以上37以下の全整数の和は325です。 よろしくお願いします。

  • c言語プログラミングの質問です。

    整数NとN個の整数を受け取り,受け取ったN個の整数のうち最大のものを表示するプログラムを記述せよ. ただし,N>0とする. 入出力例 入力 ⇒ 出力 3 2 1 8 ⇒ 8 5 13 14 11 12 15 ⇒ 15 2 -1 -2 ⇒ -1 という問題です。「3つの数の中から~」という場合はそれぞれa,b,cとおいて比較できるのですが、この問題のような場合はどうすればいいですか。

  • c言語でのプログラミング

    キーボードから複数個の正整数値を読み込み,合計値と平均値(小数第1位まで)を表示するプログラムを作りなさい。 ただし入力数値の個数はプログラミング時には決定していない。 負整数が入力されたら入力値はもうなくなったと判断することとし,負の数は計算には使用しないこととする。またデータは少なくとも1つは入力されるものとする。(p02ex15.c) 検証は1から10までの数字すべてを与え,合計値55,平均値5.5が表示されることを確かめること。 (「1,2,3,4,5,6,7,8,9,10,-1」(-1はデータ終わりの合図)を入力して確かめなさい。) また,1から5までの数字すべてを与え,合計値15,平均値3が表示されることを確かめること。 (「1,2,3,4,5,-1」(-1はデータ終わりの合図)を入力して確かめなさい。) このプログラムのソースコードを教えて下さい。 解説もよろしくお願いします。

  • C言語のプログラミングについて

    C言語のプログラミングについて プログラミング初心者です。下のプログラムに詰まりました。 下のプログラムをfgets()、atoi()の組とgetchar()を用いて表示するにはどのようなプログラムを書けばよろしいのでしょうか? % ./descending 正の整数: 10 英文字: z 1: z 2: y 3: x 4: w 5: v 6: u 7: t 8: s 9: r 10: q %

  • C言語 %表示

    二つの整数値を読み込んで、前者が後者の何%かを表示するプログラムを作成したいです。 #include<stdio.h> int main(void){ int no1,no2; printf("整数を入力してください。\n"); printf("整数A:"); scanf("%d",&no1); printf("整数B:"); scanf("%d",&no2); printf("Aの値はBの値の%f%%です。\n",(double)(no1/no2)); } Aの値はBの値の0.0000%です。となってしまいます。 上記のプログラムの訂正をお願いします。

  • C言語プログラミング。

    標準出力から整数を読み込んで、その整数が奇数か偶数かを判定して、判定結果を出力するプログラムをif文を用いて作りたいんです。剰余演算子を使ってなら作れるんですけど、剰余演算子を使わないで作るにはどうすればいいのでしょうか。 よろしくおねがいします。

  • C言語 プログラミング

    by REFで受け渡しのプログラミング 二つの整数値をscan文で入力。 by REFで受け取り、整数値の和、差、積、商、余りを算出するプログラム 教えてください、、

  • C言語(プログラミング)についてお聞きしたいのですが…

    do whileの文を使って入力した整数の好きな桁数を表すプログラムを作りたいのですが、どうしたらいいのでしょうか。桁数を表す所だけどうしてもできないのですが…

  • c言語プログラミングについて

    回答お願いします!! 3つの整数値をキーボードから入力し、その平均値を求めるものを出力しなさい。 ただし、3つの整数値から平均値を戻り値として返す。 関数double average(intx,inty,intz)を作成し、これを使って平均値の値を出力すること 平均値は小数第二位まで出力せよ 上記の問題がどうしても分かりません!