关于c最大值最小值问题
void cmax(int* p,int sz, int* x){
int i = 0;
*p = *x;
for (i = 0; i < sz; i++)
{
if (*(p + i) > *x)
{
*x = *(p + i);
}
}
}
void cmin(int* p,int sz, int* y)
{
int j = 0;
*p = *y;
for (j = 0; j < sz; j++)
{
if (*(p + j) < *y)
{
*y = *(p + j);
}
}
}
int main()
{
int x=0,y=0;
int arr = { 5,1,4,7,3 };
int sz = sizeof(arr) / sizeof(arr);
cmax(arr,sz,&x);
cmin(arr,sz,&y);
printf("最大值=%d,最小值=%d\n", x, y);
}
请问一下大佬们题目是求数组中的最大值和最小值我这个程序跑起来最大值能够出来 但是最小值是0 请问问题出在哪儿? 用的VS2022
VS 本帖最后由 ckblt 于 2022-2-26 17:17 编辑
试试这样:
void cmax(int *p, int sz, int *x)
{
int i = 0;
*x = *p;
for (i = 0; i < sz; i++)
{
if (*(p + i) > *x)
{
*x = *(p + i);
}
}
}
void cmin(int *p, int sz, int *y)
{
int j = 0;
*y = *p;
for (j = 0; j < sz; j++)
{
if (*(p + j) < *y)
{
*y = *(p + j);
}
}
} 你这个代码没问题。
y=0本来就是最小值 #include <stdio.h>
void cmax(int* p, int sz, int* x)
{
//int i=0 ;//没有必要赋值两次,在for循环中赋值就可以啦,当然,没有错,只是没必要
int i;
*p = *x;
for (i = 1; i < sz; i++)//由于默认值是第一个元素,所有循环从下标1开始,能减少1次循环
{
if (*(p + i) > *x)
{
*x = *(p + i);
}
}
}
void cmin(int* p, int sz, int* y)
{
int j ;
*p = *y;
for (j = 1; j < sz; j++)
{
if (*(p + j) < *y)
{
*y = *(p + j);
}
}
}
int main()
{
int x = 0, y = 0;//设置最小值为0,你这个数组中没有比0小的,所以最终的最小值就是一开始的0,这样并不严谨
//建议最大值和最小值都使用数组第一个元素的值,这样既严谨,又可以减小循环次数
int arr = { 5,1,4,7,3 };
y = arr, x = arr;
int sz = sizeof(arr) / sizeof(arr);
cmax(arr, sz, &x);
cmin(arr, sz, &y);
printf("最大值=%d,最小值=%d\n", x, y);
}
页:
[1]