C++用随机函数产生10个互不相同的两位整数存放到一维数组中,并输出其中的素数。
为什么会不对呢,有些素数输不出来啊。#include<iostream>#include<cstdlib>#include<ctime>usingnamespacestd...
为什么会不对呢,有些素数输不出来啊。
#include<iostream>#include<cstdlib>#include<ctime>using namespace std;void prime(int a[10]);int main(){ int a[10],i,j,t=0; srand(int(time(0))); cout<<"随机一维数组为:[ "; for(i=0;i<10;i++) { while(1) { a[i]=rand()%90+10; for(j=0;j<i;j++) { if(a[i]==a[j]) t+=1; } if(t==0) break; } cout<<a[i]<<" "; } cout<<"]\n"<<"其中的素数有:"; prime(a); system("pause");}void prime(int a[10]){ int i,j,t=0; for(i=0;i<10;i++) { for(j=1;j<=a[i]/2;j++) { if(a[i]%j==0) t+=1; } if(t==1) cout<<a[i]<<" "; } cout<<endl;}
有时还会出现这种情况,一维数组都还没有完全输出,程序就停止了。 展开
#include<iostream>#include<cstdlib>#include<ctime>using namespace std;void prime(int a[10]);int main(){ int a[10],i,j,t=0; srand(int(time(0))); cout<<"随机一维数组为:[ "; for(i=0;i<10;i++) { while(1) { a[i]=rand()%90+10; for(j=0;j<i;j++) { if(a[i]==a[j]) t+=1; } if(t==0) break; } cout<<a[i]<<" "; } cout<<"]\n"<<"其中的素数有:"; prime(a); system("pause");}void prime(int a[10]){ int i,j,t=0; for(i=0;i<10;i++) { for(j=1;j<=a[i]/2;j++) { if(a[i]%j==0) t+=1; } if(t==1) cout<<a[i]<<" "; } cout<<endl;}
有时还会出现这种情况,一维数组都还没有完全输出,程序就停止了。 展开
4个回答
展开全部
j的起始值应该从2开始
#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
void prime(int a[10]);
void main()
{
int a[10],i,j,t=0;
srand(int(time(0)));
cout<<"随机一维数组为:[ ";
for(i=0;i<10;i++)
{
while(1)
{
a[i]=rand()%90+10;
for(j=0;j<i;j++)
{
if(a[i]==a[j])
t+=1;
}
if(t==0)
break;
}
cout<<a[i]<<" ";
}
cout<<"]\n"<<"其中的素数有:";
prime(a);
}
void prime(int a[10])
{
int i,j,t;
for(i=0;i<10;i++)
{
t=0;
for(j=2;j<=a[i]/2;j++)
{
if(a[i]%j==0)
t=1;
}
if(t==0)
{
printf("%d ",a[i]);
}
}
cout<<endl;
}
展开全部
prime函数中t变理的置0位置不合理,如果第一个数不是素数,之后的都不会输出,第一个是素数时也只输出了第一个,之后的由于t不再是1而无法输出,调整一下位置:
void prime(int a[10])
{
int i,j,t=0;
for(i=0;i<10;i++)
{
t=0; //<<< 加一这里,测试每个数都先把t置0
for(j=1;j<=a[i]/2;j++)
{
if(a[i]%j==0)
t+=1;
}
if(t==1)
cout<<a[i]<<" ";
}
cout<<endl;
}
//至于一维数组没完全输出就停止的情况不明白了,从程序逻辑上没看到什么明显的问题
void prime(int a[10])
{
int i,j,t=0;
for(i=0;i<10;i++)
{
t=0; //<<< 加一这里,测试每个数都先把t置0
for(j=1;j<=a[i]/2;j++)
{
if(a[i]%j==0)
t+=1;
}
if(t==1)
cout<<a[i]<<" ";
}
cout<<endl;
}
//至于一维数组没完全输出就停止的情况不明白了,从程序逻辑上没看到什么明显的问题
追问
一维数组没完全输出就停止的情况出现频率还很高,我运行程序5次出现了3次
追答
#include
#include
#include
using namespace std;
void prime(int a[10]);
int main()
{
int a[10],i,j,t=0;
srand(int(time(0)));
cout<<"随机一维数组为:[ ";
for(i=0;i<10;i++)
{
while(1)
{
t=0;/////////必需在此置0 否则一旦重复就死循环了
a[i]=rand()%90+10;
for(j=0;j<i;j++)
{
if(a[i]==a[j])
t+=1;
}
if(t==0)
break;
}
cout<<a[i]<<" ";
}
cout<<"]\n"<<"其中的素数有:";
prime(a);
system("pause");
}
void prime(int a[10])
{
int i,j,t=0;
for(i=0;i<10;i++)
{
t=0;/////////必需在此置0 否则最多只输出1个素数
for(j=1;j<=a[i]/2;j++)
{
if(a[i]%j==0)
t+=1;
}
if(t==1)
cout<<a[i]<<" ";
}
cout<<endl;
}
//两处错误都是类似的,变量的重新初始化要在合适的时候进行!!!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
每次在for(i=……)循环后,应该重新设置t,否则只要第一个不是素数,你的素数计算就都没有输出了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
程序很简答,但是LZ的代码风格实在是。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询