C语言统计数组中介于a、b(包含两端)的元素个数及代码问题解决
错误分析
你代码的核心问题出在两个地方:
- 额外新增的
d变量逻辑完全错误:你默认给d赋值为2,相当于不管数组里有没有a、b这两个元素,都要额外加上2个计数,仅当数组中出现a或b时才会把d置为0,这个逻辑和需求完全不符。 - 判断条件冗余:不需要拆分「等于上下限」「在上下限中间」两种情况,直接用一个范围判断就能覆盖所有包含上下限的场景。
正确实现
统计逻辑非常简单:遍历数组的每一个元素,只要元素满足>=a 且 <=b就给计数器加1即可,修正后的代码如下:
#include <stdio.h> int main() { int n,i,a,b,c=0; printf("Enter size of array: "); scanf("%d",&n); printf("Enter elements of array: "); int arr[n]; for(i=0;i<n;i++){ scanf("%d",&arr[i]); } printf("\nEnter lower limit element & upper limit element respectively: "); scanf("%d %d",&a,&b); for(i=0;i<n;i++){ // 单个判断覆盖所有包含上下限的符合条件的情况 if(arr[i] >= a && arr[i] <= b){ c++; } } printf("Number of elements in between two elements (Both Inclusive) = %d",c); return 0; }
用你给出的测试用例验证:
- 测试用例
arr = [1, 3, 3, 9, 10, 4]、a=9、b=12,符合条件的元素是9、10,输出为2,如果你预期输出是3,请检查你给出的测试用例数组是否有笔误(比如末尾元素是12而不是4)。
内容的提问来源于stack exchange,提问作者gokoci
相关产品推荐
相关产品推荐

