我需要找到数组中的最小值和最大值以及它们的位置;我的数组是从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;
}
答案 0 :(得分:1)
while (q.size())
{
std::cout << q.dequeue() << std::endl;
}
不是赋值运算符==
初始化数据。部分修复的代码会起作用,但最好从头开始写:
rand()
答案 1 :(得分:0)
你有很多问题:
inputNum
是否大于SIZE
==
,但它是一个测试运算符,而不是分配运算符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);
}
答案 2 :(得分:0)
您的代码存在语法错误,代码流错误。 试试这个..
#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;
}