C语言有一个已排好序的整型数组,有10个元素,要求从键盘输入一个数后,按原来排序的规律将它插入数组中

c语言程序设计:有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中~

【例】把一个整数按大小顺序插入已排好序的数组中。
为了把一个数按大小插入已排好序的数组中,应首先确定排序是从大到小还是从小到大进行的。设排序是从大到小进序的,则可把欲插入的数与数组中各数逐个比较,当找到第一个比插入数小的元素i时,该元素之前即为插入位置。然后从数组最后一个元素开始到该元素为止,逐个后移一个单元。最后把插入数赋予元素i即可。如果被插入数比所有的元素值都小则插入最后位置。
main()
{
int i,j,p,q,s,n,a[11]={127,3,6,28,54,68,87,105,162,18};
for(i=0;i<10;i++)
{ p=i;q=a[i];
for(j=i+1;j<10;j++)
if(q<a[j]) {p=j;q=a[j];}
if(p!=i)
{
s=a[i];
a[i]=a[p];
a[p]=s;
}
printf("%d ",a[i]);
}
printf("
input number:
");
scanf("%d",&n);
for(i=0;i<10;i++)
if(n>a[i])
{for(s=9;s>=i;s--) a[s+1]=a[s];
break;}
a[i]=n;
for(i=0;i<=10;i++)
printf("%d ",a[i]);
printf("
");
}

本程序首先对数组a中的10个数从大到小排序并输出排序结果。然后输入要插入的整数n。再用一个for语句把n和数组元素逐个比较,如果发现有n>a[i]时,则由一个内循环把i以下各元素值顺次后移一个单元。后移应从后向前进行(从a[9]开始到a[i]为止)。 后移结束跳出外循环。插入点为i,把n赋予a[i]即可。 如所有的元素均大于被插入数,则并未进行过后移工作。此时i=10,结果是把n赋于a[10]。最后一个循环输出插入数后的数组各元素值。
程序运行时,输入数47。从结果中可以看出47已插入到54和 28之间。

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

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

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

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

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

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

源代码如下:

#include <stdlib.h>

#include <stdio.h>

int main()

{

int a[20],i,n,x,k;

printf("请输入一组顺序数(从小到大的顺序):");

for( i=0; ;i++ )

{

scanf("%d",&a[i]);

if( getchar() == '
' )

break;

}

n = i + 1;        //n表示数组内数字的个数

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

scanf("%d",&x);

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

{

if( x<= a[i] )

{

for( k= n-1; k >= i; k--)

{

a[k+1]=a[k];

}

a[i]=x;

break;

}

}

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

{

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

}

printf("
");

system("pause");

}

扩展资料

1、C语言支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合。数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量。

2、数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量。



#include<stdio.h>

intmain()

inta[11]={1,4,6,9,13,16,19,28,40,100};

inttemp,i=0,j=0;

scanf("%d",&temp);

for(i=9;i>=0;i--)

if(temp<a[i]){

a[i+1]=a[i];

}else{

a[i+1]=temp;

break;

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

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

system("pause");

return0;

运行结果:

扩展资料:

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”);





下面是一个升序的整型数组,从键盘插入插入一个数,使原规律不变的编程:

 

#include<stdio.h> 

int main() 

    int m,i,j,t; 

    int a[11]={1,2,4,5,7,8,9,10,22,66};

 scanf("%d",&m); 

 

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

   if(m<a[i]) 

      { for(j=9;j>=i;j--) 

           { t=a[j+1];a[j+1]=a[j];a[j]=t;} 

            a[i]=m; }   

 

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

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

    return 0;

 

 

 

希望对你有帮助,望采纳;

谢谢。。。。。

 

 

 

 

 



//那你需要定义一个新数组了,程序如下吧:
#include <stdio.h>
int main() {
int a[10] = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 }; //加入是这样的数组,要么升序,要么降序;
int b[11] = { 0 };
int insert = 0;
int i = 0;
int j = 0;
int insert_already = 0;
printf("Enter the number\n");
scanf("%d", &insert);
//判断升序还是降序
if (a[0] > a[9]) //降序,插入到比他小的前面
{
while (j < 11) {
if (insert_already == 0) { //尚未插入该值
if (insert > a[i]) {
b[j] = insert;
i--;
insert_already = 1; //已经插入该值
} else {
b[j] = a[i];
}
i++;
j++;
} else //已经插入该值
{
b[j] = a[i];
i++;
j++;
}
}
} else //升序,插入到比他大的前面前面
{
while (j < 11) {
if (insert_already == 0) {
if (insert < a[i]) {
b[j] = insert;
i--;
insert_already = 1;
} else {
b[j] = a[i];
}
i++;
j++;
} else //已经插入该值
{
b[j] = a[i];
i++;
j++;
}
}
}
//输出b[11];
for (i = 0; i < 11; i++) {
printf("%d\n", b[i]);
}
return 0;
}
//给分吧

用循环找到一个位置,使这个位置前的数都小于这个数,并且后面的数不小于这个数,再把后面的数往后移1位,把这个数插入

已知有一个已经从小到大排好顺序的整数数列,若从键盘任意输入一个整数...
答:printf("]\n");}// 排序void reorder(int a[], int len){ int i, j, index, max; for (i = len - 1; i >= 0; i--) { index = 0; max = 0; for (j = 0; j <= i; j++) { if (a[j] > max) { max = a[j]; index...

编写一段C语言程序,有一个已经按从小到大排好序的数组,要求输入一个...
答:include<stdio.h> define N 20 define M 11 void main() { int a[N]={1,3,5,7,9,11,13,15,17,19,21},x,i,j;scanf("%d",&x);for ( i=M;i>0;i++ ) if ( a[i-1]>x ) a[i]=a[i-1]; else break;a[i]=x;for ( i=0;i<M+1;i++ ) printf("%d ",a[i...

C编程的一个小题目:有一个已排好序的数组,要求输入一个数后,按原来排序...
答:include<stdio.h> int main(){ int a[11]={1,4,6,9,13,16,19,28,40,100};int temp,i=0,j=0;scanf("%d",&temp);for(i=9;i>=0;i--){ if(temp<a){ a[i+1]=a;}else{ a[i+1]=temp;break;} } for(i=0;i<11;i++){ printf("%d\t",a);} system("pause"...

c语言向一个已经排好序的数组中插入一个整数,保持原来的顺序不变
答:{ printf("被插入的数据不存在,插入数据将排在最后面:\n");p = temp1;} else { for(q=str+8;q>=p;q--) //向后赋值 str[i+1]=str[i];(q+1)=*q;p =temp1;//给当前位置赋所要插入的值。} for(p=str;p<str+9;p++)printf("%d ",*p);printf("\n");} ...

C语言编程:有一个已排好序的数组,现输入一个数插入到数组中,要求插入该...
答:for (i=0;i<n;i++) scanf("%d", &a[i]);/*输入1个数*/ scanf("%d",&x);/*找到需要插入的位置j*/ for (i=0;i<n;i++) if (a[i]<x) j=i+1;/*把j之后的数据后移*/ for (i=n;i>j;i--) a[i]=a[i-1];/*插入数据*/ a[j]=x;/*输出结果*/ for (i=0;...

C语言中,有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它...
答:C语言,有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中。解:include int main(){ int a[11]={1,4,6,9,13,16,19,28,40,100};int temp1,temp2,number,end,i,j;printf("array a:\n");for (i=0;i<10;i++)printf("%5d",a[i]);printf("\n");pri...

C++初学者问题!!有一个已经从小到大排好序的整数数组需要排序
答:你是要把x插入到数组,并且按照原有顺序,现在有一个数x,你应该先判断x应该插在哪?语句应为 do { int i=1;if(a[i]<=x)i++;}while(a[i]>=x);//先找出x的位置 for(int j=30;j>=i;j--){ a[j+1]=a[j];}//x后面的数整体后移 a[i]=x;//将x插入 ok啦!!!

求c语言大神,不要太难理解。有一个已经排好序的数组。现在输入一个数...
答:a[i] = b; /*插入*/ break; } } if(i==8) /*若该数大于所有数*/ a[8] = b; for(i=0;i<9;i++) printf("%d ", a[i]); printf(

有一个已经排好序的数组a[10]={2,13,25,31,56,67,80,94,111}.现输入...
答:for(i=9;i>0;i--){ if(x>a[i-1]){ a[i]=x; break; } a[i]=a[i-1]; } if(i==0) a[0]=x; for(i=0;i<10;cout << a[i++] << ' '); cout << endl; return 0;}

用C语言写的一个程序:有一个已排好的数组,要求输入一个数后,按原来排序...
答:主要有两个问题:第一:for(i=0;getchar()!='\n';i++)==>for循环里,每次执行前先检测getchar()!='\n',而我们需要的是要在输入数字后再检查是否输入回车,所以放在循环后面:for( i=0; ;i++ ){ scanf("%d",&a[i]);if( getchar() == '\n' )break;} 第二:i 是从0开始...

IT评价网,数码产品家用电器电子设备等点评来自于网友使用感受交流,不对其内容作任何保证

联系反馈
Copyright© IT评价网