c# 在C中获取要正确计算和循环的函数的问题

9rbhqvlz  于 2023-10-14  发布在  C#
关注(0)|答案(1)|浏览(248)

我需要做一个程序,把用户输入的迭代公式:PI=4(1/1 -(1/3)+(1/5).重复多次。到目前为止,我的问题是它没有准确地接受我的输入。
基本上,我的方法是尝试用分母中的x分离分子和分母,并尝试让它加上2,但我甚至还没有弄清楚- +旋转,因为我想确保我首先工作。
我的第一个问题是,它得到的是随机数,但后来我把变量类型改为float,解决了这个问题,但现在一切都是直0。

int pi_formula(float numerator,int x,int n)
{

    numerator=1.0;
    x=1;
    float fraction= numerator/x;
    float total;
    
    printf("%lf",&fraction);

    for (int i = 1; i <= n; i++) // loop goes for amount of user input times
        
 
        do
    {
        
        fraction; 
        return(total);
        x+= 2;              
     } while (1);
     
      printf("Estimated PI is : %f",&total);


}

当我运行这段代码

printf("%lf",&fraction);

将返回0.000000。
我甚至不知道我是否正确地编写了循环,因为我似乎不能让我的输入被识别。
这里是原型和主要的参考。

int pi_formula(float numerator,int x,int n);

int main ()
{

// Problem 2
    float numerator;
    int x;
    int n;
    printf("ESTIMATE PI\n");
    printf("Enter number of iterations:");
    scanf("%i",&n);
    pi_formula(numerator,x,n);

     



system("pause");
}

我曾尝试设置printf调用来检查输入,希望看到我输入的内容,但结果也是0。

apeeds0o

apeeds0o1#

对于初学者,此函数声明

int pi_formula(float numerator,int x,int n)

没有意义,至少因为它的返回类型是int,而不是浮点类型和多余的参数。
函数应该至少声明为

double pi_formula( unsigned int n );

你的函数除了这个while循环之外什么都不返回,尽管它的返回类型不是void

do
{
    
    fraction; 
    return(total);
    x+= 2;              
 } while (1);

其中total具有类型float,这也没有意义。
还有其他错误。例如,在printf的调用中,

printf("Estimated PI is : %f",&total);

你正在尝试输出一个指针作为一个浮点数。
可以通过以下方式定义该函数

double pi_formula( unsigned int n )
 {
     double pi = 0.0;

     for ( unsigned int i = 0; i < n; i++ )
     {
         if ( i % 2 == 0 )
         {
             pi += 1.0 / ( 2 * i + 1 );
         }
         else
         {
             pi -= 1.0 / ( 2 * i + 1 );
         }  
     }

     return 4 * pi;
}

在main中你可以写

int main( void )
{
    puts( "ESTIMATE PI" );

    printf( "Enter number of iterations: " );
  
    unsigned int n = 0;

    if ( scanf( "%u", &n ) == 1 )
    {
         printf( "Estimated PI is : %f\n", pi_formula( n ) );
    }
}

下面是所有的代码组合在一起

#include <stdio.h>

double pi_formula( unsigned int n )
{
    double pi = 0.0;

    for (unsigned int i = 0; i < n; i++)
    {
        if (i % 2 == 0)
        {
            pi += 1.0 / ( 2 * i + 1 );
        }
        else
        {
            pi -= 1.0 / ( 2 * i + 1 );
        }
    }

    return 4 * pi;
}

int main( void )
{
    puts( "ESTIMATE PI" );

    printf( "Enter number of iterations: " );

    unsigned int n = 0;

    if (scanf( "%u", &n ) == 1)
    {
        printf( "Estimated PI is : %f\n", pi_formula( n ) );
    }
}

程序输出为

ESTIMATE PI
Enter number of iterations: 9999
Estimated PI is : 3.141693

相关问题