Code Bye

关于数组求最大最小值的问题

#include<stdio.h>
void daxiao(int *p, int g, int *da, int *xiao)
{
for (int i = 1; i < g; i++)
{
int _da = p[0];
if (p[i]>_da)
_da = p[i];
*da = _da;
}
for (int k = 1; k < g; k++)
{
int _xiao = p[0];
if (p[k] < _xiao)
_xiao = p[k];
*xiao = _xiao;
}
}
int main()
{
int array[5] = { 69, 25, 6, 99, 0};
int a, b;
daxiao(array, 5, &a, &b);
printf(“最大值是:%d\n”, a);
printf(“最小值是:%d\n”, b);
return 0;
}
为什么一定要把int _da=p[0]和int _xiao=p[0]放到循环外呢?像上面那样写为什么不行?
解决方案

30

你写在里面,那么你你每次的比较都是和p[0]在比较,所以根本就不是在求最值,而是在求大于第一个数的最后一个数。(注意if、for的使用都要加花括号,不加括号这个习惯是很不好的,你这个代码原因是没花括号,逻辑都出问题了)

20

if 后面用大括号, 否则只有一条语句属于if
#include<stdio.h>
void daxiao(int *p, int g, int *da, int *xiao)
{
	for (int i = 1; i < g; i++)
	{
		int _da = p[0];
		if (p[i]>_da)
		{
			_da = p[i];
			*da = _da;
		}
	}
	for (int k = 1; k < g; k++)
	{
		int _xiao = p[0];
		if (p[k] < _xiao)
		{
			_xiao = p[k];
			*xiao = _xiao;
		}
	}
}
int main()
{
	int array[5] = { 69, 25, 6, 99, 0};
	int a, b;
	daxiao(array, 5, &a, &b);
	printf("最大值是:%d\n", a);
	printf("最小值是:%d\n", b);
	return 0;
}

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明关于数组求最大最小值的问题