C语言高手请进:这个分块求和C语言程序问题出在哪里?对一组无规律数据按正数、负数和零分块求和
对一组无规律数据按正数、负数和零分块求和,即要求将序列中相邻的正数、零及负数分块累加输出,格式要求:源数据: 2,3,8,6,0,0,-2,-1,-4,0,5,6,7,-5,-2,...(共100个)
整理输出为: 2,5,13,19,0,0,-2,-3,-7,0,5,11,18,-5,-7...(共100个)
以下程序哪里出了问题?我搞了2星期,总是得不到完整输出:
int main()
{
int p,z,n,limit; //定义变量p,z,n分别计数正数、零、负数及源数据总个数
p=z=n=0;
limit=100; //源数据100个,测试程序时可改为20
int i;
int source[100]={2,3,8,6,0,0,-2,-1,-4,0,5,6,7,-5,-2,...}; //源数据100个测试可改为20
int target[100]; //target数组用于输出结果,100个测试可改为20
for (i=1; i<=limit; i++)
{
if (source[i]>0) //如果源数据第1个数是正数
{
target[i]=source[i]; //最左第1个正数赋值给目标数组,准备累加正数
p=1; //正数计数为1个
for (i=1+1; i<=limit; i++) //正数累加循环:从最左第2个开始判断
{
if (source[i]<=0) break; //如果第2个不是正数,退出循环
target[i]=target[i-1]+source[i]; //将左边正数累加到当前目标数组;
p++; //正数计数增加1
}
} //循环完成,完成一组连续正数的累计求和,正数数量为p个
limit=limit-p; //经过正数求和,剩余待处理数据共limit-p个
//连续零值求和
if (source[i]==0) //如果第1个数是0
{
target[i]=source[i]=0; //赋值,准备累加零值;
z=1; //零值计数1个
for (i=1+1; i<=limit; i++) //累加循环:从最左第2个开始判断
{
if (source[i]!=0) break; //如果第2个不是零,退出循环
target[i]=target[i-1]+source[i]; //累加;
z++; //零值计数增加1
}
} //循环完成,完成一组连续零值的累计求和,零值数量为z个
limit=limit-r-z; //经过正数及零值求和,剩余待处理数据共limit-p-z个
// 连续负数求和
if (source[i]>0) //如果源数据第一个数是负数
{
target[i]=source[i]; //赋值,准备累加负数
n=1; //负数计数为1个
for (i=1+1; i<=limit; i++) //负数累加循环:从最左第2个开始判断
{
if (source[i]>=0) break; //如果第2个不是负数,退出循环
target[i]=target[i-1]+source[i]; //累加;
n++; //负数计数增加1
}
} //循环完成,完成一组连续负数的累计求和,负数数量为n个
limit=limit-p-z-n; //经过正数、零值及负数求和,剩余待处理数据共limit-p-z-n个
}
//++以下输出目标数组++++++++++++++++
int j;
for (j=1;j<=100; j++)
printf("%d ", target[j]);
return(0);
}
[此贴子已经被作者于2016-1-22 23:04编辑过]