输入一个正整数n(1<n≤10),再输入n个整数,将最小值与第一个数交换,最大值与最后一个数交换。

我写的
#include<stdio.h>
int main()
{ int a[10],n,x=0,y=1000,i,t,m,j;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(t=0;t<n;t++)
{ if(a[t]<y)
{ y=a[t];
}
if(a[t]>x)
{ x=a[t];
}
}
for(j=0;j<n;j++)
{ if(a[j]==y)
{ a[j]=a[0];
}
if(a[j]==x)
{ a[j]=a[n-1];
}
}
a[0]=y;
a[n-1]=x;
for(m=0;m<n;m++)
{ if(m==(n-1))
{ printf("%d",a[m]);
}
else
{ printf("%d ",a[m]);
}
}
return 0;
}
输出对的,但我学校的oj说我错、、擦

可以参考下面的代码:

#include <stdio.h>

void main()

{

int i,j=0,k=0,t,n,min,max,a[10];

printf("输入整百数度的个数: ");

scanf("%d",&n);

printf("输入%d个整数: ",n);

scanf("%d",&a[0]);

max=a[0];min=a[0];

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

{

scanf("%d",&a[i]);

if(max<a[i]) {max=a[i];j=i;}

if(min>a[i]) {min=a[i];k=i;}

}

t=a[k];a[k]=a[0];a[0]=t;

t=a[j];a[j]=a[n-1];a[n-1]=t;

printf("交换顺序后内输出: ");

for(i=0;i<n;i++)

printf("%d ",a[i]);

}

扩展资料:

1、printf()函数

printf()函数是格式化输出函数, 一般用于向标准输出设备按规定格式输出

信息。在编写程序时经常会用到此函数。函数的原型为:

int printf(const char *format, ...);

函数返回值为整型。若成功则返回输出的字符数,输出出错则返回负值。

printf()函数的调用格式为:

printf("<格式化字符串>", <参量表>);

2、for循环

for循环小括号里第一个“;”号前为一个为不参与循环的单次表达式,其可作为某一变量的初始化赋值语句, 用来给循环控制变量赋初值; 也可用来计算其它与for循环无关但先于循环部分处理的一个表达式。

“;”号之间的条件表达式是一个关系表达式,其为循环的正式开端,当条件表达式成立时执行中间循环体。

参考资料来源:百度百科-for循环

参考资料来源:百度百科-printf()

温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-06-03

你肯定是错了,而且是基本全错。

错误1、x=0,y=1000

你怎么知道输入的整数都在1到1000之间?而且,如果你输入的数就在0~1000之间,没有一个值是0或者1000,后面的a[j]==x,a[j]==y根本就都不存在了。

错误2、是交换,不是直接赋值。a[j]=a[0],a[j]=a[n-1]都错了。

你说输出是对的,应该是巧合。

#include <stdio.h>
void main()
{
int i,n,t,b=0,c=0,min,max,a[10];
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
max=a[0];min=a[0];
for(i=1;i<n;i++)
{
if(min>a[i]) {min=a[i];b=i;}
if(max<a[i]){max=a[i];c=i;}
}
t=a[0];a[0]=a[b];a[b]=t;
t=a[n-1];a[n-1]=a[c];a[c]=t;
for(i=0;i<n;i++)
printf("%d ",a[i]);
}

第2个回答  2017-06-16

可能是因为在初值x=0,y=1000的时候你默认了最大值不小于0,最小值不大于1000?  可以将x,y的初值赋值为a[0]试试

下面是根据你的代码修改的

#include<stdio.h>
int main()
{ int a[10],n,x,y,i,t,m,j;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
x = a[0];
y = a[0];
for(t=1;t<n;t++)
{ if(a[t]<y)
{ y=a[t];
}
if(a[t]>x)
{ x=a[t];
}
}
for(j=0;j<n;j++)
{ if(a[j]==y)
{ a[j]=a[0];
}
if(a[j]==x)
{ a[j]=a[n-1];
}
}
a[0]=y;
a[n-1]=x;
for(m=0;m<n;m++)
{ if(m==(n-1))
{ printf("%d",a[m]);
}
else
{ printf("%d ",a[m]);
}
}
return 0;
}

下面是我自己写的

#include<stdio.h>
int main()
{
    int n, i;
    scanf("%d",&n);
    int a[n];
    for(i=0; i<n; i++)
    {
        scanf("%d",&a[i]);
    }
    int max_num = a[0], max_id = 0;
    int min_num = a[0], min_id = 0;
    for(i=0; i<n; i++)
    {
        if(a[i]<min_num)
        {
            min_num = a[i];
            min_id = i;
        }
        else if (a[i]>max_num){
            max_num = a[i];
            max_id = i;
        }
    }
    int tmp;
    tmp = a[0];
    a[0] = min_num;
    a[min_id] = tmp;
    tmp = a[n-1];
    a[n-1] = max_num;
    if (max_id!=0)
        a[max_id] = tmp;
    else
        a[min_id] = tmp;
    
    for(i=0; i<n; ++i){
        printf("%d",a[i]);
        if (i<n-1) printf(" ");
    }
    return 0;
}

第3个回答  2017-06-14

#include<stdio.h>

int main()

{ int a[10],n,x=0,y=1000,i,t,m,j;

scanf("%d",&n);

for(i=0;i<n;i++)

{

scanf("%d",&a[i]);

}

for(t=0;t<n;t++)

{ if(a[t]<y)

{ y=a[t];

}

if(a[t]>x)

{ x=a[t];

}

}

for(j=0;j<n;j++)

{ if(a[j]==y)

{ a[j]=a[0];

break;

}

for(j=0;j<n;j++)

if(a[j]==x)

{ a[j]=a[n-1];

break;

}

}

a[0]=y;

a[n-1]=x;

for(m=0;m<n;m++)

{ if(m==(n-1))

{ printf("%d",a[m]);

}

else

{ printf("%d ",a[m]);

}

}

return 0;

}

本回答被网友采纳
第4个回答  2014-12-05
代码有N种写法,按你的思路 程序输出对的就OK.
你的代码风格不太规范,比如变量的命名等,
在规范下命名就很完美了,比如 最小值就是 min 最大值就是max
比你用x y表示更容易理解.本回答被网友采纳