C言語の解説の演習の解答(第十回)


解答は次のようになります.


#include <stdio.h>

main()
{
  void nyuryoku(int *n, int *x0, int *a);
  void keisan(int n, int x0, int *a, int *fx);
  void atai(int n, int x0, int *a, int *fx);

  int n,x0;
  int a[10],fx;

  nyuryoku(&n,&x0,a);
  keisan(n,x0,a,&fx);
  printf("f'(x0)=%d¥n",fx);
  atai(n,x0,a,&fx);
  printf("f(x0)=%d¥n",fx);
}

void nyuryoku(int *n, int *x0, int *a)
{
  int i;

  printf("n(<10)=");
  scanf("%d",n);
  printf("x0=");
  scanf("%d",x0);
  for (i=0;i<=(*n);i++) {
    scanf("%d",&(a[i]));
  }
}

void keisan(int n, int x0, int *a, int *fx)
{
  int xk,i;

  *fx = 0;
  xk = 1;
  for (i=0;i<=n-1;i++) {
    *fx = *fx+i*a[i+1]*xk;
    xk = xk*x0;
  }
}

void atai(int n, int x0, int *a, int *fx)
{
  int xk,i;

  *fx = 0;
  xk = 1;
  for (i=0;i<=n;i++) {
    *fx = *fx+a[i]*xk;
    xk = xk*x0;
  }
}
ちょっとポインタの所が分かりにくいかもしれません. 分からない人はもう一度、「C言語の解説と演習(第六回)」を見てください. あと、配列 a の宣言で

  int a[10]
としているので、このプログラムでは多項式の次数 n が 10 より大きいときは正しく動作しません.どんなに大きな n を入力しても正しく動作するプログラムを作るには、malloc という関数を使うのですが、予備知識が必要ですのでここでは説明は省きます.