| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 371 人关注过本帖
标题:新人到来 求大神指导一题
只看楼主 加入收藏
巫妖王
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2014-5-8
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:7 
新人到来 求大神指导一题
#include <stdio.h>
int fun(int *);
void main()
{
    int i,b[94],a[30],n;
    for(i=6;i<100;i++)
        b[i-6]=i;
    n=fun(b);
    for(i=0;i<30;i++)
        printf("%d\t",a[i]);
    printf("\n");
    printf("%d\n");
}
int fun(int *b)
{
    int a[30];
    int i,x,j,k=0;
    for(i=0;i<94;i++)
    {
        for(j=2;j<b[i];j++)
            {  
            if(b[i]%j==0)
            break;
            while(j==b[i]-1)
            {
                x++;
                a[k]=b[i];
                                k++;
            }
        }
    }
    return x;
}
编写函数求大于5小于100的素数并放在数组a中,函数的返回值是素数的个数。    本人小白,还请多指教,上面是我自己写的  有问题  请帮忙修改  谢谢拉
搜索更多相关主题的帖子: include 
2014-05-08 20:50
top398
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:427
专家分:857
注 册:2014-5-2
收藏
得分:0 
大概地说两个毛病:
1、b[30]中的30是怎么来的?
2、main 中的 b[30] 和 fun 中的 b[30] 完全是两个不同的数组。
2014-05-08 21:00
top398
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:427
专家分:857
注 册:2014-5-2
收藏
得分:0 
fun 中循环也多了一层。关键在于没有正确理解筛法。
2014-05-08 21:05
巫妖王
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2014-5-8
收藏
得分:0 
回复 2 楼 top398
1.那个30只是我随便写的一个数字,数组a是素数的个数嘛  不知道30是不是小了点
2.我自己也知道这个问题,但是不懂怎么把main中的数组a传递到fun函数里面去
3.fun里面不知道哪个循环多出来了?
4.谢谢拉
2014-05-08 21:15
top398
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:427
专家分:857
注 册:2014-5-2
收藏
得分:20 
按我的想法改了一下代码:
程序代码:
#include <stdio.h>
int fun( int *, int * );
void main()
{
    int i, num[100], prime[30], count;
    for ( i = 2; i < 100; i++ )
        num[i] = 1;
    count = fun( num, prime );
    for ( i = 0; i < count; i++ )
        printf( "%d\t", prime[i] );
    printf( "\n" );
    printf( "%d\n", count);
}

int fun( int *num, int *prime )
{
    int i, j, count = 0;
    for ( i = 2; i < 100; i++ ) {
        if ( num[i] ) {
            if (i > 5)
                prime[count++] = i;
            for ( j = i*2; j < 100; j+=i )
                num[j] = 0;
        }
    }
    return count;
}


以上为了清晰起见,6-99的数组仍定义为100个元素。另外修改了几个错误。主要的修改在循环内部。实际素数没有超过30个,故保留30个元素的定义未改。当然这是应该再修改的。
楼主的代码既然传递了数组b,则传递数组a也是一样的。看来楼主没有理解自己贴的代码啊。
2014-05-08 21:22
巫妖王
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2014-5-8
收藏
得分:0 
回复 5 楼 top398
谢谢帮忙  这个求素数的方法好巧妙啊  有什么名字吗
2014-05-10 13:21
top398
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:427
专家分:857
注 册:2014-5-2
收藏
得分:0 
以下是引用巫妖王在2014-5-10 13:21:25的发言:

谢谢帮忙  这个求素数的方法好巧妙啊  有什么名字吗
把非素数一遍遍地过滤掉,故名“筛法”。
2014-05-10 13:33
kwxx
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:309
专家分:913
注 册:2009-5-11
收藏
得分:0 
回复 6 楼 巫妖王
有2000多年历史的古老算法---筛法
2014-05-10 13:35
快速回复:新人到来 求大神指导一题
数据加载中...
 
   



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

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