求一数组中的最大值与最小值(简析指针与数组)

求一数组中的最大值与最小值的几种方法

首先,需要建立一个数组

	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 的指针,不能被赋值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值