VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 509|回复: 1

[求助] C语言高手请进:这个分块求和C语言程序问题出在哪里?

[复制链接]
43_avatar_middle
在线会员 发表于 2016-1-22 11:31:54 | 显示全部楼层 |阅读模式
3驿站币
对一组无规律数据按正数、负数和零分块求和,即要求将序列中相邻的正数、零及负数分块累加输出,格式要求:
源数据:        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星期,总是得不到完整输出:
  1. int main()
  2. {
  3.     int p,z,n,limit;                                            //定义变量p,z,n分别计数正数、零、负数及源数据总个数
  4.     p=z=n=0;
  5.     limit=100;                                                //源数据100个,测试程序时可改为20
  6.     int i;                                                   
  7.     int source[100]={2,3,8,6,0,0,-2,-1,-4,0,5,6,7,-5,-2,...};  //源数据100个测试可改为20
  8.     int target[100];                                         //target数组用于输出结果,100个测试可改为20
  9.    
  10.     for  (i=1; i<=limit; i++)               
  11.     {
  12.       if (source[i]>0)                                       //如果源数据第1个数是正数
  13.        {
  14.           target[i]=source[i];                              //最左第1个正数赋值给目标数组,准备累加正数
  15.           p=1;                                                  //正数计数为1个
  16.           for (i=1+1; i<=limit; i++)                  //正数累加循环:从最左第2个开始判断
  17.             {
  18.                if (source[i]<=0) break;                 //如果第2个不是正数,退出循环
  19.                target[i]=target[i-1]+source[i];         //将左边正数累加到当前目标数组;
  20.                p++;                                             //正数计数增加1
  21.              }
  22.           }                                                       //循环完成,完成一组连续正数的累计求和,正数数量为p个
  23.    
  24.       limit=limit-p;                                         //经过正数求和,剩余待处理数据共limit-p个
  25. //连续零值求和
  26.    
  27.     if (source[i]==0)                                        //如果第1个数是0
  28.        {
  29.           target[i]=source[i]=0;                         //赋值,准备累加零值;
  30.           z=1;                                                  //零值计数1个
  31.           for (i=1+1; i<=limit; i++)                   //累加循环:从最左第2个开始判断
  32.             {
  33.                if (source[i]!=0) break;                 //如果第2个不是零,退出循环
  34.                target[i]=target[i-1]+source[i];        //累加;
  35.                z++;                                            //零值计数增加1
  36.              }
  37.           }                                                      //循环完成,完成一组连续零值的累计求和,零值数量为z个
  38.    
  39.       limit=limit-r-z;                                      //经过正数及零值求和,剩余待处理数据共limit-p-z个
  40. // 连续负数求和
  41.     if (source[i]>0)                                      //如果源数据第一个数是负数
  42.        {
  43.           target[i]=source[i];                          //赋值,准备累加负数
  44.           n=1;                                               //负数计数为1个
  45.           for (i=1+1; i<=limit; i++)                //负数累加循环:从最左第2个开始判断
  46.             {
  47.                if (source[i]>=0) break;               //如果第2个不是负数,退出循环
  48.                target[i]=target[i-1]+source[i];      //累加;
  49.                n++;                                          //负数计数增加1
  50.              }
  51.           }                                                    //循环完成,完成一组连续负数的累计求和,负数数量为n个
  52.    
  53.       limit=limit-p-z-n;                               //经过正数、零值及负数求和,剩余待处理数据共limit-p-z-n个
  54.     }
  55. //++以下输出目标数组++++++++++++++++   
  56.    
  57.   int j;
  58.   for (j=1;j<=100; j++)
  59.           printf("%d ", target[j]);
  60.   
  61.   return(0);
  62. }
复制代码

  






上一篇:请问怎么获取本地cookie (指定网站)
下一篇:MFC中文本编辑框怎样输出两位小数
43_avatar_middle
ico_lz  楼主| 发表于 2016-1-24 06:34:18 | 显示全部楼层
已经解决。谢谢
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2019-4-20 21:20

Powered by Discuz! X3.4

© 2009-2019 cctry.com

快速回复 返回顶部 返回列表