问答题
下列程序的功能是:将一正整数序列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(int a[10][9])
void writeDat(int a[10][9])
FILE *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]=
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,
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]);
if(j<=7)
printf(",");
printf("/n");
writeDat(a);
【正确答案】jsValue(int a[10][9])
int value,i,j,k,glum;
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个数等于该数*/
}
}
}
【答案解析】