| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 757 人关注过本帖
标题:最大值和最小值问题
只看楼主 加入收藏
daienkai
Rank: 1
等 级:新手上路
帖 子:30
专家分:7
注 册:2017-1-31
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:6 
最大值和最小值问题
程序代码:
#include<stdio.h>
void pa(int *p ,int n);
int main()
{
    int a[5] , i , *p , ar;
    p=a;
    for( i=0 ; i<5 ; i++)
    scanf("%d",&*(p+i));
    pa(p,5);
}
void pa(int *p , int n)
{
    int i;
    int *max , *min ;
    max=min=&p[0];
    
    for(i=0 ; i<n ; i++ )
    {
    
        if(*max<*(p+i))
        
            *max=p[i];
    }
    for(i=0 ; i<n ; i++ )
    {
        if(*min>*(p+i))
        
            *min=p[i];
        
        }    
printf("max=%d min=%d",*max,*min);        
}
  运行后输入12345发现最大值和最小值都是2  这是怎么回事啊?
搜索更多相关主题的帖子: color 最大值 
2017-02-12 16:12
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10561
专家分:42996
注 册:2014-5-20
收藏
得分:5 
&*(p)和&p[0]用指针无需绕圈,可以直接用p表达。

#include<stdio.h>
void pa(int *p ,int n);
int main()
{
    int a[5] , i , *p , ar;
    p=a;
    for( i=0 ; i<5 ; i++)
        scanf("%d",p+i);
    pa(p,5);
}
void pa(int *p , int n)
{
    int i;
    int *max , *min ;
    max=min=p++;
    for(i=1 ; i<n ; i++,p++ )
    {
        if(*max < *p)
            max=p;
        else if(*min > *p)
            min=p;
    }
    printf("max=%d min=%d",*max,*min);
}
2017-02-12 17:17
daienkai
Rank: 1
等 级:新手上路
帖 子:30
专家分:7
注 册:2017-1-31
收藏
得分:0 
回复 2楼 吹水佬
max=min=p++;  这里不是要把p[0]给max和min吗  为什么是p++呢

2017-02-12 19:37
炎天
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:桃花岛
等 级:贵宾
威 望:29
帖 子:1218
专家分:4986
注 册:2016-9-15
收藏
得分:5 
以下是引用daienkai在2017-2-12 19:37:07的发言:

 max=min=p++;  这里不是要把p[0]给max和min吗  为什么是p++呢

p = &p[0];  p++先进行赋值,再进行自加运算

程序代码:
 for(i=0 ; i<n ; i++ )
    {
    
        if(*max<*(p+i))
        
            *max=p[i];        //这样做把max原来指向的地址上的值也给改了,
    }

早知做人那么辛苦!  当初不应该下凡
2017-02-12 19:45
woaiwm
Rank: 2
等 级:论坛游民
帖 子:7
专家分:28
注 册:2014-12-15
收藏
得分:5 
#include<stdio.h>

void pa(int *p ,int n);

int main()
{
    int a[5] , i ;
    for( i=0 ; i<5 ; i++)
    {
        scanf("%d",a+i);//&a[i] = a+i
    }
    pa(a,5);

    return 0;
}

void pa(int *p , int n)
{
    int i;
    int *max, *min;

    max=min=p++;
    for(i=0 ; i<n ; i++ )
    {

        if(*max<*(p+i))
        {
            max=(p+i);
        }
    }

    for(i=0 ; i<n ; i++ )
    {
        if(*min>*(p+i))
        {
            min=(p+i);
        }
    }

    printf("max=%d min=%d",*max,*min);
}
2017-02-12 21:25
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10561
专家分:42996
注 册:2014-5-20
收藏
得分:0 
以下是引用daienkai在2017-2-12 19:37:07的发言:

 max=min=p++;  这里不是要把p[0]给max和min吗  为什么是p++呢

max=min=p++;  //取第1个元素为初始值后,p++就指向第2个元素。
for(i=1 ; i<n ; i++,p++ ) //从第2个元素(i=1)起找max和min
2017-02-12 21:48
yanzy
Rank: 5Rank: 5
等 级:职业侠客
威 望:2
帖 子:104
专家分:372
注 册:2017-2-7
收藏
得分:5 
程序代码:
#include<stdio.h>

void pa(int *p, int n);
int main()
{
    int a[5], i;
    for (i = 0; i < 5; i++)
        scanf("%d", a + i);
    pa(a, 5);
}
void pa(int *p, int n)
{
    int i;
    int *max, *min;
    max = min = p;

    for (i = 1; i<n; i++)
    {

        if (*max<*(p + i))

            max = p + i;
        if (*min>*(p + i))

            min = p + i;
    }

    printf("max=%d min=%d", *max, *min);
}
2017-02-13 15:59
快速回复:最大值和最小值问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019104 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved