求大神看看这段代码错哪里了

#include<stdio.h>
int main()
{
	int length,interval,hz,cc,ave;
	while(scanf("%d %d",&length,&interval)!=EOF)
	{
		hz=length;
		int i=0;
		for(length=length-interval;length>interval;length-=interval)
		{
			int temp=0;
			for(int j=1;j<=interval;j++)
			{
				i+=2;
				temp+=i;
				cc=temp;
			}
			ave=cc/interval;
			printf("%d ",ave);
		}
		int temp=0;
		for(int j=1;j<=(hz%interval);j++)
			{
				i+=2;
				temp+=i;
				cc=temp;
			}
			printf("%d\n",cc/(hz%interval));
	}
	return 0;
}

1、在内部的 for 循环中,循环变量 j 的初始值应为 0 而不是 1,因为循环中的计算是从数列的起始值开始的;2、在第一个 for 循环中,循环条件 length > interval 可能会导致错误。应该改为 length >= interval,以确保最后不足 interval 个数时也能进行计算;3、在计算平均值时,使用的是整数除法 cc/interval,这可能导致结果向下取整,而不是四舍五入到最接近的整数。可以考虑使用浮点数运算,并将 cc 和 interval 转换为浮点数进行计算,然后再将结果转换为整数。修改为 ave = (int)((float)cc / interval + 0.5);,其中 (float) 将变量转换为浮点数,+ 0.5 实现四舍五入;4、在最后一个 for 循环中,计算平均值时使用了 (hz % interval),但是该值可能为 0,此时会导致除以 0 的错误。应该添加一个条件判断,当 (hz % interval) 为 0 时,将其改为 interval,即使用 ave = cc / (hz % interval ? hz % interval : interval);。以下附上修改后的代码:


#include <stdio.h>

int main() {
    int length, interval, hz, cc, ave;
    
    while (scanf("%d %d", &length, &interval) != EOF) {
        hz = length;
        int i = 0;
        
        for (length = length - interval; length >= interval; length -= interval) {
            int temp = 0;
            
            for (int j = 0; j < interval; j++) {
                i += 2;
                temp += i;
                cc = temp;
            }
            
            ave = (int)((float)cc / interval + 0.5);
            printf("%d ", ave);
        }
        
        int temp = 0;
        
        for (int j = 0; j < (hz % interval ? hz % interval : interval); j++) {
            i += 2;
            temp += i;
            cc = temp;
        }
        
        ave = cc / (hz % interval ? hz % interval : interval);
        printf("%d\n", ave);
    }
    
    return 0;
}