📦 归档笔记 — 原创建于 WizNote,仅作归档展示;观点以当年为准,非最新。

C程序设计第六章作业 4

创建时间2018-02-12最后修改2018-02-13原位置/程序员成长之旅/C语言/习题(C语言程序设计)/第六章习题/字数767图片/附件4
目录:程序员成长之旅/C语言/习题(C语言程序设计)/第六章习题

问:

有一组已经排序好的数据 现在要进行数据插入  并且按照原数据方式进行排序

答:

从大到小版本:

#include<stdio.h> //数据插入

int main() {

int i = 0, j = 0, k = 0, l = 0;

int Num[11] = { 19,17,15,13,11,9,7,5,3,1};

int Temp1 = 0, Temp2 = 0, End = 0, NewNumber = 0;

printf("Source data is :\n");

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

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

}

printf("\n");

printf("Insert data :\n");

scanf("%d", &NewNumber);//获取将要插入的数据

End = Num[9];//标记指向最后一个数字

if (NewNumber < End) {//因为当前排序为从小到大  所以判定如果比最后一个数字大  就将数据插入在最后一个位置

Num[10] = NewNumber;

}

else {//开始寻找相应要插入位置 并且向后搓数据

for (j = 0; j < 10; j++) {

if (Num[j] < NewNumber) {//如果当前位置比要插入数据大

Temp1 = Num[j];//暂存此数据

Num[j] = NewNumber;//将此位置插入数据

for (k = j + 1; k < 11; k++) {//开始向后搓数据  (因为Num[j]位置已确定 所以 k=j+1)

Temp2 = Num[k];//缓存当前数据

Num[k] = Temp1;//读取上一次缓存的“Num[j]”数据 赋值给当前位置 ,并且第二次及运行时读取k的上一个数据

Temp1 = Temp2;//重新赋值给Temp1 获得k-1 的数据

}

break;//执行完搓数据操作直接退出循环

}

}

}

printf("New data is :\n");

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

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

}

return 0;

}

运行截图:

🖼 图片占位(归档模式)图片见原始导出:C%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1%E7%AC%AC%E5%85%AD%E7%AB%A0%E4%BD%9C%E4%B8%9A%204.assets/4765cd1d-b3f7-4d15-ad48-6cd1c20d37fd.png

从小到大版本:

#include<stdio.h> //数据插入 从小到大版本

int main() {

int i = 0, j = 0, k = 0, l = 0;

int Num[11] = { 1,3,5,7,9,11,13,15,17,19 };

int Temp1 = 0, Temp2 = 0, End = 0, NewNumber = 0;

printf("Source data is :\n");

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

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

}

printf("\n");

printf("Insert data :\n");

scanf("%d", &NewNumber);//获取将要插入的数据

End = Num[9];//标记指向最后一个数字

if (NewNumber > End) {//因为当前排序为从小到大  所以判定如果比最后一个数字大  就将数据插入在最后一个位置

Num[10] = NewNumber;

}

else {//开始寻找相应要插入位置 并且向后搓数据

for (j = 0; j < 10; j++) {

if (Num[j] > NewNumber) {//如果当前位置比要插入数据大

Temp1 = Num[j];//暂存此数据

Num[j] = NewNumber;//将此位置插入数据

for (k = j + 1; k < 11; k++) {//开始向后搓数据  (因为Num[j]位置已确定 所以 k=j+1)

Temp2 = Num[k];//缓存当前数据

Num[k] = Temp1;//读取上一次缓存的“Num[j]”数据 赋值给当前位置 ,并且第二次及运行时读取k的上一个数据

Temp1 = Temp2;//重新赋值给Temp1 获得k-1 的数据

}

break;//执行完搓数据操作直接退出循环

}

}

}

printf("New data is :\n");

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

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

}

return 0;

}

运行截图:

🖼 图片占位(归档模式)图片见原始导出:C%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1%E7%AC%AC%E5%85%AD%E7%AB%A0%E4%BD%9C%E4%B8%9A%204.assets/5fdfce6e-f8e1-4728-8c9a-8ae83ac67b5d.png