C语言 程序中的问题,仅循环1作为输出

rqmkfv5c  于 2023-05-16  发布在  其他
关注(0)|答案(3)|浏览(174)
#include <stdio.h>
#include <math.h>

int main() {
    float root;
    int i=1,sum;
    do {
        sum = 2*i - 1;
        printf("\t%d\n",sum);
        i *= 5 / 3;
    } while (sum <= 1.5);
    root = sqrt(i) ;
    printf("\n%.3f",root);
    return 0;
}

它只重复1。
我试着得到1、3、7或15这样的数字,但我只得到了1的重复。

tcomlyy6

tcomlyy61#

如果i真的应该是5/3的幂,那么它需要是double,而不是int。(使用float没有太大意义,因此也将root设置为double
既然你想把它和1.5进行比较,那么sum也应该是一个double。但是sum不是一个总和!也许你是说sum += 2*i - 1;?在这种情况下,sum需要初始化为零。
然后你不显示总和?
你想计算什么?

dy1byipe

dy1byipe2#

5/3 = 1.6666666667。然而,i和5/3都是整数类型,所以它只显示该数字的整数部分1,而不是1.6666666667。要解决这个问题,请将i设置为float或double,并将5/3替换为5.0/3.0

bakd9h0s

bakd9h0s3#

您的计算是浮点型的,因此您应该将变量声明为浮点型double

#include <stdio.h>
#include <math.h>

int main() {
  double root;
  double i = 1, sum;
  do {
    sum = 2 * i - 1;
    printf("\t%lf\n", sum);    // use %lf for printing doubles
    i *= 5.0 / 3.0;            // 5/3 is a integer division resulting in 1
  } while (sum <= 1.5);
  root = sqrt(i);
  printf("\n%.3lf", root);     // use %lf for printing doubles
  return 0;
}

一个可能的输出将是:

1.000000
        2.333333

1.667

OTOH我不确定这个程序应该做什么。

相关问题