C-获取随机生成的数字的最小值和最大值
下面是我的代码,这是我的第一门编程课程,所以可能会犯一个愚蠢的错误 基本上,我试图得到最小/最大值和它们的位置号。然而,我的最大值在生成6个数字之前工作正常,我似乎不明白为什么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",
#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
$