| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2413 人关注过本帖
标题:如何求数组中周期元素的平均值
只看楼主 加入收藏
qhxxbc
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:163
专家分:174
注 册:2010-9-14
结帖率:95%
收藏
已结贴  问题点数:30 回复次数:12 
如何求数组中周期元素的平均值
比如,有某数组s[21]={1,2,4,5, 7, 5,4,2,1,2,4,5, 7, 5,4,2,1,2,4,5, 7}
我的思路是:首先求出周期元素的2个极大值,然后利用极大值所对应的下标求周期元素的和,从而得到平均数。
程序代码:
void main()
/*{
    int a[21]={1,2,4,5, 7, 5,4,2,1,2,4,5, 7, 5,4,2,1,2,4,5, 7};
    int i, c=0;
    for (i=1; i<=20; i++)
    {
        if (a[i-1]<a[i] && a[i]>a[i+1])
        {
            printf("%d\n", i);
            c++;
            if(c==2) break;
        }
    }
}求周期元素的2个极大值所对应的下标,设为m和n,得出m=4, n=12*/

{
    int b[21]={1,2,4,5, 7, 5,4,2,1,2,4,5, 7, 5,4,2,1,2,4,5, 7};
    int j;
    float sum=0.0, aver;
    for (j=4; j<=12; j++)
        sum=sum+b[j];
    aver=sum/9;
        printf("%f\n", aver);  
}
问题1:求平均数时如何引用m和n,即如何把两个函数关联起来(再具体点,如何写子函数)
问题2:最初的元素数组是s[21],即 a[21]和b[21]都是用的某函数s()得出的结果s[21],如何把这3个函数关联起来

而且我觉得我这个程序并不好,您有没有更好的办法,谢谢!


[ 本帖最后由 qhxxbc 于 2011-2-20 22:15 编辑 ]
搜索更多相关主题的帖子: 平均值 平均数 元素 
2011-02-20 21:49
犬虫门心
Rank: 8Rank: 8
来 自:西安
等 级:蝙蝠侠
帖 子:209
专家分:753
注 册:2011-1-25
收藏
得分:0 
楼主把问题考虑得简单了吧。如果数组内容是:
int a[21]={7,2,4,5, 7, 5,4,2,1,2,4,5, 7, 5,4,2,1,2,4,5, 7};第一个改成7,那么可能连“周期”划分都有错误啊。
只是提示一下,具体怎么处理,我还在想。
初步感觉:绝非如楼主说的那么简单。

当一名对得起学生学费的老师,一直是我的目标!我会更努力的!
2011-02-20 22:19
点线面
Rank: 8Rank: 8
来 自:NO.-1
等 级:蝙蝠侠
帖 子:525
专家分:980
注 册:2011-1-3
收藏
得分:0 
都不明白题目说什么

小代码,大智慧
2011-02-20 22:22
qhxxbc
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:163
专家分:174
注 册:2010-9-14
收藏
得分:0 
谢谢您的关注
if (a[i-1]<a[i] && a[i]>a[i+1])我这个语句的意思是:某个数比它左右两边的数都大

其实我这只是我实际需解决问题的一个简化版本,我这个可以解决我的问题,我的实际问题不好描述;也许是我说“周期”不太妥当,哈哈

非计算机专业自学新手向大家请教
2011-02-20 22:25
犬虫门心
Rank: 8Rank: 8
来 自:西安
等 级:蝙蝠侠
帖 子:209
专家分:753
注 册:2011-1-25
收藏
得分:0 
既然你能定出周期,那么可能只有一个小小的问题了:
s[21]={1,2,4,5, 7, 5,4,2,1,2,4,5, 7, 5,4,2,1,2,4,5, 7}
你多算了一个7.

当一名对得起学生学费的老师,一直是我的目标!我会更努力的!
2011-02-20 22:27
qhxxbc
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:163
专家分:174
注 册:2010-9-14
收藏
得分:0 
回复 3楼 点线面
某函数s()经过计算得到一个数组是s[21] (此函数省略不写)
s[21]的元素是一个周期函数
求周期元素的平均值

这回不知是否写明白了?

非计算机专业自学新手向大家请教
2011-02-20 22:29
qhxxbc
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:163
专家分:174
注 册:2010-9-14
收藏
得分:0 
回复 5楼 犬虫门心
对,严格上来说您是对的!
我的实际数据很多,多算这么一个可忽略不计

非计算机专业自学新手向大家请教
2011-02-20 22:31
点线面
Rank: 8Rank: 8
来 自:NO.-1
等 级:蝙蝠侠
帖 子:525
专家分:980
注 册:2011-1-3
收藏
得分:2 
{
    int b[21]={1,2,4,5, 7, 5,4,2,1,2,4,5, 7, 5,4,2,1,2,4,5, 7};
    int j;
    float sum=0.0, aver;
    for (j=1; j<20; j++)
        if(b[j-1]==b[j+1])
        {
            if(b[j]>b[j-1])
            // 极大值
            else
            // 极小值
        }
        //下面自己去组织  
}

小代码,大智慧
2011-02-20 22:40
犬虫门心
Rank: 8Rank: 8
来 自:西安
等 级:蝙蝠侠
帖 子:209
专家分:753
注 册:2011-1-25
收藏
得分:28 
指针变量作为形式参数!不二的法门!
void getAtoZ(int *array, int count, int *start, int *end);
下面做形参的说明:
int *array => 要处理的数组。一次调用处理一个,多次调用,一一处理完。
int count => 数组中的有效数据个数(可能小于数组所申请的空间大小)
int *start => 顾名思义,就是用它,得到周期的起始点。
int *end => 周期的结束点

调用方法:
主函数中:
    int b[21]={1,2,4,5, 7, 5,4,2,1,2,4,5, 7, 5,4,2,1,2,4,5, 7};
    int head, tail;
    ...
    getAtoZ(b, 21, &head, &tail);

在子函数中:
void getAtoZ(int *array, int count, int *start, int *end)
{
    int m, n; //你所假设的头,尾坐标
    ...
    //求出m,n的值后,最后执行:
    *start = m;
    *end = n;
}
欧了!
楼主,认真看,相信你能自己实现的。
加油!

[ 本帖最后由 犬虫门心 于 2011-2-20 22:44 编辑 ]
收到的鲜花
  • qhxxbc2011-02-20 22:56 送鲜花  2朵   附言:谢谢

当一名对得起学生学费的老师,一直是我的目标!我会更努力的!
2011-02-20 22:43
qhxxbc
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:163
专家分:174
注 册:2010-9-14
收藏
得分:0 
回复 9楼 犬虫门心
非常感谢!
我大概能看明白,今天不早了,我得回宿舍了。
等明天我操作一下,若有问题再请教。
另外,先不结贴,让帖子再飞一会儿,看能否有其他方案。集思广益!
再次对您表示感谢!

非计算机专业自学新手向大家请教
2011-02-20 22:55
快速回复:如何求数组中周期元素的平均值
数据加载中...
 
   



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

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