C++:题目:“有一个已排好序的数组,今输入一个数,要求按原来排序的规律将它插入数组中。”

#include<iostream>
using namespace std;
int main()
{
int a[11]={1 6 13 17 28 40 56 78 89 100};
int num,i,j;
cout<<"Enter:";
cin>>num;
for(i=0;i<10;i++)
{if(num<a[i])
for(j=10;j>i;j--)
a[j]=a[j-1];}
a[i]=num;
for(i=0;i<11;i++)
cout<<a[i]<<" ";
cout<<endl;
return 0;
}
我已按题目编写程序如上,但运行发现若干错误!求高手指点,都有些什么问题?!谢谢啦!

#include&lt;stdio.h&gt;

void main(){

/*输出数组各元素*/

int i,key,loc;

int a[10]={1,3,6,9,10,15,16,22,30};

for(i=0;i&lt;9;i++){

printf("%d",a&lt;i&gt;);

}

/*寻找插入位置*/

printf("\n\nPlease intput key:");

scanf("%d",&key);

loc=0;

for(i=0;i&lt;9;i++){

if(a&lt;i&gt;&gt;=key)break;

}

loc=i;

/*逆序向后移动每一个元素,然后插入新元素*/

for(i=8;i&gt;=loc;i--){

a[i+1]=a&lt;i&gt;;//

}

a[loc]=key;

/*输出新数组各元素*/

printf("\nNew array is-----\n");

for(i=0;i&lt;10;i++){//插入一个元素,组数长度增1

printf("%d",a&lt;i&gt;);

}

printf("\n");

}

输入12,输出结果如下:

总结:一组数组,直到找到大于或等于输入数的时候,找到插入数的下标,a[i+1]=a&lt;i&gt;意思是将a&lt;i&gt;的值给a[i+1],往后移一个(插入一个数,后面元素依次往后移动一个)

方法二、

#include&lt;stdio.h&gt;

void main(){

int data,temp,k;

static int a[9]={-10,2,4,8,10,15,25,50};

printf("\nEnter a data:");

scanf("%d",&data);

for(k=8;k&gt;=1;k--){

if(a[k-1]&gt;data)//逆序遍历数组元素,数组元素大于data,该元素就向后移动一位

{

a[k]=a[k-1];

}else{

a[k]=data;//数组元素小于data,把data放到该元素后面

break;

}

}

for(k=0;k&lt;9;k++){

printf("%7d",a[k]);

}

}

两种其实差不多,但是第二种代码量小。

扩展资料:

include用法:

#include命令预处理命令的一种,预处理命令可以将别的源代码内容插入到所指定的位置;可以标识出只有在特定条件下才会被编译的某一段程序代码;可以定义类似标识符功能的宏,在编译时,预处理器会用别的文本取代该宏。

插入头文件的内容

#include命令告诉预处理器将指定头文件的内容插入到预处理器命令的相应位置。有两种方式可以指定插入头文件:

1、#include&lt;文件名&gt;

2、#include"文件名"

如果需要包含标准库头文件或者实现版本所提供的头文件,应该使用第一种格式。如下例所示:

#include&lt;math.h&gt;//一些数学函数的原型,以及相关的类型和宏

如果需要包含针对程序所开发的源文件,则应该使用第二种格式。

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-09-22
首先,a[5]已经越界了,a[6]就更不用说了,
在这种问题上,最好多定义一个字符,也就是说,定义a数组的时候,想插入数据,必须至少多出一个空位,也就是定义a[6]={2,4,6,8,10},这样是不会错的。

代码修改如下:
cin>>x;
a[5]=x; //直接把字符放在最后一个
for(i=4,i>=0,i--) //建议不要用到变量的时候再定义,在前面都定义好
if(a[i+1]<a[i]) //如果后面的小于前面,交换一下
{
x=a[i]; //这里x已经没用了,可以用来做交换的缓冲,
a[i+1]=a[i]; //要是怕混了,可以多定义一个变量做交换的缓冲
a[i+1]=x;
}
else
break; //没有交换退出循环就好了
第2个回答  推荐于2017-09-23
int main()
{
int a[11]={1,6,13,17,28,40,56,78,89,100};
int num,i,j;
cout<<"Enter:";
cin>>num;
for(i=0;i<10;i++)
{
if(num<a[i])
{
for(j=9;j>=i;j--)
a[j+1]=a[j];
break;
}

}
a[i]=num;
for(i=0;i<11;i++)
cout<<a[i]<<" ";
cout<<endl;
return 0;
}
改正后的程序,已经测试过,可以得出正确结论。你的错误点如下:
1,初始化数组时候,数组内的元素要用逗号 ,分隔开。
2,是逻辑上的错误 for(j=9;j>=i;j--),这个地方第二个条件是j>=i;
3,确定了要插入的位置后,一定要停止外层的循环,在if语句结束后,加上break;结束外层循环,不然会产生数据覆盖。本回答被提问者采纳
第3个回答  2013-05-28
#include "stdafx.h"
#include <IOSTREAM.h>
#include <stdlib.h>

int main(int argc, char* argv[])
{
int a[11]={1,6,13,17,28,40,56,78,89,100,};
int num,i,j;
cout<<"Enter:"<<endl;
cin>>num;

for(i = 0;i < 10;i++)
{
if(num < a[i])
{
for(j = 10;j > i;j--)
{
a[j] = a[j-1];
}
a[i] = num;
break;
}
}

for(i = 0;i < 11; i++)
{
cout<<a[i] <<" ";
cout<<endl;
}
system("pause");

return 0;
}

建议写代码的时候,for循环带上{ }。特别是初学者。不然你分不清循环的执行范围!
错误是
1、数组赋值要用逗号分开。
2、cout和cin函数需要用到头文件IOSTREAM.H这个头文件。

3、当num < a[i]满足条件以后要跳出循环,不然后面的数都是大于num的都会满足if里面的条件。所以会继续执行if里面的代码,结果就是导致后面的所有数全部变成你输入的数。
4、你的代码有逻辑BUG。当你输入的数大于数组最后一个数的时候没进行处理。
下面这个是判断了当i为9即输入的数大于数组最后一个数的时候的处理办法

for(i = 0;i < 10;i++)
{
if(num < a[i] && i < 10)
{
for(j = 10;j > i;j--)
{
a[j] = a[j-1];
}
a[i] = num;
break;
}else
{
a[10] = num;
}
}追问

恩恩 问题就是这些!多谢了!

第4个回答  2013-05-29
int main(int argc, char *argv[])
{
int a[12]={1,6,13,17,28,40,56,78,89,100,0};
int num,i,j;
cout<<"Enter:";
cin>>num;
for(i=0;i<10;i++)
{
if(a[i]>num)break;
}
for(j=10;j>=i;j--)
a[j+1]=a[j];
a[i]=num;
for(i=0;i<11;i++)
cout<<a[i]<<" ";
cout<<endl;
return 0;
}


    对数组初始化,没有那么写的。

    代码结构有点乱。

相似回答