

Cでアルゴリズムの勉強をしているものです。
以下のプログラムを実行して
9 8 7 6 5 4 3 2 1 10
入力すると
10 2 3 4 5 6 7 8 9 9
と帰ってきます。
習いたてでどこが悪いかわからないのでどなたか教えてください 汗。
////*直接選択法*////
#include <stdio.h>
#define MAXDATA 10
void selection(int a[],int n){
int i,j,t;
for(i=0 ; i < n ; i++){
for(j=i+1 ; j<n ; j++){
if(a[j] < a[i])
t = a[i];
a[i] = a[j];
a[j] = t;
}
}
}
int main(void)
{
int k,j,sort[MAXDATA];
for(k=0;k < MAXDATA;k++)
{printf("sort[%d]:",k); scanf("%d",&sort[k]);}
for(k=0;k < MAXDATA;k++)
printf("%3d",sort[k]);
puts("ソートしますか? Yes:1 No:0 ///");
scanf("%d",&j);
if(j==1){
selection(sort,MAXDATA);
for(k=0;k < MAXDATA;k++) printf("%3d",sort[k]);
}
putchar('\n');
return(0);
}
No.1ベストアンサー
- 回答日時:
if文が成立したときの処理に{}を省略すると次の1文のみしか対象になりません。
つまりif(a[j] < a[i])
t = a[i];
a[i] = a[j];
a[j] = t;
と書くと、a[j] < a[i]が成立したとき、t = a[i];が実行され、a[i] = a[j];とa[j] = t;は常に実行されてしまいます。
そこで、
if(a[j] < a[i]){
t = a[i];
a[i] = a[j];
a[j] = t;
}
と、{}を付けてください。ちなみに、メールなのでインデントが正しくなっていませんが、実際はインデントも正しく付けてください。
{}は1文しかないときに省略可能ですが、極力省略しないほうがいいです。省略できるものを全て省略すると、読みにくいプログラムになってしまいます。
例えば
A+B*C
も
A+(B*C)
と書いたほうが解りやすいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- C言語・C++・C# c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。 3 2023/01/29 19:47
- C言語・C++・C# C言語でif文が予想と違う動きをする件について7 4 2023/03/20 00:26
- C言語・C++・C# C 言語の Gauss Jordan 法について 2 2022/12/28 11:16
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語での引数の省略方法
-
複数桁10進数の*桁目だけを抽出...
-
「指定されたキャストは有効で...
-
#define _CRT_SECURE_NO_WARNIN...
-
C言語 エラーの原因がわからな...
-
ColorをRGBで指定する方法
-
比較回数と交換回数表示について
-
ラップ関数とはどんなものですか?
-
構造体の勉強中です 合計点の高...
-
プログラミング c言語
-
C言語でif文が予想と違う動きを...
-
system関数がうまくいかない
-
C#の質問
-
c言語についてですが
-
c言語マップ探査ゲーム プログ...
-
int型の表せる範囲
-
実数の整数部,小数部の取得
-
エクセル関数で
-
ポインタの配列
-
c言語で「5人の学生の学籍番号...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
#define _CRT_SECURE_NO_WARNIN...
-
複数桁10進数の*桁目だけを抽出...
-
ラップ関数とはどんなものですか?
-
C言語 エラーの原因がわからな...
-
(int *)の意味
-
【C++】関数ポインタの使い方
-
if と配列の組み合わせ
-
構造体の勉強中です 合計点の高...
-
windows-findstrの正規表現を使...
-
C言語で分からないところがあり...
-
int型の変数値をバイト列として...
-
PowerShellがうまくいかない
-
C言語での奇数の和
-
「{ } で囲むだけ」は正しい?
-
std::set<int> で、ある値が何...
-
実数の整数部,小数部の取得
-
エラー 添字が付けられた値が、...
-
int16_t の _t は何?
おすすめ情報