二、实验内容(参考实验指导书):
1、从键盘输入一个长度为N(比如10)的整型数组,而后将数组中小于零的元素移动到数组的前端,大于零的元素移到数组的后端,等于零的元素留在数组中间。比如原来数组为:2 -5 -89 75 0 -89 0 93 48 0,经过处理后的数组为:-5 -89 -89 0 0 0 75 93 48 2。由于不要求数组有序,所以不允许用排序方法。 提示:
1)输入N个数据,构建数组。
2)按照要求确定数据的位置,需要注意循环条件的确定、0数据元素往中间推的实现过程以及数组处理的方向。 (1)算法描述:
for(从第一个数到第十个数) {
for(从第i+个数到第十个数) {
首先判断前一个数是否大于零,再判断后一个数是与零之间的关系,如果不是等于零,则需交换位置。 } }
(2)源代码及说明: #include
第 11 页 共 11 页
end=m; } } for(i=st;i (3)测试数据:10 2 -5 -89 75 0 -89 0 93 48 0 (4)运行结果:-5 -89 -89 0 0 0 75 93 48 2 (5)问题及解决方法: 问题:对大于0和小于0的数进行分类,再重新组合。 解决方法:重新定义一个数组,依次放入数据。 2、设数组a的定义如下: int a[20] = {2,4,6,8,10,12,14,16}; 已存入数组中的数据值已经按由小到大的顺序存放,现从键盘输入一个数据,把它插入到数组中,要求插入新数据以后,数组数据仍然保持有序。请编写一个程序实现上述功能。 提示: 1)定义整型数组并初始化。 2)从键盘输入一个数据。 3)将该数据插入到数组中,由于要保证插入的数组仍然有序,所以需要查找插入的位置。 4)输出插入数据以后的数组。 (1)算法描述: 遍历数组找到插入数在数组中的位置 for( i=0;i<20;i++) { if(a[i]>x) break; } j=i; 重新排列插入数后面的数 for(i=8;i>=j;i--){ a[i+1]=a[i];} a[j]=x; 最后输出插入数据后的数组 (2)源代码及说明: #include 第 12 页 共 12 页 scanf(\ for(i=0;i<8;i++) { if(n=k;i--) { a[i+1]=a[i]; } a[k]=n; for(i=0;i<9;i++) { printf(\ } } (3)测试数据:3 (4)运行结果:2 3 4 6 8 10 12 14 16 0 0 0 0 0 0 0 0 0 0 0 (5)问题及解决方法:无 3、写一个3 x 5矩阵的转置程序,输出其原矩阵的值和转置以后的结果。 提示: 1)定义一个二维数组及相关变量。 2)对二维数组赋值,可以由键盘输入,也可以通过其他方式赋值。 3)输出转置前的二维数组。 4)对二维数组中的值进行转置。 5)输出转置后的二维数组中的值。 (1)算法描述: 从键盘中输入数组 for(i=0;i<3;i++) for(j=0;j<5;j++) scanf(\ 交换数组对应数值并输出 for(i=0;i<5;i++) for(j=0;j<3;j++) b[i][j]=a[j][i]; printf(\(2)源代码及说明: #include 第 13 页 共 13 页 for(i=0;i<5;i++) { for(j=0;j<3;j++) { b[i][j]=a[j][i]; printf(\ } printf(\ } } (3)测试数据:1 2 3 4 5 5 6 7 8 9 1 3 5 7 9 (4)运行结果:1 5 1 2 6 3 3 7 5 4 8 7 5 9 9 (5)问题及解决方法:无 4、编程实现随机产生10个位于区间[100 200]互不相等的整数,并将其按降序排序和输出。 (1)算法描述: 产生随机数 #include #define random(x) (100+rand()1) 存入数组for(i=0;i<=9;i++) { a[i]=random(200); printf(\ } 进行排序(选择) for(i=0;i<=9;i++) { for(j=i+1;j<10;j++) { if(a[i] (2)源代码及说明: 第 14 页 共 14 页 #include 第 15 页 共 15 页