gpt4 book ai didi

c - 需要帮助调试

转载 作者:太空宇宙 更新时间:2023-11-04 06:50:16 26 4
gpt4 key购买 nike

我要生成的函数称为:

int Range(int values[], int numValues)

目的是返回数组中最大值与数组中最小值的差值。

下面是我的代码,但它不起作用。任何帮助将不胜感激:)

#include <stdio.h>

int Range(int values[], int numValues)
{
int i;
int large;
int small;
int displayone;
int displaytwo;
int calc;

large = values[0];
small = values[0];

for(i=0;i<numValues;i++){

if(values[i]>large){
displayone = values[i];
}
else if(values[i] < small){
displaytwo = values[i];
}
}

calc = displayone - displaytwo;

return calc;
}

最佳答案

您需要正确跟踪小值和大值。您可以删除 displayonedisplaytwo 变量,因为它们不是必需的。只需使用 largesmall 来跟踪循环中的值。

严格来说,为了使功能健壮,您还应该考虑其他一些事情:

  1. 元素数量为零(或更少)的情况 - 在这种情况下,范围将是未定义的。返回零可能是我们能做的最好的事情。
  2. 一个 int 值减去另一个值的结果可能导致溢出 - 例如,考虑 INT_MAX - INT_MIN。其结果约为 40 亿,远远超过 unsigned int 可以表示的大约 20 亿。从数学上讲,范围永远是正数;消极的在这里可能没有意义。因此,使返回类型 unsigned int 应该适当并防止溢出,同时确保中间 largesmall 变量扩展为 long long 以允许最终减法正确发生。

考虑到上述所有因素,函数变为:

#include <stdio.h>

unsigned int Range(int values[] , int numValues)
{
int i;
long long large; // <<<< Make long long to support ...
long long small; // <<<< ... final subtraction
unsigned int calc; // <<<< Make unsigned int to match return

if (numValues < 1) // <<<< Handle invalid input
return 0;

large = values[0];
small = values[0];

for(i=0;i<numValues;i++){

if(values[i]>large)
large = values[i]; // <<<< assign to large here
else if(values[i] < small)
small = values[i]; // <<<< and similar for small
}

calc = (uint)(large - small); // <<<< then calculate difference

return calc;
}

关于c - 需要帮助调试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52563870/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com