秋浸月 2023-12-21 13:40 采纳率: 46.2%
浏览 2
已结题

为什么这段代码运行不出来阿

为什么这段代码运行不出来,没结果阿,
题目是:输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。写3个函数:1.输入10个数;2.进行处理;3.输出10个数。

img

#include<stdio.h>
#include<stdlib.h>
#define N 10
int main()
{
    void scan(int *p);
    void handle(int *p);
    void print(int *p);
    int arr[N]; 
    scan(arr);
    handle(arr);
    print(arr);
    system("pause");
    return 0;
}

void scan(int *p)
{
    for(int i=0;i<N;i++)
        scanf("%d",*(p+i));
}

void handle(int *p)
{
    int Min=*p,Max=*p,*min,*max;
    int i;
    for(i=0;i<N;i++)
    {
        if(Min>*(p+i))
        {
            Min=*(p+i);
            min=p+i;
        }
        if(Max<*(p+i))
        {
            Max=*(p+i);
            max=p+i;
        }
    }
    int temp=*p;
    *p=Min;
    *min=temp;
    temp=*(p+N-1);
    *(p+N-1)=Max;
    *max=temp;
}

void print(int *p)
{
    for(int i=0;i<N;i++)
        printf("%d",*(p+i));
}

  • 写回答

2条回答 默认 最新

  • a5156520 2023-12-21 14:20
    关注

    第20行的星号*去掉试试,因为从输入获取元素到数组愿中需要元素地址,所以需要去掉(p+i)前面的星号。

    然后还有其他地方需要修改下。

    修改如下:

    
    
    #include<stdio.h>
    #include<stdlib.h>
    #define N 10
    int main()
    {
        void scan(int *p);
        void handle(int *p);
        void print(int *p);
        int arr[N]; 
        scan(arr);
        handle(arr);
        print(arr);
        system("pause");
        return 0;
    }
     
    void scan(int *p)
    {
        for(int i=0;i<N;i++)
            scanf("%d",p+i);   // 因为是从输入获取整数到相应元素中,需要元素地址,所以这里(p+i)之前的星号*去掉 
        
      //  printf("input end!\n");
    }
     
    void handle(int *p)
    {
        
        // 给指针max和min初始赋值为p,以防止最大值和最小值为第一个数时,max和min没有被赋值而导致错误 
        int Min=*p,Max=*p,*min=p,*max=p;
        int i;
        for(i=0;i<N;i++)
        {
            if(Min>*(p+i))
            {
                Min=*(p+i);
                min=p+i;
            }
    
        }
        //printf("find end!\n");
        
        int temp=*p;
        *p=Min;
        *min=temp;
        
        // 将寻找交换最大值和最小值分开,因为交换最小值后数组元素发生了变化
         Max=*p;      // 将最大值Max赋值为第一个元素的值 
         max=p;     // 将最大值指针max赋值为数组首元素的地址 
         for(i=0;i<N;i++)
        {
      
            if(Max<*(p+i))
            {
                Max=*(p+i);
                max=p+i;
            }
        }
      //  printf("change min end!\n");
        
        temp=*(p+N-1);
        *(p+N-1)=Max;
        *max=temp;
        
       // printf("change max end!\n");
    }
     
    void print(int *p)
    {
     //    printf("print start!\n");
        
        for(int i=0;i<N;i++)
            printf("%d ",*(p+i));
     //   printf("print end!\n");
    }
     
    
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月30日
  • 已采纳回答 12月22日
  • 创建了问题 12月21日