always_love_life 2021-03-24 20:36 采纳率: 20%
浏览 39

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

#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条回答 默认 最新

  • 芣苢的成长之路 2023-06-26 23:31
    关注

    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;
    }
    
    
    评论

报告相同问题?

悬赏问题

  • ¥50 求大神教题,这个代码和讲解思路都怎么写呀,完全卡住了
  • ¥15 python随机森林对两个excel表格读取,shap报错
  • ¥15 基于STM32心率血氧监测(OLED显示)相关代码运行成功后烧录成功OLED显示屏不显示的原因是什么
  • ¥100 X轴为分离变量(因子变量),如何控制X轴每个分类变量的长度。
  • ¥30 求给定范围的全体素数p的(p-2)/p的连乘积值
  • ¥15 VFP如何使用阿里TTS实现文字转语音?
  • ¥100 需要跳转番茄畅听app的adb命令
  • ¥50 寻找一位有逆向游戏盾sdk 应用程序经验的技术
  • ¥15 请问有用MZmine处理 “Waters SYNAPT G2-Si QTOF质谱仪在MSE模式下采集的非靶向数据” 的分析教程吗
  • ¥15 adb push异常 adb: error: 1409-byte write failed: Invalid argument