【问题标题】:I'm getting values but not as it should be我得到了价值,但不是应该的
【发布时间】:2021-03-09 18:58:21
【问题描述】:

问题:用 C 语言编写程序,使用函数获取数组的最大元素、最小元素、所有元素的总和以及所有元素的乘积。 (为四个计算创建四个不同的函数,并为用户给定的一个数组调用它们)。

我认为由于in 而出现错误。

我是初学者,无法逐行解释每一件事。代码:

#include <stdio.h>  

// defined Max function int Max(int arr[], int); 
// defined Min function int Min(int arr[], int); 
// defined Sum function int Sum(int arr[], int); 
// defined Mul function int Mul(int arr[], int); 

int main() { 
    int i, n, arr[100];

    printf("Input the number of elements to be stored in the array : ");
    scanf("%d",&n);
    printf("Input %d elements in the array: \n",n);
    for (i=0; i<n; i++)
        {

            printf("element - %d : ",i);
            scanf("%d", &arr[i]);
        }
    n = Max( arr, n);
    printf("The largest element in the array is : %d", n);
    n = Min( arr, n);
    printf("\nThe smallest element in the array is : %d", n);
    n = Sum( arr, n);
    printf("\nThe sum of all the elements in the array is : %d", n);
    n = Mul( arr, n);
    printf("\nThe multiplication of all the elements in the array is : %d", n);
    return 0;
}

int Max(int arr[], int n)
{
    int max = arr[0];
    for (int i=0; i<n; i++)
        {
            if (max<arr[i])
                  max=arr[i];
        }
    return max;
}

int Min(int arr[], int n)
{
    int min = arr[0];
    for (int i=0; i<n; i++)
        {
            if (min>arr[i])
                  min=arr[i];
        }
    return min;
}

int Sum(int arr[], int n)
{
    int sum = arr[0];
    for (int i=0; i<n; i++)
        {
            sum += arr[i];
        }
    return sum;
}

int Mul(int arr[], int n)
{
    int mul = arr[0];
    for (int i=0; i<n; i++)
        {
            mul *= arr[i];
        }
    return mul;
}

【问题讨论】:

  • 在“sum”和“mul”函数(以及“max”和“min”)中,您使用了两次arr[0]。总和 不是 arr[0] + arr[0] + arr[1] + ... + arr[n-1].
  • 请注意,您的总和和(尤其是)乘积不会溢出。比如13! (阶乘)将溢出 int 产品,但您可以拥有 100 个元素。

标签: arrays c function


【解决方案1】:

正如一条评论中所建议的,您的for 应该从 1 开始,否则您使用元素 0 两次,因此总是会产生错误的结果。以下是与Mul 函数相关的for 应该如何出现,其他的也一样:

int mul = arr[0];
for(int i=1; i<n; i++)
{ 
   mul *= arr[i];
}
return mul;

除了上述之外,你的代码中还有一个bug,就是你使用变量n的方式。
据我所知,该变量存储数组元素的数量。它是所有子例程的有效输入,但您不能用每个子例程的结果重新分配它。这样一来,就像您总是以不同的数组大小调用子例程一样,当然会得到意想不到的结果。
因此,一种可能的解决方案是定义和使用另一个局部变量来保存每个子例程的结果。

为了帮助您解决问题,我修复了您的代码,现在可以正常工作了。你去:

#include <stdio.h>  

// defined Max function int Max(int arr[], int); 
// defined Min function int Min(int arr[], int); 
// defined Sum function int Sum(int arr[], int); 
// defined Mul function int Mul(int arr[], int); 

int main() { 
    int i, n, op_res, arr[100];

    printf("Input the number of elements to be stored in the array : ");
    scanf("%d",&n);
    printf("Input %d elements in the array: \n",n);
    for (i=0; i<n; i++)
        {

            printf("element - %d : ",i);
            scanf("%d", &arr[i]);
        }
    op_res = Max( arr, n);
    printf("The largest element in the array is : %d", op_res);
    op_res = Min( arr, n);
    printf("\nThe smallest element in the array is : %d", op_res);
    op_res = Sum( arr, n);
    printf("\nThe sum of all the elements in the array is : %d", op_res);
    op_res = Mul( arr, n);
    printf("\nThe multiplication of all the elements in the array is : %d", op_res);
    return 0;
}

int Max(int arr[], int n)
{
    int max = arr[0];
    for (int i=0; i<n; i++)
        {
            if (max<arr[i])
                  max=arr[i];
        }
    return max;
}

int Min(int arr[], int n)
{
    int min = arr[0];
    for (int i=0; i<n; i++)
        {
            if (min>arr[i])
                  min=arr[i];
        }
    return min;
}

int Sum(int arr[], int n)
{
    int sum = arr[0];
    for (int i=1; i<n; i++)
        {
            sum += arr[i];
        }
    return sum;
}

int Mul(int arr[], int n)
{
    int mul = arr[0];
    for (int i=1; i<n; i++)
        {
            mul *= arr[i];
        }
    return mul;
}

【讨论】:

  • 你应该接受答案并投票:D
  • 已记录支持但不会公开显示我的声誉
  • 不用担心,没关系。我很乐意提供帮助,但我也很高兴您接受了答案。 :)
猜你喜欢
  • 2015-12-25
  • 2022-08-06
  • 1970-01-01
  • 2015-12-10
  • 1970-01-01
  • 2021-03-07
  • 1970-01-01
  • 2023-02-09
  • 2020-06-30
相关资源
最近更新 更多