问答题 下列程序的功能是:将一正整数序列{K1,K2,…,K9}重新排列成一个新的序列。新序列中,比K1小的数都在K1的前面(左边),比K1大的数都在K1的后面(右边)。要求编写函数jsValue()实现此功能,最后调用writeDat()函数将新序列输出到out.dat文件中。 说明:在程序中已给出了10个序列,每个序列有9个正整数,并存入数组a[10][9]中,分别求出这10个新序列。 例如:序列{6,8,9,1,2,5,4,7,3} 经重排后成为{3,4,5,2,1,6,8,9,7} 注意:部分源程序已经给出。 请勿改动主函数main()和写函数writeDat()的内容。 #include <stdio.h> jsValue(inta[10][9]) { } void writeDat(int a[10][9]) { FIIE *fp; int i,j; fp=fopen("out.dat","w"); for (i=0;i<10;i++) { for (j=0;j<9;j++) { fprintf(fp,"%d",a[i][j]); if(j<=7) fprintf(fp,","); } fprintf(fp,"/n"); } fclose(fp); } main() { int a[10][9]= { {3,5,8,9,1,2,6,4,7}, {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}, {7,1,3,2,5,8,9,4,6}, int i,j; jsValue(a); for(i=0;i<10;i++) { for (j=0;j<9;j++) { printf("%d",a[i][j]); printf("/n"); } writeDat(a); }
【正确答案】jsValue(int a[10][9]) { int value,i,j,k,num; for (i=0;i<10;i++) { /*循环遍历数组a中的10行数*/ value=a[i][0]; /*保存当前行第1个数*/ for (j=0;j<9;j++) /*循环遍历当前行的9个数*/ if (a[i][j]<value) { /*若该数小于保存的第1个数*/ num=a[i][j]; /*先保存该数到num*/ /*将该数前面的所有数循环往后移动一位*/ for (k=j;k>0;k--) a[i][k]=a[i][k-1]; a[i][0]=num; /*让第1个数等于该数*/ } } }
【答案解析】