Онлайн компилятор C

#include <stdio.h> long long sum_between_ab(int from, int to, int size, int a[]){ size=to-from; long long int sum=0; for(int i=from-1;i<=from+size;i++){ if(i>=from-1){ sum=sum+a[i]; } } return sum; } int main() { int a[100],answer; for(int i=0;i<100;i++){ scanf("%d",&a[i]); } answer=sum_between_ab(4,6,3,a); printf("%d",answer); return 0; }
这段代码试图计算数组中从索引 from 到 to 之间元素的和,但存在几个问题。

- 函数 `sum_between_ab` 中,`size=to-from;` 这一行覆盖了传入的 `size` 参数,但 `size` 在循环条件中又被使用,导致循环范围计算错误。同时,循环的起始和结束条件与预期的区间不符。
- 在 `main` 函数中,`answer` 被声明为 `int`,但函数返回的是 `long long`,可能导致数据丢失。另外,`sum_between_ab` 的第三个参数 `3` 没有实际作用,因为函数内部重新计算了 `size`。

- 检查循环条件 `i<=from+size`,思考这个范围是否真正覆盖了从 `from` 到 `to` 的所有元素。注意数组索引从0开始,而 `from` 和 `to` 可能是基于1的索引。
- 考虑 `size=to-from;` 这一行是否真的必要,以及它如何影响循环的边界。如果 `from` 和 `to` 是固定的,可以直接用它们计算循环范围。