C-获取随机生成的数字的最小值和最大值

C-获取随机生成的数字的最小值和最大值,c,C,下面是我的代码,这是我的第一门编程课程,所以可能会犯一个愚蠢的错误 基本上,我试图得到最小/最大值和它们的位置号。然而,我的最大值在生成6个数字之前工作正常,我似乎不明白为什么 #include <stdio.h> #include <stdlib.h> int main(void) { int n, r, x, i; int max, min; int num[0]; printf("Enter an integer"); scanf("%d",

下面是我的代码,这是我的第一门编程课程,所以可能会犯一个愚蠢的错误

基本上,我试图得到最小/最大值和它们的位置号。然而,我的最大值在生成6个数字之前工作正常,我似乎不明白为什么

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

int main(void) {
  int n, r, x, i;
  int max, min;
  int num[0];

  printf("Enter an integer");
  scanf("%d", &n);

  x = n;

printf("\n Pos | Val");
for(n=0; n<x; n++)
{
    r = ( rand()%1000 ) + 1;
    printf("\n %3d | %3d", n+1, r);
}

  max=num[0];
    i=0;

    while(i<x) // while loop determing the biggest number
    {
        if(num[i]>max)
        {
    max=num[i];
        }
        i++;
}   

  printf("\nMax : %d",max); // biggest number
  return 0;
}
#包括
#包括
内部主(空){
int n,r,x,i;
int max,min;
int num[0];
printf(“输入整数”);
scanf(“%d”和“&n”);
x=n;
printf(“\n Pos|Val”);

对于(n=0;n此处
int num[0];

您没有将随机数存储在此数组中。在该数组中搜索没有意义


此外,数组的大小应至少等于
n

此处
int num[0];

您没有将随机数存储在此数组中。在该数组中搜索没有意义


另外,数组的大小应至少等于
n

您没有将随机数存储在num中,您还需要一些空间来存储这些数字。请尝试此操作以确定大小,我已对更改进行了注释

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

int main(void) {
  int n, r, x, i;
  int max, min;
  int * num;    // ++++++++ pointer to array

  printf("Enter an integer");
  scanf("%d", &n);

  x = n;
  num = malloc(x * sizeof(int));    // ++++++++++ allocate memory

printf("\n Pos | Val");
for(n=0; n<x; n++)
{
    r = ( rand()%1000 ) + 1;
    printf("\n %3d | %3d", n+1, r);
    num[n] = r;     // +++++++++  store your number
}

  max=num[0];
    i=0;

    while(i<x) // while loop determing the biggest number
    {
        if(num[i]>max)
        {
    max=num[i];
        }
        i++;
}   

  printf("\nMax : %d",max); // biggest number
  free(num);    // +++++++++ free memory

  return 0;
}
#包括
#包括
内部主(空){
int n,r,x,i;
int max,min;
int*num;//+++指向数组的指针
printf(“输入整数”);
scanf(“%d”和“&n”);
x=n;
num=malloc(x*sizeof(int));//+allocate内存
printf(“\n Pos|Val”);

对于(n=0;n您没有将随机数存储在num中,您还需要一些空间来存储这些数字。请尝试此操作以确定大小,我对我的更改进行了注释

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

int main(void) {
  int n, r, x, i;
  int max, min;
  int * num;    // ++++++++ pointer to array

  printf("Enter an integer");
  scanf("%d", &n);

  x = n;
  num = malloc(x * sizeof(int));    // ++++++++++ allocate memory

printf("\n Pos | Val");
for(n=0; n<x; n++)
{
    r = ( rand()%1000 ) + 1;
    printf("\n %3d | %3d", n+1, r);
    num[n] = r;     // +++++++++  store your number
}

  max=num[0];
    i=0;

    while(i<x) // while loop determing the biggest number
    {
        if(num[i]>max)
        {
    max=num[i];
        }
        i++;
}   

  printf("\nMax : %d",max); // biggest number
  free(num);    // +++++++++ free memory

  return 0;
}
#包括
#包括
内部主(空){
int n,r,x,i;
int max,min;
int*num;//+++指向数组的指针
printf(“输入整数”);
scanf(“%d”和“&n”);
x=n;
num=malloc(x*sizeof(int));//+allocate内存
printf(“\n Pos|Val”);

对于(n=0;n您的第一个错误是数组的维数为零。您需要为数组设置一个大小

为此,我将代码拆分为三个附加函数:一个用于生成数字,另两个用于查找最小值和最大值

int *gennums(size_t n)
{
    int *nums;
    size_t i;

    if ((nums = malloc(n * sizeof (int))) != NULL) {
        for (i = 0; i < n; ++i)
            nums[i] = rand() % 1000;

        return nums;    // caller must free
    }
    return NULL;
}

int min(const int *arr, size_t n)
{
    assert(n > 0);
    int m = arr[0];
    size_t i;

    for (i = 0; i < n; ++i)
        if (arr[i] < m)
            m = arr[i];

    return m;
}

int max(const int *arr, size_t n)
{
    assert(n > 0);
    int m = arr[0];
    size_t i;

    for (i = 0; i < n; ++i)
        if (arr[i] > m)
            m = arr[i];

    return m;
}
int*gennums(大小)
{
int*nums;
尺寸i;
如果((nums=malloc(n*sizeof(int))!=NULL){
对于(i=0;i0);
int m=arr[0];
尺寸i;
对于(i=0;i0);
int m=arr[0];
尺寸i;
对于(i=0;im)
m=arr[i];
返回m;
}

您的第一个错误是数组的维度为零。您需要设置数组的大小

为此,我将代码拆分为三个附加函数:一个用于生成数字,另两个用于查找最小值和最大值

int *gennums(size_t n)
{
    int *nums;
    size_t i;

    if ((nums = malloc(n * sizeof (int))) != NULL) {
        for (i = 0; i < n; ++i)
            nums[i] = rand() % 1000;

        return nums;    // caller must free
    }
    return NULL;
}

int min(const int *arr, size_t n)
{
    assert(n > 0);
    int m = arr[0];
    size_t i;

    for (i = 0; i < n; ++i)
        if (arr[i] < m)
            m = arr[i];

    return m;
}

int max(const int *arr, size_t n)
{
    assert(n > 0);
    int m = arr[0];
    size_t i;

    for (i = 0; i < n; ++i)
        if (arr[i] > m)
            m = arr[i];

    return m;
}
int*gennums(大小)
{
int*nums;
尺寸i;
如果((nums=malloc(n*sizeof(int))!=NULL){
对于(i=0;i0);
int m=arr[0];
尺寸i;
对于(i=0;i0);
int m=arr[0];
尺寸i;
对于(i=0;im)
m=arr[i];
返回m;
}

实际上,您的代码中有几个地方需要改进

首先,在代码
int num[0];
中声明大小为0的数组是无效的,因此我不确定为什么您的代码使用的
n
最多为6

其次,正如您可能很快就会了解到的,缩进在编程时非常重要,以便将来更好地理解和维护代码许多公共语言(如Python)依赖空格来区分函数,确实需要仔细管理缩进

第三,RAND_MAX不是1000的倍数,因此在程序中无法获得相同的概率。还建议使用srand函数调用

您预期计划的可能实施方案(仍然难看):

#包括
#包括
#包括
#定义最大1000
内部主(空){
int n,r,i;
int pos=0;
int max;
int num[MAXN];
printf(“输入整数”);
scanf(“%d”和“&n”);
srand(时间(0));
printf(“\n Pos|Val”);
对于(i=0;i最大值)
{
max=num[i];
pos=i;
}
}
printf(“\n最大值:%d |位置:%d”,最大值,位置);//最大值
//而(1),;
返回0;
}

就我的测试而言,这篇文章工作得很好

实际上,代码中有几个地方需要改进

首先,在代码
int num[0];
中声明大小为0的数组是无效的,因此我不确定为什么您的代码使用的
n
最多为6

其次,正如您可能很快就会了解到的,缩进在编程时非常重要,以便将来更好地理解和维护代码许多公共语言(如Python)依赖空格来区分函数,确实需要仔细管理缩进

第三,RAND_MAX不是1000的倍数,因此在程序中无法获得相同的概率。还建议使用srand函数调用

您预期计划的可能实施方案(仍然难看):

#包括
#包括
#包括
#定义最大1000
内部主(空){
int n,r,i;
int pos=0;
int max;
int num[MAXN];
printf(“输入整数”);
scanf(“%d”和“&n”);
srand(时间(0));
printf(“\n位置
$ mnmx67
Enter number of random values to test: 10
Seed: 1503763592

 Pos | Val
   0 | 201
   1 | 216
   2 |  85
   3 | 793
   4 | 382
   5 | 780
   6 | 341
   7 | 661
   8 |  75
   9 | 266
Minimum value was  75 at index   8
Maximum value was 793 at index   3
$