c语言程序编程求助,为什么程序停止运行?

(2)编程,输入1个正整数n(1<n<=10),再输入n个整数,将最小值与第1个数交换,最大值与最后1个数交换,然后输出交换后的n个数。
我的程序:

#include<stdio.h>
int main()
{
int n,i,x,y,j,p,q,max,min;
int a[10];
printf("请输入一个不大于10的正整数n:\n");
scanf("%d",&n);
printf("请输入%d个整数:\n",n);
for(i=0;i<n;i++)
scanf("%d",a[i]);
max=a[0];
x=0;
for(i=1;i<n;i++)
{
if(max<a[i])
{
max=a[i];
x=i;
}
}
min=a[0];
y=0;
for(i=0;i<n;i++)
{
if(min>a[i])
{
min=a[i];
y=i;
}
}
p=a[0];a[0]=a[y];a[y]=p;
q=a[n];a[n]=a[x];a[x]=q;
for(i=0;i<n;i++)
printf("%d",a[i]);
return 0;
}

请问哪里有问题?我是新手,请您耐心指导~

#include<stdio.h>
int main()
{
   int n,i,x,y,j,p,q,max,min;
   int a[10];
   printf("请输入一个不大于10的正整数n:\n");
   scanf("%d",&n);
   printf("请输入%d个整数:\n",n);
     for(i=0;i<n;i++)   
        scanf("%d",&a[i]);     /* 语法问题:scanf需要指针 */
    
     max=a[0];
    x=0;
    for(i=1;i<n;i++)
    {
        if(max<a[i])
        {
            max=a[i];
            x=i;
        }
    }
     min=a[0];
    y=0;
     for(i=0;i<n;i++)
    {   
        if(min>a[i])
        {
            min=a[i];
            y=i;
        }
    }
        p=a[0];a[0]=a[y];a[y]=p;
         q=a[n-1];a[n-1]=a[x];a[x]=q; /* 最后一个数是a[n-1]不是a[n] */
        for(i=0;i<n;i++)
            printf("%d",a[i]);
        return 0;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-11-27
后面的算法都没有问题,仔细看了一下,你在循环输入的时候是不是写错了,应该是scanf("%d", &a[i])吧,掉了取地址符。

一个建议:你定义的min和max赋值了但是没有用过,不用定义它们。本回答被提问者采纳
第2个回答  2013-11-27
for(i=0;i<n;i++)
scanf("%d",a[i]);这一句
你的a[i]前面没加&
所以访问内存地址会产生冲突
另外
printf("请输入一个不大于10的正整数n:\n");
scanf("%d",&n);这一句你没有加限制n不大于10的判断句
这样会导致不安全的输入
第3个回答  2013-11-27
p=a[0];a[0]=a[y];a[y]=p;
q=a[n];a[n]=a[x];a[x]=q;

直接带入n是不对的,n-1追问

将第二行的n改为n-1后还是停止了运行、

相似回答