c语言,查找m~n之间的素数,并求和。
warning了,这种情况是怎么回事?该如何解决呢?
#include <stdio.h>
int main()
{
int m,n,sum = 0;
int flag;
scanf("&d&d",&m,&n);
for (int i = m; i <= n; i++)
{
flag = 1;
for(int j = 2;j < i;j++)
{
if(i % j == 0)
{
flag = 0;
break;
}
}
if(flag)
{
printf("%d\n",i);
sum = sum + i;
}
}
printf("sum of prime numbers:%d\n",&sum);
return 0;
}
之后看了正确答案,发现在定义上有不同,具体为什么上面的不行而下面的答案是可以的呢?这两者的区别体现在哪里?求解答
#include <stdio.h>
int main()
{
int m, n,i,j,flag,sum=0;
scanf("%d%d", &m, &n);
for (i = m; i <= n; i++)
{
flag = 1;
for (j = 2; j < i; j++)
{
if (i%j == 0)
{
flag = 0;
break;
}
}
if (flag)
{
printf("%d\n", i);
sum = sum + i;
}
}
printf("sum of prime numbers:%d\n", sum);
return 0;
}
1.因为正确的语法是printf("%d",sum),不应该存在取地址符号(&),printf("%d",sum)表示输出sum的值,printf("%d",&sum)表示输出sum的地址值,这个如果学习了指针应该会容易理解,所以没有报错,但是有结果
2.严格的c语言语法中for循环中不可临时定义变量,像你写的for(int i=m,i<=n,i++),但是c++语言可以,我想既然你的编译器可以运行成功,说明你并没有按照严格的创建c语言的.c文件,而是创建了.cpp文件,则默认了c++语法成立,所以你的变量定义和标准答案不同,标准答案是严格的c,所有变量只能在函数开头定义。