繁体   English   中英

使用c中的函数确定数组的最大值

[英]Determine maximum value of array using a function in c [closed]

编写程序需要从用户那里获取n个元素(其中n由用户指定)并将数据存储在数组中。

然后,在屏幕上显示阵列的内容,并使用函数计算和显示最大温度。

我理解这个问题,但是每次尝试时,我总是会出错。 有人可以更正我的代码:

#include <stdio.h>

float maximum (float num[]);

int main ()

{
int i,size;

printf ("Enter total number of elements (1 to 100): \n");
scanf ("%d", &size);

float num[]={size};

for (i=1; i<=size; i++) {
    printf ("Enter Number %d: ",i);
    scanf ("%f", &num[i]);  }

printf("Largest Number: %f", maximum (float num[]);
}

float maximum (float num[])
{
    int i,size;
    float num[]={size};
    float max;
    max=num[1];

    for (i=2; i<=size; i++) {
        if (num[i]>max)
            max=num[i]; }
    return max;
}

谢谢

float num[size]={0};

具有元素size VLA。

scanf ("%f", &num[i-1]); 否则,您将无法访问UB来访问数组索引。

同样在功能上

float maximum (float num[])
{
    int i,size;
    //float num[]={size};
    float max;
    max=num[0];

    for (i=2; i<=size; i++) {
        if (num[i-1]>max)
            max=num[i-1]; 
   }
    return max;
}

示例代码:

#include <stdio.h>
#include <stdlib.h>
float mymaximum (int size, float num[]);

int main (void)
{
    int i,size;

    printf ("Enter total number of elements (1 to 100): \n");
    if( scanf ("%d", &size) != 1){
        fprintf(stderr,"Error in input");
        exit(1);
    }
    if( size<1 && size>100){
        fprintf(stderr,"Wrong input.");
        exit(1);
    }

    float num[size];

    for (i=0; i<size; i++) {
        printf ("Enter Number %d: ",i);
        if( scanf ("%f", &num[i]) !=1){
            fprintf(stderr,"Error in input");
            exit(1);
        }  
    }

    printf("Largest Number: %f", mymaximum(size,num));
    return 0;
}

float mymaximum (int size, float num[])
{
    float max=num[0];

    for (int i=1; i<size; i++) {
        if (num[i]>max)
            max=num[i]; 
    }
    return max;
}

那是什么问题呢?

float num[]={size}; 这是一个元素数组。 然后尝试访问除0以外的所有其他索引。 这将访问数组范围之外的内存。 您有1个元素数组,除非size = 1否则就是未定义的行为。 什么都可能发生。 包括炸毁代码或一次突然工作。

解决方案是什么?

合并了一些错误检查。 如果用户输入错误或元素数量超出您的预期,我们将终止该程序。 我们没有使用100个元素数组,而是使用VLA并创建了一个具有size元素数量的数组。

mymaximum函数发生了什么?

之前,您已经在方法中重新声明了一个元素数组。 错了-您传递了数组,以便可以读取它。 但是你没有这样做。 而是您再次声明了一个数组,并访问了数组边界之外的位置。 是的,这是未定义的行为。

您需要这样的东西。

#include <stdio.h>

float maximum (float num[], int size);

int main ()

{
    int i,size;

    printf ("Enter total number of elements (1 to 100): \n");
    scanf ("%d", &size);

    float num[100];

    for (i=0; i<size; i++) {
        printf ("Enter Number %d: ",i);
        scanf ("%f", &num[i]);  }

    printf("Largest Number: %f", maximum (num, size);
}

float maximum (float num[], int size)
{
    int i;
    //float num[]={size};
    float max;
    max=num[0];

    for (i=1; i<size; i++) {
        if (num[i] > max)
            max=num[i]; }
    return max;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM