| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 893 人关注过本帖
标题:for循环,帮忙下,谢谢
只看楼主 加入收藏
premium
Rank: 2
等 级:论坛游民
帖 子:21
专家分:27
注 册:2009-10-28
结帖率:66.67%
收藏
已结贴  问题点数:10 回复次数:9 
for循环,帮忙下,谢谢
#include<stdio.h>
main()
{
    static int a[10]={1,1,1,1,1,1,1,1,1,1};
    int i,j;
    for(i=0;i<10;i++)
    for(j=0;j<i;j++)
    a[i]=a[i]+a[j];
    for(i=0;i<10;i++)
    printf("%d\n",a[i]);
}
输出结果为什么是
1
2
4
8
16
32
64
128
256
512帮忙说明下程序,尤其是a[i]=a[i]+a[j];当i=2时循环怎么计算,谢谢
2009-11-19 16:34
小J
Rank: 8Rank: 8
等 级:等待验证会员
威 望:1
帖 子:282
专家分:704
注 册:2009-6-18
收藏
得分:0 
因为你用了static,他让你的a每次循环完后不初始化为0,而是继续沿用最后一次a的值!
a[i]=a[i]+a[j];这个式子可以改写成a[i]+=a[j],就是说吧原先a[i]的值加上a[j]的值后变成新的a[i]的值!
2009-11-19 16:54
tjf0604
Rank: 2
等 级:论坛游民
帖 子:8
专家分:15
注 册:2009-5-31
收藏
得分:0 
这里不加static也是这个结果
2009-11-19 18:30
冰蓝诱惑
Rank: 2
等 级:论坛游民
帖 子:14
专家分:22
注 册:2009-10-16
收藏
得分:0 
第一次  i=0   j=0;i自加1,j自加为1     第二次i=1,j=1;所以输出1;然后i自加为2   j自加为2; 第三次 所以输出为 2+1+1=4;i自加为3;j自加为3  第四次  i=3,j=3所以就是
4++1+1+1+1=8

呃~~i跟j是数组的下标
我也是初学  有不对的地方还望指教  
有时间跟楼主多交流交流~~
2009-11-19 19:05
ginkgo
Rank: 2
等 级:论坛游民
帖 子:20
专家分:54
注 册:2009-11-17
收藏
得分:0 
当i=0时,下面循环执行不到
当i=1时,a[0]=1,a[1]=a[1]+a[0]=2;
当i=2时,a[2]=a[2]+a[0]=1+1=2;a[2]=a[2]+a[1]=2+2=4;
当i=3时,a[3]=a[3]+a[0]=1+1=2;a[3]=a[3]+a[1]=2+2=4;a[3]=a[3]+a[2]=4+4=8;
……
看出规律了吧!a[i]=2^i;
2009-11-19 19:09
xy4919961
Rank: 5Rank: 5
等 级:职业侠客
帖 子:199
专家分:362
注 册:2009-10-24
收藏
得分:0 
#include<stdio.h>
main()
{
    int a[10]={1,1,1,1,1,1,1,1,1,1};
    int i,j;
    for(i=0;i<10;i++)
     for(j=0;j<i;j++)
      {a[i]=a[i]+a[j];
       printf("a[%d]=%d\t",i,a[j]);}
     getch();
      return 0;
}
  i 控制1,j控制前面循环得到的合. 把程序改下输出也许你会明白点.
i=0;
a[0]=1;
i=1;
a[1]=a[1]+(a[0]) 1+1=2;
i=2;
a[2]=a[2]+(a[0]+a[1]) 1+(1+2)=4
i=3;
a[3]=a[3]+(a[0]+a[1]+a[2]) 1+(1+2+4)=8;
i=4;
a[4]=a[4]+(a[0]+a[1]+a[2]+a[3]) 1+(1+2+4+8)=16;
i=5;
a[5]=a[5]+(a[0]+a[1]+a[2]+a[3]+a[4]) 1+(1+2+4+8+16)=32;
                以此类推.....

                                 

[ 本帖最后由 xy4919961 于 2009-11-19 19:25 编辑 ]

QQ群:96348241
2009-11-19 19:12
longlong89
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广州
等 级:小飞侠
威 望:6
帖 子:1043
专家分:2754
注 册:2009-8-18
收藏
得分:0 
累加和

想象力征服世界
2009-11-19 19:28
Biffo
Rank: 2
等 级:论坛游民
帖 子:9
专家分:29
注 册:2009-11-15
收藏
得分:10 
i=0时,第二个循环中就j<i不成立,因此a[0]还是原来的值。
i=1时,只有当j=0时第二个循环条件成立,因此a[1]=a[1]+a[0].
i=2时,j可以去0和1
       (1)j=0时,a[2]=a[2]+a[0],此时a[2]=2。
        (2)j=1时,a[2]=a[2]+a[1];因为a[1]在i=1时已被赋值2,a[1]在i=2,j=0时被赋值2;因此此时a[2]=4.
下面循环自己好好思考一下
2009-11-19 22:25
premium
Rank: 2
等 级:论坛游民
帖 子:21
专家分:27
注 册:2009-10-28
收藏
得分:0 
回复 5楼 ginkgo
为什么a【i】=a[i]+a[j]在i=2的时候就要执行两次了
2009-11-19 23:20
premium
Rank: 2
等 级:论坛游民
帖 子:21
专家分:27
注 册:2009-10-28
收藏
得分:0 
回复 8楼 Biffo
看了你的回帖咱明白了
2009-11-19 23:26
快速回复:for循环,帮忙下,谢谢
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017909 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved