1、三级网络技术机试-163 及答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.下列程序的功能是:将一正整数序列 K1,K2,K9 重新排成一个新的序列。新序列中,比 K1 小的数都在 K1 的左面(后续的再向左存放),比 K1 大的数都在 K1 的右面(后续的再向右存放),从 K1 向右扫描。要求编写函数 jsValue()实现此功能,最后调用函数 writeDat()把新序列输出到文件 out90.dat 中。说明:在程序中已给出了 10 个序列,每个序列中有 9 个正整数,并存入数组 a109中,分别求出这 10个新序列。例如:序列排序前
2、6,8,9,1,2,5,4,7,3序列排序后 3,4,5,2,1,6,8,9,7注意:部分源程序已给出。请勿改动主函数 main()和写函数 writeDat()的内容。试题程序:#includestdio.hjsValue(int a109)main ()int a10 9=6,8,9,1,2,5,4,7,3,3,5,8,9,1,2,6,4,7,8,2,1,9,3,5,4,6,7,3,5,1,2,9,8,6,7,4,4,7,8,9,1,2,5,3,6,4,7,3,5,1,2,6,8,9,9,1,3,5,8,6,2,4,7,2,6,1,9,8,3,5,7,4,5,3,7,9,1,8,2,6,4
3、,7,1,3,2,5,8,9,4,6,;int i,j;jsValue (a);for (i=0;i10; i+)for(j=0;j9;j+)printf(“%d“,ai j);if(j=7) printf(“,“);printf (“/n“);writeDat (a);writeDat (int a10 9)FILE *fp;int i,j;fp=fopen (“out90.dat“, “w“);for (i=0;i10; i+)for(j=0;j9;j+)fprintf (fp, “%d“, a i j );if (j=7) fprintf (fp, “, “);fprintf (fp,
4、“/n“);fclose (fp);(分数:100.00)_三级网络技术机试-163 答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.下列程序的功能是:将一正整数序列 K1,K2,K9 重新排成一个新的序列。新序列中,比 K1 小的数都在 K1 的左面(后续的再向左存放),比 K1 大的数都在 K1 的右面(后续的再向右存放),从 K1 向右扫描。要求编写函数 jsValue()实现此功能,最后调用函数 writeDat()把新序列输出到文件 out90.dat 中。说明:在程序中已给出了 10 个序列,每个序列中有 9 个正整数,并存入数组
5、 a109中,分别求出这 10个新序列。例如:序列排序前 6,8,9,1,2,5,4,7,3序列排序后 3,4,5,2,1,6,8,9,7注意:部分源程序已给出。请勿改动主函数 main()和写函数 writeDat()的内容。试题程序:#includestdio.hjsValue(int a109)main ()int a10 9=6,8,9,1,2,5,4,7,3,3,5,8,9,1,2,6,4,7,8,2,1,9,3,5,4,6,7,3,5,1,2,9,8,6,7,4,4,7,8,9,1,2,5,3,6,4,7,3,5,1,2,6,8,9,9,1,3,5,8,6,2,4,7,2,6,1,
6、9,8,3,5,7,4,5,3,7,9,1,8,2,6,4,7,1,3,2,5,8,9,4,6,;int i,j;jsValue (a);for (i=0;i10; i+)for(j=0;j9;j+)printf(“%d“,ai j);if(j=7) printf(“,“);printf (“/n“);writeDat (a);writeDat (int a10 9)FILE *fp;int i,j;fp=fopen (“out90.dat“, “w“);for (i=0;i10; i+)for(j=0;j9;j+)fprintf (fp, “%d“, a i j );if (j=7) fpr
7、intf (fp, “, “);fprintf (fp, “/n“);fclose (fp);(分数:100.00)_正确答案:(void jsValue(int a109)int value,i,j,k,num;for(i=0;i10;i+)value=ai0; /*将一行的第一个元素赋给 value*/for(j=0;j9;j+)if(aijvalue) /*若后面的数中有比第 1 个数据小的数*/num=aij; /*则把这个数取出,赋给 num*/for(k=j;k0;k-) /*将这个数据左侧的数依次向右移动*/aik=aik-1;ai0=num; /*再将这个数放在最左侧*/)解析:解析 本题考查的知识点如下:(1)二维数组的访问和数组元素的移动。(2)循环结构和判断结构的嵌套使用。数据存放在一个二维数组中,每一行数为数据处理的基本单位。将第 1 个数取出依次和后面的数比较,若后面的数中有比第 1 个数据小的数,则将这个数取出。将这个数据左侧的数依次向右移动(包括第 1 个数),然后将这个数放在最左侧。扫描完一行后,比第 1 个数小的数就都在第 1 个数的左侧,而比它大的就在它的右侧。对数的扫描和移动均可以使用循环实现。再使用循环实现对每一行数据的访问。