【課題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;
}