求一数组中的最大值与最小值的几种方法
首先,需要建立一个数组
int n;
printf("请输入数组长度:\n");
scanf("%d",&n);
int a[n];
printf("请输入数组元素:\n");
for(int i = 0; i < n; i++)
{
scanf("%d",&a[i]);
}
其中要**注意一件事情,定义数组不能**写成
int n,a[n];//这里是错误的定义
printf("请输入数组长度:\n");
scanf("%d",&n);
printf("请输入数组元素:\n");
for(int i = 0; i < n; i++)
{
scanf("%d",&a[i]);
}
为什么?
因为这样定义数组a申请的空间是n,但是此时n未输入,一般默认为0,意味着数组a申请了0个空间,这样即使在运行时发现可以运行甚至可以建立数组,但是你的数组占用的空间是非法的,如果别的数组申请空间,是可以占用你存数据的位置的,所以不要这样定义。
在你建立完了之后,可以遍历输出看看你建立的是否正确
printf("您输入的数组为:\n");
for(int i = 0; i < n; i++)
{
printf("%d ",a[i]);
}
第一种方法:
int max(int* a, int n)//最大值
{
int t;
for(int i = 0; i < n; i++)
{
if(a[0]<a[i])
{
t=a[i];
a[i]=a[0];
a[0]=t;
}
}
return a[0];
}
int min(int* a, int n)//最小值
{
int t;
for(int i = 0; i < n; i++)
{
if(a[0]>a[i])
{
t=a[i];
a[i]=a[0];
a[0]=t;
}
}
return a[0];
}
第二种方法
void max_min(int a[],int n,int* pmax,int* pmin)
{
*pmax = *pmin = a[0];
for(int i = 0; i < n; i++)
{
if(a[i] > *pmax)
*pmax = a[i];
if(a[i] > *pmax)
*pmin = a[i];
}
}
利用指针指向最大值和最小值。
在这里说一下指针与数组
1)在函数参数表中的数组实际上是指针
2)以数组为参数的以下几个函数原型是等价的
1. int sum(int *a,int n);
2. int sum(int *,int );
3. int sum(int a[],int n);
4. int sum(int [],int );
3)数组变量是特殊的指针
数组本身表达地址,所以int a[10]; int *p = a
无需用&符取地址,但是数组单元表达的是变量,需要用&取地址a ==a[0];
[]运算符可以对数组做,也可以对指针做
*运算符可以对指针做,也可以对数组做
p[0]<==>a[0]
*a = 20;
数组变量是const 的指针,不能被赋值。