| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1900 人关注过本帖
标题:输出素数的代码出现了问题,大家帮忙看一下,我用的c语言 vc编译器
只看楼主 加入收藏
学c加油
Rank: 1
来 自:山东济宁泗水
等 级:新手上路
帖 子:24
专家分:0
注 册:2016-7-20
结帖率:100%
收藏
 问题点数:0 回复次数:16 
输出素数的代码出现了问题,大家帮忙看一下,我用的c语言 vc编译器
#include <stdio.h>
#include <math.h>
void main()
{
    int i,a[101],j;
    for(i=0;i<=100;i++)
       a[i]=i;
    for(i=2;i<=100;i++)
    {
        for(j=2;j<=sqrt(i);j++)
            if(a[i]%a[j]==0)
            {a[i]=0;break;}
    }
    for(i=2;i<=100;i++)
    if(a[i]!=0)
    printf("%d",a[i]);
}
搜索更多相关主题的帖子: 编译器 include c语言 
2016-07-20 08:15
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
收藏
得分:0 
你的a[101]这个数组的作用是什么呢?没有初始化,你认为你循环内的a[i]和a[j]会是多少?
for(i=0;i<=100;i++)
       a[i]=i;
这个循环结束后a[i]=100;
所以你第二个for循环内a[i]是个固定的数值,不知道你是怎么考虑的,你看下符合你的想法吗?

[此贴子已经被作者于2016-7-20 08:32编辑过]

2016-07-20 08:26
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
收藏
得分:0 
N以内的素数
程序代码:
#include <stdio.h>
int main()
{
    int m, n;
    int N;
    scanf("%d",&N);
    for(m=2; m<=N; m++)
    {
        for(n=2; n<=m; n++)
        {
            if( m%n==0 )       
                break;               
        }    
        if(m == n)   
            printf("%d\n", m);
    }
    return 0;    
}
2016-07-20 08:34
学c加油
Rank: 1
来 自:山东济宁泗水
等 级:新手上路
帖 子:24
专家分:0
注 册:2016-7-20
收藏
得分:0 
我的第一个循环结构给a[]赋值,目的是用第二个循环检查1到100以内的数是不是素数    你的代码能检查出素数 但是不能将检查出的素数保存,用数组可以保存,以便再次用到或进行操作!我不理解你说的循环结束后a[i]=100  为什么啊   ??  我的意思是让a[1]=1 a[2]=2  a[3]=3  ....  一直到a[100]=100

学习c语言的新手,各位多多照顾
2016-07-20 08:43
学c加油
Rank: 1
来 自:山东济宁泗水
等 级:新手上路
帖 子:24
专家分:0
注 册:2016-7-20
收藏
得分:0 
我想是你考虑错了  你看 #include <stdio.h>
#include <math.h>
void main()
{
    int i,a[101],j;
    for(i=0;i<=100;i++)
       a[i]=i;
    for(i=1;i<=100;i++)
        printf("%d  ",a[i]);
}
你运行看看吧

学习c语言的新手,各位多多照顾
2016-07-20 09:09
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
收藏
得分:0 
回复 5楼 学c加油
嗯 ,是的,不好意思,是我看错了,没考虑清楚,第一个for循环是给数组循环赋值
2016-07-20 09:38
学c加油
Rank: 1
来 自:山东济宁泗水
等 级:新手上路
帖 子:24
专家分:0
注 册:2016-7-20
收藏
得分:0 
那我的代码为什么出错了,,,你再看看吧,谢啦

学习c语言的新手,各位多多照顾
2016-07-20 09:58
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
收藏
得分:0 
回复 7楼 学c加油
程序代码:
#include <stdio.h>
#include <math.h>
int main()
{
    int i,a[101],j;
    for(i=2;i<=100;i++)
       a[i]=i;
    for(i=2;i<=100;i++)
    {
        for(j=2;j<=i;j++)
            if(a[i]%a[j]==0)
            {
//                a[i]=0;            //主要是这句不要
                break;
            }
//    }
//    for(i=2;i<=100;i++)
        if(a[i]==a[j])
            printf("%d\t",a[i]);
    }
    return 0;
}

稍微改了下,你对比原来的看下
2016-07-20 11:55
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:0 
程序代码:
if(a[i]%a[j]==0)//请注意,,,你要求余的到底是a[j]还是j、、、程序报错的原因在于某个a[j]==0,所以出错结束了。
            {
//                a[i]=0;           
                break;
            }[local]1[/local]


捕获.PNG (37.44 KB)
图片附件: 游客没有浏览图片的权限,请 登录注册

φ(゜▽゜*)♪
2016-07-20 12:55
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:0 
求素数这件事,如果你不想每个数字都去跑一遍遍历求余,
你可以先建立一个标记数组,然后全部记为一,(0,1位置记为零)
从前往后,遍历每一个标记为一的位置,然后以那个下标为因数,把所有是他的倍数的数组位置标记为零。
比如我们遍历到2的时候就把所有的比他大的偶数都标记为不是素数。
下一次遍历到3,在下一次就是5/7/11/13、、、、、

这是目前我已知的求100以内素数的最好用的算法。

φ(゜▽゜*)♪
2016-07-20 13:01
快速回复:输出素数的代码出现了问题,大家帮忙看一下,我用的c语言 vc编译器
数据加载中...
 
   



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

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