地元の工業大学に通っている友達からニュートン法教えてーとヘルプがあったときに作ったプログラムを残しておく。
ネット上のプログラムコピペ防止,プログラムを書く練習として次の条件があった。
1.1つ以上関数を利用すること
2.繰り返し分を用いること
3.ポインタを用いること
上2つの条件はあって無いようなものだけど、3つめが特殊かなという印象。。。
ポインタを使わなくて良いプログラムを無理やりポインタを使うようにして作ったので少し気持ち悪いかもしれない笑
課題.2次方程式ax^2+bx+c=0の解をニュートン法で求めなさい。その際、近似解の差は1/10000以下とする。
但し、プログラム実行時には適切な初期値を学籍番号の下位2桁として与える。a,b,cはそれぞれ学籍番号の上位から1桁,2桁,3桁とする。
#include<stdio.h>
#include<math.h>
#define ERR 0.0001 //許容誤差1/10000
/*
入力された点xより解に近い点を求める関数
*/
void next(double*);
int main(void)
{
double ans, ans1;
double x;
printf("調べる最初の点xの値を入力してください\n");//学籍番号下位2桁とする初期値
scanf_s("%lf", &ans);
ans1 = ans;
next(&ans1);
do{
ans1 = ans;
next(&ans);
printf("ans:%lf\tans1:%lf\n", ans, ans1);//ansとans1の関係を表示
} while (fabs(ans - ans1) > ERR);
printf("この方程式の解の1つは%lf\n", ans);
}
void next(double *x)
{
int a = 1, b = 2, c = 3;//出席番号
*x = *x - (a*(*x)*(*x) + b*(*x) + c) / (2 * a*(*x) + b);//a - f(a)/f'(a)
}
DOWNLOAD:newton.c