在C语言中,怎样用 *** 作符表示一个数的开方

在C语言中,怎样用 *** 作符表示一个数的开方,第1张

26

运算符

C语言的内部运算符很丰富,运算符是告诉编译程序执行特定算术或逻辑 *** 作的符号。C语言有三大运算符:算术、关系与逻辑、位 *** 作。另外,

C还有一些特殊的运算符,用于完成一些特殊的任务。

261

算术运算符

表2

-

5列出了C语言中允许的算术运算符。在C语言中,运算符“

+”、“-”、“”和“

/”的用法与大多数计算机语言的相同,几乎可用于所有C语言内定义的数据类型。当“

/”被用于整数或字符时,结果取整。例如,在整数除法中,

1

0

/

3

=

3。

一元减法的实际效果等于用-

1乘单个 *** 作数,即任何数值前放置减号将改变其符号。模运算符“%”在C语言中也同它在其它语言中的用法相同。切记,模运算取整数除法的余数,所以“%”不能用于float和double类型。

表2-5

算术运算符

运算符

作用

运算符

作用

-

减法,也是一元减法

%

模运算

+

加法

--

自减(减1)

乘法

++

自增(增1)

/

除法

下面是说明%用法的程序段。

int

x,y;

x

=

10;

y

=

3;

printf("%d",x/y);

/

显示3

/

printf("%d",x%y)

;

/

显示1

,整数除法的余数

/

x

=

1

;

y

=

2

;

printf("%d,%d",x/y,x%y)

;

/

显示0,1

/

最后一行打印一个0和一个1,因为1

/

2整除时为0,余数为1,故1

%

2取余数1。

262

自增和自减

C语言中有两个很有用的运算符,通常在其它计算机语言中是找不到它们的—自增和自减运算符,

+

+和-

-。运算符“

+

+”是 *** 作数加1,而“-

-”是 *** 作数减1,换句话说:x

=

x

+

1

;

同+

+

x

;

x

=

x

-

1

;

同-

-

x

;

自增和自减运算符可用在 *** 作数之前,也可放在其后,例如:

x

=

x

+

1;可写成+

+

x;或x

+

+;但在表达式中这两种用法是有区别的。自增或自减运算符在 *** 作数之前,

C语言在引用 *** 作数之前就先执行加1或减1 *** 作;运算符在 *** 作数之后,

C语言就先引用 *** 作数的值,而后再进行加1或减1 *** 作。请看下例:

x

=

1

0;

y

=

++x;

此时,y

=

11。如果程序改为:

x

=

10

;

y

=

x++

;

则y

=

10。在这两种情况下,

x都被置为11,但区别在于设置的时刻,这种对自增和自减发生时刻的控制是非常有用的。

在大多数C编译程序中,为自增和自减 *** 作生成的程序代码比等价的赋值语句生成的代码要快得多,所以尽可能采用加1或减1运算符是一种好的选择。

下面是算术运算符的优先级:

最高

++、--

-(一元减)

、/、%

最低

+、-

编译程序对同级运算符按从左到右的顺序进行计算。当然,括号可改变计算顺序。C语言处理括号的方法与几乎所有的计算机语言相同:强迫某个运算或某组运算的优先级升高

对于任意实数的开方,可以使用切线法得到其任意精度的结果,切线法的迭代公式为:

取任意初始值,以上迭代序列将会收敛:

实际应用中一般取初始值为稍微大的实数,这样可以加快序列的收敛速度。

c语言代码如下: // 2015-12-24// By: ChenYu#include mathh#include stdioh#define ABS(a) ((a)<0-(a):(a))#ifdef _WIN32    typedef unsigned __int64 uint64;#else    typedef unsigned long long uint64;#endif// calculate a approximate valuestatic double calcInitRoot(double x, int n){    const uint64 exptMask=((uint64)1<<11)-1;     const uint64 fracMask=((uint64)1<<52)-1;    uint64 xInt=(uint64)&x;    int xExpt=(int)((xInt>>52)&exptMask)-1023;    xInt=((uint64)((xExpt+1024n-1)/n)<<52)+(xInt&fracMask)/n;    return (double)&xInt;}double calcRoot(double x, int n){    int i, j, s=1-((x<0)<<(n&1));    double a=ABS(x);    double x1, x0=calcInitRoot(a, n);    double err=x01e-14;    if(x==0)        return 0;    for(i=1; i<50; i++)    {        double xn=1;        for(j=0; j<n-1; j++)            xn=x0;        x1=((n-1)x0xn+a)/(xnn);// printf(x%d=%14f\n, i, x1);        if(ABS(x1-x0)<=err)            break;        x0=x1;    }    return sx1;}void main(){    double x=-31141592653589793;    int n=11;    double y=calcRoot(x, n);    printf(root(%g,%d)=%+14f\n, x, n, y);    printf(root(%g,%d)=%+14f\n, x, n, pow(ABS(x), 10/n));}

以上就是关于在C语言中,怎样用 *** 作符表示一个数的开方全部的内容,包括:在C语言中,怎样用 *** 作符表示一个数的开方、开方的计算机程序代码、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9689318.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存