题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
代码解析如下:
#include<stdio.h> int main() { //首先定义两个数组,一个存放原始序列,另一个存放加入新数之后的新序列。 int t[10],s[11]; int i,j,k; printf("请输入十个有序数:"); for(i=0;i<10;i++){ scanf("%d",&t[i]); //键盘输入十个有序数列。 } /* 把换行符去掉,为了进行第二次输入。如果没有getchar(),有些编译器无法二次输入。 如果你的编译器不需要它也能二次输入,则可以去掉。*/ getchar(); printf("请输入要加入的数:"); scanf("%d",&k); //输入要加入的数。 for(i=0;i<9;i++) { //首先要确定这个数的大小在哪个范围。 if((k>=t[i]&&k<=t[i+1])||(k<=t[i]&&k>=t[i+1])) { //确定之后,记录这个数的范围的较小值,如 2<k<4 则 记录 j=2 j=i; } } for(i=0;i<11;i++){ if(i<j){ //如果 i 在 j 之前,则直接将 t 数组中的数对应放到 s 数组中。 s[i]=t[i]; } else if(i==j){ //如果 i 等于 j ,还是直接将 t 数组中的数对应放到 s 数组中。 s[i]=t[i]; //但 i+1 不能直接对应,而是将加入的值放入 i+1 中。 s[i+1]=k; } else{ /*由于多加入了一个数,所以之后的数要将 t 数组的数放到 s 数组的下一位。 也就是 t[i] 对应 s[i+1] */ s[i+1]=t[i]; } } printf("插入后的结果为:"); for(i=0;i<11;i++){ printf("%d ",s[i]); //最后打印新数组s } printf("\n"); return 0; }
完整的代码为:准备
#include<stdio.h> int main() { int t[10],s[11]; int i,j,k; printf("请输入十个有序数:"); for(i=0;i<10;i++){ scanf("%d",&t[i]); } printf("请输入要加入的数:"); scanf("%d",&k); for(i=0;i<9;i++) { if((k>=t[i]&&k<=t[i+1])||(k<=t[i]&&k>=t[i+1])) { j=i; } } for(i=0;i<11;i++) { if(i<j) { s[i]=t[i]; } else if(i==j) { s[i]=t[i]; s[i+1]=k; } else { s[i+1]=t[i]; } } printf("插入后的结果为:"); for(i=0;i<11;i++){ printf("%d ",s[i]); } printf("\n"); return 0; }
正序结果为:
反序结果为: