/* mallocによる配列の動的確保の練習問題 例えば 1.0 2.0 11 と指定すると、1.0から2.0まで等間隔の値を持つ11個の要素 の配列を作り、その値とそれを2乗した値を出力する。 */ #include #include int main() { int num, i; double f_value, l_value; double *x; /* 最初の値、最後の値、数値の個数を入力 */ printf("Input First value, Last value, Total number: "); scanf("%lf%lf%d", &f_value, &l_value, &num); /* メモリ確保 */ x = (double *) malloc( sizeof(double)*num ); if (x == NULL ){ /* エラー処理:無しでも減点しない */ fprintf(stderr, "error in memory allocation!\n"); exit (4); } /* 格納する値の決定。num個の値を作るために、端の値のぶんを考慮して 元の区間をnum-1分割する。 */ for( i=0 ; i<=num-1 ; i++ ){ x[i] = f_value + i*(l_value-f_value)/(num-1); /* 整数除算にならないように注意 */ } /* 結果表示 */ printf("Values of x\n"); for( i=0 ; i<=num-1 ; i++ ){ printf("%.3f ", x[i]); } printf("\n"); printf("Values of x^2\n"); for( i=0 ; i<=num-1 ; i++ ){ printf("%.3f ", x[i]*x[i]); } printf("\n"); free( x ); /* メモリ解放 */ return 0; }