在C 中获取错误的答案

Get Wrong answer in c++

本文关键字:答案 取错误 获取      更新时间:2023-10-16
double getcircleArea(int radius, double pi);
double getcircleArea(int radius = 1, double pi = 3.14)
{
    return radius*radius*pi;
}
int main()
    {
        printf("area:%dn", getcircleArea());
        printf("area:%dn", getcircleArea(10));
        printf("area:%dn", getcircleArea(15, 3.14159));
        system("pause");
        return 0;
    }

只是一个简单的例子。

我得到结果:

区域:1374389535区域:0区域:-1408749273

我想要...区域:3.14区域:314区域:706.85775

不要使用 printf

std::cout << "area: " << getcircleArea() << "n";

无需您记住模糊的%代码("%d?i),这意味着'double'!")

%d使用整数格式打印值。如果要打印浮动,则应使用%f。

%d用于int数据类型。将%lf用于double

#include <iostream>
using namespace std;
double getcircleArea(int radius = 1, double pi = 3.14){
    return (radius*radius*pi);
}
int main(){  
        printf("area:%lfn", getcircleArea()); // %d --> %lf
        printf("area:%lfn", getcircleArea(10));  // %d --> %lf
        printf("area:%lfn", getcircleArea(15, 3.14159));  // %d --> %lf
        system("pause")
  return 0;
 }

您的printf()格式错误。您提供的%d占位持有人,该占位符代表十进制或基本10号,但您应该为其提供%f占位符以表示浮点数。

printf("Area: %fn", getcircleArea(10, 3.14));

这是printf()函数的一个很好的参考,并提供了所有可用的指定字符。

您也可以像这样的标准名称空间中使用cout

std::cout << "Area: " << getcircleArea(10, 3.14);

我还建议不要将PI作为参数,因为Math.h的恒定值更加精确。您可以通过执行以下操作来访问它:

M_PI

或,如 @m.m所建议的,您可以通过找到-1的arccosine获得PI,该arccosine of -1返回pi这样的pi:

double PI = acos(-1.0);

,也可以将其设置为像这样的常数:

const long double PI = 3.141592653589793238L;
const double PI = 3.141592653589793;
const float PI = 3.1415927;

请尝试此代码。如果您不创建和使用代码中的对象,则OOP的全部目的被击败。因此,请创建和使用以下代码中所示的对象。

   #include <iostream>
   using namespace std;
   class overloading
   {
    public: 
    int getcircleArea()
    {
     cout<<"area is "<< 0 <<"n";
    }
    double getcircleArea(int radius)
    {
     cout<<"area is "<< radius*radius*3.14<<"n";
    }
    double getcircleArea(int radius, float pi)
    {
     cout<<"area is "<< radius*radius*pi<<"n";
    }
   };
int main()
{
    overloading overload1;
    overload1.getcircleArea();
    overload1.getcircleArea(10);
    overload1.getcircleArea(15, 3.14159);
    return 0;
}

NOTE :看起来您正在练习功能超载概念。在您的代码中,您已声明了一个函数:

 double getcircleArea(int radius = 1, double pi = 3.14)
 {
 return radius*radius*pi; 
 }

.....您在main程序中对此功能进行解析,如下所示:

  printf("area:%dn", getcircleArea(15, 3.14159))

我不会向您推荐这种编程!

当您将半径的平方乘以Pi的值时,它将变为双重值。因此,要打印双值使用%lf在打印功能中。您也可以使用%f代替%lf。

printf("area: %lfn", getcircleArea(10, 3.14));

在使用C 时,我建议您使用COUT而不是打印,因为您不需要诸如"%d""%f"等格式指定符。

cout<<"area: "<<getcircleArea(10,3.14)<<endl;