C语言基本问题

时间:2022-09-09 19:44:08
由键盘上输入n个不重复的整数,请将这些数中的最小值与第一个数交换,将最大值与最后一个数交换,然后输出交换后的数列。
#include<stdio.h>

int main()

int t,min,max,n,i,a[1000],nummin=0,nummax=0;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
min=a[0];
max=a[0];

for(i=0;i<n;i++)
if(a[i]<min)
{
 min=a[i];
 nummin=i;
}
t=a[0];
a[0]=a[nummin];
a[nummin]=t;

for(i=0;i<n;i++)
if(a[i]>max)
{
 max=a[i];
   nummax=i;
}
t=a[n-1];
a[n-1]=a[nummax];
a[nummax]=t;

for(i=0;i<n;i++)
printf("%d ",a[i]);
return 0; 
}
有时候测试是对的,有时候就不对,大神讲解一下呗

11 个解决方案

#1


代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。
提醒:再牛×的老师也无法代替学生自己领悟和上厕所!
单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。

#2


t=a[n-1];
 a[n-1]=a[nummax];
改为如下t=a[n];a[n]=a[nummax];
试1下

#3


调试一下下下

#4


可以看看这个资料http://blog.csdn.net/libing403?viewmode=contents

#5


依据你的题目描述,你这个程序应该只交换一次。
就是先记录最大最小值的位置,循环完了再进行交换(中途不需要做交换)

#6


能力不行,没看出什么问题。
怎么不对了。

#7


很简单,初始化方式有错,maxnum你初始化为0有没有想过输入的数组,她的最大值本来就在最后一个呢?这样就不用交换最大值了,而你的maxnum初始化为0,而且在for循环之后是要交换最大值和最后一个值的,而由于for循环里面没有修改maxnum,它还是0,所以就是将最大值(最后一个值)与下标为0的值(第一个值)进行了交换,这显然是错的。所以应该在输入数组大小n之后,maxnum初始化为n-1

#8


引用 6 楼 zhangyiant 的回复:
能力不行,没看出什么问题。
怎么不对了。


同上

#9


int main()

int t,min,max,n,i,a[1000],nummin=0,nummax=0;
scanf("输入N个数:%d",&n);
for(i=0;i<n;i++)
{scanf("输入数:%d",&a[i]);
}
min=a[0];
max=a[0];
for(i=0;i<n;i++)
{  if(a[i]<min)
{  min=a[i];
    nummin=i;
}
}
 t=a[0];
 a[0]=a[nummin];
 a[nummin]=t;
 for(i=0;i<n;i++)
{ printf("最小的数:%d ",a[i]);    
 }
 printf("\n");
for(i=0;i<n;i++)
{if(a[i]>max)
{
 max=a[i];
 nummax=i;
}
}
t=a[n-1];
a[n-1]=a[nummax];
a[nummax]=t;

for(i=0;i<n;i++)
printf("最大的数:%d ",a[i]);
return 0; 

}

#10


int main()

int t,min,max,n,i,a[1000],nummin=0,nummax=0;
printf("输入N个数:");
scanf("%d",&n);
for(i=0;i<n;i++)
{scanf("%d",&a[i]);
}
min=a[0];
for(i=0;i<n;i++)
{  if(a[i]<min)
{  min=a[i];
    nummin=i;
}
}
 t=a[0];
 a[0]=a[nummin];
 a[nummin]=t;
 printf("最小的数:");
 for(i=0;i<n;i++)
{ printf("%d ",a[i]);    
 }
 printf("\n");
 max=a[0];
for(i=0;i<n;i++)
{if(a[i]>max)
{
 max=a[i];
 nummax=i;
}
}
t=a[n-1];
a[n-1]=a[nummax];
a[nummax]=t;
printf("最大的数:");
for(i=0;i<n;i++)
{  printf("%d ",a[i]);
}
printf("\n");
return 0; 

}

#11


引用 9 楼 caiwenjie 的回复:
int main()

int t,min,max,n,i,a[1000],nummin=0,nummax=0;
scanf("输入N个数:%d",&n);
for(i=0;i<n;i++)
{scanf("输入数:%d",&a[i]);
}
min=a[0];
max=a[0];
for(i=0;i<n;i++)
{  if(a[i]<min)
{  min=a[i];
    nummin=i;
}
}
 t=a[0];
 a[0]=a[nummin];
 a[nummin]=t;
 for(i=0;i<n;i++)
{ printf("最小的数:%d ",a[i]);    
 }
 printf("\n");
