注册 登录
编程论坛 C语言论坛

编写一个函数,返回存储在double类型数组中最大值下标,并在一个简单的程序中测试该函数

暴君Dentiny 发布于 2019-08-27 23:53, 4662 次点击
请问怎么解

程序代码:
#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
若要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口...

3 回复
#2
沈和2019-08-28 07:49
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编辑过]

#3
xhxh2019-08-28 12:45
只有本站会员才能查看附件,请 登录

看红标 max有是10个元素 下标0-9。 max是首元素地址加上10 当你循环就越界了。
#4
Mr_doge2019-08-29 09:06
程序代码:

#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;
}



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