下面给出最基本的函数组成的代码:
#include<stdio.h>
int fun(int m,int n)
{ int i,a,sum=-1; // -1作为初值,为未能符合循环条件的标记
for(i=m; i<=n; i++)
{ sum=sum==-1?0:sum; // 恢复正常值
for(a=2; a<=i/2; a++) // 对称性:a*b=b*a,除数取到一半即可(取等是为了排除非素数4)
{
if(i%a==0) break;
}
if(i<=1) continue;//排除0和1
if(a>i/2) sum+=i;
}
return sum;
}
int main()
{
double m,n; // 修复整型输入字符出现的问题,同时可以接收小数(参数传递自动转为整型)
scanf("%lf%lf", &m,&n);
n=(m<0 && n<0) ? ((n>m)?1:-1):n; // 这里运用了短路原则
m=m>0?m:0; // 如果输入负数跳过负数区间
if(fun(m,n)==0) printf("该区间没有任何素数");
else if(fun(m,n)!=-1) printf("%d",fun(m,n));
else printf("格式不正确");
return 0;
}
代码泛用性比较好,可以检测出输入非数字的格式问题,还可以输入小数和负数,但可读性不高。
代码解析:
n=(m<0 && n<0) ? ((n>m)?1:-1):n;
等价于以下代码
if (m < 0 && n < 0) {
n = (n > m) ? 1 : 0;}
如果m=m>0?m:0;写成m=m>1?m:0;
if(i<=1) continue;可以省略,但是n=(m<0 && n<0) ? ((n>m)?1:-1):n; 小于0应改为小于1。
标签:int,sum,负数,fun,素数,printf,区间,格式,代码 From: https://blog.csdn.net/2402_88163970/article/details/144834458