| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2430 人关注过本帖, 1 人收藏
标题:二维数组赋值问题(很奇怪,why?)
只看楼主 加入收藏
pgy
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:C
等 级:小飞侠
威 望:8
帖 子:1248
专家分:2329
注 册:2009-9-23
结帖率:100%
收藏(1)
 问题点数:0 回复次数:10 
二维数组赋值问题(很奇怪,why?)
main()
{
    float a[3][6],x,ave=0.0;
    int i,j;
    for(i=0;i<3;i++)
        for(j=0;j<6;j++)
            {
                scanf("%f",&x);a[i][j]=x;    /*就是这个地方很奇怪,要先把输入的值赋予给x,然后再赋予a[i][j],不这样搞还不行,why?*/
                ave+=a[i][j];
            }
    ave=ave/(3*6);
    for(i=0;i<3;i++)
        for(j=0;j<6;j++)
            a[i][j]=a[i][j]/ave;
    for(i=0;i<3;i++)
        {
            for(j=0;j<6;j++)
                printf("%8.2f",a[i][j]);
                printf("\n");
        }
    getch();
}
程序的作用是输入一个3*6的矩阵,然后把原矩阵中的每个元素替换为其他元素。
*按习惯那个赋值语句应该是scanf("%f",&a[i][j]);但这样改会运行错误,试过wintc、c-free4两种编译器,wintc是一闪就没了,c-free4是在输入第一行后错误。
搜索更多相关主题的帖子: why 赋值 
2009-09-24 01:04
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
对浮点数的支持不好,具体原因我也说不出来。
2009-09-24 01:21
atom_09
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:92
专家分:141
注 册:2009-8-24
收藏
得分:0 
没看出问题  我在VC下能正常实现
2009-09-24 15:08
playmyself
Rank: 5Rank: 5
来 自:第3系4级宇宙空间
等 级:职业侠客
帖 子:76
专家分:399
注 册:2009-7-8
收藏
得分:0 
C-FREE 4.1测试没问题。。。如下代码。
main()
{
    float a[3][6],ave=0.0;
    int i,j;
    for(i=0;i<3;i++)
        for(j=0;j<6;j++)
            {
                scanf("%f", &a[i][j]);
                ave+=a[i][j];
            }
    ave=ave/(3*6);
    for(i=0;i<3;i++)
        for(j=0;j<6;j++)
            a[i][j]=a[i][j]/ave;
    for(i=0;i<3;i++)
        {
            for(j=0;j<6;j++)
                printf("%8.2f",a[i][j]);
                printf("\n");
        }
    getch();
}

无聊创造奇迹。
2009-09-24 17:30
血狼夜怨
Rank: 2
等 级:论坛游民
帖 子:13
专家分:22
注 册:2009-9-13
收藏
得分:0 
应该没问题的,我在tc中测试了,没有问题的。
2009-09-24 17:46
m456m654
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:783
专家分:2806
注 册:2009-9-17
收藏
得分:0 
我在TC下运行,发现有问题。说是输入的浮点类型无法连接。但是我把数组改为一维的,发现是可以直接赋值的。但是换成二维的就不可以了。我也不是很清楚为什么。
大家是怎么试的?不能直接运行上面的程序啊,上面本来就是对的。应该运行下面的,并且解释为什么。
main()
{
    float a[3][6],x,ave=0.0;
    int i,j;
    for(i=0;i<3;i++)
        for(j=0;j<6;j++)
            {
                scanf("%f",&a[i][j]);   
                ave+=a[i][j];
            }
    ave=ave/(3*6);
    for(i=0;i<3;i++)
        for(j=0;j<6;j++)
            a[i][j]=a[i][j]/ave;
    for(i=0;i<3;i++)
        {
            for(j=0;j<6;j++)
                printf("%8.2f",a[i][j]);
                printf("\n");
        }
    getch();
}


[ 本帖最后由 m456m654 于 2009-9-24 18:07 编辑 ]
2009-09-24 18:05
mm546863903
Rank: 1
来 自:山西
等 级:新手上路
帖 子:5
专家分:3
注 册:2009-9-23
收藏
得分:0 
vc里边可以正常运行,但是win-tc里边就会一闪而过,不知道是什么原因,可能是win-tc里边的一个bug吧。。。

好好学习,天天学习。。。
2009-09-24 18:06
jig
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
帖 子:530
专家分:242
注 册:2005-12-27
收藏
得分:0 
具体原因是这样

这不是个BUG,这个是DOS时代,TC为了优化而做的一个权衡,即在不必要的时候不加入浮点格式库所造成的。

在通常情况下,TC能对单个浮点元素和一维数组进行自动识别,即,你使用这两类输入,TC就自动将浮点格式库加载上,但直接使用多维浮点数组TC就识别不了。所以出现了一闪就DOWN掉的结果

实践证明,你在程序最前面加入一个对单浮点数的读入操作就可以了。

float a[3][6],x, ave=0.0;
    int i,j;
 
    scanf("%f", &x);
 
    for(i=0;i<3;i++)
        for(j=0;j<6;j++)
            {
                scanf("%f",&a[i][j]);
                ave+=a[i][j];
            }


或这样也行:
float a[3][6],*x, ave=0.0;
    int i,j;

    x = &ave;


总之就是给出TC一个你将使用浮点库的线索,他将自动连接浮点库。

[ 本帖最后由 jig 于 2009-9-25 02:17 编辑 ]

个人网站 -  http://.h001.
2009-09-25 02:09
m456m654
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:783
专家分:2806
注 册:2009-9-17
收藏
得分:0 
8楼说的非常正确,向高手学习一下。呵呵。
刚运行了一下,原因的确如此。
2009-09-25 10:27
mm546863903
Rank: 1
来 自:山西
等 级:新手上路
帖 子:5
专家分:3
注 册:2009-9-23
收藏
得分:0 
,说错了,不好意思,jig好厉害,学习了

好好学习,天天学习。。。
2009-09-25 16:05
快速回复:二维数组赋值问题(很奇怪,why?)
数据加载中...
 
   



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

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