搜索
查看: 834|回复: 10
打印 上一主题 下一主题

新人求助!!100内质数和??

[复制链接]
跳转到指定楼层
楼主
发表于 2014-8-16 10:05:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
10啊哈币
// 100内质数和.cpp : 定义控制台应用程序的入口点。

#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"


int main()
{
    int x=2,z=0,n=0,y;
        while(x<=100)
        {
            for(y=1;y<=x;y++)
            {
                if(x%y==0)
                z=z+1; //求因数数量
            }
          if(z<=2) //判断是否为质数
         {
           n=x+n;
           printf("%d\n",n);
           }
        x=x+1;
        }
    system("pause");
    return 0;
}
//为什么运行结果只有2就跳向pause了?不是有while循环吗??求助啊!!

最佳答案

查看完整内容

先贴修改后的代码: [mw_shl_code=c,true]#include #include int main() { int x=2,z=0,n=0,y; while(x
沙发
发表于 2014-8-16 10:05:17 | 只看该作者
本帖最后由 981013 于 2014-8-16 10:40 编辑

先贴修改后的代码:
[mw_shl_code=c,true]#include <stdio.h>
#include <stdlib.h>
int main()
{
    int x=2,z=0,n=0,y;
    while(x<=100)
    {
        for(y=1;y<=x;y++)
        {
            if(x%y==0)
                z=z+1; //求因数数量
        }
        if(z<=2) //判断是否为质数
        {
            n=x+n;
            printf("%d\n",n);
        }
        x=x+1;
        z=0;
    }
    system("pause");
    return 0;
}[/mw_shl_code]
板凳
发表于 2014-8-16 10:46:34 | 只看该作者
[mw_shl_code=c,true]z=0;[/mw_shl_code]
这句如果没有,则z保存的将是从 2到当前x的因数的个数 的和(就是2的因数个数+3的因数个数+...+x的因数个数),自然z不可能第二次<=2,因此每次循环后要把z清0,使z只保存x的因数个数
地板
 楼主| 发表于 2014-8-16 10:48:00 | 只看该作者
981013 发表于 2014-8-16 10:38
先贴修改后的代码:
[mw_shl_code=c,true]#include
#include

哦,我是没有初始化导致的吧??
5#
发表于 2014-8-16 10:50:26 | 只看该作者
slngen 发表于 2014-8-16 10:48
哦,我是没有初始化导致的吧??

是没有将z清0导致的,其实你完全可以把z声明为局部变量,像这样:
[mw_shl_code=c,true]#include <stdio.h>
#include <stdlib.h>
int main()
{
    int x=2,n=0,y;
    while(x<=100)
    {
        int z=0;//z在每次循环开始时创建,在循环结束后删除
        for(y=1;y<=x;y++)
        {
            if(x%y==0)
                z=z+1; //求因数数量
        }
        if(z<=2) //判断是否为质数
        {
            n=x+n;
            printf("%d\n",n);
        }
        x=x+1;
    }
    system("pause");
    return 0;
}[/mw_shl_code]
6#
发表于 2014-8-16 10:51:08 | 只看该作者
去看一下有关变量作用域的资料
7#
 楼主| 发表于 2014-8-16 10:59:28 | 只看该作者
981013 发表于 2014-8-16 10:46
这句如果没有,则z保存的将是从 2到当前x的因数的个数 的和(就 ...

谢谢了!!
8#
发表于 2014-8-17 15:26:12 | 只看该作者
本帖最后由 嗨,强哥! 于 2014-8-17 15:28 编辑

你的代码很好!
我稍加改进:我把100以内的质数放在循环内相加,把计算结果放在了循环外,这样比较直观。[mw_shl_code=c,true]#include <stdio.h>
#include <stdlib.h>
int main()
{
    int x = 1, n = 0, y;
   
    printf ("这是一个例题:求100以内所有质数的和\n\n");
    while (x <= 100)
    {
        int z = 0;       //z在每次循环开始时创建,在循环结束后删除
        for (y = 1; y <= x; y++)
        {
            if (x % y == 0)
                z = z + 1;  //求因数数量
        }
        if (z <= 2)         //判断是否为质数
        {
            n += x;
            printf ("%d+", x);
        }
        x++;
    }
    printf ("\b");
    printf ("=%d\n\n", n);
    system ("pause");
    return 0;
}[/mw_shl_code]

9#
发表于 2014-8-17 15:33:50 | 只看该作者
slngen 发表于 2014-8-16 10:48
哦,我是没有初始化导致的吧??

质数应该包括1吧:
[mw_shl_code=c,true]#include <stdio.h>
#include <stdlib.h>
int main()
{
    int x = 1, n = 0, y;
   
    printf ("这是一个例题:求100以内所有质数的和\n\n");
    while (x <= 100)
    {
        int z = 0;       //z在每次循环开始时创建,在循环结束后删除
        for (y = 1; y <= x; y++)
        {
            if (x % y == 0)
                z = z + 1;  //求因数数量
        }
        if (z <= 2)         //判断是否为质数
        {
            n += x;
            printf ("%d+", x);
        }
        x++;
    }
    printf ("\b");
    printf ("=%d\n\n", n);
    system ("pause");
    return 0;
}[/mw_shl_code]
10#
发表于 2014-8-18 13:35:51 | 只看该作者
嗨,强哥! 发表于 2014-8-17 15:33
质数应该包括1吧:
[mw_shl_code=c,true]#include
#include

质数不包括1,1既不是质数也不是合数
初中数学课本上是这样说的
11#
发表于 2014-8-19 09:57:00 | 只看该作者
981013 发表于 2014-8-18 13:35
质数不包括1,1既不是质数也不是合数
初中数学课本上是这样说的

谢谢你的解答,我偷懒了,没有问度娘,闹笑话了,囧。。。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表