c++visual6.0程序有问题


#include<stdio.h>
int a[10];
int main()
{
    void s1(int *p);
    void s2(int *p);
    void s3(int *p);
    int a[10];
    int *p=a;
    s1(p);
    s2(p);
    s3(p);
return 0;
}


void s1(int *p)    //shuru
{
for(p=a;p<a+10;p++)
scanf("%d",p);
}

void s2(int *p)
{
int *max=a,*min=a,*t;
for(p=a;p<a+10;p++)
{
    if(*min>*p)
    min=p;
    if(*max<*p)
    max=p;
}
p=a;
t=p;
p=min;
min=t;
*t=*(p+9);
*(p+9)=*max;
*max=*t;
}


void s3(int *p)
{
    for(p=a;p<a+10;p++)
printf("%d ",*p);
}

上面的程序在visual c++6.0上抛出的结果不对

img


第三个问题

有两个问题:
(1)你的S2函数是有问题的,当你输入的数组中,第一个数就是最大值时,你把第一个数跟最小值交换后,最大数的位置就变了。所以,你在交换前需要判断一下,输入的第一个数是否是数组的最大值。
(2)你定义了一个全局变量a,在main函数中又定义了一个局部变量a,在s1、s2、s3中,你即使用了局部变量也使用了全局变量的地址,导致数据处理混乱。需要把main中的int a[10]删掉。
修改后运行结果:

img

修改后的代码:

#define  _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>
int a[10];  
int main()
{
    void s1(int* p);
    void s2(int* p);
    void s3(int* p);
    //int a[10]; //这里不需要
    int* p = a;
    s1(p);
    s2(p);
    s3(p);
    return 0;
}


void s1(int* p)    //shuru
{
    for (p = a; p < a + 10; p++)
        scanf("%d", p);
}

void s2(int* p)
{
    int* max = a, * min = a;
    int t1;
    int* t = &t1;
    for (p = a; p < a + 10; p++)
    {
        if (*min > *p)
            min = p;
        if (*max < *p)
            max = p;
    }
    p = a;

    if (max == p) //数组中的第一个数是最大数的情况
    {
        //先交换最小数
        *t = *p; //*t保存a[0]
        *p = *min; //a[0] 存入最小数
        *min = *t; //t 存原来的a[0],此时*min就是最大值

        //交换最大值跟最后一个位置
        *t = *(p + 9);
        *(p + 9) = *min;
        *min = *t;
    }
    else
    {
        //先交换最小数
        *t = *p;
        *p = *min;
        *min = *t;
        //再交换最大数
        *t = *(p + 9);
        *(p + 9) = *max;
        *max = *t;
    }
    
}


void s3(int* p)
{
    for (p = a; p < a + 10; p++)
        printf("%d ", *p);
}

怎么个不对法?说详细一点
第3行有个全局a[10],第10行又定义个main函数中的a[10]。把第10行的a[10]定义删除

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632
void s2(int *p)
{
int *max=a,*min=a,t;
for(p=a;p<a+10;p++)
{
    if(*min>*p)
    min=p;
    if(*max<*p)
    max=p;
}
p=a;
t=*p;
p=min;
*min=t;
t=*(p+9);
*(p+9)=*max;
*max=r;
}