SilverAz 发表于 2022-9-6 21:59:31

新手求助

为什么我的程序不正常循环

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

int main()
{
        int i=1,j,n=1;
        double sum,a,z,x;
        bool flag=1;
        x=1e-8;
       
        while(flag)
        {
               
                a=1/i;
               
                if(a<x)
                {
                        flag=0;
                }
                i=i+2;
        }
        printf("%.7f",x);
        for(j=1;j+2<i;j+2)
        {
                z=1/j*pow(-1,(n+1));
                sum+=z;
                n++;
        }
        printf("%.7f",sum);
       
        return 0;
                       
}

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

int main()
{
      int sign = 1; // 表示符号
      double pi = 0.0, n = 1, term = 1.0; // n表示分母,term表示当前项的值

      while (fabs(term) >= 1e-8) // 1e-8表示10^(-8)
      {
                pi = pi + term;
                n = n + 2;
                sign = -sign;
                term = sign / n;
      }

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

      return 0;
}

ba21 发表于 2022-9-6 22:17:03

      for(j=1;j+2<i;)
      {
                z=1/j*pow(-1,(n+1));
                sum+=z;
                n++;
                j+=2;
      }

SilverAz 发表于 2022-9-6 22:19:49

ba21 发表于 2022-9-6 22:17


为什么写在for循环里变量增加不行呢

ba21 发表于 2022-9-6 22:21:00

SilverAz 发表于 2022-9-6 22:19
为什么写在for循环里变量增加不行呢

那请问你 j+2 是什么意思? 和 j++有什么区别?

ba21 发表于 2022-9-6 22:21:58

SilverAz 发表于 2022-9-6 22:19
为什么写在for循环里变量增加不行呢

      for(j=1;j+2<i;j+=2)
      {
                z=1/j*pow(-1,(n+1));
                sum+=z;
                n++;
      }
是一样的

SilverAz 发表于 2022-9-6 22:22:57

ba21 发表于 2022-9-6 22:21
那请问你 j+2 是什么意思? 和 j++有什么区别?

想要达到
步长为2增长到≥i,然后退出循环啊

SilverAz 发表于 2022-9-6 22:25:34

ba21 发表于 2022-9-6 22:21
是一样的

for(int j=2;j<10;j+2)是不是死循环

ba21 发表于 2022-9-6 22:28:19

SilverAz 发表于 2022-9-6 22:25
for(int j=2;j<10;j+2)是不是死循环

假设j=1,
   1. j+2=3, 结果是3, j还是1没错吧。
2. j=j+2, 结果是j=3

SilverAz 发表于 2022-9-6 22:31:17

ba21 发表于 2022-9-6 22:28
假设j=1,
   1. j+2=3, 结果是3, j还是1没错吧。
2. j=j+2, 结果是j=3

感谢
页: [1]
查看完整版本: 新手求助