最小值和最大值不是数组中的数字
Minumum and Maximum values aren't numbers in the array
我需要找到数组中的最小值和最大值及其位置;我的数组是从 0 到 1000 的随机值,用户指定生成多少个随机数。为什么我得到的最大值、最小值和它们的位置不在我的数组中?
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define SIZE 1000
int arrSum(int arr[SIZE], int b)
{
if(b < 0)
{
return 0;
} else
{
return arr[b] + arrSum(arr, b-1);
}
}
int main()
{
int inputNum;
int i,q;
int arr1[SIZE];
int sum;
int avg;
int min;
int max;
int location1,location2, j = 1;
srand(time(0));
min = arr1[0];
for(j = 1; j < inputNum; j++)
{
if(arr1[j] > max)
{
max == arr1[j];
location1 = j + 1;
}
else if (arr1[j] < min)
{
min == arr1[j];
location2 = j + 1;
}
}
printf("Enter an integer between 0 and 1000: ");
scanf("%d",&inputNum);
for(q = 0; q < inputNum; q++)
{
arr1[q] = rand() % 1001;
}
printf("min: %6d pos:%4d\n",min,location2);
printf("max: %6d pos:%4d\n",max,location1);
sum = arrSum(arr1, inputNum);
printf("sum: %6d\n", sum );
avg = sum / inputNum;
printf("avg: %6d\n\n",avg);
printf(" Pos | Val\n");
printf("-------------\n");
for (i = 0; i < inputNum; i++)
{
printf("%4d |%4d\n", i,arr1[i]);
}
return 0;
}
- 你语言不通,
==
不是赋值运算符
- 你不知道如何编写可读代码
- 你没有初始化一些变量
- 您在完成作业后使用
rand()
初始化了数据。
- 您的部分代码没有逻辑
- 索引从0开始
部分固定的代码,可以工作,但最好从头开始编写:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <limits.h>
#define SIZE 1000
int arrSum(int arr[SIZE], int b)
{
if(b < 0)
{
return 0;
}
else
{
return arr[b] + arrSum(arr, b-1);
}
}
int main()
{
int inputNum = 0;
int arr1[SIZE];
memset(&arr1, 0, sizeof(arr1));
int sum = 0;
int avg = 0;
int min = INT_MAX;
int max = INT_MIN;
int location1 = 0,location2 = 0;
srand(time(NULL));
printf("Enter an integer between 0 and 1000: ");
scanf("%d",&inputNum);
for(size_t q = 0; q < inputNum; ++q)
{
arr1[q] = rand() % 1001;
}
for(size_t j = 0; j < inputNum; ++j)
{
if(arr1[j] > max)
{
max = arr1[j];
location1 = j;
}
if (arr1[j] < min)
{
min = arr1[j];
location2 = j;
}
}
printf("min: %6d pos:%4d\n",min,location2);
printf("max: %6d pos:%4d\n",max,location1);
sum = arrSum(arr1, inputNum);
printf("sum: %6d\n", sum );
avg = sum / inputNum;
printf("avg: %6d\n\n",avg);
printf(" Pos | Val\n");
printf("-------------\n");
for (size_t i = 0; i < inputNum; ++i)
{
printf("%zu |%d\n", i,arr1[i]);
}
return 0;
}
你有很多问题:
- 你用递归对你的数组求和,但它不是尾部。
- 您不检查
inputNum
是否大于 SIZE
- 您使用
==
但它是一个测试 equally operator not assign operator
- 您初始化数组后使用它...
- 您没有使用 corect
size_t
类型作为索引。
- 你忘记初始化了
max
- 等等
我建议您使用 malloc
更简洁的版本,并提供一些良好实践示例,例如仅在需要时才声明变量或更好的命名。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <limits.h>
static int arrSum(int* arr, size_t n, size_t max, int acc)
{
if (n < max)
{
return arrSum(arr, n + 1, max, acc + arr[n]);
}
else
{
return acc;
}
}
int main()
{
srand((unsigned int)time(NULL));
printf("Enter an integer between 0 and 1000: ");
size_t input_size;
if (scanf("%zu", &input_size) != 1)
{
return 1;
}
int* input = malloc(input_size * sizeof *input);
if (input == NULL)
{
return 1;
}
for (size_t i = 0; i < input_size; i++)
{
input[i] = rand() % 1001;
}
if (input_size < 1)
{
free(input);
return 1;
}
size_t index_min = 0;
size_t index_max = 0;
int min = input[index_min];
int max = input[index_max];
for (size_t i = 1; i < input_size; i++)
{
if (input[i] > max)
{
max = input[i];
index_max = i;
}
else if (input[i] < min)
{
min = input[i];
index_min = i;
}
}
printf("min: %6d pos:%4zu\n", min, index_min);
printf("max: %6d pos:%4zu\n", max, index_max);
int sum = arrSum(input, 0, input_size, 0);
printf("sum: %6d\n", sum);
if (input_size > INT_MAX)
{
free(input);
return 1;
}
int avg = sum / (int)input_size;
printf("avg: %6d\n\n", avg);
printf(" Pos | Val\n");
printf("-------------\n");
for (size_t i = 0; i < input_size; i++)
{
printf("%4zu |%4d\n", i, input[i]);
}
free(input);
}
您的代码存在语法错误,代码流程有误。
试试这个..
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define SIZE 1000
int arrSum(int arr[SIZE], int b)
{
if(b < 0)
{
return 0;
} else
{
return arr[b] + arrSum(arr, b-1);
}
}
int main()
{
int inputNum;
int i,q;
int arr1[SIZE];
int sum;
int avg;
int min = 1001;
int max = 0;
int location1,location2, j = 1;
srand(time(0));
printf("Enter an integer between 0 and 1000: ");
scanf("%d",&inputNum);
for(q = 0; q < inputNum; q++)
{
arr1[q] = rand() % 1001;
}
for(j = 0; j < inputNum; j++)
{
if(arr1[j] > max)
{
max = arr1[j];
location1 = j + 1;
}
if (arr1[j] < min)
{
min = arr1[j];
location2 = j + 1;
}
}
printf("min: %6d pos:%4d\n",min,location2);
printf("max: %6d pos:%4d\n",max,location1);
sum = arrSum(arr1, inputNum);
printf("sum: %6d\n", sum );
avg = sum / inputNum;
printf("avg: %6d\n\n",avg);
printf(" Pos | Val\n");
printf("-------------\n");
for (i = 0; i < inputNum; i++)
{
printf("%4d |%4d\n", i,arr1[i]);
}
return 0;
}
我需要找到数组中的最小值和最大值及其位置;我的数组是从 0 到 1000 的随机值,用户指定生成多少个随机数。为什么我得到的最大值、最小值和它们的位置不在我的数组中?
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define SIZE 1000
int arrSum(int arr[SIZE], int b)
{
if(b < 0)
{
return 0;
} else
{
return arr[b] + arrSum(arr, b-1);
}
}
int main()
{
int inputNum;
int i,q;
int arr1[SIZE];
int sum;
int avg;
int min;
int max;
int location1,location2, j = 1;
srand(time(0));
min = arr1[0];
for(j = 1; j < inputNum; j++)
{
if(arr1[j] > max)
{
max == arr1[j];
location1 = j + 1;
}
else if (arr1[j] < min)
{
min == arr1[j];
location2 = j + 1;
}
}
printf("Enter an integer between 0 and 1000: ");
scanf("%d",&inputNum);
for(q = 0; q < inputNum; q++)
{
arr1[q] = rand() % 1001;
}
printf("min: %6d pos:%4d\n",min,location2);
printf("max: %6d pos:%4d\n",max,location1);
sum = arrSum(arr1, inputNum);
printf("sum: %6d\n", sum );
avg = sum / inputNum;
printf("avg: %6d\n\n",avg);
printf(" Pos | Val\n");
printf("-------------\n");
for (i = 0; i < inputNum; i++)
{
printf("%4d |%4d\n", i,arr1[i]);
}
return 0;
}
- 你语言不通,
==
不是赋值运算符 - 你不知道如何编写可读代码
- 你没有初始化一些变量
- 您在完成作业后使用
rand()
初始化了数据。 - 您的部分代码没有逻辑
- 索引从0开始
部分固定的代码,可以工作,但最好从头开始编写:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <limits.h>
#define SIZE 1000
int arrSum(int arr[SIZE], int b)
{
if(b < 0)
{
return 0;
}
else
{
return arr[b] + arrSum(arr, b-1);
}
}
int main()
{
int inputNum = 0;
int arr1[SIZE];
memset(&arr1, 0, sizeof(arr1));
int sum = 0;
int avg = 0;
int min = INT_MAX;
int max = INT_MIN;
int location1 = 0,location2 = 0;
srand(time(NULL));
printf("Enter an integer between 0 and 1000: ");
scanf("%d",&inputNum);
for(size_t q = 0; q < inputNum; ++q)
{
arr1[q] = rand() % 1001;
}
for(size_t j = 0; j < inputNum; ++j)
{
if(arr1[j] > max)
{
max = arr1[j];
location1 = j;
}
if (arr1[j] < min)
{
min = arr1[j];
location2 = j;
}
}
printf("min: %6d pos:%4d\n",min,location2);
printf("max: %6d pos:%4d\n",max,location1);
sum = arrSum(arr1, inputNum);
printf("sum: %6d\n", sum );
avg = sum / inputNum;
printf("avg: %6d\n\n",avg);
printf(" Pos | Val\n");
printf("-------------\n");
for (size_t i = 0; i < inputNum; ++i)
{
printf("%zu |%d\n", i,arr1[i]);
}
return 0;
}
你有很多问题:
- 你用递归对你的数组求和,但它不是尾部。
- 您不检查
inputNum
是否大于SIZE
- 您使用
==
但它是一个测试 equally operator not assign operator - 您初始化数组后使用它...
- 您没有使用 corect
size_t
类型作为索引。 - 你忘记初始化了
max
- 等等
我建议您使用 malloc
更简洁的版本,并提供一些良好实践示例,例如仅在需要时才声明变量或更好的命名。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <limits.h>
static int arrSum(int* arr, size_t n, size_t max, int acc)
{
if (n < max)
{
return arrSum(arr, n + 1, max, acc + arr[n]);
}
else
{
return acc;
}
}
int main()
{
srand((unsigned int)time(NULL));
printf("Enter an integer between 0 and 1000: ");
size_t input_size;
if (scanf("%zu", &input_size) != 1)
{
return 1;
}
int* input = malloc(input_size * sizeof *input);
if (input == NULL)
{
return 1;
}
for (size_t i = 0; i < input_size; i++)
{
input[i] = rand() % 1001;
}
if (input_size < 1)
{
free(input);
return 1;
}
size_t index_min = 0;
size_t index_max = 0;
int min = input[index_min];
int max = input[index_max];
for (size_t i = 1; i < input_size; i++)
{
if (input[i] > max)
{
max = input[i];
index_max = i;
}
else if (input[i] < min)
{
min = input[i];
index_min = i;
}
}
printf("min: %6d pos:%4zu\n", min, index_min);
printf("max: %6d pos:%4zu\n", max, index_max);
int sum = arrSum(input, 0, input_size, 0);
printf("sum: %6d\n", sum);
if (input_size > INT_MAX)
{
free(input);
return 1;
}
int avg = sum / (int)input_size;
printf("avg: %6d\n\n", avg);
printf(" Pos | Val\n");
printf("-------------\n");
for (size_t i = 0; i < input_size; i++)
{
printf("%4zu |%4d\n", i, input[i]);
}
free(input);
}
您的代码存在语法错误,代码流程有误。 试试这个..
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define SIZE 1000
int arrSum(int arr[SIZE], int b)
{
if(b < 0)
{
return 0;
} else
{
return arr[b] + arrSum(arr, b-1);
}
}
int main()
{
int inputNum;
int i,q;
int arr1[SIZE];
int sum;
int avg;
int min = 1001;
int max = 0;
int location1,location2, j = 1;
srand(time(0));
printf("Enter an integer between 0 and 1000: ");
scanf("%d",&inputNum);
for(q = 0; q < inputNum; q++)
{
arr1[q] = rand() % 1001;
}
for(j = 0; j < inputNum; j++)
{
if(arr1[j] > max)
{
max = arr1[j];
location1 = j + 1;
}
if (arr1[j] < min)
{
min = arr1[j];
location2 = j + 1;
}
}
printf("min: %6d pos:%4d\n",min,location2);
printf("max: %6d pos:%4d\n",max,location1);
sum = arrSum(arr1, inputNum);
printf("sum: %6d\n", sum );
avg = sum / inputNum;
printf("avg: %6d\n\n",avg);
printf(" Pos | Val\n");
printf("-------------\n");
for (i = 0; i < inputNum; i++)
{
printf("%4d |%4d\n", i,arr1[i]);
}
return 0;
}