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

请问,这个错在哪里orz
为什么编译什么的时候都没有错,最后运行的时候会出“Cpp1.exe 遇到问题需要关闭。我们对此引起的不便表示抱歉。”发送错误报告呢orz
#include <stdio.h>
int main(void)
{
int n,i,a[10],max,min,temp,r,p;
scanf("%d",&n);
for (i=1;i<=n;i++)
scanf("%d",&a[i]);
min=a[1];
for (i=1;i<=n;i++)
{
if (a[i]<a[1])
{
min=a[i];
r=i;
}
}
temp=a[1],a[1]=min,a[r]=temp;
max=a[n];
for (i=1;i<=n;i++)
{
if (a[i]>a[n])
{
max=a[i];
p=i;
}
}
temp=a[n],a[n]=max,a[p]=temp;
for (i=1;i<=n;i++)
printf("%d",&a[i]);
return 0;
}

可以参考下面的代码:

#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个回答  2011-05-05
数组越界了,这个错误初学者很容易犯,以致有了专有名称: 一位偏移
对于a[10] ,索引是从0开始,9结束的数组,需要从0开始遍历
for(i=0;i<10;i++)
{
}本回答被提问者采纳
第2个回答  2012-12-21
#include <stdio.h>
int main(void)
{
int i,n,max,min,temp;
int a[10];
printf("Enter n: ");
scanf("%d",&n);
printf("Enter %d integers: ",n);
max = min =0;首先不知道最大,小 值的时候,预定值得大,小为0.也就是为数组中的第一个值大小。
for(i=0;i<n;i++)
{
scanf("%d",&a[i]); 输入为第一个的值大小 ,通过依次比较10个数组值的大小,从而得出最值大小。
if(a[i]>a[max])
max = i;如果i 数组大小大于max 则把i的值赋给max。
if(a[i]<a[min]) 同理也就可以得出min的 大小了。
min = i;
}
temp = a[max]; 通过数组就可以简单地转换 最小值与第一个数。或者。最大值与最后一个数了。
a[max] = a[n-1];
a[n-1] = temp;
temp = a[min];
a[min] = a[0];
a[0] = temp;
for(i=0;i<n;i++)
printf("%6d",a[i]);最后输出经过转换后的数组值就可以了。
return 0;
}