鱼C论坛

 找回密码
 立即注册
查看: 971|回复: 3

[已解决]关于c最大值最小值问题

[复制链接]
发表于 2022-2-26 16:45:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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] = { 5,1,4,7,3 };
        int sz = sizeof(arr) / sizeof(arr[0]);
        cmax(arr,sz,&x);
        cmin(arr,sz,&y);
        printf("最大值=%d,最小值=%d\n", x, y);
}
请问一下大佬们题目是求数组中的最大值和最小值  我这个程序跑起来最大值能够出来 但是最小值是0 请问问题出在哪儿? 用的VS2022
VS
最佳答案
2022-2-26 17:13:34
本帖最后由 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);
        }
    }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-2-26 17:13:34 | 显示全部楼层    本楼为最佳答案   
本帖最后由 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);
        }
    }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-26 17:25:00 | 显示全部楼层
你这个代码没问题。
y=0本来就是最小值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-26 22:36:50 | 显示全部楼层
#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] = { 5,1,4,7,3 };
    y = arr[0], x = arr[0];
    int sz = sizeof(arr) / sizeof(arr[0]);
    cmax(arr, sz, &x);
    cmin(arr, sz, &y);
    printf("最大值=%d,最小值=%d\n", x, y);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-18 10:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表