输入一个正整数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、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]);
}
可能是因为在初值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;
}
#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;
}
你的代码风格不太规范,比如变量的命名等,
在规范下命名就很完美了,比如 最小值就是 min 最大值就是max
比你用x y表示更容易理解.