【问题标题】:Problem with C code, I'm serching for maximum and minimumC代码有问题,我正在寻找最大值和最小值
【发布时间】:2020-11-10 22:24:44
【问题描述】:

我正在编写代码来搜索最大值、最小值并显示数组的总和。我对求和和显示数组没有任何问题,但是当我试图找到最大值和最小值时总是有问题,程序总是给我数字 9 而不是正确的数字。

代码是:

    #include <stdio.h>
    #include <stdlib.h>

void print_array(int array[], int len) {
for (int i=0; i<len; i++) {
    printf("%d", array[i]);

    for (int i=0; i<1; i++) {
        printf(", ");
    }
} 
}

void print_min(int array[], int len, int min) {
for (int i=1; i<len; i++) {
    if(array[i]<min) {
        min=array[i];
    }
}
}

void print_max(int array[], int len, int max) {
for (int i=1; i<len; i++) {
    if (array[i]>max) {
        max=array[i];
    }
}
}

void sum(int array[], int len, int* x) {
for (int i=0; i<len; i++) {
    *x = *x + array[i];
}
}

 

int main() {
int array[] = {9, 4, 7, 8, 10, 5, 1, 6, 3, 2};
int len = 10;

int min = array[0];
int max = array[0];

int summe = 0;

printf("Array: ");
print_array(array, len);
printf("\n");

print_min(array, len, min);
print_max(array, len, max);


printf("Minimum: %d\n", min);
printf("Maximum: %d\n", max);

sum(array, len, &summe);
printf("Summe: %d\n", summe);

return 0;
}

如果有人能告诉我我的错误在哪里解决它,那将非常有帮助。

我阅读了答案,然后更改了我的代码,但它不起作用。 我的新代码是:

#include <stdio.h>
#include <stdlib.h>

void print_array(int array[], int len) {
for (int i=0; i<len; i++) {
    printf("%d", array[i]);

    for (int i=0; i<1; i++) {
        printf(", ");
    }
} 
}


int min (int array[], int len) {
for (int i=1; i<len; i++) {
    if(array[i]<z) {
        z=array[i];
    }
}
return z;
}


int max(int array[], int len) {
for (int i=1; i<len; i++) {
    if (array[i]>y) {
        y=array[i];
    }
}
return y;
}

void sum(int array[], int len, int* x) {
for (int i=0; i<len; i++) {
    *x = *x + array[i];
}
}



int main() {
int array[] = {9, 4, 7, 8, 10, 5, 1, 6, 3, 2};
int len = 10;

int z=array[0];
int y=array[0];


int Minimum = 0;
int Maximum = 0;

int summe = 0;

printf("Array: ");
print_array(array, len);
printf("\n");

Minimum = min(array, len);
Maximum = max(array, len);


printf("Minimum: %d\n", Minimum);
printf("Maximum: %d\n", Maximum);

sum(array, len, &summe);
printf("Summe: %d\n", summe);

return 0;
}

我收到错误:“try.c:15:10: error: expected identifier or '(' int min (int array[], int len) {"

【问题讨论】:

  • 您需要传递minmax 作为参考或从函数返回最小值/最大值然后使用它。
  • maxmin 是按值传递的,它们的变化在函数之外是不可见的。 print_min/max 也用词不当,因为它们没有打印任何东西。
  • 你似乎喜欢 void 函数。

标签: c


【解决方案1】:

只是return 结果。

int sum(int array[], int len) {
    int x;

    for (int i=0; i<len; i++) {
        x += array[i];
    }

    return x;
}

你可以这样打印结果:

printf("The sum of the array is %d.\n", sum(myArray, myArraySize));

当然,如果您愿意,您可以通过指针传递参数,但对于像这样的简单函数来说,这不是典型的方法。

一个典型的 min 函数:

#include <limits.h>

int min(int array[], int len) {
    int x = INT_MAX;

    for (int i=0; i<len; i++) {
        if (array[i] < x)
           x = array[i];
    }

    return x;
}   

【讨论】:

  • 它没有回答这个问题。用户询问的是最小值和最大值,但不是总和。但原则上,我同意用户可以返回这些值。
  • @Abhishek:除非 OP 修复他首先编写函数的方式,否则我看不到任何前进的道路。
  • @Abhishek:反正我加了一个典型的min函数实现。
  • 当然,这也可以 :-) 但我个人认为,使用数组 [0] 是获得最小值/最大值的更好方法。因为数组可以有INT_MAX 作为值。
  • 但我个人认为,当返回的实际值为标量时使用 void 函数,是一个设计缺陷。
【解决方案2】:

你没有从print_minprint_max 函数返回或打印任何东西,所以当你printf 他们仍然有数组[0] 的值。您应该通过引用传递 min 和 max 而不是通过值传递它们。

【讨论】:

    【解决方案3】:

    看起来您希望 print_min 和 print_max 更改方法参数。

    当一个方法被调用时,实际值被压入堆栈并分配新的变量供方法中使用。

    也就是说,当您调用 print_min(array, len, min) 时,min 的值在该范围内不会改变。在 print_min 方法内部分配了一个具有相同 min 值的新变量(并且作为基于方法签名的纯巧合,命名相同)。

    您需要向 print_min 和 print_max 添加一个返回变量,以便能够在

    【讨论】:

      【解决方案4】:

      你需要传递minmax作为参考,

      //Calling
      print_min(array, len, &min);
      print_max(array, len, &max);
      
      
      //Function definition changes as follows,
      void print_min(int array[], int len, int * min) {...}
      void print_max(int array[], int len, int * max) {...}
      

      基本上,minmax 是按值传递的,这意味着作用域在函数调用完成时结束。您需要通过引用传递它们。与传递 summe 变量的方式相同。

      另一个选项是从函数返回最小值/最大值并将其分配给变量。

      附言函数的命名不是很好,因为它们没有打印任何东西。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-09-12
        • 2017-03-19
        相关资源
        最近更新 更多