| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 840 人关注过本帖
标题:我突然发现自己好愚蠢啊,有木有?求调教
只看楼主 加入收藏
abc594986308
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:168
专家分:116
注 册:2013-3-18
结帖率:82.93%
收藏
已结贴  问题点数:10 回复次数:12 
我突然发现自己好愚蠢啊,有木有?求调教
main( )
{ int a[3][3]={{1,2},{3,4},{5,6}},i,j,s=0;
for(i=1;i<3;i++)
for(j=0;j<=i;j++)s+=a[i][j];
printf("%d\n",s);
}
这个程序的输出结果是18,怎么得来的?我主要不知道a[3][3]怎么分配的?
2013-06-22 19:56
蚕头燕尾
Rank: 10Rank: 10Rank: 10
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:734
专家分:1546
注 册:2013-3-24
收藏
得分:0 
#include<stdio.h>


int main()
{
    int a[3][3]={{1,2},{3,4},{5,6}},i,j,s=0;
    for(i=1;i<3;i++)
        for(j=0;j<=i;j++)
            s+=a[i][j];

    printf("%d\n",s);

    return 0;
}

/*
1   2

3   4

5   6

这里是3、4、5、6的和

为18

注意:你的i是从1开始的,而非从0开始
*/

学习编程,为的是表达自己的思想,而不是被别人的思想所禁锢。要先明白自己想干嘛,而不要先问别人让你干嘛。               

                                                                                                                    Black Cat      Hello Tomorrow~
2013-06-22 20:02
abc594986308
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:168
专家分:116
注 册:2013-3-18
收藏
得分:0 
回复 2楼 蚕头燕尾
那就应该是两行三列,你列出来的是三行两列。。。~~~~我理解错了么?大侠
2013-06-22 20:28
abc594986308
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:168
专家分:116
注 册:2013-3-18
收藏
得分:0 
回复 2楼 蚕头燕尾
如果我没理解错的话那就应该是1+2+4+5+6=18
2013-06-22 20:29
chen2009qian
Rank: 1
等 级:新手上路
帖 子:7
专家分:5
注 册:2013-6-22
收藏
得分:2 
不懂请楼下的来回答!
2013-06-22 20:36
蚕头燕尾
Rank: 10Rank: 10Rank: 10
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:734
专家分:1546
注 册:2013-3-24
收藏
得分:0 
回复 3楼 abc594986308
实际上是这样存储的:

1   2   0

3   4   0

5   6   0

无用的0 我在上面的回答中没有写,因为你后面执行的是+操作

对于值为0的点,加不加都不影响最后的结果值,,

我以为楼主懂的。。。

就是3、4、5、6之和==18

另外严密一点来说的话,程序还加上了最末尾的一个0



学习编程,为的是表达自己的思想,而不是被别人的思想所禁锢。要先明白自己想干嘛,而不要先问别人让你干嘛。               

                                                                                                                    Black Cat      Hello Tomorrow~
2013-06-22 21:57
蚕头燕尾
Rank: 10Rank: 10Rank: 10
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:734
专家分:1546
注 册:2013-3-24
收藏
得分:0 
给你个代码,来证明我的说法是对的

#include<stdio.h>


 int main()
 {
     int a[3][3]={{1,2},{3,4},{5,6}},i,j,s=0;
     for(i=1;i<3;i++)
         for(j=0;j<=i;j++)
         {
             printf("%d ",a[i][j]);
             s+=a[i][j];
         }

     printf("\n\n%d\n",s);

     return 0;
 }



建议楼主自己学会通过写代码来验证自己的想法,

而不是再那里只是猜测。。


学习编程,为的是表达自己的思想,而不是被别人的思想所禁锢。要先明白自己想干嘛,而不要先问别人让你干嘛。               

                                                                                                                    Black Cat      Hello Tomorrow~
2013-06-22 22:00
蚕头燕尾
Rank: 10Rank: 10Rank: 10
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:734
专家分:1546
注 册:2013-3-24
收藏
得分:0 
给你个代码,来证明我的说法是对的

#include<stdio.h>


 int main()
 {
     int a[3][3]={{1,2},{3,4},{5,6}},i,j,s=0;
     for(i=1;i<3;i++)
         for(j=0;j<=i;j++)
         {
             printf("%d ",a[i][j]);
             s+=a[i][j];
         }

     printf("\n\n%d\n",s);

     return 0;
 }



建议楼主自己学会通过写代码来验证自己的想法,

而不是再那里只是猜测。。


学习编程,为的是表达自己的思想,而不是被别人的思想所禁锢。要先明白自己想干嘛,而不要先问别人让你干嘛。               

                                                                                                                    Black Cat      Hello Tomorrow~
2013-06-22 22:01
lzj12530
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:264
专家分:841
注 册:2013-3-28
收藏
得分:2 
你的数组是这样的a[3][3] 三行三列 数组下面为a[0][0]--到-a[2][2];
元素是
1  2  0   a[0]
3  4  0   a[1]
5  6  0   a[2]
你的for循环i=1 i<3  j=0 j<=i .因此s=3+4+0+5+6+0=18

C++菜鸟
2013-06-22 22:29
abc594986308
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:168
专家分:116
注 册:2013-3-18
收藏
得分:0 
回复 6楼 蚕头燕尾
原来是元素末尾自动补0?这有什么原理可循么?愚笨愚笨啊,唉
2013-06-22 23:16
快速回复:我突然发现自己好愚蠢啊,有木有?求调教
数据加载中...
 
   



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

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