C语言作业运行不出来,求指导

如图的作业,为啥运行的结果出不来,就一光标。

没有运行结果的原因是代码中存在死循环。

进入 while 循环体前,变量 t 的值为 1。循环过程中 t 的值没有改变,而循环条件是 t >= 0.0001,这个条件一直满足,所以程序不会跳出循环。程序一直卡在循环里面,自然不会执行到下面的 printf 函数。

卡循环是没有运行结果的原因。实际上代码还存在其他问题,无法计算出正确的结果:

[1] 变量 s 的类型应该是 double:格雷戈里公式中的每一项都是小数,使用整型数类型保存结果会将小数部分截断;

[2] 第 10 和 11 行的 if 语句块是不必要的:前面的代码保证变量 t 的值为 1,因此无需负数到正数的转换;

[3] 变量 t 没有迭代:代码中变量 t 的作用是每次循环自增,用以提供分母的值,而实际上在循环中没有更新 t 的值;

[4] 变量 t 和变量 s 混淆了:代码用变量 s 来表示格雷戈里公式中的每一项的值,而循环条件的判断却用了变量 t,这也是死循环的原因。同时原题中要求用 t 表示格雷戈里公式中的每一项,代码中使用了变量 s 来表示;

下面提供能输出正确结果的代码并附上说明:

#include <stdio.h>

#define ABS(X) (X >= 0 ? X : -X)

int main()

{

    double pi = 0, t = 1;

    int flag = 1, de = 1;

    while (ABS(t) >= 0.0001)

    {

        t = (double)flag / de;

        pi += t;

        flag = -flag;

        de += 2;

    }

    pi *= 4;

    printf("pi=%.4f\n", pi);

    return 0;

}

代码说明:

[1] 第 2 行 ABS 宏定义:用来取绝对值,正数返回自身值,负数返回相反数,因为公式中的每一项是正负交替的,而判断精度只看绝对值;

[2] 变量 t:代表格雷戈里公式中的每一项的值,初始化值为 1 的原因是,while 循环体的循环条件是 "t >= 0.0001",初始化为 0 不能进入循环;

[3] 变量 de:代表每一项的分母的值,每循环一次自身值加 2;

[4] "t = (double)flag / de;":变量 flag 和 变量 de 的类型都是 int,被除数和除数都是整型数的除法,结果是舍去余数的整数商,因此需要将变量 flag 强制转换成浮点数类型,这样才能得到小数结果,另外,这个表达式省去了每一项的分子 1,实际上是 "(double)flag * 1 / de;"

[5] "+=" 和 "*=":表示变量自增的加数或自乘的因数,"pi += t;" 等同 "pi = pi + t;" ,"pi *= 4;" 等同 "pi = pi * 4;"

程序运行结果

追问

厉害

不过宏定义我们还没学

我的if主要想表达绝对值

循环的条件我弄不清楚

追答

宏定义可以换成函数

double abs(double num)
{
return num >= num : -num;
}
把宏ABS换成函数abs,也可以实现取绝对值

用 if 条件其实也没问题,但是要放在 while 循环体里面,这样才能保证每次循环都执行,比如:
while (t >= 0.0001)
{
t = (double)flag / de;
pi += t;
flag = -flag;
de += 2;
if (t = 0 ? num : -num;
}

上面的追答都出现了代码缺失的问题,现在更正如下:
循环实现
while (t >= 0.0001)
{
t = (double)flag / de;
pi += t;
flag = -flag;
de += 2;
if (t < 0) t = -t;
}

函数实现
double abs(double num)
{
   return num >= 0 ? num : -num;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-11-29
C语言运作的,这你应该找找这个C语言的一些运营方面的一些解释啥的,多了解这个情况。
第2个回答  2020-11-29
C,语言作业运行不出来,c,语言作业运行不出来,说明你的程序里面编辑的时候出现了错误,所以导致没有整法正常运行
第3个回答  2020-11-29
C语言作业运行不出来,有可能是带运行的当中啊数据没有导出来。
第4个回答  2020-11-29
你把代码贴出来啊,你不贴出来我们怎么看哪里出问题呀?