❶ c語言編程 其功能是:求自然對數的底e近似值,要求其誤差小於0.00001,不能輸出
#include <stdio.h>
void main( )
{int i;
double t,e;
i=0;
t=1;
e=1;
while(t>0.00001)
{i=i+1;
t=t/i;
e=e+t;}
printf ("e=%.6lf",e);}
❷ C語言的浮點數計算精度的一個問題
#include <stdio.h>
#include <math.h>
int main()
{ float x=7.6,y;
y=x*x*x;//7.6的立方應該精確得到 438.976
printf("x=%g y=%g ",x,y);
if(fabs(y-438.976)<1e-3)//誤差小於0.001就認為是相等,若要更高精度,建議採用double
printf("YES ");//YES沒有輸出
else
printf("NO ");//輸出NO
return 0;
}
❸ c語言 絕對值問題
不是要求誤差不超過0.001嗎?那如果誤差大於0.001的話就繼續循環做下去啊,直到誤差小於0.001了停止啊。這在邏輯上才對啊,有什麼不妥嗎?
❹ 大一C語言問題(C語言程序設計 李鳳霞 第二版)
1. D, 位元組對齊 char 也是2
2. A B的第三個參數錯;C常量不能做為左值;D不知道了
3. A
4. A
5. C
6. D
7. C
8. D
9. C
10.B
11.C
12.B 用追加方式不可讀。
13.B
❺ 用C語言輸入一元二次方程的系數a,b,c,採用二分法求方程的根 ,精確到小數點後2位(即誤差<=0。01)
以下是二分法求已知區間的根,自己將其修改一下,增加一個區間確定就可以了
#include <math.h>
#include <stdio.h>
double f(double a, double b, double c, double x) // 求函數值
{ return a * x * x + b * x + c; }
int main()
{
double x, u, v, f1, f2, fm, a, b, c;
printf("請輸入一元二次方程的系數:");
scanf("%lf%lf%lf", &a, &b, &c);
/* 這里可以增加是否合法二次方程的判斷*/
printf("請輸入區間端點:");
scanf("%lf%lf", &u, &v);
f1 = f(a, b, c, u);
f2 = f(a, b, c, v);
if (f1 * f2 > 0)
{
printf("區間內無解!\n");
return 1;
}
do
{
x = (u + v) / 2;
fm = f(a, b, c, x);
if (fm == 0)
break;
if (f1 * fm > 0.0) /* 同號時修改端點*/
{
u = x;
f1 = f(a, b, c, u);
}
else
v = x;
} while (fabs(fm) >= 1e-2);/*這里還可以在條件中增加循環次數控制*/
printf("根為:%8.3lf\n", x);
return 0;
}
❻ C語言中小數的誤差怎麼解決
一般是:根據問題領域所容許的的精度,定義一個誤差上限(一個極小數)。然後在浮點計算時,計算結果與這個誤差上限作比較,而不是與0作比較。
例如,牛頓迭代法求值:
doublef(doublex);//f(x)
doublef1(doublex);//f(x)的導函數
#defineEPSILON0.001//誤差精度
doubleresolve(doublex){//x為初始近似解
while(1){
doubledelta=f(x)/f1(x);
//當迭代的變化量,小於誤差精度時,就認為找到解了
if(delta>-EPSILON&&delta<EPSILON){
break;
}
x-=delta;
}
returnx;
}
❼ c語言中浮點數的精度如何控制,使誤差在0.001內
用while,do...while,for循環都可以,如
do
{
eps = ...
}while(eps < 0.001)