-2

いったいどうやってこれを並べてフォーマットするのですか、すべてを試してみましたが、何も変わりませんか?!

printf("N Count\n");
printf("---- ------ \n");

for(i = 0 ; i < MAX_ELEMENTS ; i++)
{
    count = getOccur(arr, MAX_ELEMENTS, arr[i]);
    printf("%1d %1d\n", arr[i], count);
}

タブ、スペーシング、最後の数字の%記号を試しましたが、これから変わりません

N  Count
----- ---
       1      1
       2      1
       3      1

私を狂わせる!理解できません!笑

プログラム全体を編集 新しい質問!

#include <stdio.h>

#define MAX_ELEMENTS 10


int getOccur(int a[], int num_elements, int value);
void printArr(int a[], int num_elements);

int main()
{
    int arr[MAX_ELEMENTS];
    int trim[MAX_ELEMENTS];
    int count, target, i;
    int j, k, temp;

    for(i = 0 ; i < MAX_ELEMENTS ; i++)
    {
        printf("Enter a variable for the array: ");
        scanf("%d", &arr[i]);
    }

    for (j = 1 ; j <= MAX_ELEMENTS-1 ; j++)
    {
        for(k = 0 ; k <= MAX_ELEMENTS-2 ; k++)
        {
            if(arr[k] > arr[k+1])
            {
                temp = arr[k];
                arr[k] = arr[k+1];
                arr[k+1] = temp;
            }
        }
    }

    printf("%4s %6s\n", " N ", "Count");
    printf("%4s %6s\n", "----", "------");

    for(i = 0 ; i < MAX_ELEMENTS ; i++)
    {
        count = getOccur(arr, MAX_ELEMENTS, arr[i]);
        printf("%3d %4d\n", arr[i], count);
    }
}

int getOccur(int a[], int tally, int value)
{
    int i;
    tally = 0;

    for( i = 0 ; i < MAX_ELEMENTS ; i++)
    {
        if (a[i] == value)
        {
            ++tally;
        }
    }

    return(tally);

}

void printArr(int a[], int amount)
{
    int i;

    for(i = 0 ; i < amount ; i++)
    {
        printf("%d ", a[i]);
    }

    printf("\n");
}    
4

2 に答える 2

1
printf("%4s %6s\n", " N ", "Count");
printf("%4s %6s\n", "----", "------");

for(i = 0 ; i < MAX_ELEMENTS ; i++)
{
  count = getOccur(arr, MAX_ELEMENTS, arr[i]);
  printf("%4d %6d\n", arr[i], count);
}    

これですべてが 揃うはずです。

編集

コメントの質問に答えて、私のアプローチは、最初にすべての一意の値を見つけarrて、別の配列に保存することです ( it と呼びますunique)。次に、ループ内で配列をウォークスルーuniqueします。

for (i = 0; i < uniqueCount; i++)
{
  count = getOccur(arr, MAX_ELEMENTS, unique[i]);
  printf("%4d %6d\n", unique[i], count);
}

ユニークな要素を見つけることに関しては、力ずくの方法は次のようなものになります

size_t uniqueCount = 0;
int unique[MAX_SIZE];   // needs to be same size as original array in case
                        // all values are unique

for (i = 0; i < MAX_SIZE; i++)
{
  size_t j = 0;
  for (j = 0; j < uniqueCount; j++)
    if (arr[i] == unique[j])
      break;

  if (j == uniqueCount)
    unique[uniqueCount++] = arr[i];
}

元の配列の各要素について、(最初は空の)unique配列をスキャンします。a[i]配列にの値が見つからない場合はunique、それを追加して をインクリメントしますuniqueCount

この方法はかなり非効率的であり、MAX_ELEMENTS が大きくなるとパフォーマンスが低下することに注意してください。より良い解決策が利用可能ですが、あなたはまだ学習曲線の底にいるように聞こえるので、そのままにしておきます.

于 2013-02-14T11:42:59.143 に答える
0

これはあなたが探しているものです。最初の列には 4 があるため、最小幅は 4 で、次の列にはサイズがあります。つまり、フォーマット文字列で指定されている最小幅は 6 です。printfマニュアルページを参照してください

printf("N    Count\n");
printf("---- ------ \n");

for(i = 0 ; i < MAX_ELEMENTS ; i++)
{
  count = getOccur(arr, MAX_ELEMENTS, arr[i]);
  printf("%4d %6d\n", arr[i], count);
}

編集

最初に編集printf

于 2013-02-14T11:15:19.957 に答える