c语言 如何求n个数的最大值 最小值

#include<stdio.h>
void main()
{
int a[6],i,max,min;
printf("任意输入n个\数n");
for(i=0;i<6;i++)
scanf("%d",&a[i]);
max = min = a[0];
for(i=0;i<6;i++)
if(a[i]>max)
max=a[i];
for(i=0;i<4;i++)
if(a[i]<min)
min=a[i];
printf("最大:%d\n,最小:%d\n",max,min);
}

这个只能限制输入6个数,或者其他固定的数量,如何改为n个数呢? 就是输入完一定个数,去测定其中的最大和最小?
谢谢解答

不要使用数组,手动分配内存,申请内存的长度由用户输入,最后释放内存就行了


相关代码:

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

void main()
{
    int *a, n, max, min, i;
    scanf("%d", &n);
    a = (int *)calloc(1, n * sizeof(int));
    if(a == NULL)
    {
        printf("NO MEMARY!\n");
        return;
    }
    
    scanf("%d", a);
    max = min = a[0];
    for(i=1;i<n;i++)  
    {
        scanf("%d", &a[i]);
        if(a[i]>max)   
            max=a[i];  
        if(a[i]<min)   
            min=a[i]; 
    }
     printf("最大:%d\n,最小:%d\n",max,min);
     free(a);
    
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-06-13
#include<stdio.h>

#define N 10

void main()
{
int a[N],i,max,min;
printf("任意输入n个\数n");
for(i=0;i<N;i++)
scanf("%d",&a[i]);
max = min = a[0];
for(i=0;i<N;i++)
if(a[i]>max)
max=a[i];
for(i=0;i<N;i++)
if(a[i]<min)
min=a[i];
printf("最大:%d\n,最小:%d\n",max,min);
}
还有就是下面这种,不过比较浪费空间
#include<stdio.h>

void main()
{
int n;
int a[100],i,max,min;
printf("任意输入n个\数n");
scanf("%d",&n); //n要小于100
for(i=0;i<n;i++)
scanf("%d",&a[i]);
max = min = a[0];
for(i=0;i<n;i++)
if(a[i]>max)
max=a[i];
for(i=0;i<n;i++)
if(a[i]<min)
min=a[i];
printf("最大:%d\n,最小:%d\n",max,min);
}
第2个回答  2014-06-13
你可以把数组的元素很设置很大,比如2000,int a[2000]={0};这样就可以用你的循环忘数组里面写值了,C语言中不能运行后对数组长度进行设定,必须编写代码的时候确定,你只要设置大一点不就买足需要了吗,初始值为0
第3个回答  2012-03-21
#include <stdio.h>
#define N 5 /*此处可改输入数字个数,比如5*/
main()
{
int a[N];
int i,max,min;
for(i=0;i<N;i++)
scanf("%d",&a[i]);
max=a[0]; /*假设第一个读入的数就是最大数*/
min=a[0]; /*假设第一个读入的数就是最小数*/
for(i=1;i<N;i++)
{if(a[i]>max) max=a[i];
if(a[i]<min) min=a[i];}
printf("\n最大数是 : %d\n",max);
printf("最小数是 : %d\n",min);
}
第4个回答  2014-06-13
其实根本没有必要用数组,因为你并没有要求保留所有输入的数,设一个max,设一个min,数循环输入,每输入一次就比一次(而不是输完所有的数再来比较),知道输入为EOF(win下为ctrl+z)停止

如果一定要输入n的话可以直接这样
int n;
scanf ("%d", &n);
int array[n];
前提是编译器支持c99标准

或者就是设置动态内存了,上面有
相似回答