• 締切済み

C言語の問題です!!

すみません。 詳細表示をする際に、未ソート部の先頭要素の上に記号文字「*」を表示し、未ソート部の最小要素の上に記号文字「+」を表示したいと思い、以下のソースプログラムを作成したのですが、結果が何か違う気がします…。どこが違うのか、教えていただけませんか? また、プログラムを修正していただけませんか? #include<stdio.h> #include<stdlib.h> #include<time.h> #define swap(type,x,y) do{type t=x;x=y;y=t;}while(0) /*--- 単純選択ソート ---*/ void selection(int a[], int n) { int i, j,k,flg; char *disp[]={" ","[* ]","[ +]","[*+]"}; for (i = 0; i < n - 1; i++) { int min = i; for (j = i + 1; j < n; j++) { if (a[min] > a[j]) { min = j; } } for (k = 0; k < n; k++) { flg=0; if(k==i) flg|=1; if(k==min) flg|=2; printf("%s",disp[flg]); } printf("\n"); for (k = 0; k < n; k++) printf("[%2d]", a[k]); printf("\n"); swap(int, a[i], a[min]); } } int main(void) { int i, nx; int *x; printf("要素数 : "); scanf("%d", &nx); x = calloc(nx, sizeof(int)); srand(time(NULL)); for (i = 0; i < nx; i++) { x[i] = rand() % 100; printf("x[%d] = %d\n", i, x[i]); } selection(x, nx); for (i = 0; i < nx; i++) printf("x[%d] = %d\n", i, x[i]); free(x); return 0; }

みんなの回答

  • f272
  • ベストアンサー率46% (8419/18027)
回答No.1

char *disp[]={" ","[* ]","[ +]","[*+]"}; の0番目の要素は空白が4つであるべきだな。

すると、全ての回答が全文表示されます。
このQ&Aのポイント
  • 過日亡くなられた老僧のお葬式で頂いた香典返しである「満中陰志」について、一般家庭と寺方(旦那寺)との違いやお礼の文言について、知識を持つ一般の方や僧職の方からアドバイスをいただきたい。
  • 初めての香典返し「満中陰志」について知りたい。一般家庭と寺方(旦那寺)との違いやお礼の文言について教えてください。
  • 香典返し「満中陰志」について、一般家庭と寺方(旦那寺)との違いやお礼の文言についての知識をもつ一般の方や僧職の方のアドバイスをお願いします。
回答を見る

専門家に質問してみよう