こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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;
}

投稿日時 - 2015-12-05 06:48:23

QNo.9090883

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

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

投稿日時 - 2015-12-05 12:36:29

あなたにオススメの質問