提示遇见死循环;
但是我找不到。
9
5 2 7 4 8 23 65 1 40
#include
#include
using namespace std;
//请填入你的代码
class Array
{
private:
int p[10];
int k;
float s;
public:
Array(int [],int );
int fun(int n);
void sum();
void show();
~Array(){
delete []p;
}
};
Array::Array(int *ptr,int n)
{
s=0;
for(int i=0;i<=n;i++)
p[i]=ptr[i];
}
int Array::fun(int n)
{
int cp=1;
for(int i=2;i<=sqrt(n);i++)
{
if(n%i==0) cp=0;
}
return cp;
}
void Array::sum()
{
int i=0,temp=0;
for(;iif(fun(p[i]))
{s+=p[i];temp++;}
}
s/=temp;
}
void Array::show()
{
cout<<"数组个数为:"<"数组为:"<for(int i=0;i" "<if((i+1)%5==0) cout<"和为:"<int main( )
{
int p[10];
int k;
//请填入你的代码
cin>>k;
for(int q=0;q>p[q];
}
Array arr(p,k);
arr.sum();
arr.show();
return 0;
}
在 Array::sum() 函数中,for循环的判断条件错误,应该是 i<k 而不是 k++。因为在for循环中已经进行了 i++ 操作,如果将 k++ 放在循环语句中,会导致 k 的值一直增加,最终导致数组越界和死循环。
{
int i=0,temp=0;
for(;i<k;i++)
{
if(fun(p[i]))
{s+=p[i];temp++;}
}
s/=temp;
}
建议以后编写程序时要仔细检查循环条件,特别是for循环的语法是否正确。有用的话,给个关注,谢谢!
```c++
```
void Array::sum()
{
int i=0,temp=0;
for(;i<k;k++)//这里
{
if(fun(p[i]))
{s+=p[i];temp++;}
}
s/=temp;
}
for(int q=0;q<k;k++)这里k++改为q++
for(;i<k;k++)这里k++改为i++
永远要循环变量进行++,而不要把判断条件自增
delete []p; p都不是new出来的,你delete干啥
for(int q=0;q<k;k++) k++不对啊,q++
25行也是错的,会越界
40行最后也应该是i++
给你改了一个好用的版本:
#include <iostream>
#include<math.h>
using namespace std;
//请填入你的代码
class Array
{
private:
int *p;
int n;
float s;
public:
Array(int [],int );
int fun(int n);
void sum();
void show();
~Array() {if(p!=NULL) delete []p;}
};
Array::Array(int *ptr,int n)
{
s=0;
this->n = n;
p = new int[n];
for(int i=0;i<n;i++)
p[i]=ptr[i];
}
int Array::fun(int n)
{
if(n<2)
return 0;
int k = sqrt(n*1.0);
for(int i=2;i<=k;i++)
{
if(n%i==0)
return 0;
}
return 1;
}
void Array::sum()
{
int i=0,temp=0;
s=0;
for(;i<n;i++)
{
if(fun(p[i]))
{s+=p[i];temp++;}
}
if(temp>0)
s/=temp;
}
void Array::show()
{
cout<<"数组个数为:"<<n<<endl;
cout<<"数组为:"<<endl;
for(int i=0;i<n;i++)
{
cout<<*(p+i)<<" ";
if((i+1)%5==0) cout<<endl;
}
cout<<"平均值为:"<<s;
}
int main( )
{
int p[100];
int k;
//请填入你的代码
cin>>k;
for(int q=0;q<k;q++)
{
cin>>p[q];
}
Array arr(p,k);
arr.sum();
arr.show();
system("pause");
return 0;
}
代码中有一个错误:在输入数组 p[q] 的时候,变量 q 没有被递增,导致一直在输入 p[0],出现了死循环。将第 43 行代码的 q++ 修改为 q 即可。
#include <iostream>
#include<math.h>
using namespace std;
class Array
{
private:
int p[10];
int k;
float s;
public:
Array(int [],int );
int fun(int n);
void sum();
void show();
~Array(){
delete []p;
}
};
Array::Array(int *ptr,int n)
{
s=0;
for(int i=0;i<=n;i++)
p[i]=ptr[i];
k=n;
}
int Array::fun(int n)
{
int cp=1;
for(int i=2;i<=sqrt(n);i++)
{
if(n%i==0) cp=0;
}
return cp;
}
void Array::sum()
{
int i=0,temp=0;
for(;i<k;i++)
{
if(fun(p[i]))
{s+=p[i];temp++;}
}
s/=temp;
}
void Array::show()
{
cout<<"数组个数为:"<<k<<endl;
cout<<"数组为:"<<endl;
for(int i=0;i<k;i++)
{
cout<<*(p+i)<<" "<<endl;
if((i+1)%5==0) cout<<endl;
}
cout<<"和为:"<<s;
}
int main( )
{
int p[10];
int k;
cin>>k;
for(int q=0;q<k;q++) // 将 q++ 修改为 q
{
cin>>p[q];
}
Array arr(p,k);
arr.sum();
arr.show();
return 0;
}