C语言——在排序好的数列中插入一个数,使数列保持从小到大的顺序。

小生是刚学C语言的菜鸟,望各位大虾指教~
至今只学了IF条件和循环&数组,所以大家帮忙改的时候不要用其他深奥的语句哟
#include<stdio.h>
main()
{int i,j,k,l,t;
int r[11];
printf("任意输入十个整数:");
for (i=0;i<10;i++)
scanf("%d",&r[i]);
for(l=0;l<10;l++)
{for(j=0;j<10;j++)
if(r[j]>r[j+1])
{t=r[j];
r[j]=r[j+1];
r[j+1]=t;}
}
for (k=0;k<10;k++)
printf("%d ",r[k]);
printf("\n");
printf("请输入要插入的数的位置:");
scanf("%d",&i);
for(j=i;j<11;j++)
r[j+1]=r[j];
printf("请输入要插入的数:");
scanf("%d",&r[i]);
for(k=i;k<11;k++)
{if(r[i]>r[i+1])
{t=r[i];
r[i]=r[i+1];
r[i+1]=t;}
}
for(l=i;l>0;l--)
if(r[i]<r[i-1])
{t=r[i];
r[i]=r[i-1];
r[i-1]=t;}
printf("排列好的数为:");
for (k=0;k<11;k++)
printf("%d ",r[k]);
}

分数还会追加哟,谢谢大虾们了

你题中提到的数列如果是指数组,那么就不太好办了,因为我们只能声明一个超大的数组来预存以后将要插入的元素,为了不发生下标越界,我们的数组越大越好,但是毕竟是一种浪费,所以...还是用数组吧,不过小一点

#include<stdio.h>
static counts = 0;//数组中含有的有效元素的个数,一开始是0个啦
const int list_size = 100;//数组的大小
main()
{
int i,j,t,d;
int list[list_size];
printf("任意输入十个整数:");
for (i=0;i<10;++i)
scanf("%d",&list[i]);
counts = 10;//现在数组中有10个有效元素,不要访问无效的元素,否则后果不可知
for(i=0;i<counts;++i)
{
for(j=i+1;j<counts;++j)
if(list[j]>list[i]) //交换
{
t = list[j];
list[j] = list[i];
list[i] = t;
}
}
printf("\n");
for (i=0;i<counts;++i)
printf("%d ",list[i]);
printf("\n");
printf("请输入要插入的数:");
scanf("%d",&d);
for(i=0;i<counts;++i)
{
if(list[i]>d)
{
break;//找到了要插入的位置,下标 i 在接下来要用到,跳出循环
}
}
for(j=counts;j>i;--j)
{
list[j] = list[j-1];
}
list[i] = d;//
将元素插入到合适的位置
++counts;//有效元素加 1
printf("排列好的数为:");
for (i=0;i<counts;++i)
printf("%d ",list[i]);
}
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-04-19
printf("请输入要插入的数的位置:");
scanf("%d",&i);
后现的这个循环有问题

for(j=i;j<11;j++)
r[j+1]=r[j];

后面的全被覆盖了

改为
for (j = 11;j >= i; --j)
r[j] = r[j - 1];

用C语言编程:在有序的数列中插入若干个数,每插入一个数都要保持有序
代码是 int a[100]; \/\/这里有部分数据如50个,a1~a49是有序的 int c; \/\/这个是插入的数据 int i,n;n=50; \/\/这个是有序数据的个数 for(i=n-1;i>=0;i--){ if(c>a[i]){a[i+1]=c;break;} \/\/插入就跳出循环 else a[i+1]=a[i]; \/\/要是小于,数据就...

C语言程序中,如何在原有数列中插入一个数
从当前数列最后一个开始搜索,与你要插入的数x比较,如果它比x大,将该数向后移一个位置,继续向前搜索;如果当前数小于等于x,就将x直接放到当前数的下一个位置;如果一直到最前面的数都比x大,那么所有数向后移之后将x放在第一个位置

用c语言编程一个程序:有n个数已经从小到排列好,要求输入一个数将其插 ...
j = 0;int a[11] = {10,20,30,40,50,60,70,80,90,100};int n = 0;int num = 10;int tmp = 0;printf("原有数组:\\n");for (i=0; i<num; i++){printf("%d ",a[i]);}printf("\\n");printf("请输入要插入的数:\\n");scanf...

c语言在数列1 4 6 7 9 中任意插入一个数使改变后数列扔由大到小,(大一...
int main(){ int a[6]={1,4,6,7,9},i,j;scanf("%d",&a[6]);for(i=0;i<5;i++)for(j=i+1;j<6;j++)if(a[i]<a[j]){ temp=a[i];a[i]=a[j];a[j]=temp;} for(i=0;i<6;i++)printf("%d\\t",a[i]);return 0;} ...

从键盘输入一个数,将其插入到有序的数列中去,插入后的数列仍然保持以前...
int i=0,j=0,new=0;printf("Original number:\\n");for(i=0;i<N;i++) \/*输出最初的学号*\/ printf("%6d",num[i]);printf("\\n");printf("Input a student number:"); \/*输入要插入的学号*\/ scanf("%d",&new);for(i=0;i<N;i++)if(new<num[i]) break; \/*查...

有n个数,已按从小到大顺序排列好。要求输入一个数,插入原数列中,仍然...
include<stdio.h>int main(){ int i,j,k,t,a[11],sum; printf("Please input 10 numbers\\n"); for(i=0;i<10;i++) { scanf("%d",&a[i]); } printf("Please input a number:\\n"); scanf("%d",&sum); if(sum>a[9]) { a[10]=sum; ...

C程序编写,将一个数插入到一个已经有序的数组里,要求保持有序
n; j++)\/\/冒泡排序,将数组数列排好 { for (i = 0; i < n - j; i++){ if (b[i] > b[i + 1]){ t = b[i];b[i] = b[i + 1];b[i + 1] = t;} } } for (j = 0; j < n + 1; j++)\/\/顺序输出 { printf("%d ", b[j]);} } 程序输出结果如下:...

C语言编程:有序数列的数据插入问题。将一个数插入到已有10个整数的有...
{ \/\/10个元素,20个空间 int i,,p,a[N]={1,2,4,6,8,10,22,25,35,50};int s;scanf("%d",&s);for(i=0;a[i]<s&&i<10;i++) \/\/找位置 ;p=i;for(i=10;i>=p;i--) \/\/后移数 a[i]=a[i-1];a[p]=s; \/\/插入数 for(i=0;i<11;i++)printf("%d ",...

C语言数组
功能:随机生成n个升序的2位数数列,输入一个数字,插入到数列中,重新按升序排列。include<stdlib.h>#include<stdio.h>#include#include<malloc.h>void sx(int *nums,int len);\/\/传参数组、长度 功能:将数组按升序排列void psl(int *nums,int len);\/\/打印int main(){ int n,i,*nums...

有10个数已按由小到大的顺序排列好,要求输入一个数,把它插入到原有数 ...
int main(){ int a[11]={0,2,3,4,5,6,7,8,9,10};int i,n,k;printf("请输入N值:\\n");scanf("%d",&n);for(i=0;i<10;i++){ k=i;if(nk;i--)a[i]=a[i-1];a[k]=n;break;} } for(i=0;i<11;i++)printf("%d ",a[i]);printf("\\n");return 0;} ...

相似回答