标题:编写一个函数,返回存储在double类型数组中最大值下标,并在一个简单的程序中 ...
只看楼主
暴君Dentiny
Rank: 2
等 级:论坛游民
帖 子:132
专家分:43
注 册:2019-5-6
结帖率:89.47%
已结贴  问题点数:20 回复次数:3 
编写一个函数,返回存储在double类型数组中最大值下标,并在一个简单的程序中测试该函数
请问怎么解

程序代码:
#include<stdio.h>
#define zhuzi 10
int main()
{
    double maxq(double* p,double *pl);
    double max[zhuzi] = { 1,2,3,4,5,6,7,8,9,10 },p;
    p=maxq(max, max + zhuzi);
    printf("%f", p);

}
double maxq(double* p,double *pl)
{
    double n;
    int q = 0;
    for (q = 0; p<pl;p++,q++)
    {
        *p = *p < *(p + q) ? *p : *(p + q);
    }
    return *p;
}[quote]输出结果
1640817473962484914662489108512768.000000
E:\users\c\数组下标\Debug\数组下标.exe (进程 12704)已退出,返回代码为: 0。
若要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口...

搜索更多相关主题的帖子: 函数 返回 double 数组 下标 
2019-08-27 23:53
沈和
Rank: 2
等 级:论坛游民
威 望:5
帖 子:22
专家分:81
注 册:2019-8-26
得分:7 
1. 题目要求返回最大值下标,你返回了某个元素的值。

2. for循环执行到后面,越界访问数组。

3. *p = *p < *(p + q) ? *p : *(p + q); // 会修改数组中的元素,为什么要这么做呢?

我建议应该这么写:
程序代码:
#include<stdio.h>
#define zhuzi 10
int main(void)
{
    int maxq(const double* p, int n);
    double max[zhuzi] = { 1,2,3,4,5,6,7,8,9,10 };
    int  p = maxq(max, zhuzi);
    printf("%d\n", p);
    return 0;
}
int maxq(const double* p, int n)
{
    int mark = 0;
    for (int i = 0; i < n; i++)
    {
        if( p[mark] < p[i] )
        {
            mark = i;
        }
    }
    return mark;
}


[此贴子已经被作者于2019-8-28 07:56编辑过]

2019-08-28 07:49
xhxh
Rank: 2
等 级:论坛游民
威 望:2
帖 子:17
专家分:31
注 册:2019-2-20
得分:7 

看红标 max有是10个元素 下标0-9。 max是首元素地址加上10 当你循环就越界了。
2019-08-28 12:45
Mr_doge
Rank: 5Rank: 5
等 级:贵宾
威 望:10
帖 子:159
专家分:385
注 册:2018-6-28
得分:7 
程序代码:
#include <stdio.h>


int double_max_search(double *str,int max);


int main(void)
{
    double array[12] = {1,2,3,4,5,6,7,8,9,11,11,0};
    int length = 12;
    int max = 0;

    max = double_max_search(array,length);
    if(max >= 0 && max <= length)
        printf("最大值为第%d个数组成员,其值为%f\n",max,array[max-1]);
    else
        printf("空指针警告+越界警告.jpg\n");
    getchar();

    return 0;
}



int double_max_search(double *str,int max)
{
    if(str == NULL)
        return -1;
    double *source = str;
    int count = 0;
    int max_site = 0;
    double cache = 0.0;

    count = 0;
    while(count < max)
    {
        if(count == 0)
        {
            cache = *source;
            max_site = count;
            source++;
            count++;
            continue;
        }
        if(*source > cache)
        {
            cache = *source;
            max_site = count;
            source++;
            count++;
            continue;
         }
        else
        {
            source++;
            count++;
            continue;
        }
    }

    return max_site+1;
}



丢个砖头给你,有兴趣自己看看,没兴趣自己改自己的错误
指针和数组下标本质一样,看不懂把入门书指针和数组下标的内容翻出来仔细看看
2019-08-29 09:06



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




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

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