重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

ソートを使い入力した数値を並び替える。昇順、降順を選べるようにする。
順位を付けるた。ただし、複数同位があった場合にはその個数分順位が変更する。

このような問題なのですが
入力個数の部分までは自力でできたのですが、ソートを習っていないのでこの後がよく分かりません。
下のような実行結果になるようだれかわかる人お願いします。

# include <stdio.h>
int main(void)
{

int a[100],kai=0,sentaku;

printf("整数を入力(CTRL+dで終了) >> ");
while(1){

if(scanf("%d",&a{kai}) == EOF )break;
kai=kai+1;
printf("整数を入力(CTRL+dで終了) >> "); }

printf("入力個数%d回\n",kai);


return 0;
}

実行結果

数値>>1
数値>>3
数値>>-1
数値>>-3
数値>>10
数値>>3
数値>>
入力回数:4回
1:昇順、2:降順>>1
NO.1:-3
NO.2:1
NO.3:3
NO.3:3
NO.5:10

A 回答 (3件)

こんにちは。



質問だけではアレなのでアドバイスを

まず必要とする入力と出力が何かをはっきりさせましょう。
その後、処理の流れを考えましょう。
それがキチンと出来てからコーディングを行いましょう。
でないと、修正,変更時にどこを見ればいいのか解らなくなります。

○入力:
 並び替えする数字列、数字列の個数、昇順か降順か

○出力:
 並び替えられた数字列

○処理の流れ:
 【数字の入力】 → 【数字列の並び替え】 → 【数字列の表示】
 処理内容が解りにくかったり、処理の規模が大きい場合は
 各処理を更に分解していきます。

○コーディング:
 処理の流れを基にして、C言語に翻訳していきます。


コーディング前に次の2点を確認しておいてください。
 1.scanf
 2.ソート

 1.について、返り値が望んだものか確認してください。以下のコードで解ると思います。
私の環境では示されたコードで望んだ返り値は出ませんでした。
------
#include <stdio.h>

int main(void)
{
intvalue, retv;

retv = scanf("%d", &value);
printf( " value:[%d] result:[%d] EOF:[%d]\n", value, retv, EOF );

return 0;
}
------

 2.について検索すればいくらでもヒットしますので好きなのを選んでください。
ただし、そのソートがどのように値を変更しているのかを確認しておいてください。
配列固定+初期値入りで確認した方が解りやすいです。以下の感じで
------
intval[5] = { 1, 3, -1, -3, 10 };

/* ソート始め */
/******/

/* ループ始め */
/******/
printf(" %d, %d, %d, %d, %d\n", val[0], val[1], val[2], val[3], val[4] );
/* ループ終わり */
/******/

/* ソート終わり */
------

ご参考までに。
    • good
    • 0

こんにちは。



ご質問を拝見していて質問があるのですが

質問1.
問題では“ソートを使い~”なのに、
“ソートを習っていないので”って矛盾してませんか?
まずソートを習ってから解くのではと思うのですが。

質問2.
実行結果の後の表示が望まれる出力ですか?
このプログラムでこの出力は表示されないと思います。

以上、よろしくお願いします。
    • good
    • 0

> 入力個数の部分までは自力でできた



本当ですか?

> if(scanf("%d",&a{kai}) == EOF )break;

コンパイル時にエラーが出ませんか?

>数値>>1
>数値>>3
>数値>>-1
>数値>>-3
>数値>>10
>数値>>3
>数値>>
>入力回数:4回

4回とは、どれを数えているのでしょうか?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!