标题:为什么变量的值会被覆盖掉, 定义时用static 也不能阻止
只看楼主
露营地
Rank: 2
来 自:湛江
等 级:论坛游民
帖 子:150
专家分:23
注 册:2015-6-27
结帖率:92.86%
已结贴  问题点数:20 回复次数:6 
为什么变量的值会被覆盖掉, 定义时用static 也不能阻止
#include <stdio.h>
#define N 5


double fun(int w[][N])
{
    int i, j;
    static double s=0, k=0;

    for(i=0;i<N;i++)
    {
        if((i=0) || (i=4))
            for(j=0;j<N;j++)
            {
                s+=w[i][j];
                k++;
            }
        else
            for(j=0;j<N;j+4)
            {
                s+=w[i][j];
                k++;
            }
    }
    s=s/k;
    return s;
}


void main()
{
    int a[N][N]={0, 1, 2, 7, 9, 1, 9, 7, 4, 5, 2, 3, 8, 3, 1, 4, 5, 6, 8, 2, 5, 9, 1, 4, 1};
    int i, j;
    double s;
    printf("*************the array************\n");
    for(i=0;i<N;i++)
    {
        for(j=0;j<N;j++)
            printf("%4d", a[i][j]);
            printf("\n");
    }
    s=fun(a);
    printf("*************the result***********\n");
    printf("the sum is :%lf", s);
    getch();
}


为什么k和s的值会被覆盖掉, 定义是用static 也不能阻止  结果应该是等于3.375的   不过他偏偏就等于4
搜索更多相关主题的帖子: include double return 
2015-08-27 00:49
jklqwe111
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:35
帖 子:335
专家分:1125
注 册:2014-4-13
得分:5 
if((i=0) || (i=4))
非你本意吧
=  ==
2015-08-27 00:57
露营地
Rank: 2
来 自:湛江
等 级:论坛游民
帖 子:150
专家分:23
注 册:2015-6-27
得分:0 
回复 2楼 jklqwe111
我睡着了都被你点醒了   明白了


不要不要的。。。
2015-08-27 01:25
露营地
Rank: 2
来 自:湛江
等 级:论坛游民
帖 子:150
专家分:23
注 册:2015-6-27
得分:0 
回复 2楼 jklqwe111
啊哦



回复早了     还是不行哦

不要不要的。。。
2015-08-27 01:31
李掌柜
Rank: 6Rank: 6
等 级:侠之大者
帖 子:94
专家分:406
注 册:2015-6-18
得分:5 
楼主想让代码实现什么功能?看代码好像是求数组的合,可看自定义函数又像是求数组的平均值,,

照片是可以做成小游戏的,快来私聊我吧!
2015-08-27 01:52
露营地
Rank: 2
来 自:湛江
等 级:论坛游民
帖 子:150
专家分:23
注 册:2015-6-27
得分:0 
回复 5楼 李掌柜
一个数字矩形  求外围数字的和 再就平均值哦。。。例如这个
1 2 3 4 5
2 3 5 4 6
4 6 3 8 9
6 4 7 4 7
3 5 4 7 6


外围
1 2 3 4 5
2       6
4       9
6       7
3 5 4 7 6


不要不要的。。。
2015-08-27 01:56
jklqwe111
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:35
帖 子:335
专家分:1125
注 册:2014-4-13
得分:10 
for(j=0;j<N;j+4)
            {
                s+=w[i][j];
                k++;
            }

j+4  没有改变j的值,造成死循环。
这个循环只是计算了首尾的值,有些浪费,直接计算就行,

s+=w[i][0];
s+=w[i][N-1];
k+=2;

另外,数据类型的选用也没有效率,s,k应使用整形,最后返回平均值时再转换。

return (double)s/k;

英语还要好好学学,平均数是average,而不是sum。
2015-08-27 07:06



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-456791-1-1.html




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

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