| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 646 人关注过本帖
标题:[求助]网上答案与自己答案结合后发现不明语句!
只看楼主 加入收藏
小孩不懂爱
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2014-12-4
结帖率:75%
收藏
已结贴  问题点数:20 回复次数:8 
[求助]网上答案与自己答案结合后发现不明语句!
程序如下,程序是我手打然后在网上查了一下答案发现其中的K不知为什么要把m加1再平方,求大神解答!
题目如下:判断101-200之间有多少个素数,并输出所有素数
程序代码:
#include "stdio.h"
main()
{
 int m,i,k,h=0,leap=1;
 printf("\n");
 for(m=101;m<=200;m++)
  { 
      k=sqrt(m+1);
       for(i=2;i<=k;i++)
       {
           if(m%i==0)
          {
              leap=0;
              break;
          }
           if(leap) 
           {
               printf("%-4d",m);
               h++;
               if(h%10==0)
               printf("\n");
           }
           leap=1;
       }
  }
  printf("\n全部的素数数为%d",h);
} 
搜索更多相关主题的帖子: color 网上 
2015-01-31 23:38
civilherui
Rank: 2
来 自:陕西榆林
等 级:论坛游民
威 望:2
帖 子:67
专家分:97
注 册:2015-1-18
收藏
得分:5 
#include<stdio.h>
#include<math.h>             //óÃμ½áËêyѧoˉêy¿aμĶ«Î÷//
main()
{
int ,m,i,k,h=0;

for(m=101;m<=200;m++)
{
   
    k=(int)sqrt(m);              //û±Øòam+1// //k¶¨òåÎaÕûDΣ¬ËùòÔÕaàïÇ¿ÖÆÎaÕûDÎ//
¡¡¡¡¡¡    for(i=2;m%i!=0&&i<=k;i++)
¡    {
¡¡¡¡¡¡        if(i=k+1)
¡¡¡¡¡¡¡¡¡¡¡¡    {
¡¡¡¡¡¡¡¡¡¡¡¡       printf("%4d",m);
                    h++;
¡¡¡¡¡¡¡¡¡¡¡¡    }
¡¡¡¡¡¡        
¡¡¡¡¡¡    }
¡¡¡¡}
¡¡¡¡printf("\nè«2¿μÄËØêyêyÎa%d",h);
}

不知道你的这些代码为什么乱码的这么厉害,我竟然没发运行,主要有几个问题
第一 把k给强制成int型   k=(int)sqrt(m);因为你定义的k为int型;
第二  用了sqrt开方,是数学库中的函数,所以前面要声明#include<matn.h>
后面还有一些问题,我实在没法运行

我走向的将是机械、电子、编程的集成之路。
2015-02-01 00:18
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:5 
k=sqrt(m+1)
主要是为了减少循环次数,提高运行效率,实际上你也可以直接从2到(m-1)循环的,假如你要查101是不是素数,如果从2至100循环的话,电脑要循环98次,但根据乘法规则,m=a*b,最平均就是a=b的情况,其他时候必然是有一个数大,一个数小,选择被测数的开方数循环必然包含该被测数的最小的被乘数。比如100的开方为10,我从2到10循环,在2时就测出不是素数了,而2*50=100,我根本不需要再去循环到测50也可被100整除的。

这是利用了数学中的基础技巧,写程序很多时候要好好啃数学的。数学是学科之王。
就lz代码而言,应把素数显示部分移到i循环体外,leap=1放到i循环前面,程序运行才正常。

[ 本帖最后由 wmf2014 于 2015-2-1 08:15 编辑 ]

能编个毛线衣吗?
2015-02-01 00:46
韶志
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:斗气大陆
等 级:贵宾
威 望:44
帖 子:2223
专家分:13592
注 册:2013-3-22
收藏
得分:5 
两句话
减少循环次数
降低程序复杂度

三十年河东,三十年河西,莫欺少年穷!
2015-02-04 14:47
C语言小大圣
Rank: 1
等 级:新手上路
帖 子:3
专家分:8
注 册:2014-8-21
收藏
得分:5 
判断素数代码,仅供参考:
程序代码:
//统计100~200之间共有多少个素数,并输出
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int Ifprime(int n);
int main()
{
    int n,count=0;
    for(n=101;n<=200;n++)
    {
        if(Ifprime(n))
        {
            printf("%d\n",n);
            count++;
        }
    }
    printf("\n\nThe number of the prime between 101 and 200 are %d\n",count);

    system("pause");
    return 0;
}

int Ifprime(int n)
{
    int flag=0;
    int i,k=(int)sqrt(1.0*n);

    for(i=2;i<=k;i++)
    {
        if(n%i==0)
            return flag;
    }
    flag=1;
    return flag;
}
2015-02-04 16:09
小孩不懂爱
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2014-12-4
收藏
得分:0 
回复 5楼 C语言小大圣
程序代码:
#include<stdio.h>
#include<math.h>
void main()
{
    int x, y, i;
    int counter=0;

    for(x=101;x<=200;x++)
    {
        y=(int)sqrt(x);
        for(i=2;i<=y;i++)
        {
            if(x%i!=0)
            {
                printf("%d\n",x);
                counter++;
            }
        }
    }
    
    printf("\n\n101到200间的素数数目为%d\n",counter);
}    

我自己做了这么一个  同一题目 可是结果却有八百多个  求解为什么?
2015-02-14 17:10
蚕头燕尾
Rank: 10Rank: 10Rank: 10
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:734
专家分:1546
注 册:2013-3-24
收藏
得分:0 
回复 6楼 小孩不懂爱
看过自己程序的输出结果之后,你还会不明白这是为什么嘛?

再不明白就单步调试一下。

学习编程,为的是表达自己的思想,而不是被别人的思想所禁锢。要先明白自己想干嘛,而不要先问别人让你干嘛。               

                                                                                                                    Black Cat      Hello Tomorrow~
2015-02-15 01:03
邵蜜柚
Rank: 2
来 自:权大大
等 级:论坛游民
帖 子:79
专家分:86
注 册:2015-2-8
收藏
得分:0 
调试了好几遍,花括号加错位置了吧
要不然会输出重复的
程序代码:
#include<stdio.h>
#include<math.h>
main()
{   int m,i,k,h=0,leap=1;
    printf("\n");
    for(m=7;m<=27;m++)
    {    k=sqrt(m);
         for(i=2;i<=k;i++)
         { if(m%i==0)
         {   leap=0;
             break;
         }
         }
          if(leap==1)
          {  printf("%-4d",m);
             h++;
          }
          leap=1;
    }
    printf("\n全部的素数数为%d",h);
}

请给你男神一个爱你的理由。
2015-02-15 10:44
邵蜜柚
Rank: 2
来 自:权大大
等 级:论坛游民
帖 子:79
专家分:86
注 册:2015-2-8
收藏
得分:0 
楼上+1

我觉得m不用+1也可以。。不造我说的对不对哈。
那个k取平方根是为了不重复吧,比如说4*6=24,用4验证过就知道24不是素数了,不用6再来验证了

请给你男神一个爱你的理由。
2015-02-15 10:46
快速回复:[求助]网上答案与自己答案结合后发现不明语句!
数据加载中...
 
   



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

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