for(i=0;i<n;i++)
{if(a[i]>max)
{
 max=a[i];
 nummax=i;
}
}
t=a[n-1];
a[n-1]=a[nummax];
a[nummax]=t;

for(i=0;i<n;i++)
printf("最大的数:%d ",a[i]);
return 0; 

}
  这个还是有问题 ,我发现是你的初始化那出错了。

#1


代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。
提醒:再牛×的老师也无法代替学生自己领悟和上厕所!
单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。

#2


t=a[n-1];
 a[n-1]=a[nummax];
改为如下t=a[n];a[n]=a[nummax];
试1下

#3


调试一下下下

#4


可以看看这个资料http://blog.csdn.net/libing403?viewmode=contents

#5


依据你的题目描述,你这个程序应该只交换一次。
就是先记录最大最小值的位置,循环完了再进行交换(中途不需要做交换)

#6


能力不行,没看出什么问题。
怎么不对了。

#7


很简单,初始化方式有错,maxnum你初始化为0有没有想过输入的数组,她的最大值本来就在最后一个呢?这样就不用交换最大值了,而你的maxnum初始化为0,而且在for循环之后是要交换最大值和最后一个值的,而由于for循环里面没有修改maxnum,它还是0,所以就是将最大值(最后一个值)与下标为0的值(第一个值)进行了交换,这显然是错的。所以应该在输入数组大小n之后,maxnum初始化为n-1

#8


引用 6 楼 zhangyiant 的回复:
能力不行,没看出什么问题。
怎么不对了。


同上

#9


int main()

int t,min,max,n,i,a[1000],nummin=0,nummax=0;
scanf("输入N个数:%d",&n);
for(i=0;i<n;i++)
{scanf("输入数:%d",&a[i]);
}
min=a[0];
max=a[0];
for(i=0;i<n;i++)
{  if(a[i]<min)
{  min=a[i];
    nummin=i;
}
}
 t=a[0];
 a[0]=a[nummin];
 a[nummin]=t;
 for(i=0;i<n;i++)
{ printf("最小的数:%d ",a[i]);    
 }
 printf("\n");
for(i=0;i<n;i++)
{if(a[i]>max)
{
 max=a[i];
 nummax=i;
}
}
t=a[n-1];
a[n-1]=a[nummax];
a[nummax]=t;

for(i=0;i<n;i++)
printf("最大的数:%d ",a[i]);
return 0; 

}

#10


int main()

int t,min,max,n,i,a[1000],nummin=0,nummax=0;
printf("输入N个数:");
scanf("%d",&n);
for(i=0;i<n;i++)
{scanf("%d",&a[i]);
}
min=a[0];
for(i=0;i<n;i++)
{  if(a[i]<min)
{  min=a[i];
    nummin=i;
}
}
 t=a[0];
 a[0]=a[nummin];
 a[nummin]=t;
 printf("最小的数:");
 for(i=0;i<n;i++)
{ printf("%d ",a[i]);    
 }
 printf("\n");
 max=a[0];
for(i=0;i<n;i++)
{if(a[i]>max)
{
 max=a[i];
 nummax=i;
}
}
t=a[n-1];
a[n-1]=a[nummax];
a[nummax]=t;
printf("最大的数:");
for(i=0;i<n;i++)
{  printf("%d ",a[i]);
}
printf("\n");
return 0; 

}

#11


引用 9 楼 caiwenjie 的回复:
int main()

int t,min,max,n,i,a[1000],nummin=0,nummax=0;
scanf("输入N个数:%d",&n);
for(i=0;i<n;i++)
{scanf("输入数:%d",&a[i]);
}
min=a[0];
max=a[0];
for(i=0;i<n;i++)
{  if(a[i]<min)
{  min=a[i];
    nummin=i;
}
}
 t=a[0];
 a[0]=a[nummin];
 a[nummin]=t;
 for(i=0;i<n;i++)
{ printf("最小的数:%d ",a[i]);    
 }
 printf("\n");
for(i=0;i<n;i++)
{if(a[i]>max)
{
 max=a[i];
 nummax=i;
}
}
t=a[n-1];
a[n-1]=a[nummax];
a[nummax]=t;

for(i=0;i<n;i++)
printf("最大的数:%d ",a[i]);
return 0; 

}
  这个还是有问题 ,我发现是你的初始化那出错了。