最近プログラミングを勉強し始めた初心者です。
今、配列について勉強していて
あるプログラムを作成しています。
それは10個の実数を入力して、入力された実数を降順に並び替えるものなのですが、
降順に並び替えることができません(泣
どこが違うのか教えていただきたいのですが・・・
よろしくお願いします。
#include <stdio.h>
#define NUMBER 10
int main(void)
{
int i, j, min, min_a, temp;
double zissu[NUMBER];
printf("%d個の実数を入力してください", NUMBER);
min=i;
printf("date[%d]:", i);
scanf("%lf", &zissu[i]);
for(j=i+1; j<NUMBER; j++) {
if(zissu[j] < zissu[min])
min_a =j;
}
temp = zissu[min];
zissu[min] = zissu[min_a];
zissu[min_a] = temp;
}
for(i = 0; i < NUMBER; i++)
printf("date[%d]=%lf \n", i, zissu[i]);
return (0);
}
【入出力例】
10個の実数を入力してください
data[0]:24.2
data[1]:2
・・・
data[9]:9
降順にソートしました
data[0] = 2
data[1] = 9
data[2] = 24.2
・・・
みたいにしたいのです。
よろしくお願いします
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
>scanf(降順にソートしました)のことでしょうか?
ループの外にあるので、配列に値を入れられていません。
ということです。
>min=i;
未初期化の値を参照しています。
>printf("date[%d]:", i);
32ビット環境なら、ココで0が表示される確率は1/4294967296です。
>scanf("%lf", &zissu[i]);
高確率でバッファオーバーフローです。
iが100だったとします。
zissuの配列はdouble型が10個分しかありません。
100番目っていったいドコでしょうか?
iがちゃんと初期化されているのは、結果表示のforループの開始時になってからです。
# 今時のコンパイラなら、「未初期化のローカル変数の参照」とかの警告出ると思われますが…。
>具体的にどこい入れればいいのか教えていただきたいです。
大小判定する前…でしょう。
for(i=0;i<NUMBER;i++) {
printf("date[%d]:", i);
scanf("%lf", &zissu[i]);
}
といったところでしょうか…。
# scanf()が原因でおかしくなる可能性はありますけど。
# abcdとか文字列入力したり…
並び替えの処理も、
>for(j=i+1; j<NUMBER; j++) {
とやる場合のiがいくつになっているかは注意が必要です。
# そして、無視している警告の一つである未初期化のローカル変数の参照がこの後でも発生してます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# プログラミングを教えて欲しいです。 配列aは、int a[9]={7,6,12,8,3,5,10,9 4 2022/12/19 23:27
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- C言語・C++・C# C 言語の Gauss Jordan 法について 2 2022/12/28 11:16
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラミング初心者です。 Py...
-
*をユーザーが入力した数字の数...
-
"scanf"でエンターで改行させな...
-
数字以外が入力されたらエラー...
-
scanf が無視されます
-
正負を反転させて出力するプロ...
-
batプログラム上で文字列を入力...
-
C言語 for文をつかって記号を表...
-
ワードで文字を入力する時の変...
-
数字と、文字列入力のチェック...
-
Spreadのコンボボックス
-
"gets"は危険なのでしょうか?
-
Eclipseでコマンドラインを入力...
-
C言語scanf_sで何故か2回入力に...
-
C言語 逆ピラミッドの作り方
-
C言語でgetchar();が上手く使え...
-
Linuxプログラミングで、キーボ...
-
VisualStudio2019のコードアナ...
-
コマンドプロンプトからのEOFの...
-
Linuxで入力待ちなしkeyread関...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
*をユーザーが入力した数字の数...
-
正負を反転させて出力するプロ...
-
数字以外が入力されたらエラー...
-
プログラミング初心者です。 Py...
-
java初心者です。入力されたの...
-
プログラミングの問題です 「金...
-
Eclipseコンソール表示を、リセ...
-
C言語 逆ピラミッドの作り方
-
"scanf"でエンターで改行させな...
-
scanf が無視されます
-
if文の条件にscanf関数を使うと…?
-
C言語について
-
C言語scanf_sで何故か2回入力に...
-
Excel VBAで、Application.Inpu...
-
double型が正常に認識されてい...
-
cout関数を使っているのですが...
-
小数か整数かを判定する方法
-
WindowsでEOF
-
scanfが2回使えない・・・?;
-
C言語でgetchar();が上手く使え...
おすすめ情報