看看我代码哪错了#include<iostream> #include<cmath> using namespace std; class Point{ private: float x,y; public: double suan(){ return sqrt(x*x+y*y); } }; int main(){ Point p[5]; double dis[5]; for(int i=0;i<5;i++){ cin>>p[i].x>>p[i].y; dis[i]=p[i].suan(); } for(int i=0;i<5;i++){ for(int j=1;j<5;j++){ if(dis[i]>dis[j]) { swap(dis[i],dis[j]); } } } cout<<"与原点的距离:"<<endl; for(int i=0;i<5;i++) { cout<<dis[i]<<" "; } }
时间: 2024-01-17 22:04:20 浏览: 23
在这段代码中,类 Point 中的私有属性 x 和 y 没有被初始化,导致在调用 suan() 函数时会出现未定义的行为。您可以在类 Point 的构造函数中对 x 和 y 进行初始化,如下所示:
```
class Point{
private:
float x,y;
public:
Point(float x=0, float y=0) : x(x), y(y) {}
double suan(){
return sqrt(x*x+y*y);
}
};
```
这里使用了类的构造函数来初始化 x 和 y,使其在调用 suan() 函数时不会出现未定义的行为。
另外,在排序中,您的代码实现有误。应该是:
```
for(int i=0;i<5;i++){
for(int j=i+1;j<5;j++){
if(dis[i]>dis[j])
swap(dis[i],dis[j]);
}
}
```
这里使用了两个循环来实现排序,而且第二个循环的起始值是 i+1,避免了重复比较。
相关问题
#include <iostream> #include<algorithm> #include<cmath> #include <queue> using namespace std;
#include <iostream>:这是C++标准库中的头文件,用于输入输出流操作,包括cin、cout等。
#include<algorithm>:这是C++标准库中的头文件,用于提供各种算法操作,如排序、查找等。
#include<cmath>:这是C++标准库中的头文件,用于提供数学函数操作,如绝对值、平方根等。
#include <queue>:这是C++标准库中的头文件,用于提供队列操作,包括入队、出队等。
using namespace std;:这是C++的命名空间声明,表示使用std命名空间,可以直接使用std中的函数和对象。
#include <iostream> #include <string> #include <stack> #include <vector> #include <iomanip> using namespace std; 逐行注释以上代码
这是一段C++的程序代码,使用了几个标准库的头文件。以下是逐行的注释:
```
#include <iostream> // 输入输出流库头文件
#include <string> // 字符串库头文件
#include <stack> // 栈库头文件
#include <vector> // 向量库头文件
#include <iomanip> // 格式控制库头文件
using namespace std; // 命名空间
```
这段程序代码导入了五个标准库的头文件,分别是iostream、string、stack、vector、iomanip,它们分别用于处理输入输出、字符串、栈、向量和格式控制。其中iostream是C++中最常用的输入输出流库,string是用于字符串操作的库,stack是用于栈数据结构的库,vector是用于动态数组的库,iomanip是用于格式化输出的库。
最后一行代码使用了命名空间std,这意味着所有的标准库函数和变量都在std命名空间中。如果不使用using namespace std,则需要在使用标准库函数时加上std::前缀。