2767184930 发表于 2020-12-21 22:46:09

这个程序哪里有问题

#include <stdio.h>
int main (void)
{
    int a,max,min,n,i,temp1,temp2,x,y;
    printf("请输入数据的个数\n");
    scanf("%d",&n);
    printf("请输入数据\n");
    for (i=0;i<n;i++)
    scanf ("%d",&a);
    max=a;
    min=a;
    for (i=0;i<n;i++)
    {
      if (a>max)
      {
            temp1=i;
            max=a;
      }
      else if (a<min)
      {
            temp2=i;
            min=a;
      }
      else
            continue;
    }
x=a;
y=a;
a=a;
a=a;
a=y;
a=x;
for (i=0;i<n;i++)
    printf("%3d",a);
}
功能是:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组
但是为啥运行的结果和预想的不一样,求大佬解答

风过无痕1989 发表于 2020-12-21 22:56:02

先给你我的程序,再来看你的
#include<stdio.h>

int main()

{
        void max(int *p, int n);
        void min(int *p, int n);
        int a;
        int i, n = 10, *p;
        p = a;
        printf("输入10个整数:\n");
        for (i = 0;i < 10;i++)
        {
                scanf("%d", &a);
        }
        max(a, n);
        min(a, n);
        for (i = 0;i < n;i++)
        {
                printf("%d ", a);
        }
        printf("\n");

}

void max(int *p, int n)
{
        int i, j, temp;
        temp = *p;            // 将首个元素设为最大值
        j = 0;                  // 记录其所在的位置
        for (i = 9;i >= 0;i--)
        {
                if (temp < *(p + i))
                {
                        temp = *(p + i);
                        j = i;
                }
        }
        *(p + j) = *p;
        *p = temp;
}

void min(int *p, int n)
{
        int i, j, temp;
        temp = *(p + 9);            // 将最后的元素设为最小值
        j = 9;                                                  // 记录其所在的位置
        for (i = 1;i < n;i++)
        {
                if (temp > *(p + i))
                {
                        temp = *(p + i);
                        j = i;
                }
        }
        *(p + j) = *(p + 9);
        *(p + 9) = temp;
}

风过无痕1989 发表于 2020-12-21 23:26:24

你的程序只用一只循环,而且是最大值与最小值同时进行遍历数组,所以不能将所有元素都互相比较。举个例子:当 a[ i ] < a 时, 将 a 作为新的最大值这没有问题,但却跳过了 a[ i ] > a 对最小值的比较,故而,为了做到每一个元素都能与最大值和最小值互相比较,需要用双重循环。你的程序不是用指针,也没有用函数,我就给你一个既不用指针,也不用函数的程序。如下:
#include<stdio.h>

int main()
{
      int i, j, temp, a;
      printf("输入10个整数:\n");
      for (i = 0;i < 10;i++)
      {
                scanf("%d", &a);
      }

      temp = a;            // 假设最大的数在最后一个单元
      for (i = 9;i >= 0;i--)
      {
                if (temp < a)   // 数组中每一个元素都与假设的最大数比较
                {
                        temp = a;   // 找到大于假设的最大的数
                        j = i;         // 记录该数的位置
                }
      }
      a = a;             // 最大的数与最后一个单元交换
      a = temp;

      temp = a;             // 假设最小的数在第一个单元
      j = 0;                     //
      for (i = 1;i < 10;i++)
      {
                if (temp > a)   // 数组中每一个元素都与假设的最小数比较
                {
                        temp = a;   // 找到小于假设的最小的数
                        j = i;         // 记录该数的位置
                }
      }
      a = a;             // 最小的数与第一个单元交换
      a = temp;

      for (i = 0;i < 10;i++)    // 输出交换后的数组
      {
                printf("%d ", a);
      }
      printf("\n");
}

对第25行的说明:前面 j 的记录是最大值的位置,如果查找最小值时不让它回到初始位置,那么如果最小值原本就在a 处,第28行到第31行就不会有任何动作,所查找的最小值的位置就会出错

wenziqiu 发表于 2020-12-22 19:52:11

我的回答是你的最佳答案

wenziqiu 发表于 2020-12-22 19:56:07

#include <stdio.h>
int main()
{
    int n,max,min,k,t;
        printf("请输入数组的个数:");
        scanf("%d",&n);
    int *p,a;
        printf("Please input 当前数值:\n");
        for(int i=0;i<n;i++)
        {
                scanf("%d",&a);
        }
        max=a;
        for(int i=0;i<n;i++)
        {
            if(max<a)
          {
                  k=i;
                        max=a;
          }
        }
    min=a;       
        for(int j=0;j<n;j++)
        {
                if(min>a)
                {
                        t=j;
                        min=a;
                }
        }
        printf("max=%d,min=%d",max,min);
        printf("\n");
        for(int i=0;i<n;i++)
        {
                if(i==0)
                {
                        int temp;
                        temp=a;
                        a=a;
                }
                if(i==n-1)
                {
                        int temp1;
                        temp1=a;
                        a=a;
                }
                printf("%d ",a);
        }
        printf("\n");
        return 0;
}

wenziqiu 发表于 2020-12-22 21:32:58

#include <stdio.h>
int main()
{
    int n,max,min,k,t;
        printf("请输入数组的个数:");
        scanf("%d",&n);
    int a;
        printf("Please input 当前数值:\n");
        for(int i=0;i<n;i++)
        {
                scanf("%d",&a);
        }
        max=a;
        for(int i=0;i<n;i++)
        {
            if(max<a)
          {
                  k=i;
                        max=a;
          }
        }
    min=a;       
        for(int j=0;j<n;j++)
        {
                if(min>a)
                {
                        t=j;
                        min=a;
                }
        }
        printf("max=%d,min=%d",max,min);
        printf("\n");
        for(int i=0;i<n;i++)
        {
                if(i==0)
                {
                        int temp;
                        temp=a;
                        a=a;
                        a=temp;
                }
                if(i==n-1)
                {
                        int temp1;
                        temp1=a;
                        a=a;
                        a=temp1;
                }
        }
        for(int i=0;i<n;i++)
        {
                printf("%d ",a);
        }
        printf("\n");
        return 0;
}
页: [1]
查看完整版本: 这个程序哪里有问题