很奇怪的问题。关于文件输出

skycncomp 2004-05-01 08:09:33
#include <conio.h>
#include <stdio.h>
/* 判断是否为素数 */
int isPrime( int m )
{
int i;

for( i=2;i<m;i++ )
if( m%i==0 )
return 0;
return 1;
}

int prime( int m,int n,int a )
{
int i,j;
int prime;

for( j=m+1;;j++ )
if( prime=isPrime( j )== 1 )
{
return j;
}
}


void main()
{
int m,n,i;
int a[3000];
int result=0;
FILE *fp;

clrscr();
printf("Please input m: ");
scanf("%d",&m );
printf("\nPlease input n: ");
scanf("%d",&n );

for( i=0;i<10;i++ )
a[i]=0;

result=prime( m,n,a[0] );
a[0]=result;

for( i=1;i<n;i++ )
{
result=prime( a[i-1],n,a[i] );
a[i]=result;
}

for( i=0;i<n;i++ )
printf("\n\n%d ", a[i] );


if( (fp=fopen("out.txt","w"))==NULL )
{
printf("\nCan't open this file.");
getch();
exit(0);
}

for( i=0;i<n;i++ )
{
fprintf( fp, "%d ", a[i] );
}
}

m为第一个素数,n为要输出多少个大于m的素数.
但现在问题是,我要是输出小一些的数,就会正确。如我输入3和5,输出5,7,11,13,17,文件输出也正常。但如果我输入3和2999(我数组定义大小为3000),屏幕输出正常。但文件输出错误。这是什么原因呀。还有如果我把所有的int型定义成long型后,则会出错。这是为什么?如果数组定义过大(如定义成a[30000] ),就会出错。是什么原因?
...全文
10 10 点赞 打赏 收藏 举报
写回复
10 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
skycncomp 2004-05-06
没人给解释一下吗?
100万个素数如何来求。
  • 打赏
  • 举报
回复
skycncomp 2004-05-02
明白了。用无符号的就OK了。
我想试一下我要求100万个素数?该如何考虑这个程序呢?
高手请解答一下。
给些思路。应该是很难的。
  • 打赏
  • 举报
回复
newegg2002 2004-05-01
不是说了嘛 ..后面的数太大超出了int 型所能表达的范围嘛..
当最高位变为1的时候,当然变成负数了.因为最高位是个标志位,,0为正..1为负嘛..
可以扩大输出的范围嘛..用无符型可以解决一下这个问题.不过也不能太大了..
  • 打赏
  • 举报
回复
julyclyde 2004-05-01
/* 判断是否为素数 */
int isPrime( int m )
{
int i;

for( i=2;i<m;i++ )
if( m%i==0 )
return 0;
return 1;
}
  • 打赏
  • 举报
回复
huolong1312 2004-05-01
我一直不明白isPrime这是什么意思~!是调出函数吗?
  • 打赏
  • 举报
回复
julyclyde 2004-05-01
%ud
  • 打赏
  • 举报
回复
skycncomp 2004-05-01
那为什么我把数组定义成30000大小会出错呢。
文件输出前半部份正确,后半部他错误。是负数。
这是什么原因?
  • 打赏
  • 举报
回复
newegg2002 2004-05-01
呵.关于文件输出的问题我也已经解决了..对于你的程序作如下改动:
for( i=0;i<n;i++ )//这一句改为for( i=0;i<=n;i++ )
{
fprintf( fp, "%d ", a[i] );
}
就行了.另外.因为输出的数有可能超过int型的范围,,所以输出文件中有可能会有"负数"出现,,
不要用long,用unsigend int 也行啊..
  • 打赏
  • 举报
回复
newegg2002 2004-05-01
把所有的int型定义成long型后
如果数组定义过大(如定义成a[30000] ),就会出错。
///////////////
你所说的这两个错误在我这儿都没有出现..我猜之所以出错.恐怕是一个原因:存储分配问题..你定义的变量占用空间太大了..在这方面好像都有限制的..
  • 打赏
  • 举报
回复
rorot 2004-05-01
我再TC3和VC6下测试,文件是正常得.
  • 打赏
  • 举报
回复
相关推荐
发帖
C语言
加入

6.5w+

社区成员

C语言相关问题讨论
申请成为版主
帖子事件
创建了帖子
2004-05-01 08:09
社区公告
暂无公告