C语言,要求1到100中全部的素数,跪求大神指正

// 141,7.1.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <math.h>
int _tmain(int argc, _TCHAR* argv[])
{
int m, k, i, n;
n=0;

for (m=1; m<=100; m++)
{
k=(m^(1/2));
for (i=1; i<=k; i++)
{

if(m%i==0)
break;
}

if (i>=k+1)
{
printf("%d ", m);
n=n+1;
}

if(n%10==0)
printf("%d\n", m);
}
printf("%d\n", m);
return 0;
}

代码基本逻辑是对的,但有几个地方写错了:
首先,平方根的计算不是a^b,C语言中^是异或运算符,不是幂的意思,平方根应该用sqrt函数,即 k=sqrt(m);
其次,两个for循环中的边界条件不对,外层for循环m应该从2开始,到100结束, 内层for循环i应从2开始到k+1截止。内层for循环如果从1开始会导致所有的数都在内层的if语句中退出而被判定为合数。
最后,在输出时应该在数字间加入分割符号,否则都是连在一块的类如235711这样,可以用空格printf("%d ", m);或者tab键printf("%d\t",m); 同时在外层for最后以及main函数最后的输出语句中不应该再输出m值,原因是对所有素数都在内层for循环执行完后的if语句中输出过了,再输出就重复了, 所以最后的两个printf应该换成printf("\n");
温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-07-29
#include "stdafx.h"
#include <math.h>
int _tmain(int argc, _TCHAR* argv[])
{
int m, k, i, n;
n=0;

for (m=2; m<=100; m++)
{
k=sqrt(m); //求平方根要用sqrt()函数
for (i=2; i<=k; i++)//最小的质数从2开始
{
if(m%i==0)
break;
}

if (i>=k+1)
{
n=n+1;
printf("%d", m);
if(n%10==0)
printf("\n");
else
printf(" ");
}
}
printf("\n");
return 0;
}

追问

error C2668: “sqrt”: 对重载函数的调用不明确

追答

k=(int)sqrt( (double)m ); 

或建立工程时,创建一个控制台程序,不要建MFC工程,代码改成如下:

#include <stdio.h>
#include <math.h>
int main()
{
    int m, k, i, n;
    n=0;
     
    for (m=2; m<=100; m++)
    {
        k=sqrt(m); //求平方根要用sqrt()函数
        for (i=2; i<=k; i++)//最小的质数从2开始
        {
            if(m%i==0)
                break;
        }
         
        if (i>=k+1)
        {
            n=n+1;
            printf("%d", m);
            if(n%10==0)
                printf("\n");
            else
                printf(" ");
        }
    }
    printf("\n");
    return 0;
}

本回答被提问者采纳
第2个回答  2015-07-29
{ int m, k, i, n; n=0;
for (m=2; m<=100; m++)
{ k=(int)sqrt(m,0.5);
for (i=2; i<=k; i++)
if(m%i==0)
break;
if (i>=k+1)
{ printf("%d ", m);
n=n+1;
if(n%10==0)
printf("\n", m);
}
}
return 0;
}

仔细对比,然后提出你的问题。

还有,你这大括号用的太乱了,跟谁学得?有用没用的都给括上了。层数多了以后你自己都晕