11.5 演習課題

  1.演習課題11-1
 次のプログラムは整数型配列data[ ]に入っているデータを昇順にソーティングして、表示するプログラムです。しかし、このプログラムにはいくつかのバグがあります。printf文を使ったデバッグライトとデバッガ(gdbまたはxxgdb)の両方を使って、どこにバグがあるかを見つけなさい。

#include <stdio.h>

#define DATAN 8; /* データ個数 */

void disp_data(void); /* 関数のプロトタイプ宣言 */

/* ソートするデータ */
static int data[DATAN]={34, 234, 30, 1, 9, 0, 87, 789}

int main(void){
      int i, j;
      int temp;

      disp_data(); /* データの表示 */

      /* データのソーティング */
      for(i = 1; i <= DATAN; i++){
             for(j = i; j < DATAN; j++){
                   if(data[i] < data[j]){
                      temp = data[i];
                      data[i] = data[j];
                      data[j] = temp;
                  }
             }
      }

      disp_data(); /* データの表示 */
}

/* データの表示 */
void disp_data(void){
       int i;

      printf("data = ");
      for(i = 0; i <= DATAN; i++){
           printf("%d ", data[i]);
      }
      printf("\n");
}
 デバッグ後の正常なプログラムでは、次のような結果が得られるはずです。
data = 34 234 30 1 9 0 87 789 
data = 0 1 9 30 34 87 234 789