搜索
您的当前位置:首页正文

计算指定范围的平方和(含错误处理)

来源:步旅网
   #include <stdio.h>
   #include <stdbool.h>
   
   double sum_squares(long a, long b);//计算指定范围的平方和
   bool bad_limits(long begin, long end, long low, long high);//判断上界及下界
   long get_long(void);//判断输入是否是整数
   
   int main(void) {
   	const long MAX = 100000l;
   	const long MIN = -100000l;
   	long lower;
   	long upper;
   	double sum;
   
   	printf("This program computes the sum of the squares of integers in a range.\n");
   	printf("The lower bound should not be less than -100000 and\n");
   	printf("the upper bound should not be more than 100000.\n");
   	printf("Enter the limits (enter 0 for both limits to quit):\n");
   	printf("lower limit: ");
   	lower = get_long();//取得下界
   	printf("upper limit: ");
   	upper = get_long();//取得上界
   	while (lower != 0 || upper != 0) {//判断结束标志
   		if (bad_limits(lower, upper, MIN, MAX))//范围错误处理
   			printf("Please try again.\n");
   		else {
   			sum = sum_squares(lower, upper);
   			printf("The sum of the squares of the integers from %ld to %ld is %ld.\n",
   				lower, upper, (long)sum);
   		}
   		printf("Enter the limits (enter 0 for both limits to quit):\n");
   		printf("lower limit: ");
   		lower = get_long();
   		printf("upper limit: ");
   		upper = get_long();
   	}
   	printf("Done.");
   	return 0;
   }
   
   long get_long(void) {
   	long a;
   	char ch;
   	while (!scanf("%ld", &a)) {//输入的不是整数
   		while ((ch = getchar()) != '\n') {//清除错误结果
   			putchar(ch);
   		}
   		printf(" is not an integer.\n");//打印错误与提示信息
   		printf("Please enter an integer value, such as 25, -178, or 3: ");
   	}
   	return a;//返回整数值
   }
   
   bool bad_limits(long begin, long end, long low, long high) {
   
   	if (begin > end) {//范围出错处理
   		printf("%ld isn't smaller than %ld.\n",begin,end);
   		return true;
   	}
   	else{//溢出处理
   		if (begin < low) {
   			printf("%ld is too small!!\n",begin);
   			return true;
   		}
   		if (end > high) {
   			printf("%ld is too big!!\n",end);
   			return true;
   		}
   	}
   	return false;
   }
   
   double sum_squares(long a, long b) {
   	double sum = 0;
   	for (; a <= b; a++)
   		sum += a * a;
   	return sum;
   }

因篇幅问题不能全部显示,请点此查看更多更全内容

Top