用c语言做以下题目:已有一个已排好的数组,要求输入一个数后,按原来排序的规律将它插入数组中。

我是这样写的:
#include<stdio.h>
void main()
{
int a[10]={0,1,3,4,5,6,7,8,9};
int i,t;
scanf("%d",&a[9]);
for(i=0;i<9;i++)

if(a[i]>a[i+1])
{
t=a[i];
a[i]=a[i+i];
a[i+1]=t;

}

for(i=0;i<10;i++)
printf("%5d",a[i]);
printf("\n");
}
请问这样错在哪里?
答案是for(i=9;i>0;i--)循环的,
我只是用加的循环代替减的循环,为什么不行?
求解~
尽量用for(i=0;i<9;i++)这个循环!
请在我写的程序上修改,不要另取程序,谢谢!

1、先逐个筛选数组中的每个元素。

2、再比较每相邻的两个元素。

3、根据比较结果进行元素的交换,以实现排序。

4、如果要从终端输入数组,就加一个输入函数。

5、最后,如果是从小到大排序,基本逻辑也是一样的。

注意事项:

C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。尽管C语言提供了许多低级处理的功能,但仍然保持着跨平台的特性,以一个标准规格写出的C语言程序可在包括类似嵌入式处理器以及超级计算机等作业平台的许多计算机平台上进行编译。

温馨提示:内容为网友见解,仅供参考
第1个回答  2019-06-10

#define_CRT_SECURE_NO_WARNINGS

#include<stdio.h>

#include<stdlib.h>

voidsort(inta[],intL,intx){

inttepm;

for(inti=0;i<L;++i){

intm=i;

for(intj=i+1;j<L;++j){//a[i]依次和a[i]之后的元素作比较,记录较小的下标

switch(x){

case0:

if(a[j]>a[m]){

m=j;

}break;

case1:

if(a[j]<a[m]){

m=j;

}break;

if(m!=i){

tepm=a[i];

a[i]=a[m];

a[m]=tepm;

voidmain(){

//intarr[11]={0,8,36,45,89,185,234,250,290,300};

intarr[11]={300,290,250,234,185,89,45,36,8,0};

intlength=sizeof(arr)/sizeof(arr[0]);

intX;

for(inti=0;i<10;++i){

printf("%d",arr[i]);

printf("\n请输入需要插入的数\n");

scanf("%d",&arr[10]);

if(arr[0]<arr[9]){//从小到大

X=1;

elseif(arr[0]>arr[10]){//从大到小

X=0;

sort(arr,length,X);

printf("插入新元素后数组为;\n");

for(inti=0;i<11;++i){

printf("%d",arr[i]);

printf("\n");

system("pause");

运行效果:

扩展资料:

system用法

system函数的用法,需要包含头文件#include<process.h>这个函数跟它的参数没有任何关系,它的参数是字符串:

intsystem(constchar*command);

int_wsystem(constwchar_t*command);

command:Commandtobeexecuted

可以用来执行指定路径下的可执行文件,其中可以包含一些DOS命令,在这里使用和在CMD的命令行中执行这条命令的效果相同,比如:

system("C:\\MT_Sqlconn.exe>C:\\out.log");这行代码的意思就是,执行C:\\MT_Sqlconn.exe,并把这个文件的输出结果重定向到C:\\out.log文件中,以前通过printf打印到标准输出的结果全system("pause");部打印到了C:\\out.log文件中。

system函数是可以调用一些DOS命令;比如:

system("cls");//清屏,等于在DOS上使用cls命令system("notepad")//打开记事本程序system("ipconfig>>123.txt");//输出ipconfig查询出的结果到当前目录的123.txt文件中,每次都是覆盖的。

system(执行shell命令)相关函数fork,execve,waitpid,popen表头文件#include<stdlib.h>。

例:

#include<stdlib.h>

main()

system(“ls-al/etc/passwd/etc/shadow”);

本回答被网友采纳
第2个回答  2020-05-06

代码如下:

#include<stdio.h>

int main()

{  int a[8]={1,3,5,7,9,11,13},i,j,t,k;

    scanf("%d",&t);

for(i=1;i<8;i++)

    {

  if(t>a[i-1]&&t<a[i])

     {

  for(j=7;j>i-1;j--)

a[j]=a[j-1];

a[i]=t;}   

if(t==a[i])

{

for(j=7;j>i-1;j--)

a[j]=a[j-1];

a[i]=t;

}

for(i=0;i<8;i++)

printf("%d  ",a[i]);

}

return 0;

}

扩展资料

C语言数组

同一数组中存储的数必须满足以下两个条件:

1、这些数的类型必须相同。

2、这些数在内存中必须是连续存储的。

换句话说,数组是在内存中连续存储的具有相同类型的一组数据的集合。

一维数组

一维数组的定义方式如下:

类型说明符 数组名[常量表达式];

例如:int a[5];
它表示定义了一个整型数组,数组名为 a,定义的数组称为数组 a。数组名 a 除了表示该数组之外,还表示该数组的首地址(关于地址现在先不讨论,稍后讲指针的时候再说)。

此时数组 a 中有 5 个元素,每个元素都是 int 型变量,而且它们在内存中的地址是连续分配的。也就是说,int 型变量占 4 字节的内存空间,那么 5 个int型变量就占 20 字节的内存空间,而且它们的地址是连续分配的。

本回答被网友采纳
第3个回答  2020-05-23

#include<stdio.h>

intmain()

{

inta[6]={1,3,6,7,9};

inti,j,x,t;

printf("insertdata:");

scanf("%d",&x);

for(i=0;i<5;i++)

if(x<a[i])

break;

for(j=5;j>i;j--)

a[j]=a[j-1];

a[j]=x;

printf("Nowarraya:\n");

for(i=0;i<6;i++)

printf("%4d",a[i]);

printf("\n");

return0;

}

扩展资料

排序方法:

一、冒泡排序

冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

二、选择排序

选择排序(Selection-sort)是一种简单直观的排序算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

本回答被网友采纳
第4个回答  推荐于2017-12-16
题目要求是插入原有序列,并且存储在数组中
所以在要插入的位置之后所有的元素都要后移一个位置——不能前移,因为已经到0了

你的错误在for循环内部一直比较a[i]和a[i+1],没刚读入的a[9]什么事,一直到i=8了才会涉及到a[9],不过也就交换了8和9的位置而已,根本不算插入
以下程序可以正确编译运行
void main()
{
int a[10]={0,1,3,4,5,6,7,8,9};
int i,t;
int found = 0; //是否已经插入的标志位
scanf("%d",&a[9]);
t= a[9];
for(i=0;i<9;i++)
{
if(a[i]>t && !found) //判断是否为插入位置
{
t=a[i]; //插入数据并设置标志位
a[i]=a[9];
found = 1;
}
else if(found) //已经插入,之后数据全部后移1格
{
a[9] = a[i];
a[i] = t;
t = a[9];
}
}
for(i=0;i<10;i++)
printf("%5d",a[i]);
printf("\n");
}本回答被提问者采纳
相似回答