無題

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ユーリ

無題

#1

投稿記事 by ユーリ » 16年前

学校の課題なのですが、配列に格納された10個の整数の中から、最大値、最小値を表示するというプログラムです。
  #include <stdio.h>

   main(void)

  {

int d[10]={11,64,98,56,34,77,23,82,42,48};
int i,j,w;

for(i=0;i<9;i++){
for(j=9;j>=i+1;j--){

if(data[j]<data[j-1]){
w=data;
data=data[j];
data[j]=w;
     }
    }
}
for(i=0;i<10;i++){
printf("data[%2d]=%5d\n",i,data);
    }
  

    return 0;
   }
ここまで作ってみたのですが、どのように最少、最大を表示すればいいですかね

やっくん

Re:無題

#2

投稿記事 by やっくん » 16年前

とりあえず、まず修正点です(打ち間違えかもしれませんが。)
int d[10] → int data[10]

それと全角のスペースがところどころ混じっていますね。
ソースを投稿する際は
ソースを

<Pre>

#include <stdio.h>

main(void) {

</Pre>

と、<Pre>~</Pre>で囲むと綺麗にインデントしますよ。<>←半角で。

ランド

Re:無題

#3

投稿記事 by ランド » 16年前

昇順(小さい順)に並べようとしているのでしょうか?
だとすると、

if(data[j]<data[j-1]){
w=data;
data=data[j];
data[j]=w;
}

にてj番目とj-1番目を比較しているのに、j番目とi番目を交換しているので不可解な結果が表示されます。
後は、並べ替えた結果、最小と最大の値が何番目に来ているかを考えればわかるはずです。

pooka

Re:無題

#4

投稿記事 by pooka » 16年前

>w=data;
>data=data[j];
>data[j]=w;
この処理がどういうものか理解していますか?
少なくとも今の課題では必要ないかと思います。

例えば最大値を考えると
int max;
max = data[0];
for(i=1;i<10;i++)
	 if(max < data)
		max = data;
printf("max:%d\n",max);

こんな感じに、if文でmaxの値より大きいときmaxにその時の値を代入するようにしていき、
最後にmaxの値を表示するようにすればいいと思います。

やっくんさんの
><Pre>~</Pre>で囲むと綺麗にインデントしますよ。<>←半角で。
に追加で、もとのプログラムがきちんとインデントされていないとプレタグで囲んだだけではきれいに表示されません。

ユーリ

Re:無題

#5

投稿記事 by ユーリ » 16年前

配列に格納された十個の中から最大と最小を出すには
どういった感じでやればいいのでしょう
ヒントをお願いします

やそ

Re:無題

#6

投稿記事 by やそ » 16年前

用意された配列の並びを変更してよいなら、
ソート(小さい順などに)して両端の数が最少、最大になっているはずなので
それを表示すれば良いと思います。
変えてはいけないのなら、作業用に同じ大きさの配列でも用意しておけば可能ですかね。

ユーリ

Re:無題

#7

投稿記事 by ユーリ » 16年前

ありがとうございました
解決しました

non

Re:無題

#8

投稿記事 by non » 16年前

課題を出した先生の立場から考えると、これは、ソートの課題なのでしょうか?
ユーリさんは、このソートで解く方法を自分で考えたのでしょうか?
第3者の立場で見ますと、自分で考えたとは思えません。なぜならノーヒントで
ソートの方法を考えられるのであれば、このような質問はしません。

とすると、授業でソートについて習ったかどうかが重要だと思います。習いましたか?
しかし、課題の問題文だけを読むと、ソートをした後でというニュアンスがありません。
結論から言えば、先生はソートをせずに最大と最小を求めろという課題を出したのだと
思います。

やり方についてはpookaさんが答えを示されています。そのメッセージをスルーして
いるのはなぜでしょうか?

閉鎖

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