yuthen 2022-03-06 21:13 采纳率: 50%
浏览 21
已结题

寻找数组最小值下标的函数中有一个语句不知道为什么无效(语言-c++)

正在学C语言,做书上的练习题,用的vs2022,要找出数组最大,最小值下标,然后卡在最小值下标这了。函数SUBSCRIPT_min的返回值一直都是0,在SUBSCRIPT_min函数内用printf直接输出sub也一直是0,大概是sub = i + 1这个语句没有起效果,但不知道是为什么。

#include<stdio.h>
void MAX_array(int arr[5]);
void MIN_array(int arr[5]);
int SUBSCRIPT_min(int arr[5]);
int SUBSCRIPT_max(int arr[5]);
int main()
{
    int arr[5] = { 1,2,3,4,5 };
    int i,s=0;
    printf_s("Enter five number,please.\n");
    for (i = 0; i <5 ; i++)
    {
        scanf_s("%d", &arr[i]);
    }
    printf_s("Which number do you want,min or max?\n1)min      2)max(0 to quit)\n");
    scanf_s("%d", &s);
    while (s != 0)
    {
        switch (s)
        {
        case 1:MIN_array(arr);
            printf_s("The subscript of the minimum is %d.\n", SUBSCRIPT_min(arr));
            break;
        case 2:MAX_array(arr);
            break;
        case 3:
        default:printf_s("Error!\n");
            break;
        }
        printf("Please enter 1 or 2.(0 to quit)\n");
        scanf_s("%d", &s);
    }
}
void MAX_array(int arr[5])
{
    int i,max=0;
    for ( i = 0; i < 4; i++)
    {
        if (arr[0]<arr[i+1])
        {
            arr[0] = arr[i + 1];
        }
    }
    max = arr[0];
    printf_s("The maximum is %d.\n", max);
}
void MIN_array(int arr[5])
{
    int i, min = 0;
    for (i = 0; i < 4; i++)
    {
        if (arr[0] > arr[i + 1])
        {
            arr[0] = arr[i + 1];
        }
    }
    min = arr[0];
    printf_s("The minimum is %d.\n", min);
}
int SUBSCRIPT_min(int arr[5])
{
    int i, sub=0;
    for (i = 0; i < 4; i++)
    {
        if (arr[0] > arr[i + 1])
        {
            arr[0] = arr[i + 1];
            sub = i + 1;
        }
    }
    return sub;
}

img

  • 写回答

3条回答 默认 最新

  • bingbingyihao 2022-03-06 21:38
    关注

    回答:你这边的min函数修改了原来的数组,这边给出测试结果,写的函数没啥问题,但在下标会溢出,已修改

    #include<stdio.h>
    
    void MAX_array(int arr[5]);
    void MIN_array(int arr[5]);
    int SUBSCRIPT_min(int arr[5]);
    int SUBSCRIPT_max(int arr[5]);
    
    int main()
    {
        int arr[5] = { 1,2,3,4,5 };
        int i,s=0;
        printf_s("Enter five number,please.\n");
        for (i = 0; i <5 ; i++)
        {
            scanf_s("%d", &arr[i]);
        }
        printf_s("Which number do you want,min or max?\n1)min      2)max(0 to quit)\n");
        scanf_s("%d", &s);
        while (s != 0)
        {
            switch (s)
            {
            case 1:MIN_array(arr);
                printf_s("The subscript of the minimum is %d.\n", SUBSCRIPT_min(arr));
                break;
            case 2:MAX_array(arr);
                break;
            case 3:
            default:printf_s("Error!\n");
                break;
            }
            printf("Please enter 1 or 2.(0 to quit)\n");
            scanf_s("%d", &s);
        }
    }
    
    void MAX_array(int arr[5]){
        
    }
    void MIN_array(int arr[5]){
        
    }
    
    /* 
    void MAX_array(int arr[5])
    {
        int i,max=0;
        for ( i = 0; i < 4; i++)
        {
            if (arr[0]<arr[i+1])
            {
                arr[0] = arr[i + 1];
            }
        }
        max = arr[0];
        printf_s("The maximum is %d.\n", max);
    }
    
    void MIN_array(int arr[5])
    {
        int i, min = 0;
        for (i = 0; i < 4; i++)
        {
            if (arr[0] > arr[i + 1])
            {
                arr[0] = arr[i + 1];
            }
        }
        min = arr[0];
        printf_s("The minimum is %d.\n", min);
    }
    */
    
    int SUBSCRIPT_min(int arr[5])
    {
        int i, sub=0;
        for (i = 0; i < 4; i++)
        {
            if (arr[0] > arr[i])  //原来的i+1会溢出 
            {
                arr[0] = arr[i];
                sub = i + 1;
            }
        }
        return sub;
    }
    
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月6日
  • 已采纳回答 3月6日
  • 创建了问题 3月6日

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器