C言語の単純選択法プログラムについてです。

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

C言語の単純選択法プログラムについてです。

#1

投稿記事 by えうろぱ » 12年前

 こんばんは。
今回学校の宿題で、
「無作為に7つの自然数を入力した時に、それらを単純選択法によって昇順に整列して表示するプログラムをC言語で作成せよ。」
というものが出ました。
そこで自分なりに考えてプログラミングしてみたのですが、7数を入力してもそれが入れ替わることなく出力されてしまうのです。

(理想) 5,6,4,3,2,7,1 → 1,2,3,4,5,6,7
(現実) 5,6,4,3,2,7,1 → 5,6,4,3,2,7,1

こんなかんじです。以下にソースコードを載せるので、詳しい方教えて下さい、お願いします。使用ソフトは「EasyIDEC」です。

コード:


#include <stdio.h>

int main(void)
{
int a,b,c,d,e,f,g,w,x,y,z,min;
	
	printf("入力した7つの自然数を昇順に整列させて示します。\n");
	
	printf("1つめの自然数を入力してください。:");
	scanf("%d",&a);
	printf("2つめの自然数を入力してください。:");
	scanf("%d",&b);
	printf("3つめの自然数を入力してください。:");
	scanf("%d",&c);
	printf("4つめの自然数を入力してください。:");
	scanf("%d",&d);
	printf("5つめの自然数を入力してください。:");
	scanf("%d",&e);
	printf("6つめの自然数を入力してください。:");
	scanf("%d",&f);
	printf("7つめの自然数を入力してください。:");
	scanf("%d",&g);
	
int array[7] = {a,b,c,d,e,f,g};
	
	w,x,y,z = 0;
	
	while(w <= 3) {
		min = array[w];
		x = w ; 1;
		
		while(x <= 4) {
			
			if(array[x] <= min) {
				min = array[x];
				y = x;
			}
			
			else {}
			
			x++;
		}
		
		if(array[w] == min) {
			y = w;
		}
		
		else {}
		
		z = array[w];
		array[w] = array[y];
		array[y] = z;
		w++;
	}
	
	printf("%d,%d,%d,%d,%d,%d,%d\n",array[0],array[1],array[2],array[3],array[4],array[5],array[6]);
	
	return 0;
}


box
記事: 2002
登録日時: 15年前

Re: C言語の単純選択法プログラムについてです。

#2

投稿記事 by box » 12年前

えうろぱ さんが書きました:

コード:

	printf("1つめの自然数を入力してください。:");
	scanf("%d",&a);
int array[7] = {a,b,c,d,e,f,g};
初めから配列にしておけばいいのではないでしょうか。
7個ではなくて100個だったら、scanfを100行書くんでしょうか。
えうろぱ さんが書きました:

コード:

	w,x,y,z = 0;
w, x, y, zのすべてを0で初期化「することになっていません」。
正しく初期化できているのはzだけです。
えうろぱ さんが書きました:

コード:

		x = w ; 1;
1;
が意味不明です。
えうろぱ さんが書きました:

コード:

			else {}
何もしないんだったら書かなくていいのでは?
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

えうろぱ

Re: C言語の単純選択法プログラムについてです。

#3

投稿記事 by えうろぱ » 12年前

回答ありがとうございました。
その後自分でも数値のミスを発見して、それとboxさんが指摘してくださったところを直した結果、うまく動くようになりました。ありがとうございます。

ちなみに、「x = w ; 1;」は、「x = w + 1;」の単なる入力ミスでした。

閉鎖

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