//#define _CRT_SECURE_NO_DEPRECATE //备用
#include <stdio.h>
long get_long(void);//验证输入是一个整数
int bad_limits(long begin, long end, long low, long high);//开始,结束,低的,高的,验证范围的上下限是否有效
double sum_squares(long a,long b);//计算a-b之间的平方数
int main(void)
{
const long MIN=-10000000L; //范围下限
const long MAX=+10000000L; //范围上限
long start;//用户指定的范围最小值
long stop;//用户指定范围的最大值
double answer;// 答案
printf("这个程序计算一个范围内的整数平方和\n"
"下限不应小于-1000000,上限不应大于+10000000\n"
"输入限制(输入0以退出两个限制):\n"
"下限:");
start=get_long();//开始
printf("上限:");
stop =get_long();//结束`
while(start!=0||stop!=0)
{
if(bad_limits(start,stop,MIN,MAX))
printf("请重试\n");
else
{
answer=sum_squares(start,stop);
printf("整数的平方和");
printf("从%ld到%ld是%g\n",start,stop,answer);//%g把输入解释成浮点数
}
printf("输入限制(输入0以退出两个限制):\n");
printf("下限:\n");
start=get_long();//开始
printf("上限:");
stop =get_long();//结束
}
printf("结束了\n");
return 0;
}
long get_long(void)
{
long input;
char ch;
while(scanf("%ld",&input)!=1)
{
while((ch=getchar())!='\n')
putchar(ch);
printf("不是整数.\n请输入一个整数");
printf("整数值,如25,-178,或3:");
}
return input;
}
double sum_squares(long a,long b)
{
double total=0;
long i;
for(i=a;i<=b;i++)
total+=(double)i*(double)i;
return total;
}
int bad_limits(long begin,long end,long low,long high)
{
int not_good=0;
if(begin>end)
{
printf("%ld不小于%ld.\n",begin,end);
not_good=1;
}
if(begin<low||end<low)
{
printf("值必须大于等于最小值%ld.\n",low);
not_good=1;
}
if(begin>high||end>high)
{
printf("值必须小于等于最大值%ld.\n",high);
not_good=1;
}
return not_good;
}