前提・実現したいこと
c言語で15個以下の整数を入力して、素数判定、素数と合成数に分けてそれぞれ昇順に並べて表示させたいです。
以下のコードで実行してみてもきちんと結果が出ないのですが、どこが違うのかがさっぱりです。
具体的には、素数と合成数とにうまく分けられていないことと、ソートができていないことです。
ご教授お願いいたします。
該当のソースコード
#include <stdio.h> /* メイン関数 */ int main(void){ int N_max = 15; /* 入力できる数の上限(15)を N_max に格納 */ int prime[N_max] ,composite[N_max]; int N_p = 0, N_c = 0; /* 入力された整数の個数を格納する変数 */ int i; /* 要素番号を格納するための変数 */ int input; /* キーボードから入力された値を一時的に格納する変数 */ printf("%dこの整数? ", N_max); /* 0以下の値が入力されるかN_max個の整数が入力されるまで繰り返す */ for(i = 0; i < N_max; ++i){ scanf("%d", &input); if (input > 0){ /*素数判定*/ int j, flag = 0; for( j=2; j<input; ++j ){ if( input%j==0 ){ flag = 1; break; } } if(flag=0){ prime[N_p] = input; ++N_p; } else{ composite[N_c] = input; ++N_c; } } else{ break; } } int tmp, k; /*ソートのための変数*/ /*ソート(素数)*/ for(i=0; i<N_p; ++i){ for(k=i+1; k<N_p; ++k){ if(prime[i]>prime[k]){ tmp = prime[k]; prime[k] = prime[i]; prime[i] = tmp; } } } /*ソート(合成数)*/ for(i=0; i<N_p; ++i){ for(k=i+1; k<N_c; ++k){ if(composite[i]>composite[k]){ tmp = composite[k]; composite[k] = composite[i]; composite[i] = tmp; } } } /* 表示 */ printf("素数\n"); for(i=0; i<N_p; ++i){ printf("%d ", prime[i]); } printf("\n"); printf("合成数\n"); for(i=0; i<N_c; ++i){ printf("%d ", composite[i]); } printf("\n"); return 0; /* 戻り値として 0 を返す */ } /* main 関数の終わり */
期待する結果
15この整数? 9 8 7 6 5 4 3 2 0
素数
2 3 5 7
合成数
4 6 8 9
出てくる結果
15この整数? 9 8 7 6 5 4 3 2 0
素数
合成数
9 8 7 6 5 4 3 2
回答1件
あなたの回答
tips
プレビュー