【課題6−1】

 

(プログラム例1)

#include <stdio.h>

#define DATA_SIZE 5

 

int main(void) {

         double data[DATA_SIZE] = {1.1, 2.2, 3.3, 4.4, 5.5};

         double *result;

         int i;

        

         /* DATA_SIZE個の要素のdouble型配列のためのメモリ確保 */

         /* 失敗したらエラー処理 */

         if ((result=(double *)malloc(DATA_SIZE * sizeof(double)))==NULL) {

                 printf("Failed to allocate memory.\n");

                 return 1;

         }

 

         for (i = 0; i < DATA_SIZE; i++)

                 result[i] = data[i] * data[i];

        

         for (i = 0; i < DATA_SIZE; i++)

                 printf("%5.2f\n", result[i]);

 

         free(result);  /* 確保したメモリの解放 */

         return 0;

}

 

(プログラム例2)

#include <stdio.h>

#define DATA_SIZE 5

 

double *square_array(const double *dat, int n);

 

int main(void) {

         double data[DATA_SIZE] = {1.1, 2.2, 3.3, 4.4, 5.5};

         double *result;

         int i;

        

         /* 関数square_arrayから、計算結果を格納した配列を指すポインタを受け取る */

         /* 失敗していたらエラー処理 */

         if ((result=square_array(data, DATA_SIZE))==NULL) {

                 printf("Failed to allocate memory.\n");

                 return 1;

         }

        

         for (i = 0; i < DATA_SIZE; i++)

                 printf("%5.2f\n", result[i]);

 

         free(result); /*関数square_array内で確保されたメモリの解放 */

         return 0;

}

 

/* n個の要素からなるdouble型配列の各要素の二乗を計算する関数 */

/* 動的に確保して計算結果を格納したdouble型配列のアドレスを返す */

double *square_array(const double *dat, int n) {

         double *buf;

         int i;

         if ((buf=(double *)malloc(n * sizeof(double)))!=NULL) {

                 for (i = 0; i < n; i++) {

                          buf[i] = dat[i] * dat[i];

                 }

         }

         return buf;

}