一、实验目的
通过编写一个数值计算程序,让同学们进一步熟练使用编辑器 vim 或者 emacs,
同时掌握 gcc 编译和 gdb 调试方法,并且能够使用 make 工具管理工程。
二、实验任务和要求
- 写一个 c 语言程序,使用两种数值方法计算 其中> 1。
- 一种是二分法,初始区间可设置为[0, x]。假设第 k 步的迭代解为,终止条件设置
为
− < = 1E − 10
注意,这里 值由系统函数得到。 - 另一种是 Newton 方法,牛顿方法的初始值设置为 = 设置与二分法相同的终
止条件。关于 Newton 方法求根,请参考百度百科——牛顿迭代法。 - 使用 Makefile 进行源码的工程管理,例如下图所示
- 使用 GDB 进行编译调试:设置断点,查看变量等。
三、实验步骤和实验结果
1.编写程序如下
main.c
#include<stdio.h>
float sqrt1(n);
float sqrt2(x);
int main(void)
{
int n;
printf("请输入整数n:");
scanf("%d",&n);
int f;
printf("使用二分法,输入1\n使用牛顿法,输入2:");
scanf("%d",&f);
if(f==1)
sqrt1(n);
else
sqrt2(n);
return 0;
}
newton.c
#include <stdio.h>
void sqrt2(int x) {
if (x == 0) {
return 0;
}
float last = 0.0;
float res = 1.0;
while (res != last) {
last = res;
res = (res + x / res) / 2;
}
printf("牛顿法计算结果: %.5f\n", res);
return;
}
bisection.c
#include <stdio.h>
#include <math.h>
#define eps 0.000001
void sqrt1(int n)
{
if (n < 0)
{
return -1.0;
}
else
{
float low, up, mid;
low = 0, up = (n>=1?n:1);
mid = (low + up) / 2;
do {
if (mid*mid>n)
up = mid;
else
low = mid;
mid = (up+low)/2;
//printf("%.2f\n",fabsf(mid-low));
} while (fabsf(mid - low) > eps);
printf("二分法计算结果:%.5f", mid);
return;
}
}
2. 编写makefile文件
ans: newton.o bisection.o main.o
gcc -o ans newton.o bisection.o main.o -g
newton.o: newton.c
gcc -c -o newton.o newton.c -g
bisection.o: bisection.c
gcc -c -o bisection.o bisection.c -g
main.o: main.c
gcc -c -o main.o main.c -g