| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 540 人关注过本帖
标题:编了一个循环的小程序....当过大时运行缓慢,而且出错了求改正.N>=40000
只看楼主 加入收藏
木小子雨
Rank: 2
来 自:中国
等 级:论坛游民
帖 子:30
专家分:15
注 册:2013-6-6
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:6 
编了一个循环的小程序....当过大时运行缓慢,而且出错了求改正.N>=40000
#include<stdio.h>
#include<stdlib.h>
#define M 100
void main()
{
    double x,y,f,sum,a[M],b[M],c[M],d[M];
    int i,j,n,t=0;
    char ch;
    do
    {
        sum=0;f=0;
        printf("please input N  (N<=100000):\n");
        scanf("%d",&n);
        for(i=1;i<(n+1);i++)
            for(j=1;j<(n+1);j++)
            {
                x=1.0*i/n;
                y=1.0*j/n;
                f=x*y/(n*n);
                sum=sum+f;
            }
        t=t+1;
        a[t]=sum;
        b[t]=n;
        printf("When the N is %d,the sum is %.10lf\n",n,sum);
        fflush(stdin);
        printf("Again? Y/N\n");
        ch=getchar();
    }while((ch=='y')||(ch=='Y'));
    a[0]=0;b[0]=0;
    for(i=1;i<=t;i++)
    {
        c[i]=a[i]-a[i-1];
        d[i]=b[i]-b[i-1];
    }
    for(i=1;i<=t;i++)
        printf("%10.2lf           %10.10lf    %10.2lf          %10.10lf\n",b[i],a[i],d[i],c[i]);
    system("PAUSE");
}
图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: include please double 而且 
2013-06-13 13:13
浪漫横行
Rank: 4
等 级:业余侠客
威 望:1
帖 子:127
专家分:291
注 册:2013-4-30
收藏
得分:7 
你程序中的N和n是否相同,如果意义相同,则n的类型应该为long,int型数值长度最大为32767,则i,j也得换

[ 本帖最后由 浪漫横行 于 2013-6-13 13:56 编辑 ]
2013-06-13 13:52
网络移民
Rank: 1
等 级:新手上路
帖 子:4
专家分:4
注 册:2013-6-13
收藏
得分:3 
新手路过学习了解下
2013-06-13 14:56
木小子雨
Rank: 2
来 自:中国
等 级:论坛游民
帖 子:30
专家分:15
注 册:2013-6-6
收藏
得分:0 
以下是引用浪漫横行在2013-6-13 13:52:10的发言:

你程序中的N和n是否相同,如果意义相同,则n的类型应该为long,int型数值长度最大为32767,则i,j也得换

好的谢谢
2013-06-14 10:23
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
看了一下你的代码,时间主要浪费在sum的计算上。

而根据你的代码简单推导一下可知

sum = (1 + n) * (1 + n) / (2 * n * n)

或者

sum = 1 / 2 + 1 / n + 1 / (2 * n * n)

完全用不着通过一个双重循环来计算。

错误出自数值的溢出不错,但提醒2楼,谁规定int型数值长度最大为32767的?

int型的尺寸没有硬性规定,你那int最大为32767的编译器(别跟我说是TC)该扔就扔了吧。况且楼主的代码只改long也一样会溢出。

重剑无锋,大巧不工
2013-06-14 11:41
天地霸气诀
Rank: 2
等 级:禁止发言
帖 子:21
专家分:21
注 册:2013-6-14
收藏
得分:0 
回复 楼主 木小子雨
提示: 作者被禁止或删除 内容自动屏蔽
2013-06-14 16:51
浪漫横行
Rank: 4
等 级:业余侠客
威 望:1
帖 子:127
专家分:291
注 册:2013-4-30
收藏
得分:0 
回复 5楼 beyondyf
我刚学c没多久,所以用tc和vc6.0,范围有限,但发现楼主有这个溢出问题所以就提下,  版主推荐几个译码器一下,让我学习一下哈
2013-06-14 20:59
快速回复:编了一个循环的小程序....当过大时运行缓慢,而且出错了求改正.N>=4000 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016646 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved