#include
main()
{
int a[10]={3,6,9,11,14,16,18,23,26};
int i,temp;
for(i=0;i<=9;i++){
printf("%d ",a[i]);}
printf("\n");
printf("Please input a integer data");
scanf("%d",&temp);
for(i=8;i>=0;i--)
{
if(temp<a[i]){
a[i]=a[i+1];}
else{
temp=a[i+1];
break;}
}
for(i=0;i<=9;i++)
printf("%d ",a[i]);
printf("\n");
}
我跑了一下,发现了你的问题,错的是代码的逻辑上。楼主是否对于赋值
a[i]=a[i+1]
和
a[i+1]=a[i]
有点混淆?问题出在这段代码:
for(i=8;i>=0;i--)
{
if(temp<a[i]){
a[i]=a[i+1];}
else{
temp=a[i+1];
break;}
}
逻辑应该是,你将输入的数与数组中的每个数进行大小比较,而且是从后往前。当比较的数比你输入的数大时,你应该把这个数往后移一位,就是
a[i+1]=a[i]
这句代码的意思就是将a[i]上的值赋给a[i+1]上,“=”是从右赋值向左的。
当比较到的数比你输入的数小时,此时下一位就是你要放的位置,而那个位置已经从之前的操作中空出来了。就正确了。
修改代码如下:
#include<iostream>
void main()
{
int a[10]={3,6,9,11,14,16,18,23,26};
int i,temp;
for(i=0;i<=9;i++){
printf("%d ",a[i]);}
printf("\n");
printf("Please input a integer data");
scanf("%d",&temp);
for(i=8;i>=0;i--)
{
if(temp<a[i]){
//a[i]=a[i+1];
a[i+1] = a[i];
}
else{
//temp=a[i+1];
a[i+1] = temp;
break;}
}
for(i=0;i<=9;i++)
printf("%d ",a[i]);
printf("\n");
}