题目:将一个已经排好序的数组,在输入一个数字后,按照原来的顺序规律插入数组
该题要点为: 先设置遗传升序或降序的数组,在对输入元素做判断,如果是比最大的大,(若升序,放在最后面),否则用for循环进行比较,找到比他大(升序)的元素,把从此元素(包括此元素)全部向后移动一位。
注意学会在数组中把从一个元素开始、其后所有元素向后移动的方法。
【重点】从某元素开始把数组元素全部向后移动的方法
错误方法
正确方法:
所有代码为:
#include <stdio.h>
int main() {
int temp_1, temp_2;
int a[] = { 0, 11, 22, 33, 44, 55, 66, 77, 88, 99};
int size = 0;
size = sizeof(a) / sizeof( a[0]);
// 包括了 没定义的0 注意在使用 sizeof 的时候,如果初始化的元素个数,
//int a[] = { 0, 11, 22, 33, 44, 55, 66, 77, 88, 99}; a[11]里面
//不要写元素,否则就会给第十一个元素赋值为0,就无法计算出正确的元素个数
printf("数组长度:%d\n", size);
int num = 0;
printf("Please input a number!\n");
scanf("%d", &num);
if (num > a[9]) {
a[10] = num;
} else {
for (int i = 0; i < 10; i++) {
if (a[i] >= num) {
temp_1 = a[i]; //放置要向后移动的元素
for (int k = i + 1; k < size; k++) //所有元素向后移动
/* a[k] = a[i]; // 交换位置出错 这样会把后面的值覆盖掉,这样就会用用一个数字,一直往后移动
a[i] = num; */
//更改———— 让数组所以元素后移动一位!!! 需要两个中间变量
{
temp_2 = a[k];
a[k] = temp_1;
temp_1 = temp_2; // 存放原来位置已经被占掉的元素,在下一次循环中对a[i]赋值
}
a[i] = num;
break;
}
size = sizeof(a) / sizeof(a[0]);
}
}
for (int j = 0; j < size; j++ ) {
printf("%5d", a[j]);
}
return 0;
}
效果: