CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

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

楼主skycncomp(闭关修练到年底)2004-05-01 20:09:33 在 C/C++ / C语言 提问

#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、回复次数:10Top

1 楼rorot(rorot)回复于 2004-05-01 20:44:50 得分 1

我再TC3和VC6下测试,文件是正常得.Top

2 楼newegg2002(同志们,同胞们,大学的四年,是扎实基础的四年!!)回复于 2004-05-01 21:07:11 得分 2

把所有的int型定义成long型后  
  如果数组定义过大(如定义成a[30000]   ),就会出错。  
  ///////////////  
  你所说的这两个错误在我这儿都没有出现..我猜之所以出错.恐怕是一个原因:存储分配问题..你定义的变量占用空间太大了..在这方面好像都有限制的..Top

3 楼newegg2002(同志们,同胞们,大学的四年,是扎实基础的四年!!)回复于 2004-05-01 21:20:33 得分 5

呵.关于文件输出的问题我也已经解决了..对于你的程序作如下改动:  
  for(   i=0;i<n;i++   )//这一句改为for(   i=0;i<=n;i++   )  
        {  
              fprintf(   fp,   "%d   ",   a[i]   );  
        }  
  就行了.另外.因为输出的数有可能超过int型的范围,,所以输出文件中有可能会有"负数"出现,,  
  不要用long,用unsigend   int   也行啊..  
  Top

4 楼skycncomp(闭关修练到年底)回复于 2004-05-01 21:37:40 得分 0

那为什么我把数组定义成30000大小会出错呢。  
  文件输出前半部份正确,后半部他错误。是负数。  
  这是什么原因?Top

5 楼julyclyde(Java初学(大学不教只好自己学))回复于 2004-05-01 22:01:37 得分 1

%udTop

6 楼huolong1312(耶稣也上网)回复于 2004-05-01 22:12:40 得分 0

我一直不明白isPrime这是什么意思~!是调出函数吗?Top

7 楼julyclyde(Java初学(大学不教只好自己学))回复于 2004-05-01 22:34:03 得分 0

/*     判断是否为素数     */  
  int   isPrime(   int   m   )  
  {  
        int   i;  
   
        for(   i=2;i<m;i++   )  
              if(   m%i==0   )  
    return   0;  
    return   1;  
  }  
  Top

8 楼newegg2002(同志们,同胞们,大学的四年,是扎实基础的四年!!)回复于 2004-05-01 22:38:34 得分 1

不是说了嘛   ..后面的数太大超出了int   型所能表达的范围嘛..  
  当最高位变为1的时候,当然变成负数了.因为最高位是个标志位,,0为正..1为负嘛..  
  可以扩大输出的范围嘛..用无符型可以解决一下这个问题.不过也不能太大了..Top

9 楼skycncomp(闭关修练到年底)回复于 2004-05-02 02:08:21 得分 0

明白了。用无符号的就OK了。  
  我想试一下我要求100万个素数?该如何考虑这个程序呢?  
  高手请解答一下。  
  给些思路。应该是很难的。Top

10 楼skycncomp(闭关修练到年底)回复于 2004-05-06 12:26:48 得分 0

没人给解释一下吗?  
  100万个素数如何来求。Top

相关问题

  • 很奇怪的输出结果
  • 输出到文件(输出流问题)
  • 文件输出输出流的问题
  • 在Image上textout显示输出的问题(很奇怪)
  • 文件的输入输出问题!很急a
  • 如何输出文件名
  • 关于文件流输出
  • 文件的输入输出
  • 奇怪了,我编译连接我dll程序后没有.lib文件,我的.def文件里有输出函数啊?
  • ---------HttpContextresponse.WriteFile(FileName)的文件很大,输出很慢,又没有更快的办法。-------------

关键词

  • include

得分解答快速导航

  • 帖主:skycncomp
  • rorot
  • newegg2002
  • newegg2002
  • julyclyde
  • newegg2002

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo